blob: bc28f7ade819abe258f1f83393d45e4174f932ce [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
<<<<<<< Updated upstream
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
=======
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
>>>>>>> Stashed changes
* limitations under the License.
*/
package org.apache.jdo.tck.extents;
import java.lang.reflect.Constructor;
import java.math.BigDecimal;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.TimeZone;
import javax.jdo.Extent;
import javax.jdo.JDOFatalInternalException;
import javax.jdo.PersistenceManager;
import javax.jdo.PersistenceManagerFactory;
import org.apache.jdo.tck.JDO_Test;
import org.apache.jdo.tck.pc.company.Address;
import org.apache.jdo.tck.pc.company.Company;
import org.apache.jdo.tck.pc.company.DentalInsurance;
import org.apache.jdo.tck.pc.company.Department;
import org.apache.jdo.tck.pc.company.Employee;
import org.apache.jdo.tck.pc.company.FullTimeEmployee;
import org.apache.jdo.tck.pc.company.IEmployee;
import org.apache.jdo.tck.pc.company.IProject;
import org.apache.jdo.tck.pc.company.MedicalInsurance;
import org.apache.jdo.tck.pc.company.PartTimeEmployee;
import org.apache.jdo.tck.pc.company.Project;
/**
* @author Craig Russell
* @version 1.0
*/
abstract class ExtentTest extends JDO_Test {
protected Company company;
protected Object companyOID;
/**
* @see org.apache.jdo.tck.JDO_Test#localSetUp()
*/
@Override
protected void localSetUp() {
addTearDownClass(DentalInsurance.class);
addTearDownClass(MedicalInsurance.class);
addTearDownClass(Project.class);
addTearDownClass(FullTimeEmployee.class);
addTearDownClass(PartTimeEmployee.class);
addTearDownClass(Employee.class);
addTearDownClass(Department.class);
addTearDownClass(Company.class);
}
/** Creates new ExtentTest */
public ExtentTest() {
if (PMFProperties == null) {
PMFProperties = System.getProperty("user.home") + "/.jdo/PMFProperties.properties";
if (PMFProperties == null)
System.out.println(
"Please specify PMF properties in {user.home}/.jdo/PMFProperties.properties");
}
}
/** */
protected void checkPM() {
try {
// Don't use beginTransaction() because this calls getPM() which calls checkPM()!
pm.currentTransaction().begin();
Extent<Company> ex = getPM().getExtent(Company.class, false);
int count = countIterator(ex.iterator());
pm.currentTransaction().commit();
if (count == 1) {
if (debug) logger.debug("Found company");
return;
}
} catch (Exception e) {
e.printStackTrace(System.err);
System.err.println("Failed to find Company; initializing DB");
}
initDB();
}
/** */
protected void initDB() {
Set<IEmployee> h;
Address addr1 = new Address(7001L, "18 Network Circle", "Santa Clara", "CA", "94455", "USA");
company = new Company(1L, "Sun Microsystems", new Date(), addr1);
GregorianCalendar born = new GregorianCalendar(TimeZone.getTimeZone("America/Los_Angeles"));
GregorianCalendar hired = new GregorianCalendar(TimeZone.getTimeZone("America/Los_Angeles"));
born.set(1969, 7, 20);
hired.set(1982, 5, 5);
Address addr2 = new Address(7002L, "43 Sematery Drive", "Woodside", "CA", "94320", "USA");
Employee scott =
new FullTimeEmployee(
3001L, "Scott", "McNealy", "G", born.getTime(), addr2, hired.getTime(), 200000.0);
born.set(1960, 4, 8);
hired.set(1985, 2, 3);
Address addr3 = new Address(7003L, "1298 Wanderlust Road", "Pleasanton", "CA", "95560", "USA");
Employee ed =
new PartTimeEmployee(
3002L, "Ed", "Zander", null, born.getTime(), addr3, hired.getTime(), 400000.0);
scott.addToTeam(ed);
// Set up their departments.
Department board = new Department(2001L, "board", company);
h = new HashSet<>();
h.add(scott);
board.setEmployees(h);
scott.setDepartment(board);
company.addDepartment(board);
Department emg = new Department(2002L, "emg", company);
h = new HashSet<>();
h.add(ed);
emg.setEmployees(h);
ed.setDepartment(emg);
company.addDepartment(emg);
// Insure these guys
DentalInsurance scottDentalIns =
new DentalInsurance(5001L, "Aetna", scott, new BigDecimal("12000"));
MedicalInsurance scottMedicalIns = new MedicalInsurance(5002L, "Aetna", scott, "PPO");
DentalInsurance edDentalIns =
new DentalInsurance(5003L, "BlueCross", ed, new BigDecimal("10000"));
MedicalInsurance edMedicalIns = new MedicalInsurance(5004L, "BlueCross", ed, "EPO");
scott.setDentalInsurance(scottDentalIns);
scott.setMedicalInsurance(scottMedicalIns);
ed.setDentalInsurance(edDentalIns);
ed.setMedicalInsurance(edMedicalIns);
// Give them some projects to work on. Scott works on both; Ed only
// on one.
Project solaris = new Project(4001L, "Solaris", new BigDecimal(100.375));
Project sparc = new Project(4002L, "Sparc", new BigDecimal(200.500));
h = new HashSet<>();
h.add(scott);
h.add(ed);
solaris.setMembers(h); // Solaris is worked on by Scott and Ed
h = new HashSet<>();
h.add(scott);
sparc.setMembers(h); // Sparc is worked on by Scott
Set<IProject> p;
p = new HashSet<>();
p.add(solaris);
p.add(sparc);
scott.setProjects(p); // Scott works on Solaris and Sparc
p = new HashSet<>();
p.add(solaris);
ed.setProjects(p); // Ed works on Solaris
/* Now put all of these into the database
*/
pm.currentTransaction().begin();
pm.makePersistent(company);
pm.currentTransaction().commit();
}
/**
* @return new employee
*/
protected Employee addEmployee() {
Address addr1 = new Address(7004L, "456 Chelsey Lane", "Mountain View", "CA", "94040", "USA");
Employee emp1 =
new FullTimeEmployee(
3003L, "First3003", "Last3003", "Middle3003", new Date(), addr1, new Date(), 10000.0);
getPM().makePersistent(emp1);
return emp1;
}
/**
* @param e employee
*/
protected void deleteEmployee(Employee e) {
getPM().deletePersistent(e);
}
/**
* @param it iterator
* @return count
*/
protected int countIterator(Iterator<?> it) {
int count = 0;
for (; it.hasNext(); count++, it.next())
;
return count;
}
/**
* @param it iterator
* @return count
*/
protected int printIterator(Iterator<?> it) {
int count = 0;
for (; it.hasNext(); count++) {
System.out.println(it.next().toString());
}
return count;
}
/**
* @return extent
*/
protected Extent<Employee> getExtent() {
return getPM().getExtent(Employee.class, true);
}
/**
* @return OID
*/
protected Object getCompanyOID() {
String companyOIDString =
(String) PMFPropertiesObject.get("org.apache.jdo.tck.extents.CompanyOID");
String companyOIDClassName =
(String) PMFPropertiesObject.get("org.apache.jdo.tck.extents.CompanyOIDClass");
if (companyOIDClassName == null) {
companyOIDClassName = "org.apache.jdo.impl.fostore.OID";
}
try {
Class<?> companyOIDClass = Class.forName(companyOIDClassName);
Constructor<?> companyOIDConstructor = companyOIDClass.getConstructor(String.class);
Object companyOID = companyOIDConstructor.newInstance(companyOIDString);
return companyOID;
} catch (Exception ex) {
throw new JDOFatalInternalException(
"PMFProperties must be configured with the following properties\n"
+ "\torg.apache.jdo.tck.extents.CompanyOID = <string result of oid.toString()>\n"
+ "\torg.apache.jdo.tck.extents.CompanyOIDClass = <name of companyOID class>\n",
ex);
}
}
/**
* @return PersistenceManager
*/
@Override
protected PersistenceManager getPM() {
if (pm == null) {
pm = getPMF().getPersistenceManager();
checkPM();
}
return pm;
}
/**
* @return PersistenceManagerFactory
*/
@Override
public PersistenceManagerFactory getPMF() {
if (pmf == null) {
pmf = super.getPMF();
}
return pmf;
}
/** */
protected void beginTransaction() {
getPM().currentTransaction().begin();
}
/** */
protected void commitTransaction() {
getPM().currentTransaction().commit();
}
/** */
protected void rollbackTransaction() {
getPM().currentTransaction().rollback();
}
}