blob: 6ac42a173091d5c038db9a1abf0576878b7adb03 [file] [log] [blame]
/*
* Copyright (c) 1998, 2020 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 v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.testing.models.insurance.objectrelational;
import java.util.*;
import org.eclipse.persistence.testing.models.insurance.*;
import org.eclipse.persistence.mappings.*;
import org.eclipse.persistence.mappings.converters.*;
import org.eclipse.persistence.mappings.structures.*;
import org.eclipse.persistence.descriptors.*;
import org.eclipse.persistence.tools.schemaframework.*;
/**
* This project is provided to demonstate the usage of TopLink's object-relational features.
*/
public class InsuranceProject extends org.eclipse.persistence.sessions.Project {
public InsuranceProject() {
addDescriptor(buildAddressDescriptor());
addDescriptor(buildClaimDescriptor());
addDescriptor(buildHealthClaimDescriptor());
addDescriptor(buildHealthPolicyDescriptor());
addDescriptor(buildHouseClaimDescriptor());
addDescriptor(buildHousePolicyDescriptor());
addDescriptor(buildPhoneDescriptor());
addDescriptor(buildPolicyDescriptor());
addDescriptor(buildPolicyHolderDescriptor());
addDescriptor(buildVehicleClaimDescriptor());
addDescriptor(buildVehiclePolicyDescriptor());
addDescriptor(buildBicyclePolicyDescriptor());
}
/**
* Return the address descriptor.
*/
public static ClassDescriptor buildAddressDescriptor() {
ObjectRelationalDataTypeDescriptor descriptor = new ObjectRelationalDataTypeDescriptor();
descriptor.setJavaClass(Address.class);
descriptor.descriptorIsAggregate();
descriptor.setStructureName("ADDRESS_TYPE");
descriptor.addDirectMapping("street", "getStreet", "setStreet", "STREET");
descriptor.addDirectMapping("city", "getCity", "setCity", "CITY");
descriptor.addDirectMapping("state", "getState", "setState", "STATE");
descriptor.addDirectMapping("country", "getCountry", "setCountry", "COUNTRY");
descriptor.addDirectMapping("zipCode", "getZipCode", "setZipCode", "ZIPCODE");
descriptor.setShouldOrderMappings(false);
return descriptor;
}
public static TypeDefinition buildAddressTypeDefinition() {
TypeDefinition definition = new TypeDefinition();
definition.setName("Address_type");
definition.addField("street", String.class, 30);
definition.addField("city", String.class, 25);
definition.addField("state", String.class, 2);
definition.addField("country", String.class, 20);
definition.addField("zipCode", String.class, 10);
return definition;
}
/**
* Return the claim descriptor.
* This descriptor is a root descriptor.
*/
public static ClassDescriptor buildClaimDescriptor() {
ObjectRelationalDataTypeDescriptor descriptor = new ObjectRelationalDataTypeDescriptor();
descriptor.setJavaClass(Claim.class);
descriptor.setTableName("Claims");
descriptor.setPrimaryKeyFieldName("ID");
descriptor.setStructureName("CLAIM_TYPE");
descriptor.addFieldOrdering("ID");
descriptor.addFieldOrdering("POLICYREF");
descriptor.addFieldOrdering("TYPE");
descriptor.addFieldOrdering("AMOUNT");
descriptor.addFieldOrdering("DISEASE");
descriptor.addFieldOrdering("PART");
descriptor.addFieldOrdering("PARTDESCRIPTION");
descriptor.getDescriptorInheritancePolicy().addClassIndicator(HouseClaim.class, "H");
descriptor.getDescriptorInheritancePolicy().addClassIndicator(HealthClaim.class, "E");
descriptor.getDescriptorInheritancePolicy().addClassIndicator(VehicleClaim.class, "V");
descriptor.getDescriptorInheritancePolicy().setClassIndicatorFieldName("TYPE");
descriptor.addDirectMapping("id", "getId", "setId", "ID");
descriptor.addDirectMapping("amount", "getAmount", "setAmount", "AMOUNT");
ReferenceMapping policyMapping = new ReferenceMapping();
policyMapping.setAttributeName("policy");
policyMapping.setGetMethodName("getPolicy");
policyMapping.setSetMethodName("setPolicy");
policyMapping.setReferenceClass(Policy.class);
policyMapping.setFieldName("POLICYREF");
policyMapping.dontUseIndirection();
descriptor.addMapping(policyMapping);
return descriptor;
}
public static NestedTableDefinition buildClaimsTypeDefinition() {
NestedTableDefinition definition = new NestedTableDefinition();
definition.setName("Claims_type");
definition.setTypeName("Ref Claim_type");
return definition;
}
public static TypeTableDefinition buildClaimTableDefinition() {
TypeTableDefinition definition = new TypeTableDefinition();
definition.setName("Claims");
definition.setTypeName("Claim_type");
definition.addPrimaryKeyField("id", Long.class);
definition.addForeignKeyConstraint("Claim_PolicyRef_FKey", "policyRef", "id", "Policies");
return definition;
}
public static TypeDefinition buildClaimTypeDefinition() {
TypeDefinition definition = new TypeDefinition();
definition.setName("Claim_type");
definition.addField("id", Long.class);
definition.addField("policyRef", "Ref Policy_type");
definition.addField("type", Character.class);
definition.addField("amount", Float.class);
definition.addField("disease", String.class, 50);
definition.addField("area", Float.class);
definition.addField("part", String.class, 30);
definition.addField("partDescription", String.class, 2000);
return definition;
}
/**
* Return the health claim descriptor.
* This descriptor inherits from the claim descriptor.
*/
public static ClassDescriptor buildHealthClaimDescriptor() {
ObjectRelationalDataTypeDescriptor descriptor = new ObjectRelationalDataTypeDescriptor();
descriptor.setJavaClass(HealthClaim.class);
descriptor.getDescriptorInheritancePolicy().setParentClass(Claim.class);
descriptor.addDirectMapping("disease", "getDisease", "setDisease", "DISEASE");
return descriptor;
}
/**
* Return the health policy descriptor.
* This descriptor inherits from the policy descriptor.
*/
public static ClassDescriptor buildHealthPolicyDescriptor() {
ObjectRelationalDataTypeDescriptor descriptor = new ObjectRelationalDataTypeDescriptor();
descriptor.setJavaClass(HealthPolicy.class);
descriptor.getDescriptorInheritancePolicy().setParentClass(Policy.class);
descriptor.addDirectMapping("coverageRate", "getCoverageRate", "setCoverageRate", "COVERAGERATE");
return descriptor;
}
/**
* Return the house claim descriptor.
* This descriptor inherits from the claim descriptor.
*/
public static ClassDescriptor buildHouseClaimDescriptor() {
ObjectRelationalDataTypeDescriptor descriptor = new ObjectRelationalDataTypeDescriptor();
descriptor.setJavaClass(HouseClaim.class);
descriptor.getDescriptorInheritancePolicy().setParentClass(Claim.class);
descriptor.addDirectMapping("area", "getArea", "setArea", "AREA");
return descriptor;
}
/**
* Return the house policy descriptor.
* This descriptor inherits from the policy descriptor.
*/
public static ClassDescriptor buildHousePolicyDescriptor() {
ObjectRelationalDataTypeDescriptor descriptor = new ObjectRelationalDataTypeDescriptor();
descriptor.setJavaClass(HousePolicy.class);
descriptor.getDescriptorInheritancePolicy().setParentClass(Policy.class);
descriptor.addDirectMapping("dateOfConstruction", "getDateOfConstruction", "setDateOfConstruction",
"DATEOFCONSTRUCTION");
return descriptor;
}
public static VarrayDefinition buildNameListTypeDefinition() {
VarrayDefinition definition = new VarrayDefinition();
definition.setName("NameList_type");
definition.setSize(20);
definition.setType(String.class);
definition.setTypeSize(30);
return definition;
}
/**
* Return the phone device descriptor.
*/
public static ClassDescriptor buildPhoneDescriptor() {
ObjectRelationalDataTypeDescriptor descriptor = new ObjectRelationalDataTypeDescriptor();
// SECTION: DESCRIPTOR
descriptor.setJavaClass(Phone.class);
Vector vector = new Vector();
vector.addElement("PolicyHolders");
descriptor.setTableNames(vector);
// SECTION: PROPERTIES
descriptor.descriptorIsAggregate();
descriptor.setStructureName("PHONE_TYPE");
descriptor.addFieldOrdering("PHONETYPE");
descriptor.addFieldOrdering("AREACODE");
descriptor.addFieldOrdering("PHONENUMBER");
descriptor.addDirectMapping("type", "getType", "setType", "PHONETYPE");
descriptor.addDirectMapping("areaCode", "getAreaCode", "setAreaCode", "AREACODE");
descriptor.addDirectMapping("number", "getNumber", "setNumber", "PHONENUMBER");
return descriptor;
}
public static ObjectVarrayDefinition buildPhoneListTypeDefinition() {
ObjectVarrayDefinition definition = new ObjectVarrayDefinition();
definition.setName("PhoneList_type");
definition.setSize(20);
definition.setType(Phone.class);
definition.setTypeName("Phone_type");
definition.setIsNullAllowed(true);
return definition;
}
public static TypeDefinition buildPhoneTypeDefinition() {
TypeDefinition definition = new TypeDefinition();
definition.setName("Phone_type");
definition.addField("type", String.class);
definition.addField("areaCode", Long.class, 3);
definition.addField("phoneNumber", Long.class, 7);
return definition;
}
public static NestedTableDefinition buildPoliciesTypeDefinition() {
NestedTableDefinition definition = new NestedTableDefinition();
definition.setName("Policies_type");
definition.setTypeName("Ref Policy_type");
return definition;
}
/**
* Return the policy descriptor.
* This descriptor is a root descriptor.
*/
public static ClassDescriptor buildPolicyDescriptor() {
ObjectRelationalDataTypeDescriptor descriptor = new ObjectRelationalDataTypeDescriptor();
descriptor.setJavaClass(Policy.class);
descriptor.setTableName("Policies");
descriptor.setPrimaryKeyFieldName("ID");
descriptor.setStructureName("POLICY_TYPE");
descriptor.addFieldOrdering("ID");
descriptor.addFieldOrdering("POLICYHOLDERREF");
descriptor.addFieldOrdering("DESCRIPTION");
descriptor.addFieldOrdering("TYPE");
descriptor.addFieldOrdering("MAXCOVERAGE");
descriptor.addFieldOrdering("COVERAGERATE");
descriptor.addFieldOrdering("DATEOFCONSTRUCTION");
descriptor.addFieldOrdering("MODEL");
descriptor.addFieldOrdering("COLOR");
descriptor.getDescriptorInheritancePolicy().addClassIndicator(HousePolicy.class, "H");
descriptor.getDescriptorInheritancePolicy().addClassIndicator(HealthPolicy.class, "E");
descriptor.getDescriptorInheritancePolicy().addClassIndicator(VehiclePolicy.class, "V");
descriptor.getDescriptorInheritancePolicy().addClassIndicator(BicyclePolicy.class, "B");
descriptor.getDescriptorInheritancePolicy().setClassIndicatorFieldName("TYPE");
descriptor.addDirectMapping("policyNumber", "getPolicyNumber", "setPolicyNumber", "ID");
descriptor.addDirectMapping("description", "getDescription", "setDescription", "DESCRIPTION");
descriptor.addDirectMapping("maxCoverage", "getMaxCoverage", "setMaxCoverage", "MAXCOVERAGE");
ReferenceMapping holderMapping = new ReferenceMapping();
holderMapping.setAttributeName("policyHolder");
holderMapping.setGetMethodName("getPolicyHolder");
holderMapping.setSetMethodName("setPolicyHolder");
holderMapping.setReferenceClass(PolicyHolder.class);
holderMapping.setFieldName("POLICYHOLDERREF");
holderMapping.dontUseIndirection();
descriptor.addMapping(holderMapping);
NestedTableMapping claimMapping = new NestedTableMapping();
claimMapping.setAttributeName("claims");
claimMapping.setGetMethodName("getClaims");
claimMapping.setSetMethodName("setClaims");
claimMapping.setReferenceClass(Claim.class);
claimMapping.dontUseIndirection();
claimMapping.setStructureName("CLAIMS_TYPE");
claimMapping.setFieldName("CLAIMS");
claimMapping.privateOwnedRelationship();
claimMapping.setSelectionSQLString("select c.* from policies p, table(p.claims) t, claims c where p.id=#ID and ref(c) = value(t)");
descriptor.addMapping(claimMapping);
return descriptor;
}
/**
* Return the policy holder descriptor.
*/
public static ClassDescriptor buildPolicyHolderDescriptor() {
ObjectRelationalDataTypeDescriptor descriptor = new ObjectRelationalDataTypeDescriptor();
descriptor.setJavaClass(PolicyHolder.class);
descriptor.setTableName("PolicyHolders");
descriptor.setPrimaryKeyFieldName("SSN");
descriptor.setStructureName("POLICYHOLDER_TYPE");
descriptor.addFieldOrdering("SSN");
descriptor.addFieldOrdering("FIRSTNAME");
descriptor.addFieldOrdering("LASTNAME");
descriptor.addFieldOrdering("SEX");
descriptor.addFieldOrdering("BIRTHDATE");
descriptor.addFieldOrdering("OCCUPATION");
descriptor.addFieldOrdering("ADDRESS");
descriptor.addFieldOrdering("CHILDRENNAMES");
descriptor.addFieldOrdering("PHONEDEVICES");
descriptor.addFieldOrdering("POLICY_NESTED_T");
descriptor.addDirectMapping("ssn", "getSsn", "setSsn", "SSN");
descriptor.addDirectMapping("firstName", "getFirstName", "setFirstName", "FIRSTNAME");
descriptor.addDirectMapping("lastName", "getLastName", "setLastName", "LASTNAME");
descriptor.addDirectMapping("birthDate", "getBirthDate", "setBirthDate", "BIRTHDATE");
descriptor.addDirectMapping("occupation", "getOccupation", "setOccupation", "OCCUPATION");
DirectToFieldMapping typeMapping = new DirectToFieldMapping();
typeMapping.setAttributeName("sex");
typeMapping.setGetMethodName("getSex");
typeMapping.setSetMethodName("setSex");
typeMapping.setFieldName("SEX");
ObjectTypeConverter typeConverter = new ObjectTypeConverter();
typeConverter.addConversionValue("M", "Male");
typeConverter.addConversionValue("F", "Female");
typeMapping.setConverter(typeConverter);
descriptor.addMapping(typeMapping);
StructureMapping mapping = new StructureMapping();
mapping.setAttributeName("address");
mapping.setGetMethodName("getAddress");
mapping.setSetMethodName("setAddress");
mapping.setReferenceClass(Address.class);
mapping.setFieldName("ADDRESS");
descriptor.addMapping(mapping);
ArrayMapping childrenNamesMapping = new ArrayMapping();
childrenNamesMapping.setAttributeName("childrenNames");
childrenNamesMapping.setGetMethodName("getChildrenNames");
childrenNamesMapping.setSetMethodName("setChildrenNames");
childrenNamesMapping.setStructureName("NAMELIST_TYPE");
childrenNamesMapping.setFieldName("CHILDRENNAMES");
descriptor.addMapping(childrenNamesMapping);
ObjectArrayMapping phoneDevicesMapping = new ObjectArrayMapping();
phoneDevicesMapping.setAttributeName("phones");
phoneDevicesMapping.setGetMethodName("getPhones");
phoneDevicesMapping.setSetMethodName("setPhones");
phoneDevicesMapping.setStructureName("PHONELIST_TYPE");
phoneDevicesMapping.setReferenceClass(Phone.class);
phoneDevicesMapping.setFieldName("PHONES");
descriptor.addMapping(phoneDevicesMapping);
NestedTableMapping policiesMapping = new NestedTableMapping();
policiesMapping.setAttributeName("policies");
policiesMapping.setGetMethodName("getPolicies");
policiesMapping.setSetMethodName("setPolicies");
policiesMapping.setReferenceClass(Policy.class);
policiesMapping.dontUseIndirection();
policiesMapping.setStructureName("POLICIES_TYPE");
policiesMapping.setFieldName("POLICIES");
policiesMapping.privateOwnedRelationship();
policiesMapping.setSelectionSQLString("select p.* from policyHolders ph, table(ph.policies) t, policies p where ph.ssn=#SSN and ref(p) = value(t)");
descriptor.addMapping(policiesMapping);
return descriptor;
}
public static TableDefinition buildPolicyHolderPoliciesTableDefinition() {
TableDefinition definition = new TableDefinition();
definition.setName("PolicyHolders_Policies");
definition.addPrimaryKeyField("PolicyHolder_ssn", Long.class);
definition.addPrimaryKeyField("Policy_id", Long.class);
return definition;
}
public static TypeTableDefinition buildPolicyHolderTableDefinition() {
TypeTableDefinition definition = new TypeTableDefinition();
definition.setName("PolicyHolders");
definition.setTypeName("PolicyHolder_type");
definition.setAdditional(" NESTED TABLE policies STORE AS POLICY_HOLDER_T"); //ugly code
definition.addPrimaryKeyField("ssn", Long.class);
return definition;
}
public static TypeDefinition buildPolicyHolderTypeDefinition() {
TypeDefinition definition = new TypeDefinition();
definition.setName("PolicyHolder_type");
definition.addField("ssn", Long.class);
definition.addField("firstName", String.class, 20);
definition.addField("lastName", String.class, 20);
definition.addField("sex", Character.class);
definition.addField("birthDate", java.sql.Date.class);
definition.addField("occupation", String.class, 20);
definition.addField("address", "Address_type");
definition.addField("childrenNames", "NameList_type");
definition.addField("policies", "Policies_type");
definition.addField("phones", "PhoneList_type");
return definition;
}
public static TypeTableDefinition buildPolicyTableDefinition() {
TypeTableDefinition definition = new TypeTableDefinition();
definition.setName("Policies");
definition.setTypeName("Policy_type");
definition.setAdditional(" NESTED TABLE claims STORE AS CLAIMS_T"); //ugly code
definition.addPrimaryKeyField("id", Long.class);
definition.addForeignKeyConstraint("Policy_PolicyHolder_FKey", "policyHolderRef", "ssn", "PolicyHolders");
return definition;
}
public static TypeDefinition buildPolicyTypeDefinition() {
TypeDefinition definition = new TypeDefinition();
definition.setName("Policy_type");
definition.addField("id", Long.class);
definition.addField("policyHolderRef", "Ref PolicyHolder_type");
definition.addField("description", String.class, 100);
definition.addField("type", Character.class);
definition.addField("maxCoverage", Float.class, 12, 2);
definition.addField("coverageRate", Float.class, 4, 2);
definition.addField("dateOfConstruction", java.sql.Date.class);
definition.addField("model", String.class, 20);
definition.addField("color", String.class, 20);
definition.addField("claims", "Claims_type");
return definition;
}
/**
* Return the vehicle claim descriptor.
* This descriptor inherits from the claim descriptor.
*/
public static ClassDescriptor buildVehicleClaimDescriptor() {
ObjectRelationalDataTypeDescriptor descriptor = new ObjectRelationalDataTypeDescriptor();
descriptor.setJavaClass(VehicleClaim.class);
descriptor.getDescriptorInheritancePolicy().setParentClass(Claim.class);
descriptor.addDirectMapping("part", "getPart", "setPart", "PART");
return descriptor;
}
/**
* Return the vehicle policy descriptor.
* This descriptor inherits from the policy descriptor.
*/
public static ClassDescriptor buildVehiclePolicyDescriptor() {
ObjectRelationalDataTypeDescriptor descriptor = new ObjectRelationalDataTypeDescriptor();
descriptor.setJavaClass(VehiclePolicy.class);
descriptor.getDescriptorInheritancePolicy().setParentClass(Policy.class);
descriptor.addDirectMapping("model", "getModel", "setModel", "MODEL");
return descriptor;
}
/**
* Return the bicycle policy descriptor.
* This descriptor inherits from the vehicle policy descriptor.
*/
public static ClassDescriptor buildBicyclePolicyDescriptor() {
ObjectRelationalDataTypeDescriptor descriptor = new ObjectRelationalDataTypeDescriptor();
descriptor.setJavaClass(BicyclePolicy.class);
descriptor.getDescriptorInheritancePolicy().setParentClass(VehiclePolicy.class);
descriptor.addDirectMapping("color", "getColor", "setColor", "COLOR");
return descriptor;
}
/**
* Return all of the descriptors required.
*/
public static Vector getAllDescriptors() {
Vector descriptors = new Vector();
descriptors.addElement(buildClaimDescriptor());
descriptors.addElement(buildHealthClaimDescriptor());
descriptors.addElement(buildHouseClaimDescriptor());
descriptors.addElement(buildVehicleClaimDescriptor());
descriptors.addElement(buildPolicyDescriptor());
descriptors.addElement(buildHealthPolicyDescriptor());
descriptors.addElement(buildHousePolicyDescriptor());
descriptors.addElement(buildVehiclePolicyDescriptor());
descriptors.addElement(buildBicyclePolicyDescriptor());
descriptors.addElement(buildPolicyHolderDescriptor());
descriptors.addElement(buildAddressDescriptor());
descriptors.addElement(buildPhoneDescriptor());
return descriptors;
}
/**
* Return all of the tables.
*/
public Vector getTables() {
Vector tables = new Vector();
tables.addElement(buildClaimTableDefinition());
tables.addElement(buildPolicyTableDefinition());
tables.addElement(buildPolicyHolderTableDefinition());
return tables;
}
/**
* Return all of the types.
*/
public Vector getTypes() {
Vector types = new Vector();
types.addElement(buildPhoneTypeDefinition());
types.addElement(buildPhoneListTypeDefinition());
types.addElement(buildNameListTypeDefinition());
types.addElement(buildClaimTypeDefinition());
types.addElement(buildClaimsTypeDefinition());
types.addElement(buildPolicyTypeDefinition());
types.addElement(buildPoliciesTypeDefinition());
types.addElement(buildAddressTypeDefinition());
types.addElement(buildPolicyHolderTypeDefinition());
return types;
}
}