package org.radrails.db.core;
import java.util.Collection;
import org.apache.derby.drda.NetworkServerControl;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
class DerbyStarter extends Job
{
private static boolean derbyStarted = false;
public DerbyStarter()
{
super("Checking if we need to start derby server");
setSystem(true);
setPriority(LONG);
}
@Override
protected IStatus run(IProgressMonitor monitor)
{
if (!shouldStartDerby())
return Status.CANCEL_STATUS;
start();
return Status.OK_STATUS;
}
private boolean shouldStartDerby()
{
Collection<ProjectDatabaseManager> managers = DatabaseManager.getInstance().getAllProjectDatabaseManagers();
for (ProjectDatabaseManager projectDatabaseManager : managers)
{
Collection<DatabaseDescriptor> descriptors = projectDatabaseManager.getDatabaseDescriptors();
for (DatabaseDescriptor databaseDescriptor : descriptors)
{
String db = databaseDescriptor.getAdapter();
if (db.equalsIgnoreCase(IDatabaseConstants.ADAPTER_JDBC))
{
String driver = databaseDescriptor.getDriver();
if (driver.equals("org.apache.derby.jdbc.ClientDriver"))
{
return true;
}
}
}
}
return false;
}
public static void start()
{
if (derbyStarted)
return;
try
{
NetworkServerControl server = new NetworkServerControl();
server.start(null);
derbyStarted = true;
}
catch (Exception e)
{
DatabaseLog.log(e);
}
}
}