package com.farata.cleardatabuilder.extjs.facet.sample;
import java.io.File;
import java.util.Properties;
import java.util.Set;
import org.eclipse.wst.common.project.facet.core.IFacetedProject.Action.Type;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.datatools.connectivity.ConnectionProfileException;
import org.eclipse.datatools.connectivity.IConnectionProfile;
import org.eclipse.datatools.connectivity.ProfileManager;
import org.eclipse.jpt.jpa.core.JptJpaCorePlugin;
import org.eclipse.wst.common.project.facet.core.IDelegate;
import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
import org.eclipse.wst.common.project.facet.ui.IWizardContext;
import com.farata.cleardatabuilder.extjs.Activator;
import com.farata.cleardatabuilder.extjs.facet.common.CommonInstallConfig;
import com.farata.cleardatabuilder.extjs.util.Commons;
import com.farata.cleardatabuilder.extjs.util.Util;
public class SampleInstallDelegate implements IDelegate{
private SampleInstallConfig config;
private CommonInstallConfig commonInstallConfig;
private static final String CLEARDB_PROFILE = "HSQLClearDB";
@Override
public void execute(IProject project, IProjectFacetVersion projectFacetVersion, Object context,
IProgressMonitor monitor) throws CoreException {
extractConfigurations(project, projectFacetVersion,
(SampleInstallConfig) context, monitor);
try {
if (config.isHibernateSample() || config.isMybatisSample()) {
unpackSampleDB(config.getSampleDBInstallFolder(), monitor);
createDBConnection(project, config.getSampleDBInstallFolder());
}
JptJpaCorePlugin.setJpaPlatformId(project, "generic");
JptJpaCorePlugin.setDiscoverAnnotatedClasses(project, false);
} catch (Exception e) {
e.printStackTrace();
}
}
private void extractConfigurations(IProject project,
IProjectFacetVersion projectFacetVersion,
SampleInstallConfig config, IProgressMonitor progressMonitor)
throws CoreException {
this.config = config;
IWizardContext wizardContext = config.getWizardContext();
Set<?> projectFacets = wizardContext.getSelectedProjectFacets();
for (Object oProjectFacet : projectFacets) {
if (oProjectFacet instanceof IProjectFacetVersion) {
Object conf = wizardContext.getConfig((IProjectFacetVersion) oProjectFacet, Type.INSTALL, "");
if (conf instanceof CommonInstallConfig) {
commonInstallConfig = (CommonInstallConfig) conf;
break;
}
}
}
}
public static void unpackSampleDB(File installationFolder,
IProgressMonitor monitor) {
File clearDBZip;
try {
clearDBZip = Commons.getBundleEntry(Activator.getDefault()
.getBundle(), "resources/SampleDB/cleardb.zip");
Util.unpack(installationFolder.toString(), clearDBZip.toString(),
Util.OVERRIDE_ALWAYS);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public static void createDBConnection(IProject project, File sampleDBInstallFolder)
throws ConnectionProfileException, CoreException {
Properties baseProperties = new Properties();
baseProperties.setProperty(
"org.eclipse.datatools.connectivity.db.savePWD", "true");
baseProperties.setProperty(
"org.eclipse.datatools.connectivity.drivers.defnType",
"org.eclipse.datatools.enablement.hsqldb.1_8.driver");
baseProperties.setProperty("jarList", new File(sampleDBInstallFolder,
"hsqldb.jar").getAbsolutePath());
baseProperties.setProperty(
"org.eclipse.datatools.connectivity.db.username", "sa");
baseProperties.setProperty(
"org.eclipse.datatools.connectivity.db.driverClass",
"org.hsqldb.jdbcDriver");
baseProperties.setProperty(
"org.eclipse.datatools.connectivity.db.databaseName",
"cleardb");
baseProperties
.setProperty(
"org.eclipse.datatools.connectivity.driverDefinitionID",
"DriverDefn.org.eclipse.datatools.enablement.hsqldb.1_8.driver.HSQLDB JDBC Driver");
baseProperties.setProperty(
"org.eclipse.datatools.connectivity.db.version", "1.8");
baseProperties.setProperty("org.eclipse.datatools.connectivity.db.URL",
"jdbc:hsqldb:hsql://localhost:9002/cleardb");
baseProperties.setProperty(
"org.eclipse.datatools.connectivity.db.vendor", "HSQLDB");
ProfileManager profileManager = ProfileManager.getInstance();
IConnectionProfile profile = profileManager
.getProfileByName(CLEARDB_PROFILE);
if (profile != null) {
//profileManager.deleteProfile(profile);
}
try {
if (profile == null) {
profileManager.createProfile(CLEARDB_PROFILE, "",
"org.eclipse.datatools.enablement.hsqldb.connectionProfile",
baseProperties, null, false);
}
}catch(Throwable th) {}
JptJpaCorePlugin.setConnectionProfileName(project, CLEARDB_PROFILE);
// JpaProject jpaProject = CommonInstallDelegate.waitForJpaProject(project);
// JpaDataSource ds = jpaProject.getDataSource();
// ds.setConnectionProfileName(CLEARDB_PROFILE);
}
}