package oracle.otnsamples.ibfbs.admin.helper;
import java.util.ArrayList;
import java.util.Collection;
import oracle.toplink.tools.sessionmanagement.SessionManager;
import oracle.toplink.sessions.DatabaseSession;
import oracle.toplink.sessions.UnitOfWork;
import oracle.toplink.tools.sessionconfiguration.XMLLoader;
import oracle.toplink.threetier.ServerSession;
import oracle.toplink.threetier.ClientSession;
import oracle.toplink.exceptions.DatabaseException;
import oracle.toplink.tools.schemaframework.SchemaManager;
import oracle.otnsamples.ibfbs.toplink.News;
public class DataPopulator {
private ServerSession server = null;
public DataPopulator() {
}
private void initServerSession()
throws DatabaseException {
try {
server = (ServerSession) SessionManager.getManager().getSession(new XMLLoader(),
"FBSServerSession",
Thread.currentThread().getContextClassLoader());
} catch(DatabaseException dbEx) {
System.err.println(" Fatal Error : Could not connect to database, check "+
" if you have provided proper values in "+
"<SAMPLE_HOME>/config/META-INF/data-sources.xml !!" );
System.err.println(" Detailed Error : "+dbEx.toString());
throw dbEx;
}
}
public void populateSampleData()
throws DatabaseException {
this.initServerSession();
SchemaManager schemaManager = new SchemaManager((DatabaseSession) server);
if(!isDataLoaded()) {
schemaManager.createObject(SampleData.getExchangeTableDefn());
schemaManager.createObject(SampleData.getSymbolTableDefn());
schemaManager.createObject(SampleData.getNewsTableDefn());
schemaManager.createObject(SampleData.getStockrateTableDefn());
schemaManager.createObject(SampleData.getOracleSequenceDefn("NEWS_SEQ",50,50));
schemaManager.createObject(SampleData.getOracleSequenceDefn("PORTFOLIO_SEQ",1,1));
schemaManager.createObject(SampleData.getOracleSequenceDefn("ALERTS_SEQ",1,1));
schemaManager.createObject(SampleData.getOracleSequenceDefn("ACCOUNTNUMBER_SEQ",1,1));
schemaManager.createObject(SampleData.getOracleSequenceDefn("TRADE_SEQ",1,1));
schemaManager.createObject(SampleData.getOracleSequenceDefn("PREFERENCES_SEQ",1,1));
populateData();
}
}
private boolean isDataLoaded() {
boolean loaded = false;
try {
Object obj = server.readObject(News.class);
if(obj != null) {
loaded=true;
}
} catch(Exception ex) {
loaded = false;
}
return loaded;
}
private void populateData()
throws DatabaseException {
Collection data = new ArrayList();
data.addAll(SampleData.populateExchange());
data.addAll(SampleData.populateSymbol());
data.addAll(SampleData.populateStockRate());
data.addAll(SampleData.populateStockNews());
ClientSession client = server.acquireClientSession();
UnitOfWork unitOfWork = client.acquireUnitOfWork();
unitOfWork.registerAllObjects(data);
unitOfWork.commit();
}
}