blob: 98a8312cc6ea8e55cbe885cc9f5c365b8a3a5fa4 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 1998, 2013 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.framework;
import java.util.*;
import org.eclipse.persistence.sessions.*;
import org.eclipse.persistence.logging.SessionLog;
import org.eclipse.persistence.queries.*;
/**
* <b>Purpose</b>: Provide write/read load builds functionalities<p>
* <b>Description</b>:<p>
* <b>Responsibilities</b>:<ul>
* <li>
* </ul>
* @author Steven Vo
*/
public class LoadBuildSystem {
public static LoadBuildSummary loadBuild = new LoadBuildSummary();
public static LoadBuildSystem system;
private DatabaseSession session;
public static LoadBuildSummary getSummary() {
return loadBuild;
}
public static LoadBuildSystem getSystem() {
if (system == null) {
system = new LoadBuildSystem();
system.login();
}
return system;
}
public static void main(String[] args) {
LoadBuildSystem system = new LoadBuildSystem();
system.login();
//Don't run this!
//**system.dropTables();**
//**system.createTables();**
//system.populateSampleData();
system.logout();
}
public LoadBuildSystem() {
session = new LoadBuildProject().createDatabaseSession();
}
public DatabaseSession getSession() {
return session;
}
/**
*
* @return boolean
*/
public boolean isConnected() {
return session.isConnected();
}
public void login() {
session.getLogin().useNativeSQL();
session.getLogin().useBatchWriting();
session.getLogin().bindAllParameters();
session.getLogin().cacheAllStatements();
session.getLogin().setMaxBatchWritingSize(50);
session.dontLogMessages();
//session.logMessages();
session.login();
}
public void dropTables() {
try {
session.executeNonSelectingCall(new SQLCall("drop table RESULT"));
session.executeNonSelectingCall(new SQLCall("drop table SUMMARY"));
session.executeNonSelectingCall(new SQLCall("drop table LOADBUILD"));
session.executeNonSelectingCall(new SQLCall("drop sequence result_seq"));
session.executeNonSelectingCall(new SQLCall("drop sequence RESULTSUM_SEQ"));
} catch (Exception ignore) {}
}
public void createTables() {
session.executeNonSelectingCall(new SQLCall("Create table LOADBUILD (id number(10), lbtimestamp date, lberrors number(10), fatalErrors number(10), loginChoice varchar2(100), os varchar2(100), toplink_version varchar(100), jvm varchar2(100), machine varchar2(100), numberOfTests number(10), lbuserName varchar2(50), primary key (id))"));
session.executeNonSelectingCall(new SQLCall("Create table RESULT (id number(10), description varchar2(2000), exception varchar2(2000), name varchar2(1000), outcome varchar2(100), test_time number(10), total_time number(10), summaryId number(10), lbuildId number(10), primary key (id))"));
session.executeNonSelectingCall(new SQLCall("Create table SUMMARY (id number(10), description varchar2(2000), setup_failures number(10), errors number(10), fatalErrors number(10), name varchar2(1000), passed number(10), problems number(10), setupException varchar2(2000), total_time number(10), totalTests number(10), warnings number(10), lbuildId number(10), parentId number(10), primary key (id))"));
if (session.getPlatform().supportsUniqueKeyConstraints()
&& !session.getPlatform().requiresUniqueConstraintCreationOnTableCreate()) {
session.executeNonSelectingCall(new SQLCall("ALTER TABLE RESULT ADD CONSTRAINT FK_RESULT_summaryId FOREIGN KEY (summaryId) REFERENCES SUMMARY (id)"));
session.executeNonSelectingCall(new SQLCall("ALTER TABLE RESULT ADD CONSTRAINT FK_RESULT_lbuildId FOREIGN KEY (lbuildId) REFERENCES LOADBUILD (id)"));
session.executeNonSelectingCall(new SQLCall("ALTER TABLE SUMMARY ADD CONSTRAINT FK_LOADBUILD_lbuildId FOREIGN KEY (lbuildId) REFERENCES LOADBUILD (id)"));
session.executeNonSelectingCall(new SQLCall("ALTER TABLE SUMMARY ADD CONSTRAINT FK_LOADBUILD_parentId FOREIGN KEY (parentId) REFERENCES SUMMARY (id)"));
}
session.executeNonSelectingCall(new SQLCall(session.getPlatform().buildCreateIndex("LOADBUILD", "IX_LOADBUILD_lbtimestamp", null, false, "lbtimestamp")));
session.executeNonSelectingCall(new SQLCall(session.getPlatform().buildCreateIndex("LOADBUILD", "IX_LOADBUILD_loginChoice", null, false, "loginChoice")));
session.executeNonSelectingCall(new SQLCall(session.getPlatform().buildCreateIndex("LOADBUILD", "IX_LOADBUILD_toplink_version", null, false, "toplink_version")));
session.executeNonSelectingCall(new SQLCall(session.getPlatform().buildCreateIndex("LOADBUILD", "IX_LOADBUILD_machine", null, false, "machine")));
session.executeNonSelectingCall(new SQLCall(session.getPlatform().buildCreateIndex("LOADBUILD", "IX_LOADBUILD_lbuserName", null, false, "lbuserName")));
session.executeNonSelectingCall(new SQLCall(session.getPlatform().buildCreateIndex("RESULT", "IX_RESULT_name", null, false, "name")));
session.executeNonSelectingCall(new SQLCall(session.getPlatform().buildCreateIndex("RESULT", "IX_RESULT_summaryId", null, false, "summaryId")));
session.executeNonSelectingCall(new SQLCall(session.getPlatform().buildCreateIndex("RESULT", "IX_RESULT_lbuildId", null, false, "lbuildId")));
session.executeNonSelectingCall(new SQLCall(session.getPlatform().buildCreateIndex("SUMMARY", "IX_SUMMARY_lbuildId", null, false, "lbuildId")));
session.executeNonSelectingCall(new SQLCall(session.getPlatform().buildCreateIndex("SUMMARY", "IX_SUMMARY_name", null, false, "name")));
session.executeNonSelectingCall(new SQLCall(session.getPlatform().buildCreateIndex("SUMMARY", "IX_SUMMARY_parentId", null, false, "parentId")));
session.executeNonSelectingCall(new SQLCall("create sequence result_seq increment by 500 start with 1000"));
session.executeNonSelectingCall(new SQLCall("create sequence RESULTSUM_SEQ increment by 500 start with 1000"));
}
public void logout() {
session.logout();
}
public void populateSampleData() {
ReadAllQuery query = new ReadAllQuery(LoadBuildSummary.class);
query.addBatchReadAttribute("results");
query.addBatchReadAttribute("summaries");
query.addBatchReadAttribute(query.getExpressionBuilder().get("summaries").get("results"));
List list = (List)session.executeQuery(query);
Iterator summaries = list.iterator();
System.out.println("Size: " + list.size());
UnitOfWork uow = session.acquireUnitOfWork();
while (summaries.hasNext()) {
LoadBuildSummary summary = (LoadBuildSummary)summaries.next();
for (Iterator iterator = summary.getSummaries().iterator(); iterator.hasNext(); ) {
((TestResultsSummary)iterator.next()).getResults();
}
//for (int index = 0; index < 10; index++) {
CopyGroup group = new CopyGroup();
group.setShouldResetPrimaryKey(true);
LoadBuildSummary summaryCopy = (LoadBuildSummary)session.copy(summary, group);
summaryCopy.id = 0;
uow.registerObject(summaryCopy);
//}
}
uow.commit();
list = session.readAllObjects(LoadBuildSummary.class);
System.out.println("Size: " + list.size());
}
public void populate() {
if (loadBuild == null) {
return;
}
UnitOfWork uow = session.acquireUnitOfWork();
loadBuild.timestamp = new java.sql.Timestamp(System.currentTimeMillis());
loadBuild.initializeLoadBuild();
loadBuild.computeNumberOfTestsAndErrors();
uow.registerObject(loadBuild);
uow.commit();
}
/**
* Read all the test summaries, join the load build result.
*/
public Vector readAllTestModelSummaries(org.eclipse.persistence.expressions.Expression expression) {
ReadAllQuery query = new ReadAllQuery(TestResultsSummary.class, expression);
query.addAscendingOrdering("name");
query.addOrdering(query.getExpressionBuilder().get("loadBuildSummary").get("timestamp").ascending());
query.addJoinedAttribute("loadBuildSummary");
return (Vector)session.executeQuery(query);
}
/**
* Read all the tests, join the load build result.
*/
public Vector readAllTests(org.eclipse.persistence.expressions.Expression expression) {
ReadAllQuery query = new ReadAllQuery(TestResult.class, expression);
query.addAscendingOrdering("name");
query.addOrdering(query.getExpressionBuilder().get("loadBuildSummary").get("timestamp").ascending());
query.addJoinedAttribute("loadBuildSummary");
return (Vector)session.executeQuery(query);
}
/**
* Save load build and log messages toSsystem.Out
*/
public void saveLoadBuild() {
boolean success = true;
try {
login();
populate();
} catch (Exception e) {
System.out.println("Error occurred during saving of test results to database.");
e.printStackTrace();
System.out.println("Saving of test results failed.");
success = false;
}
if (success) {
System.out.println("Saving of test results successful.");
}
loadBuild = new LoadBuildSummary();
logout();
}
/**
* Save load build and log messages to a writer
*/
public void saveLoadBuild(java.io.Writer log) {
try {
session.setLogLevel(SessionLog.FINE);
session.setLog(log);
login();
populate();
} catch (Exception e) {
e.printStackTrace(System.out);
}
loadBuild = new LoadBuildSummary();
logout();
}
}