MoyaDescriptorCustomizer.java 1.87 KB
package fi.codecrew.moya.database.eclipselink;

import java.util.List;

import org.eclipse.persistence.config.DescriptorCustomizer;
import org.eclipse.persistence.descriptors.ClassDescriptor;
import org.eclipse.persistence.descriptors.ReturningPolicy;
import org.eclipse.persistence.internal.helper.DatabaseField;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MoyaDescriptorCustomizer implements DescriptorCustomizer {
	private static final Logger log = LoggerFactory.getLogger(MoyaDescriptorCustomizer.class);

	@Override
	public void customize(ClassDescriptor descriptor) throws Exception {
		log.info("Customizing Descriptor: {}", descriptor);

		// Optimistic locking policy
		MoyaChangedFieldsOptimisticLockingPolicy changedFieldsLockingPolicy = new MoyaChangedFieldsOptimisticLockingPolicy();
		// log.debug("Setting Optimistic Locking Policy: {}",
		// changedFieldsLockingPolicy);
		descriptor.setOptimisticLockingPolicy(changedFieldsLockingPolicy);

		// ReturningPolicy
		ReturningPolicy returningPolicy = new ReturningPolicy();
		descriptor.setReturningPolicy(returningPolicy);

		/*
		 * // generation strategy IDENTITY has sequence number field
		 * DatabaseField seqNumberField = descriptor.getSequenceNumberField();
		 * if (seqNumberField != null) {
		 * returningPolicy.addFieldForInsertReturnOnly(seqNumberField); }
		 */

		List<DatabaseField> pkFields = descriptor.getPrimaryKeyFields();
		for (final DatabaseField field : pkFields) {
			returningPolicy.addFieldForInsertReturnOnly(field);
			field.setUpdatable(false);
			field.setInsertable(false);
		}

		/*
		 * for (final DatabaseField field : descriptor.getFields()) {
		 * 
		 * if (pkFields.contains(field)) continue;
		 * 
		 * returningPolicy.addFieldForInsert(field);
		 * returningPolicy.addFieldForUpdate(field); }
		 */

		// log.info("Set descriptor's RETURNING policy to: {}",
		// returningPolicy);
	}
}