/******************************************************************************* * 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 java.util.HashMap; import java.util.Iterator; import javax.xml.namespace.QName; import org.eclipse.persistence.tools.workbench.test.models.eis.employee.Address; import org.eclipse.persistence.tools.workbench.test.models.eis.employee.Dependent; import org.eclipse.persistence.tools.workbench.test.models.eis.employee.Employee; import org.eclipse.persistence.tools.workbench.test.models.eis.employee.LargeProject; import org.eclipse.persistence.tools.workbench.test.models.eis.employee.NormalHoursTransformer; import org.eclipse.persistence.tools.workbench.test.models.eis.employee.PhoneNumber; import org.eclipse.persistence.tools.workbench.test.models.eis.employee.Project; import org.eclipse.persistence.eis.EISConnectionSpec; import org.eclipse.persistence.eis.EISDescriptor; import org.eclipse.persistence.eis.EISLogin; import org.eclipse.persistence.eis.adapters.jms.JMSPlatform; import org.eclipse.persistence.eis.interactions.XMLInteraction; import org.eclipse.persistence.eis.mappings.EISCompositeCollectionMapping; import org.eclipse.persistence.eis.mappings.EISCompositeDirectCollectionMapping; import org.eclipse.persistence.eis.mappings.EISCompositeObjectMapping; import org.eclipse.persistence.eis.mappings.EISDirectMapping; import org.eclipse.persistence.eis.mappings.EISOneToManyMapping; import org.eclipse.persistence.eis.mappings.EISOneToOneMapping; import org.eclipse.persistence.eis.mappings.EISTransformationMapping; import org.eclipse.persistence.internal.helper.ClassConstants; import org.eclipse.persistence.internal.indirection.TransparentIndirectionPolicy; import org.eclipse.persistence.internal.queries.CollectionContainerPolicy; import org.eclipse.persistence.internal.queries.MapContainerPolicy; import org.eclipse.persistence.mappings.converters.ObjectTypeConverter; import org.eclipse.persistence.oxm.NamespaceResolver; import org.eclipse.persistence.oxm.XMLConstants; import org.eclipse.persistence.oxm.XMLField; import org.eclipse.persistence.oxm.XMLUnionField; public final class EmployeeEisRuntimeProject { private org.eclipse.persistence.sessions.Project runtimeProject; public EmployeeEisRuntimeProject() { super(); this.initialize(); } private void initialize() { this.runtimeProject = new org.eclipse.persistence.sessions.Project(); this.runtimeProject.setName("Employee-EIS"); EISLogin login = new EISLogin(new JMSPlatform()); login.setConnectionSpec(new EISConnectionSpec()); login.setConnectionFactoryURL("www.imguessingatthis.com"); this.runtimeProject.setLogin(login); this.initializeDescriptors(); } private void initializeDescriptors() { this.runtimeProject.addDescriptor(this.buildAddressDescriptor()); this.runtimeProject.addDescriptor(this.buildDependentDescriptor()); this.runtimeProject.addDescriptor(this.buildEmployeeDescriptor()); this.runtimeProject.addDescriptor(this.buildPhoneNumberDescriptor()); this.runtimeProject.addDescriptor(this.buildProjectDescriptor()); this.runtimeProject.addDescriptor(this.buildLargeProjectDescriptor()); // Set the namespaces on all descriptors. for (Iterator descriptors = this.runtimeProject.getOrderedDescriptors().iterator(); descriptors.hasNext(); ) { ((EISDescriptor) descriptors.next()).setNamespaceResolver(new NamespaceResolver()); } } private EISDescriptor buildAddressDescriptor() { EISDescriptor addressDescriptor = new EISDescriptor(); addressDescriptor.setJavaClassName(Address.class.getName()); addressDescriptor.setDataTypeName("address"); addressDescriptor.descriptorIsAggregate(); EISDirectMapping street1Mapping = new EISDirectMapping(); street1Mapping.setAttributeName("street1"); street1Mapping.setXPath("street[1]/text()"); addressDescriptor.addMapping(street1Mapping); EISDirectMapping street2Mapping = new EISDirectMapping(); street2Mapping.setAttributeName("street2"); street2Mapping.setXPath("street[2]/text()"); addressDescriptor.addMapping(street2Mapping); EISDirectMapping cityMapping = new EISDirectMapping(); cityMapping.setAttributeName("city"); cityMapping.setXPath("city/text()"); addressDescriptor.addMapping(cityMapping); EISDirectMapping provinceMapping = new EISDirectMapping(); provinceMapping.setAttributeName("province"); provinceMapping.setXPath("province/text()"); addressDescriptor.addMapping(provinceMapping); EISDirectMapping postalCodeMapping = new EISDirectMapping(); postalCodeMapping.setAttributeName("postalCode"); postalCodeMapping.setXPath("postal-code/text()"); addressDescriptor.addMapping(postalCodeMapping); return addressDescriptor; } private EISDescriptor buildDependentDescriptor() { EISDescriptor dependentDescriptor = new EISDescriptor(); dependentDescriptor.setJavaClassName(Dependent.class.getName()); dependentDescriptor.setDataTypeName("dependent"); dependentDescriptor.descriptorIsAggregate(); EISDirectMapping firstNameMapping = new EISDirectMapping(); firstNameMapping.setAttributeName("firstName"); firstNameMapping.setXPath("@first-name"); dependentDescriptor.addMapping(firstNameMapping); EISDirectMapping lastNameMapping = new EISDirectMapping(); lastNameMapping.setAttributeName("lastName"); lastNameMapping.setXPath("@last-name"); dependentDescriptor.addMapping(lastNameMapping); EISCompositeObjectMapping addressMapping = new EISCompositeObjectMapping(); addressMapping.setAttributeName("address"); addressMapping.setXPath("address"); addressMapping.setReferenceClassName(Address.class.getName()); dependentDescriptor.addMapping(addressMapping); EISCompositeObjectMapping phoneNumberMapping = new EISCompositeObjectMapping(); phoneNumberMapping.setAttributeName("phoneNumber"); phoneNumberMapping.setXPath("phone-no"); phoneNumberMapping.setReferenceClassName(PhoneNumber.class.getName()); dependentDescriptor.addMapping(phoneNumberMapping); return dependentDescriptor; } private EISDescriptor buildEmployeeDescriptor() { EISDescriptor employeeDescriptor = new EISDescriptor(); employeeDescriptor.setJavaClassName(Employee.class.getName()); employeeDescriptor.setDataTypeName("employee"); employeeDescriptor.getInterfacePolicy().addParentInterfaceName("org.eclipse.persistence.tools.workbench.test.models.contact.Person"); employeeDescriptor.setShouldAlwaysConformResultsInUnitOfWork(true); employeeDescriptor.setShouldAlwaysRefreshCache(true); employeeDescriptor.setShouldDisableCacheHits(true); employeeDescriptor.setIsIsolated(false); employeeDescriptor.useSoftCacheWeakIdentityMap(); employeeDescriptor.setIdentityMapSize(100); XMLInteraction readObjectCall = new XMLInteraction(); readObjectCall.setFunctionName("readEmployeeById"); readObjectCall.addArgument("id", "@id"); employeeDescriptor.getDescriptorQueryManager().setReadObjectCall(readObjectCall); employeeDescriptor.addPrimaryKeyField(new XMLField("@id")); EISDirectMapping idMapping = new EISDirectMapping(); idMapping.setAttributeName("id"); idMapping.setXPath("@id"); employeeDescriptor.addMapping(idMapping); EISDirectMapping firstNameMapping = new EISDirectMapping(); firstNameMapping.setAttributeName("firstName"); firstNameMapping.setXPath("personal-information/@first-name"); employeeDescriptor.addMapping(firstNameMapping); EISDirectMapping lastNameMapping = new EISDirectMapping(); lastNameMapping.setAttributeName("lastName"); lastNameMapping.setXPath("personal-information/@last-name"); employeeDescriptor.addMapping(lastNameMapping); EISDirectMapping genderMapping = new EISDirectMapping(); genderMapping.setAttributeName("gender"); genderMapping.setXPath("personal-information/@gender"); ObjectTypeConverter genderConverter = new ObjectTypeConverter(genderMapping); genderConverter.addConversionValue("F", "female"); genderConverter.addConversionValue("M", "male"); genderConverter.setDefaultAttributeValue("male"); genderMapping.setConverter(genderConverter); employeeDescriptor.addMapping(genderMapping); EISTransformationMapping normalHoursMapping = new EISTransformationMapping(); normalHoursMapping.setAttributeName("normalHours"); normalHoursMapping.setAttributeTransformerClassName(NormalHoursTransformer.class.getName()); //TODO proxy indirection, when runtime supports it // normalHoursMapping.setIndirectionPolicy(new ProxyIndirectionPolicy()); XMLField startTimeField = new XMLField("working-hours/start-time/text()"); startTimeField.setSchemaType(new QName(XMLConstants.SCHEMA_URL, XMLConstants.DATE_TIME)); normalHoursMapping.addFieldTransformerClassName(startTimeField, NormalHoursTransformer.class.getName()); XMLField endTimeField = new XMLField("working-hours/end-time/text()"); endTimeField.setSchemaType(new QName(XMLConstants.SCHEMA_URL, XMLConstants.DATE_TIME)); normalHoursMapping.addFieldTransformerClassName(endTimeField, NormalHoursTransformer.class.getName()); employeeDescriptor.addMapping(normalHoursMapping); EISCompositeObjectMapping addressMapping = new EISCompositeObjectMapping(); addressMapping.setAttributeName("address"); addressMapping.setXPath("contact-information/address"); addressMapping.setReferenceClassName(Address.class.getName()); employeeDescriptor.addMapping(addressMapping); EISCompositeCollectionMapping phoneNumbersMapping = new EISCompositeCollectionMapping(); phoneNumbersMapping.setAttributeName("phoneNumbers"); phoneNumbersMapping.setXPath("contact-information/phone"); phoneNumbersMapping.setReferenceClassName(PhoneNumber.class.getName()); MapContainerPolicy containerPolicy = new MapContainerPolicy(HashMap.class.getName()); containerPolicy.setKeyName("getType"); phoneNumbersMapping.setContainerPolicy(containerPolicy); employeeDescriptor.addMapping(phoneNumbersMapping); EISCompositeCollectionMapping dependentsMapping = new EISCompositeCollectionMapping(); dependentsMapping.setAttributeName("dependents"); dependentsMapping.setXPath("dependent-information/dependent"); dependentsMapping.setReferenceClassName(Dependent.class.getName()); dependentsMapping.useCollectionClassName("java.util.Vector"); employeeDescriptor.addMapping(dependentsMapping); EISCompositeDirectCollectionMapping responsibilitiesMapping = new EISCompositeDirectCollectionMapping(); responsibilitiesMapping.setAttributeName("responsibilities"); responsibilitiesMapping.setXPath("responsibility/text()"); responsibilitiesMapping.setContainerPolicy(new CollectionContainerPolicy("java.util.Vector")); employeeDescriptor.addMapping(responsibilitiesMapping); EISOneToOneMapping managerMapping = new EISOneToOneMapping(); managerMapping.setAttributeName("manager"); managerMapping.setReferenceClassName(Employee.class.getName()); //TODO proxy indirection, when runtime supports it // managerMapping.setIndirectionPolicy(new ProxyIndirectionPolicy()); managerMapping.addForeignKeyField(new XMLField("manager/@first-name"), new XMLField("personal-information/@first-name")); managerMapping.addForeignKeyField(new XMLField("manager/@last-name"), new XMLField("personal-information/@last-name")); managerMapping.setUsesIndirection(true); XMLInteraction selectManagerCall = new XMLInteraction(); selectManagerCall.setFunctionName("selectManager"); managerMapping.setSelectionCall(selectManagerCall); employeeDescriptor.addMapping(managerMapping); EISOneToManyMapping projectsMapping = new EISOneToManyMapping(); projectsMapping.setAttributeName("projects"); projectsMapping.setReferenceClassName(Project.class.getName()); projectsMapping.addForeignKeyField(new XMLField("projects/project-id/text()"), new XMLField("id/text()")); projectsMapping.useListClassName(ClassConstants.IndirectList_Class.getName()); projectsMapping.setIndirectionPolicy(new TransparentIndirectionPolicy()); XMLInteraction selectProjectsCall = new XMLInteraction(); selectProjectsCall.setFunctionName("selectProjects"); projectsMapping.setSelectionCall(selectProjectsCall); XMLInteraction deleteAllCall = new XMLInteraction(); deleteAllCall.setFunctionName("deleteAllProjects"); projectsMapping.setDeleteAllCall(deleteAllCall); projectsMapping.setIsPrivateOwned(true); employeeDescriptor.addMapping(projectsMapping); return employeeDescriptor; } private EISDescriptor buildPhoneNumberDescriptor() { EISDescriptor phoneNumberDescriptor = new EISDescriptor(); phoneNumberDescriptor.setJavaClassName(PhoneNumber.class.getName()); phoneNumberDescriptor.setDataTypeName("phone-type"); phoneNumberDescriptor.descriptorIsAggregate(); EISDirectMapping typeMapping = new EISDirectMapping(); typeMapping.setAttributeName("type"); typeMapping.setXPath("@type"); phoneNumberDescriptor.addMapping(typeMapping); EISDirectMapping areaCodeMapping = new EISDirectMapping(); areaCodeMapping.setAttributeName("areaCode"); XMLField areaCodeField = new XMLField("area-code/text()"); areaCodeField.setIsTypedTextField(true); areaCodeMapping.setField(areaCodeField); phoneNumberDescriptor.addMapping(areaCodeMapping); EISDirectMapping numberMapping = new EISDirectMapping(); numberMapping.setAttributeName("number"); XMLField numberField = new XMLField("number/text()"); numberField.setIsTypedTextField(true); numberMapping.setField(numberField); phoneNumberDescriptor.addMapping(numberMapping); return phoneNumberDescriptor; } private EISDescriptor buildProjectDescriptor() { EISDescriptor projectDescriptor = new EISDescriptor(); projectDescriptor.setJavaClassName(Project.class.getName()); projectDescriptor.setDataTypeName("project"); projectDescriptor.setShouldAlwaysConformResultsInUnitOfWork(true); projectDescriptor.setShouldAlwaysRefreshCache(true); projectDescriptor.setShouldDisableCacheHits(true); projectDescriptor.setIsIsolated(false); projectDescriptor.useSoftCacheWeakIdentityMap(); projectDescriptor.setIdentityMapSize(100); projectDescriptor.getDescriptorInheritancePolicy().setClassIndicatorField(new XMLField("@xsi:type")); projectDescriptor.getDescriptorInheritancePolicy().addClassNameIndicator(Project.class.getName(), "project"); projectDescriptor.getDescriptorInheritancePolicy().addClassNameIndicator(LargeProject.class.getName(), "large-project"); //force initialization projectDescriptor.getQueryManager(); projectDescriptor.addPrimaryKeyField(new XMLField("id/text()")); EISDirectMapping idMapping = new EISDirectMapping(); idMapping.setAttributeName("id"); idMapping.setXPath("id/text()"); projectDescriptor.addMapping(idMapping); EISDirectMapping nameMapping = new EISDirectMapping(); nameMapping.setAttributeName("name"); nameMapping.setXPath("name/text()"); projectDescriptor.addMapping(nameMapping); EISDirectMapping descriptionMapping = new EISDirectMapping(); descriptionMapping.setAttributeName("description"); descriptionMapping.setXPath("description/text()"); projectDescriptor.addMapping(descriptionMapping); EISDirectMapping versionMapping = new EISDirectMapping(); versionMapping.setAttributeName("version"); versionMapping.setXPath("version/text()"); projectDescriptor.addMapping(versionMapping); EISDirectMapping endDateMapping = new EISDirectMapping(); endDateMapping.setAttributeName("endDate"); XMLField endDateField = new XMLField("end-date/text()"); endDateField.setSchemaType(new QName(XMLConstants.SCHEMA_URL, XMLConstants.DATE)); endDateMapping.setField(endDateField); projectDescriptor.addMapping(endDateMapping); EISOneToOneMapping teamLeaderMapping = new EISOneToOneMapping(); teamLeaderMapping.setAttributeName("teamLeader"); teamLeaderMapping.setReferenceClassName(Employee.class.getName()); teamLeaderMapping.addForeignKeyField(new XMLField("team-leader/@employee-id"), new XMLField("@id")); teamLeaderMapping.setUsesIndirection(true); projectDescriptor.addMapping(teamLeaderMapping); EISOneToManyMapping teamMembersMapping = new EISOneToManyMapping(); teamMembersMapping.setAttributeName("teamMembers"); teamMembersMapping.setReferenceClassName(Employee.class.getName()); teamMembersMapping.setForeignKeyGroupingElement("team-members"); teamMembersMapping.addForeignKeyField(new XMLField("employee-id/text()"), new XMLField("@id")); teamMembersMapping.useListClassName(ClassConstants.IndirectList_Class.getName()); teamMembersMapping.setIndirectionPolicy(new TransparentIndirectionPolicy()); XMLInteraction selectTeamMembersCall = new XMLInteraction(); selectTeamMembersCall.setFunctionName("selectTeamMembers"); teamMembersMapping.setSelectionCall(selectTeamMembersCall); projectDescriptor.addMapping(teamMembersMapping); return projectDescriptor; } private EISDescriptor buildLargeProjectDescriptor() { EISDescriptor projectDescriptor = new EISDescriptor(); projectDescriptor.setJavaClassName(LargeProject.class.getName()); projectDescriptor.setDataTypeName("project"); projectDescriptor.setShouldAlwaysConformResultsInUnitOfWork(true); projectDescriptor.setShouldAlwaysRefreshCache(true); projectDescriptor.setShouldDisableCacheHits(true); projectDescriptor.setIsIsolated(false); projectDescriptor.getDescriptorInheritancePolicy().setParentClassName(Project.class.getName()); //force initialization projectDescriptor.getQueryManager(); EISDirectMapping budgetMapping = new EISDirectMapping(); budgetMapping.setAttributeName("budget"); XMLUnionField budgetField = new XMLUnionField("budget/text()"); budgetField.addSchemaType(new QName(XMLConstants.SCHEMA_URL, XMLConstants.FLOAT)); budgetField.addSchemaType(new QName(XMLConstants.SCHEMA_URL, XMLConstants.INTEGER)); budgetMapping.setField(budgetField); projectDescriptor.addMapping(budgetMapping); EISDirectMapping milestoneMapping = new EISDirectMapping(); milestoneMapping.setAttributeName("milestoneVersion"); XMLField milestoneField = new XMLField("milestone/text()"); milestoneField.setSchemaType(new QName(XMLConstants.SCHEMA_URL, XMLConstants.DATE)); milestoneMapping.setField(milestoneField); projectDescriptor.addMapping(milestoneMapping); return projectDescriptor; } public org.eclipse.persistence.sessions.Project getRuntimeProject() { return this.runtimeProject; } }