package org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.xml; import org.eclipse.persistence.descriptors.InheritancePolicy; import org.eclipse.persistence.mappings.foundation.AbstractCompositeCollectionMapping; import org.eclipse.persistence.mappings.foundation.AbstractCompositeObjectMapping; import org.eclipse.persistence.oxm.XMLDescriptor; import org.eclipse.persistence.tools.workbench.mappingsmodel.MWModel; import org.eclipse.persistence.tools.workbench.mappingsmodel.MWNode; import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.MWMappingDescriptor; public abstract class MWContainerAccessor extends MWModel { public final static String CONTAINER_ACCESSOR_PROPERTY = "containerAccessor"; // **************** Constructors ****************************************** /** Default constructor - for TopLink use only (sorta) */ public MWContainerAccessor() { super(); } public MWContainerAccessor(MWNode parent) { super(parent); } // **************** Containment ********************************************* protected Parent getCompositeParent() { return (Parent) this.getParent(); } private MWAbstractCompositeMapping compositeMapping() { return this.getCompositeParent().compositeMapping(); } protected MWMappingDescriptor parentDescriptor() { return this.compositeMapping().getParentDescriptor(); } // **************** UI support ********************************************* public abstract String accessorDisplayString(); // **************** Runtime conversion ************************************ public abstract void adjustRuntimeMapping(AbstractCompositeCollectionMapping mapping); public abstract void adjustRuntimeMapping(AbstractCompositeObjectMapping mapping); // **************** TopLink Methods *************************************** public static XMLDescriptor buildDescriptor() { XMLDescriptor descriptor = new XMLDescriptor(); descriptor.setJavaClass(MWContainerAccessor.class); InheritancePolicy ip = (InheritancePolicy)descriptor.getInheritancePolicy(); ip.setClassIndicatorFieldName("@type"); ip.addClassIndicator(MWAttributeContainerAccessor.class, "attribute-based"); ip.addClassIndicator(MWMethodContainerAccessor.class, "method-based"); return descriptor; } public MWContainerAccessor valueForTopLink() { return this; } public static MWContainerAccessor buildAccessorForTopLink(MWContainerAccessor accesssor) { return (accesssor == null) ? new MWNullContainerAccessor() : accesssor; } public abstract boolean isNull(); public abstract boolean isMethods(); public abstract boolean isAttribute(); // **************** Member Interface *************************************** /** * the accessor's parent should be able to return the appropriate * composite mapping */ public interface Parent extends MWNode { MWAbstractCompositeMapping compositeMapping(); } }