/******************************************************************************* * 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.Iterator; import org.eclipse.persistence.tools.workbench.mappingsmodel.db.MWTable; import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.MWCachingPolicy; import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.relational.MWAggregateDescriptor; import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.relational.MWRelationalClassIndicatorFieldPolicy; import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.relational.MWRelationalDescriptorInheritancePolicy; import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.relational.MWTableDescriptor; import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.relational.MWAggregateMapping; import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.relational.MWAggregatePathToColumn; import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.relational.MWManyToManyMapping; import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.relational.MWOneToManyMapping; import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.relational.MWOneToOneMapping; import org.eclipse.persistence.tools.workbench.mappingsmodel.meta.MWTypeDeclaration; import org.eclipse.persistence.tools.workbench.mappingsmodel.project.MWProject; import org.eclipse.persistence.tools.workbench.mappingsmodel.project.MWProjectDefaultsPolicy; import org.eclipse.persistence.tools.workbench.mappingsmodel.project.relational.MWRelationalProject; import org.eclipse.persistence.tools.workbench.mappingsmodel.query.MWQuery; import org.eclipse.persistence.tools.workbench.mappingsmodel.query.relational.MWAbstractRelationalReadQuery; import org.eclipse.persistence.tools.workbench.mappingsmodel.query.relational.MWRelationalQuery; import org.eclipse.persistence.tools.workbench.mappingsmodel.query.relational.MWRelationalReadQuery; import org.eclipse.persistence.tools.workbench.mappingsmodel.query.relational.MWStringQueryFormat; import org.eclipse.persistence.tools.workbench.utility.CollectionTools; import org.eclipse.persistence.tools.workbench.utility.TriStateBoolean; public class ComplexAggregateProject extends RelationalTestProject{ public ComplexAggregateProject() { super(); } public static MWRelationalProject emptyProject() { MWRelationalProject project = new MWRelationalProject("ComplexAggregate", spiManager(), mySqlPlatform()); // project defaults policy MWProjectDefaultsPolicy pdp = project.getDefaultsPolicy(); pdp.getCachingPolicy().setExistenceChecking(MWCachingPolicy.EXISTENCE_CHECKING_CHECK_DATABASE); pdp.getCachingPolicy().setCacheSize(405); pdp.getCachingPolicy().setCacheType(MWCachingPolicy.CACHE_TYPE_FULL); pdp.setMethodAccessing(false); return project; } @Override protected MWProject buildEmptyProject() { return emptyProject(); } public MWTableDescriptor getAddressDescriptor() { return (MWTableDescriptor) getProject().descriptorForTypeNamed("org.eclipse.persistence.tools.workbench.test.models.complexaggregate.Address"); } public MWAggregateDescriptor getAddressDescriptionDescriptor() { return (MWAggregateDescriptor) getProject().descriptorForTypeNamed("org.eclipse.persistence.tools.workbench.test.models.complexaggregate.AddressDescription"); } public MWTableDescriptor getClientDescriptor() { return (MWTableDescriptor) getProject().descriptorForTypeNamed("org.eclipse.persistence.tools.workbench.test.models.complexaggregate.Client"); } public MWTableDescriptor getComputerDescriptor() { return (MWTableDescriptor) getProject().descriptorForTypeNamed("org.eclipse.persistence.tools.workbench.test.models.complexaggregate.Computer"); } protected Integer getDefaultQueryTimeout() { return MWQuery.QUERY_TIMEOUT_UNDEFINED; } protected String getDefaultQueryLockMode() { return MWQuery.DEFAULT_LOCK_MODE; } public MWTableDescriptor getEmployeeDescriptor() { return (MWTableDescriptor) getProject().descriptorForTypeNamed("org.eclipse.persistence.tools.workbench.test.models.complexaggregate.Employee"); } public MWTableDescriptor getEvaluationClientDescriptor() { return (MWTableDescriptor) getProject().descriptorForTypeNamed("org.eclipse.persistence.tools.workbench.test.models.complexaggregate.EvaluationClient"); } public MWTableDescriptor getLanguageDescriptor() { return (MWTableDescriptor) getProject().descriptorForTypeNamed("org.eclipse.persistence.tools.workbench.test.models.complexaggregate.Language"); } public MWAggregateDescriptor getPeriodDescriptor() { return (MWAggregateDescriptor) getProject().descriptorForTypeNamed("org.eclipse.persistence.tools.workbench.test.models.complexaggregate.Period"); } public MWAggregateDescriptor getPeriodDescriptionDescriptor() { return (MWAggregateDescriptor) getProject().descriptorForTypeNamed("org.eclipse.persistence.tools.workbench.test.models.complexaggregate.PeriodDescription"); } public MWAggregateDescriptor getProjectDescriptionDescriptor() { return (MWAggregateDescriptor) getProject().descriptorForTypeNamed("org.eclipse.persistence.tools.workbench.test.models.complexaggregate.ProjectDescription"); } public MWTableDescriptor getResponsibilityDescriptor() { return (MWTableDescriptor) getProject().descriptorForTypeNamed("org.eclipse.persistence.tools.workbench.test.models.complexaggregate.Responsibility"); } protected void initializeAddressDescriptionDescriptor() { MWAggregateDescriptor addressDescriptionDescriptor = getAddressDescriptionDescriptor(); addressDescriptionDescriptor.addQueryKey("id", null); //one-to-one mapping MWOneToOneMapping addressMapping = addressDescriptionDescriptor.addOneToOneMapping(addressDescriptionDescriptor.getMWClass().attributeNamed("address")); addressMapping.setPrivateOwned(true); addressMapping.setReferenceDescriptor(getAddressDescriptor()); addressMapping.setReference(tableNamed("AGG_EMP").referenceNamed("AGG_EMP_AGG_ADD")); //aggregateMapping MWAggregateMapping periodDescriptionMapping = addressDescriptionDescriptor.addAggregateMapping(addressDescriptionDescriptor.getMWClass().attributeNamed("periodDescription")); periodDescriptionMapping.setAllowsNull(true); periodDescriptionMapping.setUsesMethodAccessing(true); periodDescriptionMapping.setReferenceDescriptor(getPeriodDescriptionDescriptor()); } protected void initializeAddressDescriptor() { MWTableDescriptor descriptor = getAddressDescriptor(); MWTable table = tableNamed("AGG_ADD"); descriptor.setPrimaryTable(table); //sequencing policy descriptor.setUsesSequencing(true); descriptor.setSequenceNumberName("SEQ"); descriptor.setSequenceNumberTable(table); descriptor.setSequenceNumberColumn(table.columnNamed("ID")); //caching policy descriptor.getCachingPolicy().setCacheType(MWCachingPolicy.CACHE_TYPE_FULL); descriptor.getCachingPolicy().setExistenceChecking(MWCachingPolicy.EXISTENCE_CHECKING_ASSUME_NON_EXISTENCE); descriptor.getCachingPolicy().setCacheSize(100); // Direct to field mappings addDirectMapping(descriptor, "id", table, "ID"); addDirectMapping(descriptor, "address", table, "ADDRESS"); } public void initializeAggAddTable() { MWTable table = database().addTable("AGG_ADD"); addField(table, "ADDRESS", "varchar", 30); addPrimaryKeyField(table, "ID", "decimal", 15); } public void initializeAggClntTable() { MWTable table = database().addTable("AGG_CLNT"); addField(table, "CL_ADD", "decimal", 15); addField(table, "CL_EDATE", "date"); addPrimaryKeyField(table, "CL_ID", "decimal", 15); addField(table, "CL_NAME", "varchar", 20); addField(table, "CL_SDATE", "date"); addField(table, "TYPE", "varchar", 20); } public void initializeAggComTable() { MWTable table = database().addTable("AGG_COM"); addField(table, "DESCRIP", "varchar", 30); addPrimaryKeyField(table, "ID", "decimal",15); } public void initializeAggEcntTable() { MWTable table = database().addTable("AGG_ECNT"); addPrimaryKeyField(table, "CL_ID", "decimal", 15); addField(table, "EV_EDATE", "date"); addField(table, "EV_SDATE", "date"); } public void initializeAggEmpTable() { MWTable table = database().addTable("AGG_EMP"); addField(table, "COMP_ID", "decimal",15); addPrimaryKeyField(table, "EM_ADD", "varchar",20); addField(table, "EM_EDATE", "date"); addField(table, "EM_FNAME", "varchar",20); addPrimaryKeyField(table, "EM_ID", "decimal", 15); addField(table, "EM_LNAME", "varchar",20); addField(table, "EM_PDESC", "varchar",100); addField(table, "EM_SDATE", "date"); } public void initializeAggLanTable() { MWTable table = database().addTable("AGG_LAN"); addPrimaryKeyField(table, "ID", "decimal", 15); addField(table, "LANGUAGE", "varchar", 30); } public void initializeAggResTable() { MWTable table = database().addTable("AGG_RES"); addField(table, "DUTY", "varchar", 30); addField(table, "EMP_ID", "decimal", 15); addPrimaryKeyField(table, "ID", "decimal", 15); } protected void initializeClientDescriptor() { MWTableDescriptor descriptor = getClientDescriptor(); MWTable table = tableNamed("AGG_CLNT"); descriptor.setPrimaryTable(table); descriptor.getTransactionalPolicy().setReadOnly(true); //queries MWAbstractRelationalReadQuery query = (MWAbstractRelationalReadQuery) descriptor.getQueryManager().addReadObjectQuery("query1"); query.setQueryFormatType(MWRelationalQuery.EJBQL_FORMAT); ((MWStringQueryFormat) query.getQueryFormat()).setQueryString("foo"); query.setBindAllParameters(TriStateBoolean.FALSE); query.setCacheStatement(TriStateBoolean.FALSE); query.setCacheUsage(MWRelationalReadQuery.CHECK_CACHE_BY_PRIMARY_KEY); query.addParameter(typeFor(java.lang.String.class)); query.setQueryTimeout(getDefaultQueryTimeout()); query.setLocking(getDefaultQueryLockMode()); query = (MWAbstractRelationalReadQuery) descriptor.getQueryManager().addReadAllQuery("query2"); query.setQueryFormatType(MWRelationalQuery.EJBQL_FORMAT); query.addParameter(typeFor(org.eclipse.persistence.sessions.DatabaseLogin.class)); query.addParameter(typeFor(java.lang.String.class)); query.setCacheStatement(new TriStateBoolean(true)); query.setBindAllParameters(new TriStateBoolean(true)); query.setMaintainCache(true); query.setRefreshIdentityMapResult(true); query.setCacheUsage(MWRelationalReadQuery.DO_NOT_CHECK_CACHE); query.setLocking(MWQuery.LOCK); ((MWStringQueryFormat) query.getQueryFormat()).setQueryString("2"); query.setQueryTimeout(getDefaultQueryTimeout()); query = (MWAbstractRelationalReadQuery)descriptor.getQueryManager().addReadObjectQuery("query3"); query.setQueryFormatType(MWRelationalQuery.EJBQL_FORMAT); query.setCacheStatement(new TriStateBoolean(true)); query.setBindAllParameters(new TriStateBoolean(true)); query.setMaintainCache(false); query.setRefreshIdentityMapResult(false); query.setCacheUsage(MWRelationalReadQuery.CHECK_CACHE_BY_EXACT_PRIMARY_KEY); ((MWStringQueryFormat) query.getQueryFormat()).setQueryString("3"); query.setQueryTimeout(getDefaultQueryTimeout()); query.setLocking(getDefaultQueryLockMode()); query = (MWAbstractRelationalReadQuery)descriptor.getQueryManager().addReadAllQuery("query4"); query.setQueryFormatType(MWRelationalQuery.SQL_FORMAT); query.setCacheStatement(new TriStateBoolean(false)); query.setBindAllParameters(new TriStateBoolean(true)); query.setMaintainCache(true); query.setRefreshIdentityMapResult(true); query.setCacheUsage(MWRelationalReadQuery.CHECK_CACHE_THEN_DATABASE); query.setLocking(MWQuery.LOCK); ((MWStringQueryFormat) query.getQueryFormat()).setQueryString("yo"); query.setQueryTimeout(getDefaultQueryTimeout()); query = (MWAbstractRelationalReadQuery)descriptor.getQueryManager().addReadAllQuery("query5"); query.setQueryFormatType(MWRelationalQuery.EJBQL_FORMAT); query.setCacheStatement(new TriStateBoolean(false)); query.setBindAllParameters(new TriStateBoolean(true)); query.setMaintainCache(true); query.setRefreshIdentityMapResult(false); query.setCacheUsage(MWRelationalReadQuery.CHECK_CACHE_ONLY); ((MWStringQueryFormat) query.getQueryFormat()).setQueryString("hi"); query.setQueryTimeout(getDefaultQueryTimeout()); query.setLocking(getDefaultQueryLockMode()); query = (MWAbstractRelationalReadQuery)descriptor.getQueryManager().addReadObjectQuery("query6"); query.setQueryFormatType(MWRelationalQuery.SQL_FORMAT); query.setCacheStatement(new TriStateBoolean(true)); query.setBindAllParameters(new TriStateBoolean(false)); query.setMaintainCache(false); query.setRefreshIdentityMapResult(true); query.setCacheUsage(MWRelationalReadQuery.CONFORM_RESULTS_IN_UNIT_OF_WORK); query.setLocking(MWQuery.LOCK_NOWAIT); ((MWStringQueryFormat) query.getQueryFormat()).setQueryString("blah qwerty"); query.setQueryTimeout(getDefaultQueryTimeout()); //custom sql descriptor.getRelationalQueryManager().setInsertSQLString("an insert"); descriptor.getRelationalQueryManager().setUpdateSQLString("an update"); descriptor.getRelationalQueryManager().setDeleteSQLString("an update"); descriptor.getRelationalQueryManager().setReadObjectSQLString("read the object"); descriptor.getRelationalQueryManager().setReadAllSQLString("read everything"); //sequencing policy descriptor.setUsesSequencing(true); descriptor.setSequenceNumberName("SEQ"); descriptor.setSequenceNumberTable(table); descriptor.setSequenceNumberColumn(table.columnNamed("CL_ID")); //caching policy descriptor.getCachingPolicy().setCacheType(MWCachingPolicy.CACHE_TYPE_FULL); descriptor.getCachingPolicy().setExistenceChecking(MWCachingPolicy.EXISTENCE_CHECKING_ASSUME_NON_EXISTENCE); descriptor.getCachingPolicy().setCacheSize(100); //inheritance policy descriptor.addInheritancePolicy(); MWRelationalDescriptorInheritancePolicy inheritancePolicy = (MWRelationalDescriptorInheritancePolicy)descriptor.getInheritancePolicy(); MWRelationalClassIndicatorFieldPolicy indicatorPolicy = (MWRelationalClassIndicatorFieldPolicy)inheritancePolicy.getClassIndicatorPolicy(); inheritancePolicy.setReadSubclassesOnQuery(false); indicatorPolicy.setField(table.columnNamed("TYPE")); indicatorPolicy.setIndicatorType(new MWTypeDeclaration(indicatorPolicy, typeFor(java.lang.String.class))); indicatorPolicy.getClassIndicatorValueForDescriptor(getClientDescriptor()).setInclude(true); indicatorPolicy.getClassIndicatorValueForDescriptor(getClientDescriptor()).setIndicatorValue("Client"); indicatorPolicy.getClassIndicatorValueForDescriptor(getEvaluationClientDescriptor()).setInclude(true); indicatorPolicy.getClassIndicatorValueForDescriptor(getEvaluationClientDescriptor()).setIndicatorValue("Eval"); // Direct to field mappings addDirectMapping(descriptor, "name", table, "CL_NAME"); addDirectMapping(descriptor, "id", table, "CL_ID"); //aggregateMapping MWAggregateMapping addressDescriptionMapping = descriptor.addAggregateMapping(descriptor.getMWClass().attributeNamed("addressDescription")); addressDescriptionMapping.setReferenceDescriptor(getAddressDescriptionDescriptor()); Iterator fieldAssociations = CollectionTools.sort(addressDescriptionMapping.pathsToFields()).iterator(); String[] fieldNames = new String[] {"CL_ADD", "CL_EDATE", "CL_SDATE", "CL_ID"}; for(int i=0; i<fieldNames.length; i++) { MWAggregatePathToColumn association = (MWAggregatePathToColumn) fieldAssociations.next(); association.setColumn(table.columnNamed(fieldNames[i])); } } protected void initializeComputerDescriptor() { MWTableDescriptor descriptor = getComputerDescriptor(); MWTable table = tableNamed("AGG_COM"); descriptor.setPrimaryTable(table); //sequencing policy descriptor.setUsesSequencing(true); descriptor.setSequenceNumberName("SEQ"); descriptor.setSequenceNumberTable(table); descriptor.setSequenceNumberColumn(table.columnNamed("ID")); //caching policy descriptor.getCachingPolicy().setCacheType(MWCachingPolicy.CACHE_TYPE_FULL); descriptor.getCachingPolicy().setExistenceChecking(MWCachingPolicy.EXISTENCE_CHECKING_ASSUME_NON_EXISTENCE); descriptor.getCachingPolicy().setCacheSize(100); // Direct to field mappings addDirectMapping(descriptor, "description", table, "DESCRIP"); addDirectMapping(descriptor, "id", table, "ID"); } @Override protected void initializeDatabase() { super.initializeDatabase(); this.initializeAggAddTable(); this.initializeAggClntTable(); this.initializeAggComTable(); this.initializeAggEcntTable(); this.initializeAggEmpTable(); this.initializeAggLanTable(); this.initializeAggResTable(); this.initializeEmpLanTable(); this.initializeSequenceTable(); this.initializeTableReferences(); } @Override protected void initializeDescriptors() { super.initializeDescriptors(); this.addDescriptorForTypeNamed("org.eclipse.persistence.tools.workbench.test.models.complexaggregate.Address"); this.addDescriptorForTypeNamed("org.eclipse.persistence.tools.workbench.test.models.complexaggregate.Client"); this.addDescriptorForTypeNamed("org.eclipse.persistence.tools.workbench.test.models.complexaggregate.Computer"); this.addDescriptorForTypeNamed("org.eclipse.persistence.tools.workbench.test.models.complexaggregate.Employee"); this.addDescriptorForTypeNamed("org.eclipse.persistence.tools.workbench.test.models.complexaggregate.EvaluationClient"); this.addDescriptorForTypeNamed("org.eclipse.persistence.tools.workbench.test.models.complexaggregate.Language"); this.addDescriptorForTypeNamed("org.eclipse.persistence.tools.workbench.test.models.complexaggregate.Responsibility"); this.addAggregateDescriptorForTypeNamed("org.eclipse.persistence.tools.workbench.test.models.complexaggregate.AddressDescription"); this.addAggregateDescriptorForTypeNamed("org.eclipse.persistence.tools.workbench.test.models.complexaggregate.Period"); this.addAggregateDescriptorForTypeNamed("org.eclipse.persistence.tools.workbench.test.models.complexaggregate.PeriodDescription"); this.addAggregateDescriptorForTypeNamed("org.eclipse.persistence.tools.workbench.test.models.complexaggregate.ProjectDescription"); initializeAddressDescriptor(); initializePeriodDescriptor(); initializePeriodDescriptionDescriptor(); initializeAddressDescriptionDescriptor(); initializeProjectDescriptionDescriptor(); initializeEvaluationClientDescriptor(); initializeClientDescriptor(); initializeComputerDescriptor(); initializeEmployeeDescriptor(); initializeLanguageDescriptor(); initializeResponsibilityDescriptor(); } public void initializeEmpLanTable() { MWTable table = database().addTable("EMP_LAN"); addPrimaryKeyField(table, "EMP_ID", "integer"); addPrimaryKeyField(table, "LAN_ID", "integer"); } protected void initializeEmployeeDescriptor() { MWTableDescriptor descriptor = getEmployeeDescriptor(); MWTable table = tableNamed("AGG_EMP"); descriptor.setPrimaryTable(table); descriptor.addQueryKey("id", table.columnNamed("EM_ID")); //sequencing policy descriptor.setUsesSequencing(true); descriptor.setSequenceNumberName("SEQ"); descriptor.setSequenceNumberTable(table); descriptor.setSequenceNumberColumn(table.columnNamed("EM_ID")); //caching policy descriptor.getCachingPolicy().setCacheType(MWCachingPolicy.CACHE_TYPE_FULL); descriptor.getCachingPolicy().setExistenceChecking(MWCachingPolicy.EXISTENCE_CHECKING_ASSUME_NON_EXISTENCE); descriptor.getCachingPolicy().setCacheSize(100); // Direct to field mappings addDirectMapping(descriptor, "firstName", table, "EM_FNAME"); addDirectMapping(descriptor, "lastName", table, "EM_LNAME"); //aggregate mappings MWAggregateMapping addressDescriptionMapping = descriptor.addAggregateMapping(descriptor.getMWClass().attributeNamed("addressDescription")); addressDescriptionMapping.setReferenceDescriptor(getAddressDescriptionDescriptor()); addressDescriptionMapping.setUsesMethodAccessing(true); Iterator fieldAssociations = CollectionTools.sort(addressDescriptionMapping.pathsToFields()).iterator(); String [] fieldNames = new String[] {"EM_ADD", "EM_EDATE", "EM_SDATE", "EM_ID"}; for(int i=0; i<fieldNames.length; i++) { MWAggregatePathToColumn association = (MWAggregatePathToColumn) fieldAssociations.next(); association.setColumn(table.columnNamed(fieldNames[i])); } MWAggregateMapping projectDescriptionMapping = descriptor.addAggregateMapping(descriptor.getMWClass().attributeNamed("projectDescription")); projectDescriptionMapping.setReferenceDescriptor(getProjectDescriptionDescriptor()); projectDescriptionMapping.setUsesMethodAccessing(true); fieldAssociations = CollectionTools.sort(projectDescriptionMapping.pathsToFields()).iterator(); fieldNames = new String[] {"COMP_ID", "EM_PDESC", "EM_ID", "EM_ID", "EM_ID"}; for(int i=0; i<fieldNames.length; i++) { MWAggregatePathToColumn association = (MWAggregatePathToColumn) fieldAssociations.next(); association.setColumn(table.columnNamed(fieldNames[i])); } } protected void initializeEvaluationClientDescriptor() { MWTableDescriptor descriptor = getEvaluationClientDescriptor(); MWTable table = tableNamed("AGG_ECNT"); descriptor.setPrimaryTable(table); descriptor.getCachingPolicy().setExistenceChecking(MWCachingPolicy.EXISTENCE_CHECKING_ASSUME_NON_EXISTENCE); //inheritance policy descriptor.addInheritancePolicy(); MWRelationalDescriptorInheritancePolicy inheritancePolicy = (MWRelationalDescriptorInheritancePolicy)descriptor.getInheritancePolicy(); inheritancePolicy.setParentDescriptor(getClientDescriptor()); MWAggregateMapping evaluationPeriodMapping = descriptor.addAggregateMapping(descriptor.getMWClass().attributeNamed("evaluationPeriod")); evaluationPeriodMapping.setReferenceDescriptor(getPeriodDescriptor()); Iterator pathsToFields = CollectionTools.sort(evaluationPeriodMapping.pathsToFields()).iterator(); String[] fieldNames = new String[] {"EV_EDATE", "EV_SDATE"}; for(int i=0; i<fieldNames.length; i++) { MWAggregatePathToColumn association = (MWAggregatePathToColumn) pathsToFields.next(); association.setColumn(table.columnNamed(fieldNames[i])); } } protected void initializeLanguageDescriptor() { MWTableDescriptor descriptor = getLanguageDescriptor(); MWTable table = tableNamed("AGG_LAN"); descriptor.setPrimaryTable(table); //sequencing policy descriptor.setUsesSequencing(true); descriptor.setSequenceNumberName("SEQ"); descriptor.setSequenceNumberTable(table); descriptor.setSequenceNumberColumn(table.columnNamed("ID")); //caching policy descriptor.getCachingPolicy().setCacheType(MWCachingPolicy.CACHE_TYPE_FULL); descriptor.getCachingPolicy().setExistenceChecking(MWCachingPolicy.EXISTENCE_CHECKING_ASSUME_NON_EXISTENCE); descriptor.getCachingPolicy().setCacheSize(100); // Direct to field mappings addDirectMapping(descriptor, "id", table, "ID"); addDirectMapping(descriptor, "language", table, "LANGUAGE"); } public void initializePeriodDescriptor() { MWAggregateDescriptor periodDescriptor = getPeriodDescriptor(); addDirectMapping(periodDescriptor, "endDate"); addDirectMapping(periodDescriptor, "startDate"); } public void initializePeriodDescriptionDescriptor() { MWAggregateDescriptor periodDescriptionDescriptor = getPeriodDescriptionDescriptor(); MWAggregateMapping mapping = periodDescriptionDescriptor.addAggregateMapping(periodDescriptionDescriptor.getMWClass().attributeNamed("period")); mapping.setUsesMethodAccessing(true); mapping.setReferenceDescriptor(getPeriodDescriptor()); } public void initializeProjectDescriptionDescriptor() { MWAggregateDescriptor projectDescriptionDescriptor = getProjectDescriptionDescriptor(); //direct to field mapping addDirectMapping(projectDescriptionDescriptor, "description"); addDirectMapping(projectDescriptionDescriptor, "id"); //one-to-one mapping MWOneToOneMapping computerMapping = projectDescriptionDescriptor.addOneToOneMapping(projectDescriptionDescriptor.getMWClass().attributeNamed("computer")); computerMapping.setPrivateOwned(true); computerMapping.setReferenceDescriptor(getComputerDescriptor()); computerMapping.setReference(tableNamed("AGG_EMP").referenceNamed("AGG_EMP_AGG_COM")); //many-to-many mapping MWManyToManyMapping languagesMapping = projectDescriptionDescriptor.addManyToManyMapping(projectDescriptionDescriptor.getMWClass().attributeNamed("languages")); languagesMapping.setReferenceDescriptor(getLanguageDescriptor()); MWTable relationTable = tableNamed("EMP_LAN"); languagesMapping.setRelationTable(relationTable); languagesMapping.setSourceReference(relationTable.referenceNamed("EMP_LAN_AGG_EMP")); languagesMapping.setTargetReference(relationTable.referenceNamed("EMP_LAN_AGG_LAN")); //one-to-many mapping MWOneToManyMapping responsibilitiesMapping = projectDescriptionDescriptor.addOneToManyMapping(projectDescriptionDescriptor.getMWClass().attributeNamed("responsibilities")); responsibilitiesMapping.setReferenceDescriptor(getResponsibilityDescriptor()); responsibilitiesMapping.setReference(tableNamed("AGG_RES").referenceNamed("AGG_RES_AGG_EMP")); responsibilitiesMapping.setPrivateOwned(true); } protected void initializeResponsibilityDescriptor() { MWTableDescriptor descriptor = getResponsibilityDescriptor(); MWTable table = tableNamed("AGG_RES"); descriptor.setPrimaryTable(table); //sequencing policy descriptor.setUsesSequencing(true); descriptor.setSequenceNumberName("SEQ"); descriptor.setSequenceNumberTable(table); descriptor.setSequenceNumberColumn(table.columnNamed("ID")); //caching policy descriptor.getCachingPolicy().setCacheType(MWCachingPolicy.CACHE_TYPE_FULL); descriptor.getCachingPolicy().setExistenceChecking(MWCachingPolicy.EXISTENCE_CHECKING_ASSUME_NON_EXISTENCE); descriptor.getCachingPolicy().setCacheSize(100); //direct to field mappings addDirectMapping(descriptor, "id", table, "ID"); addDirectMapping(descriptor, "responsibility", table, "DUTY"); // //one-to-one mapping MWOneToOneMapping computerMapping = descriptor.addOneToOneMapping(descriptor.getMWClass().attributeNamed("employee")); computerMapping.setReferenceDescriptor(getEmployeeDescriptor()); computerMapping.setReference(table.referenceNamed("AGG_RES_AGG_EMP")); } public void initializeTableReferences() { //create references MWTable aggResTable = tableNamed("AGG_RES"); MWTable aggEmpTable = tableNamed("AGG_EMP"); MWTable aggLanTable = tableNamed("AGG_LAN"); MWTable empLanTable = tableNamed("EMP_LAN"); MWTable aggAddTable = tableNamed("AGG_ADD"); MWTable aggComTable = tableNamed("AGG_COM"); addReferenceOnDB("AGG_RES_AGG_EMP", aggResTable, aggEmpTable, "EMP_ID", "EM_ID"); addReferenceOnDB("EMP_LAN_AGG_EMP", empLanTable, aggEmpTable, "EMP_ID", "EM_ID"); addReferenceOnDB("EMP_LAN_AGG_LAN", empLanTable, aggLanTable, "LAN_ID", "ID"); addReferenceOnDB("AGG_EMP_AGG_ADD", aggEmpTable, aggAddTable, "EM_ADD", "ID"); addReferenceOnDB("AGG_EMP_AGG_COM", aggEmpTable, aggComTable, "COMP_ID", "ID"); } }