/******************************************************************************* * 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.descriptors.RelationalDescriptor; import org.eclipse.persistence.internal.indirection.ProxyIndirectionPolicy; import org.eclipse.persistence.mappings.AggregateObjectMapping; import org.eclipse.persistence.mappings.DirectCollectionMapping; import org.eclipse.persistence.mappings.DirectToFieldMapping; import org.eclipse.persistence.mappings.ManyToManyMapping; import org.eclipse.persistence.mappings.OneToManyMapping; import org.eclipse.persistence.mappings.OneToOneMapping; import org.eclipse.persistence.mappings.TransformationMapping; import org.eclipse.persistence.mappings.VariableOneToOneMapping; import org.eclipse.persistence.mappings.converters.ObjectTypeConverter; import org.eclipse.persistence.sequencing.TableSequence; import org.eclipse.persistence.sessions.DatabaseLogin; import org.eclipse.persistence.sessions.Project; public class PhoneCompanyRuntimeProject { private Project runtimeProject; public PhoneCompanyRuntimeProject(boolean usesSharedAggregates) { super(); this.runtimeProject = new Project(); StringBuffer projectName = new StringBuffer("PhoneCompany"); if (usesSharedAggregates) projectName.append(" (shared aggregates)"); this.runtimeProject.setName(projectName.toString()); applyLogin(); this.runtimeProject.addDescriptor(buildCompanyDescriptor(usesSharedAggregates)); this.runtimeProject.addDescriptor(buildContactDescriptor()); this.runtimeProject.addDescriptor(buildEmailAddressDescriptor()); this.runtimeProject.addDescriptor(buildHouseholdDescriptor(usesSharedAggregates)); this.runtimeProject.addDescriptor(buildPersonDescriptor()); this.runtimeProject.addDescriptor(buildPhoneNumberDescriptor()); this.runtimeProject.addDescriptor(buildServiceDescriptor(usesSharedAggregates)); this.runtimeProject.addDescriptor(buildServiceCallDescriptor()); this.runtimeProject.addDescriptor(buildServiceableDescriptor()); } public void applyLogin() { DatabaseLogin login = new DatabaseLogin(); login.usePlatform(new org.eclipse.persistence.platform.database.MySQLPlatform()); login.setDriverClassName(TestDatabases.mySQLDriverClassName()); login.setConnectionString(TestDatabases.mySQLServerURL()); login.setUserName(TestDatabases.userName()); login.setPassword(TestDatabases.password()); // Configuration properties. ((TableSequence) login.getDefaultSequence()).setTableName("SEQUENCE"); ((TableSequence) login.getDefaultSequence()).setNameFieldName("SEQ_NAME"); ((TableSequence) login.getDefaultSequence()).setCounterFieldName("SEQ_COUNT"); ((TableSequence) login.getDefaultSequence()).setPreallocationSize(50); login.setShouldCacheAllStatements(false); login.setUsesByteArrayBinding(true); login.setUsesStringBinding(false); if (login.shouldUseByteArrayBinding()) { // Can only be used with binding. login.setUsesStreamsForBinding(false); } login.setShouldForceFieldNamesToUpperCase(false); login.setShouldOptimizeDataConversion(true); login.setShouldTrimStrings(true); login.setUsesBatchWriting(false); if (login.shouldUseBatchWriting()) { // Can only be used with batch writing. login.setUsesJDBCBatchWriting(true); } login.setUsesExternalConnectionPooling(false); login.setUsesExternalTransactionController(false); this.runtimeProject.setLogin(login); } public RelationalDescriptor buildCompanyDescriptor(boolean usesSharedAggregates) { RelationalDescriptor descriptor = new RelationalDescriptor(); descriptor.setJavaClassName(org.eclipse.persistence.tools.workbench.test.models.phone.Company.class.getName()); descriptor.addTableName("COMPANY"); descriptor.addPrimaryKeyFieldName("COMPANY.ID"); // Interface properties. descriptor.getInterfacePolicy().addParentInterfaceName(org.eclipse.persistence.tools.workbench.test.models.phone.Serviceable.class.getName()); // Descriptor properties. descriptor.useFullIdentityMap(); descriptor.setIdentityMapSize(405); descriptor.setIsIsolated(false); descriptor.setAlias("Company"); // Query manager. descriptor.getDescriptorQueryManager().checkDatabaseForDoesExist(); //Named Queries // Event manager. // Mappings. DirectToFieldMapping idMapping = new DirectToFieldMapping(); idMapping.setAttributeName("id"); idMapping.setGetMethodName("getId"); idMapping.setSetMethodName("setId"); idMapping.setFieldName("COMPANY.ID"); descriptor.addMapping(idMapping); DirectToFieldMapping nameMapping = new DirectToFieldMapping(); nameMapping.setAttributeName("name"); nameMapping.setGetMethodName("getName"); nameMapping.setSetMethodName("setName"); nameMapping.setFieldName("COMPANY.NAME"); descriptor.addMapping(nameMapping); AggregateObjectMapping serviceMapping = new AggregateObjectMapping(); serviceMapping.setAttributeName("service"); serviceMapping.setGetMethodName("getService"); serviceMapping.setSetMethodName("setService"); serviceMapping.setReferenceClassName(org.eclipse.persistence.tools.workbench.test.models.phone.Service.class.getName()); serviceMapping.setIsNullAllowed(false); serviceMapping.addFieldNameTranslation("COMPANY.ID", "primaryContactPerson->HEAD_ID_IN_REFERENCE_HOUSEHOLD_PERSON2"); serviceMapping.addFieldNameTranslation("COMPANY.SERVICE_PLAN", "servicePlan->DIRECT"); serviceMapping.addFieldNameTranslation("COMPANY.ADDRESS", "billingAddress->DIRECT"); serviceMapping.addFieldNameTranslation("COMPANY.HAS_DSL", "rate->METHOD_TRANSFORMER hasDslService"); serviceMapping.addFieldNameTranslation("COMPANY.ID", "serviceCalls->ID_IN_REFERENCE_SERVICE_CALL_HOUSEHOLD"); if (!usesSharedAggregates) { serviceMapping.addFieldNameTranslation("COMPANY.ID", "users->ID_IN_REFERENCE_COMPANY_PERSON_COMPANY"); serviceMapping.addFieldNameTranslation("COMPANY.ID", "lineAccounts->ID_IN_REFERENCE_LINE_ACCOUNT_COMPANY"); } serviceMapping.addFieldNameTranslation("COMPANY.CONTACT_TYPE", "primaryContact->CLASS_INDICATOR_FIELD"); serviceMapping.addFieldNameTranslation("COMPANY.CONTACT_ID", "primaryContact->QUERY_KEY id"); serviceMapping.addFieldNameTranslation("COMPANY.HAS_LONG_DISTANCE", "rate->METHOD_TRANSFORMER hasLongDistanceService"); serviceMapping.addFieldNameTranslation("COMPANY.HAS_LOCAL", "rate->METHOD_TRANSFORMER hasLocalService"); descriptor.addMapping(serviceMapping); return descriptor; } public RelationalDescriptor buildContactDescriptor() { RelationalDescriptor descriptor = new RelationalDescriptor(); descriptor.descriptorIsForInterface(); descriptor.setJavaClassName(org.eclipse.persistence.tools.workbench.test.models.phone.Contact.class.getName()); // Interface properties. // Descriptor properties. descriptor.setAlias("Contact"); descriptor.addAbstractQueryKey("id"); // Query manager. //Named Queries // Event manager. return descriptor; } public RelationalDescriptor buildEmailAddressDescriptor() { RelationalDescriptor descriptor = new RelationalDescriptor(); descriptor.setJavaClassName(org.eclipse.persistence.tools.workbench.test.models.phone.EmailAddress.class.getName()); descriptor.addTableName("EMAIL"); descriptor.addPrimaryKeyFieldName("EMAIL.ID"); // Interface properties. descriptor.getInterfacePolicy().addParentInterfaceName(org.eclipse.persistence.tools.workbench.test.models.phone.Contact.class.getName()); // Descriptor properties. descriptor.useWeakIdentityMap(); descriptor.setIdentityMapSize(98); descriptor.setIsIsolated(false); descriptor.setSequenceNumberFieldName("EMAIL.ID"); descriptor.setSequenceNumberName("org.eclipse.persistence.tools.workbench.test.models.phone.EmailAddress"); descriptor.setAlias("EmailAddress"); // Query manager. descriptor.getDescriptorQueryManager().assumeExistenceForDoesExist(); //Named Queries // Event manager. // Query keys. descriptor.addDirectQueryKey("email", "EMAIL.ADDRESS"); // Mappings. DirectToFieldMapping addressMapping = new DirectToFieldMapping(); addressMapping.setAttributeName("address"); addressMapping.setGetMethodName("getAddress"); addressMapping.setSetMethodName("setAddress"); addressMapping.setFieldName("EMAIL.ADDRESS"); descriptor.addMapping(addressMapping); DirectToFieldMapping idMapping = new DirectToFieldMapping(); idMapping.setAttributeName("id"); idMapping.setGetMethodName("getId"); idMapping.setSetMethodName("setId"); idMapping.setFieldName("EMAIL.ID"); descriptor.addMapping(idMapping); return descriptor; } public RelationalDescriptor buildHouseholdDescriptor(boolean usesSharedAggregates) { RelationalDescriptor descriptor = new RelationalDescriptor(); descriptor.setJavaClassName(org.eclipse.persistence.tools.workbench.test.models.phone.Household.class.getName()); descriptor.addTableName("HOUSEHOLD"); descriptor.addPrimaryKeyFieldName("HOUSEHOLD.ID"); // Interface properties. descriptor.getInterfacePolicy().addParentInterfaceName(org.eclipse.persistence.tools.workbench.test.models.phone.Serviceable.class.getName()); // Descriptor properties. descriptor.useFullIdentityMap(); descriptor.setIdentityMapSize(405); descriptor.setIsIsolated(false); descriptor.setAlias("Household"); // Query manager. descriptor.getDescriptorQueryManager().checkDatabaseForDoesExist(); //Named Queries // Event manager. // Mappings. DirectToFieldMapping idMapping = new DirectToFieldMapping(); idMapping.setAttributeName("id"); idMapping.setGetMethodName("getId"); idMapping.setSetMethodName("setId"); idMapping.setFieldName("HOUSEHOLD.ID"); descriptor.addMapping(idMapping); OneToOneMapping headOfHouseholdMapping = new OneToOneMapping(); headOfHouseholdMapping.setAttributeName("headOfHousehold"); headOfHouseholdMapping.setGetMethodName("getHeadOfHousehold"); headOfHouseholdMapping.setSetMethodName("setHeadOfHousehold"); headOfHouseholdMapping.setReferenceClassName(org.eclipse.persistence.tools.workbench.test.models.phone.Person.class.getName()); headOfHouseholdMapping.dontUseIndirection(); headOfHouseholdMapping.addForeignKeyFieldName("HOUSEHOLD.CONTACT_PERSON_ID", "PERSON.ID"); descriptor.addMapping(headOfHouseholdMapping); if (usesSharedAggregates) { AggregateObjectMapping serviceMapping = new AggregateObjectMapping(); serviceMapping.setAttributeName("service"); serviceMapping.setGetMethodName("getService"); serviceMapping.setSetMethodName("setService"); serviceMapping.setReferenceClassName(org.eclipse.persistence.tools.workbench.test.models.phone.Service.class.getName()); serviceMapping.setIsNullAllowed(false); serviceMapping.addFieldNameTranslation("HOUSEHOLD.ID", "primaryContactPerson->HEAD_ID_IN_REFERENCE_HOUSEHOLD_PERSON2"); serviceMapping.addFieldNameTranslation("HOUSEHOLD.SERVICE_PLAN", "servicePlan->DIRECT"); serviceMapping.addFieldNameTranslation("HOUSEHOLD.ADDRESS", "billingAddress->DIRECT"); serviceMapping.addFieldNameTranslation("HOUSEHOLD.HAS_DSL", "rate->METHOD_TRANSFORMER hasDslService"); serviceMapping.addFieldNameTranslation("HOUSEHOLD.ID", "serviceCalls->ID_IN_REFERENCE_SERVICE_CALL_HOUSEHOLD"); serviceMapping.addFieldNameTranslation("HOUSEHOLD.CONTACT_TYPE", "primaryContact->CLASS_INDICATOR_FIELD"); serviceMapping.addFieldNameTranslation("HOUSEHOLD.CONTACT_ID", "primaryContact->QUERY_KEY id"); serviceMapping.addFieldNameTranslation("HOUSEHOLD.HAS_LONG_DISTANCE", "rate->METHOD_TRANSFORMER hasLongDistanceService"); serviceMapping.addFieldNameTranslation("HOUSEHOLD.HAS_LOCAL", "rate->METHOD_TRANSFORMER hasLocalService"); descriptor.addMapping(serviceMapping); } return descriptor; } public RelationalDescriptor buildPersonDescriptor() { RelationalDescriptor descriptor = new RelationalDescriptor(); descriptor.setJavaClassName(org.eclipse.persistence.tools.workbench.test.models.phone.Person.class.getName()); descriptor.addTableName("PERSON"); descriptor.addPrimaryKeyFieldName("PERSON.ID"); // Descriptor properties. descriptor.useFullIdentityMap(); descriptor.setIdentityMapSize(405); descriptor.setIsIsolated(false); descriptor.setAlias("Person"); // Query manager. descriptor.getDescriptorQueryManager().checkDatabaseForDoesExist(); //Named Queries // Event manager. // Mappings. DirectToFieldMapping idMapping = new DirectToFieldMapping(); idMapping.setAttributeName("id"); idMapping.setGetMethodName("getId"); idMapping.setSetMethodName("setId"); idMapping.setFieldName("PERSON.ID"); descriptor.addMapping(idMapping); DirectToFieldMapping lastNameMapping = new DirectToFieldMapping(); lastNameMapping.setAttributeName("lastName"); lastNameMapping.setGetMethodName("getLastName"); lastNameMapping.setSetMethodName("setLastName"); lastNameMapping.setFieldName("PERSON.L_NAME"); descriptor.addMapping(lastNameMapping); DirectToFieldMapping firstNameMapping = new DirectToFieldMapping(); firstNameMapping.setAttributeName("firstName"); firstNameMapping.setGetMethodName("getFirstName"); firstNameMapping.setSetMethodName("setFirstName"); firstNameMapping.setFieldName("PERSON.F_NAME"); descriptor.addMapping(firstNameMapping); return descriptor; } public RelationalDescriptor buildPhoneNumberDescriptor() { RelationalDescriptor descriptor = new RelationalDescriptor(); descriptor.setJavaClassName(org.eclipse.persistence.tools.workbench.test.models.phone.PhoneNumber.class.getName()); descriptor.addTableName("PHONE_NUMBER"); descriptor.addPrimaryKeyFieldName("PHONE_NUMBER.ID"); // Interface properties. descriptor.getInterfacePolicy().addParentInterfaceName(org.eclipse.persistence.tools.workbench.test.models.phone.Contact.class.getName()); // Descriptor properties. descriptor.useWeakIdentityMap(); descriptor.setIdentityMapSize(98); descriptor.setIsIsolated(false); descriptor.setSequenceNumberFieldName("PHONE_NUMBER.ID"); descriptor.setSequenceNumberName("org.eclipse.persistence.tools.workbench.test.models.phone.PhoneNumber"); descriptor.setAlias("PhoneNumber"); // Query manager. descriptor.getDescriptorQueryManager().assumeExistenceForDoesExist(); //Named Queries // Event manager. // Mappings. DirectToFieldMapping idMapping = new DirectToFieldMapping(); idMapping.setAttributeName("id"); idMapping.setGetMethodName("getId"); idMapping.setSetMethodName("setId"); idMapping.setFieldName("PHONE_NUMBER.ID"); descriptor.addMapping(idMapping); DirectToFieldMapping numberMapping = new DirectToFieldMapping(); numberMapping.setAttributeName("number"); numberMapping.setGetMethodName("getNumber"); numberMapping.setSetMethodName("setNumber"); numberMapping.setFieldName("PHONE_NUMBER.PHONE_NUMBER"); descriptor.addMapping(numberMapping); return descriptor; } public RelationalDescriptor buildServiceCallDescriptor() { RelationalDescriptor descriptor = new RelationalDescriptor(); descriptor.setJavaClassName(org.eclipse.persistence.tools.workbench.test.models.phone.ServiceCall.class.getName()); descriptor.addTableName("SERVICE_CALL"); descriptor.addPrimaryKeyFieldName("SERVICE_CALL.ID"); // Descriptor properties. descriptor.useFullIdentityMap(); descriptor.setIdentityMapSize(405); descriptor.setIsIsolated(false); descriptor.setAlias("ServiceCall"); // Query manager. descriptor.getDescriptorQueryManager().checkDatabaseForDoesExist(); //Named Queries // Event manager. // Mappings. DirectToFieldMapping idMapping = new DirectToFieldMapping(); idMapping.setAttributeName("id"); idMapping.setGetMethodName("getId"); idMapping.setSetMethodName("setId"); idMapping.setFieldName("SERVICE_CALL.ID"); descriptor.addMapping(idMapping); DirectToFieldMapping timeMapping = new DirectToFieldMapping(); timeMapping.setAttributeName("time"); timeMapping.setGetMethodName("getTime"); timeMapping.setSetMethodName("setTime"); timeMapping.setFieldName("SERVICE_CALL.TIME_OF_CALL"); descriptor.addMapping(timeMapping); VariableOneToOneMapping serviceUserMapping = new VariableOneToOneMapping(); serviceUserMapping.setAttributeName("serviceUser"); serviceUserMapping.setGetMethodName("getServiceUser"); serviceUserMapping.setSetMethodName("setServiceUser"); serviceUserMapping.setReferenceClassName(org.eclipse.persistence.tools.workbench.test.models.phone.Serviceable.class.getName()); serviceUserMapping.setIndirectionPolicy(new ProxyIndirectionPolicy()); serviceUserMapping.addForeignQueryKeyName("SERVICE_CALL.SERVICE_USER_ID", "id"); serviceUserMapping.setTypeFieldName("SERVICE_CALL.SERVICE_USER_TYPE"); serviceUserMapping.addClassNameIndicator("org.eclipse.persistence.tools.workbench.test.models.phone.Household", "H"); serviceUserMapping.addClassNameIndicator("org.eclipse.persistence.tools.workbench.test.models.phone.Company", "C"); descriptor.addMapping(serviceUserMapping); return descriptor; } public RelationalDescriptor buildServiceDescriptor(boolean usesSharedAggregates) { RelationalDescriptor descriptor = new RelationalDescriptor(); descriptor.descriptorIsAggregate(); descriptor.setJavaClassName(org.eclipse.persistence.tools.workbench.test.models.phone.Service.class.getName()); // Descriptor properties. descriptor.setAlias("Service"); // Query manager. //Named Queries // Event manager. // Mappings. DirectToFieldMapping billingAddressMapping = new DirectToFieldMapping(); billingAddressMapping.setAttributeName("billingAddress"); billingAddressMapping.setFieldName("billingAddress->DIRECT"); descriptor.addMapping(billingAddressMapping); DirectToFieldMapping servicePlanMapping = new DirectToFieldMapping(); ObjectTypeConverter converter = new ObjectTypeConverter(servicePlanMapping); servicePlanMapping.setConverter(converter); servicePlanMapping.setAttributeName("servicePlan"); servicePlanMapping.setFieldName("servicePlan->DIRECT"); converter.addConversionValue(new java.lang.Integer(0), "Platinum"); converter.addConversionValue(new java.lang.Integer(2), "Standard"); converter.addConversionValue(new java.lang.Integer(1), "Gold"); descriptor.addMapping(servicePlanMapping); TransformationMapping rateMapping = new TransformationMapping(); rateMapping.setAttributeName("rate"); rateMapping.setAttributeTransformation("calculateRate"); rateMapping.addFieldTransformation("rate->METHOD_TRANSFORMER hasLocalService", "hasLocalService"); rateMapping.addFieldTransformation("rate->METHOD_TRANSFORMER hasDslService", "hasDslService"); rateMapping.addFieldTransformation("rate->METHOD_TRANSFORMER hasLongDistanceService", "hasLongDistanceService"); descriptor.addMapping(rateMapping); if (!usesSharedAggregates) { DirectCollectionMapping lines_accountsMapping = new DirectCollectionMapping(); lines_accountsMapping.setAttributeName("lineAccounts"); lines_accountsMapping.dontUseIndirection(); lines_accountsMapping.useBatchReading(); lines_accountsMapping.useListClassName("java.util.ArrayList"); lines_accountsMapping.setReferenceTableName("LINE_ACCOUNT"); lines_accountsMapping.setDirectFieldName("LINE_ACCOUNT.LINE_ACCOUNT"); lines_accountsMapping.addReferenceKeyFieldName("LINE_ACCOUNT.COMPANY_ID", "lineAccounts->ID_IN_REFERENCE_LINE_ACCOUNT_COMPANY"); descriptor.addMapping(lines_accountsMapping); } VariableOneToOneMapping primaryContactMapping = new VariableOneToOneMapping(); primaryContactMapping.setAttributeName("primaryContact"); primaryContactMapping.setReferenceClassName(org.eclipse.persistence.tools.workbench.test.models.phone.Contact.class.getName()); primaryContactMapping.setIndirectionPolicy(new ProxyIndirectionPolicy()); primaryContactMapping.addForeignQueryKeyName("primaryContact->QUERY_KEY id", "id"); primaryContactMapping.setTypeFieldName("primaryContact->CLASS_INDICATOR_FIELD"); primaryContactMapping.addClassNameIndicator("org.eclipse.persistence.tools.workbench.test.models.phone.PhoneNumber", "P"); primaryContactMapping.addClassNameIndicator("org.eclipse.persistence.tools.workbench.test.models.phone.EmailAddress", "E"); descriptor.addMapping(primaryContactMapping); OneToOneMapping primaryContactPersonMapping = new OneToOneMapping(); primaryContactPersonMapping.setAttributeName("primaryContactPerson"); primaryContactPersonMapping.setReferenceClassName(org.eclipse.persistence.tools.workbench.test.models.phone.Person.class.getName()); primaryContactPersonMapping.dontUseIndirection(); primaryContactPersonMapping.addForeignKeyFieldName("primaryContactPerson->HEAD_ID_IN_REFERENCE_HOUSEHOLD_PERSON2", "PERSON.ID"); descriptor.addMapping(primaryContactPersonMapping); OneToManyMapping serviceCallsMapping = new OneToManyMapping(); serviceCallsMapping.setAttributeName("serviceCalls"); serviceCallsMapping.setReferenceClassName(org.eclipse.persistence.tools.workbench.test.models.phone.ServiceCall.class.getName()); serviceCallsMapping.privateOwnedRelationship(); serviceCallsMapping.setUsesIndirection(false); serviceCallsMapping.useListClassName("java.util.ArrayList"); serviceCallsMapping.addDescendingOrdering("id"); serviceCallsMapping.addTargetForeignKeyFieldName("SERVICE_CALL.SERVICE_USER_ID", "serviceCalls->ID_IN_REFERENCE_SERVICE_CALL_HOUSEHOLD"); descriptor.addMapping(serviceCallsMapping); if (!usesSharedAggregates) { ManyToManyMapping usersMapping = new ManyToManyMapping(); usersMapping.setAttributeName("users"); usersMapping.setReferenceClassName(org.eclipse.persistence.tools.workbench.test.models.phone.Person.class.getName()); usersMapping.setUsesIndirection(false); usersMapping.useListClassName("java.util.ArrayList"); usersMapping.setRelationTableName("COMPANY_PERSON"); usersMapping.addSourceRelationKeyFieldName("COMPANY_PERSON.COMPANY_ID", "users->ID_IN_REFERENCE_COMPANY_PERSON_COMPANY"); usersMapping.addTargetRelationKeyFieldName("COMPANY_PERSON.PERSON_ID", "PERSON.ID"); descriptor.addMapping(usersMapping); } return descriptor; } public RelationalDescriptor buildServiceableDescriptor() { RelationalDescriptor descriptor = new RelationalDescriptor(); descriptor.descriptorIsForInterface(); descriptor.setJavaClassName(org.eclipse.persistence.tools.workbench.test.models.phone.Serviceable.class.getName()); // Interface properties. // Descriptor properties. descriptor.setAlias("Serviceable"); descriptor.addAbstractQueryKey("id"); // Query manager. //Named Queries // Event manager. return descriptor; } public Project getRuntimeProject() { return this.runtimeProject; } }