/*******************************************************************************
* Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Oracle - initial API and implementation from Oracle TopLink
******************************************************************************/
package org.eclipse.persistence.tools.workbench.test.models.projects;
import org.eclipse.persistence.tools.workbench.test.models.eis.employee.NormalHoursTransformer;
import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.xml.MWEisDescriptor;
import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.xml.MWXmlPrimaryKeyPolicy;
import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.xml.MWEisReturningPolicy;
import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.xml.MWEisTransactionalPolicy;
import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.xml.MWRootEisDescriptor;
import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.xml.MWXmlDirectCollectionMapping;
import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.xml.MWXmlDirectMapping;
import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.xml.MWXmlTransformationMapping;
import org.eclipse.persistence.tools.workbench.mappingsmodel.meta.MWClass;
import org.eclipse.persistence.tools.workbench.mappingsmodel.project.MWProject;
import org.eclipse.persistence.tools.workbench.mappingsmodel.project.xml.MWEisLoginSpec;
import org.eclipse.persistence.tools.workbench.mappingsmodel.project.xml.MWEisProject;
import org.eclipse.persistence.tools.workbench.mappingsmodel.query.xml.MWEisInteraction;
import org.eclipse.persistence.tools.workbench.mappingsmodel.query.xml.MWEisQueryManager;
import org.eclipse.persistence.tools.workbench.mappingsmodel.schema.MWElementDeclaration;
import org.eclipse.persistence.tools.workbench.mappingsmodel.schema.MWXmlSchema;
/**
* Created to test returning policy features
*/
public class ReturningPolicyEisProject extends XmlTestProject{
public ReturningPolicyEisProject()
{
super();
}
@Override
protected MWProject buildEmptyProject() {
return new MWEisProject("ReturningEIS", MWEisLoginSpec.JMS_ADAPTER_NAME, spiManager());
}
@Override
protected void initializeSchemas() {
super.initializeSchemas();
this.addSchema("eis-employee.xsd", "/schema/eis-employee.xsd");
}
@Override
public void initializeDescriptors() {
super.initializeDescriptors();
MWEisDescriptor descriptor = (MWEisDescriptor) this.addDescriptorForTypeNamed("org.eclipse.persistence.tools.workbench.test.models.eis.employee.Employee");
descriptor.asRootEisDescriptor();
initializeEmployeeDescriptor();
}
public MWRootEisDescriptor getEmployeeDescriptor() {
return (MWRootEisDescriptor) getProject().descriptorForTypeNamed("org.eclipse.persistence.tools.workbench.test.models.eis.employee.Employee");
}
public void initializeEmployeeDescriptor() {
MWRootEisDescriptor employeeDescriptor = getEmployeeDescriptor();
MWXmlSchema employeeSchema = (MWXmlSchema) getProject().getSchemaRepository().schemas().next();
MWElementDeclaration employeeElement = employeeSchema.element("employee");
MWClass employeeClass = employeeDescriptor.getMWClass();
employeeDescriptor.setSchemaContext(employeeElement);
MWXmlPrimaryKeyPolicy primaryKeyPolicy = ((MWEisTransactionalPolicy) employeeDescriptor.getTransactionalPolicy()).getPrimaryKeyPolicy();
primaryKeyPolicy.addPrimaryKey("@id");
MWEisQueryManager queryManager = (MWEisQueryManager) employeeDescriptor.getQueryManager();
MWEisInteraction readObjectInteraction = queryManager.getReadObjectInteraction();
readObjectInteraction.setFunctionName("readEmployeeById");
readObjectInteraction.addInputArgument("id", "@id");
MWEisInteraction insertInteraction = queryManager.getInsertInteraction();
insertInteraction.setFunctionName("insertEmployee");
insertInteraction.addInputArgument("id", "@id");
MWEisInteraction updateInteraction = queryManager.getUpdateInteraction();
updateInteraction.setFunctionName("updateEmployee");
updateInteraction.addInputArgument("id", "@id");
MWXmlDirectMapping idMapping =
(MWXmlDirectMapping) employeeDescriptor.addDirectMapping(employeeClass.attributeNamed("gender"));
idMapping.getXmlField().setXpath("@id");
MWXmlDirectMapping firstNameMapping =
(MWXmlDirectMapping) employeeDescriptor.addDirectMapping(employeeClass.attributeNamed("firstName"));
firstNameMapping.getXmlField().setXpath("personal-information/@first-name");
MWXmlDirectMapping lastNameMapping =
(MWXmlDirectMapping) employeeDescriptor.addDirectMapping(employeeClass.attributeNamed("lastName"));
lastNameMapping.getXmlField().setXpath("personal-information/@last-name");
MWXmlDirectCollectionMapping responsibilitiesMapping =
(MWXmlDirectCollectionMapping) employeeDescriptor.addDirectCollectionMapping(employeeClass.attributeNamed("responsibilities"));
responsibilitiesMapping.getXmlField().setXpath("responsibility/text()");
responsibilitiesMapping.getContainerPolicy().getDefaultingContainerClass().usesDefaultContainerClass();
MWXmlTransformationMapping normalHoursMapping =
(MWXmlTransformationMapping) employeeDescriptor.addTransformationMapping(employeeClass.attributeNamed("normalHours"));
normalHoursMapping.setAttributeTransformer(normalHoursMapping.typeFor(NormalHoursTransformer.class));
normalHoursMapping.addFieldTransformerAssociation("working-hours/start-time/text()", normalHoursMapping.typeFor(NormalHoursTransformer.class));
normalHoursMapping.addFieldTransformerAssociation("working-hours/end-time/text()", normalHoursMapping.typeFor(NormalHoursTransformer.class));
//initialize policies
employeeDescriptor.addReturningPolicy();
MWEisReturningPolicy returningPolicy = (MWEisReturningPolicy) employeeDescriptor.getReturningPolicy();
returningPolicy.addInsertFieldReadOnlyFlag("personal-information/@first-name").setReturnOnly(true);
returningPolicy.addUpdateField("personal-information/@last-name");
}
}