blob: 6323073f1dd904d45314477e3c81e86d93fe258e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 1998, 2017 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.testing.models.insurance;
import org.eclipse.persistence.exceptions.*;
import org.eclipse.persistence.sessions.*;
import org.eclipse.persistence.descriptors.ClassDescriptor;
import org.eclipse.persistence.logging.SessionLog;
import org.eclipse.persistence.queries.*;
import org.eclipse.persistence.testing.framework.*;
import org.eclipse.persistence.tools.schemaframework.*;
/**
* <b>Purpose</b>: To define system behavior.
* <p><b>Responsibilities</b>: <ul>
* <li> Login and return an initialize database session.
* <li> Create and populate the database.
* </ul>
*/
public class InsuranceSystem extends TestSystem {
/**
* Recreate the insurance database.
*/
public void createTables(DatabaseSession session) {
if (!SchemaManager.FAST_TABLE_CREATOR) {
try {
if (session.getPlatform().isMySQL()) {
session.executeNonSelectingCall(new SQLCall("SET foreign_key_checks = 0"));
}
session.executeNonSelectingCall(new SQLCall("drop table CHILDNAM"));
session.executeNonSelectingCall(new SQLCall("drop table INS_ADDR"));
session.executeNonSelectingCall(new SQLCall("drop table INS_PHONE"));
session.executeNonSelectingCall(new SQLCall("drop table VHCL_POL"));
session.executeNonSelectingCall(new SQLCall("drop table VHCL_CLM"));
session.executeNonSelectingCall(new SQLCall("drop table CLAIM"));
session.executeNonSelectingCall(new SQLCall("drop table POLICY"));
session.executeNonSelectingCall(new SQLCall("drop table HOLDER"));
} catch (Exception e) {
session.getSessionLog().logThrowable(SessionLog.WARNING, e);
} finally {
if (session.getPlatform().isMySQL()) {
session.executeNonSelectingCall(new SQLCall("SET foreign_key_checks = 1"));
}
}
}
new InsuranceTableCreator().replaceTables(session);
}
/**
* Modify the PHONE descriptor so that it knows it's an aggregate collection
*/
public static void modifyPhoneDescriptor(ClassDescriptor descriptor) {
descriptor.descriptorIsAggregateCollection();
}
/**
* Modify the POLICYHOLDER descriptor so that it contains an aggregate collection mappping for 'phones'
*/
public static void modifyPolicyHolderDescriptor(ClassDescriptor descriptor) {
org.eclipse.persistence.mappings.AggregateCollectionMapping aggregatecollectionmapping = new org.eclipse.persistence.mappings.AggregateCollectionMapping();
aggregatecollectionmapping.setAttributeName("phones");
aggregatecollectionmapping.setIsReadOnly(false);
aggregatecollectionmapping.setUsesIndirection(false);
aggregatecollectionmapping.setGetMethodName("getPhones");
aggregatecollectionmapping.setSetMethodName("setPhones");
aggregatecollectionmapping.setIsPrivateOwned(true);
aggregatecollectionmapping.setReferenceClass(Phone.class);
aggregatecollectionmapping.addTargetForeignKeyFieldName("INS_PHONE.HOLDER_SSN", "HOLDER.SSN");
descriptor.addMapping(aggregatecollectionmapping);
}
/**
* Populate the database with example instance of the domain using session.
*/
public void populate(DatabaseSession session) throws DatabaseException {
UnitOfWork unitOfWork = session.acquireUnitOfWork();
PolicyHolder example;
example = PolicyHolder.example1();
PopulationManager.getDefaultManager().registerObject(example, "example1");
unitOfWork.registerObject(example);
example = PolicyHolder.example2();
PopulationManager.getDefaultManager().registerObject(example, "example2");
unitOfWork.registerObject(example);
example = PolicyHolder.example3();
PopulationManager.getDefaultManager().registerObject(example, "example3");
unitOfWork.registerObject(example);
example = PolicyHolder.example4();
PopulationManager.getDefaultManager().registerObject(example, "example4");
unitOfWork.registerObject(example);
unitOfWork.commit();
}
public void addDescriptors(DatabaseSession session) {
if (project == null) {
project = new InsuranceProject();
}
session.addDescriptors(project);
}
}