package org.eclipse.persistence.tools.workbench.mappingsmodel.query.relational; import java.util.List; import org.eclipse.persistence.oxm.XMLDescriptor; import org.eclipse.persistence.oxm.mappings.XMLCompositeObjectMapping; import org.eclipse.persistence.queries.DatabaseQuery; import org.eclipse.persistence.queries.ObjectLevelReadQuery; import org.eclipse.persistence.tools.workbench.mappingsmodel.query.MWProcedure; import org.eclipse.persistence.tools.workbench.utility.node.Node; public final class MWStoredProcedureQueryFormat extends MWQueryFormat { private MWProcedure procedure; public static final String PROCEDURE_PROPERTY = "procedure"; /** * Default constructor - for TopLink use only. */ @SuppressWarnings("unused") private MWStoredProcedureQueryFormat() { super(); } MWStoredProcedureQueryFormat(MWRelationalSpecificQueryOptions parent) { super(parent); } @Override protected void addChildrenTo(List children) { super.addChildrenTo(children); children.add(procedure); } /** * initialize persistent state */ @Override protected void initialize(Node modelObject) { super.initialize(modelObject); procedure = new MWProcedure(this); } @Override String getType() { return MWRelationalQuery.STORED_PROCEDURE_FORMAT; } public MWProcedure getProcedure() { return this.procedure; } public void setProcedure(MWProcedure procedure) { MWProcedure old = getProcedure(); this.procedure = procedure; firePropertyChanged(PROCEDURE_PROPERTY, old, procedure); } //persistence public static XMLDescriptor buildDescriptor() { XMLDescriptor descriptor = new XMLDescriptor(); descriptor.setJavaClass(MWStoredProcedureQueryFormat.class); descriptor.getInheritancePolicy().setParentClass(MWQueryFormat.class); // 1-1 to the procedure XMLCompositeObjectMapping procedureMapping = new XMLCompositeObjectMapping(); procedureMapping.setAttributeName("procedure"); procedureMapping.setReferenceClass(MWProcedure.class); procedureMapping.setXPath("procedure"); descriptor.addMapping(procedureMapping); return descriptor; } public static XMLDescriptor buildStandaloneDescriptor() { // Unchanged from standalone return buildDescriptor(); } @Override void convertFromRuntime(DatabaseQuery runtimeQuery) {}; @Override void convertToRuntime(DatabaseQuery runtimeQuery) { runtimeQuery.setCall(this.procedure.buildRuntimeCall()); } }