/*
* Copyright 2012-2014 Aerospike, Inc.
*
* Portions may be licensed to Aerospike, Inc. under one or more contributor
* license agreements.
*
* Licensed 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 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 limitations under
* the License.
*/
package com.aerospike.project.wizards;
import java.lang.reflect.InvocationTargetException;
import java.net.URL;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ide.IDE;
import org.stringtemplate.v4.ST;
import org.stringtemplate.v4.STGroup;
import org.stringtemplate.v4.STGroupFile;
import com.aerospike.core.CoreActivator;
import com.aerospike.core.preferences.PreferenceConstants;
public class NewAerospikeProjectWizardJava extends NewAerospikeProjectWizard {
/**
* Constructor for NewAerospikeProjectWizard.
*/
public NewAerospikeProjectWizardJava() {
super();
this.language = language.JAVA;
}
protected boolean generateProject(){
URL url = this.getClass().getResource("java_project.stg");
final STGroup projectSTG = new STGroupFile(url.getPath());
final String projectName = page.getProjectName();
final String author = page.getAuthor();
final String email = page.getEmail();
final String artifactId = page.getArtifiactId();
final String version = page.getVersion();
final String packageString = page.getPackage();
final String mainClass = page.getMainClassName();
final String seedNode = page.getSeedNode();
final String port = page.getPortString();
final boolean generateMain = page.getGenerateMain();
final boolean generateJUnit = page.getGenerateJUnit();
IRunnableWithProgress op = new IRunnableWithProgress() {
public void run(IProgressMonitor monitor) throws InvocationTargetException {
try {
//Create the project
IProject project = createProject(projectName, monitor, "org.eclipse.jdt.core.javanature", "org.eclipse.m2e.core.maven2Nature");
project.setPersistentProperty(CoreActivator.SEED_NODE_PROPERTY, seedNode);
project.setPersistentProperty(CoreActivator.PORT_PROPERTY, port);
project.setPersistentProperty(CoreActivator.UDF_DIRECTORY, null);
project.setPersistentProperty(CoreActivator.AQL_GENERATION_DIRECTORY, null);
addBuilder(project, "org.eclipse.jdt.core.javabuilder");
addBuilder(project, "org.eclipse.m2e.core.maven2Builder" );
// //make a java project
// create source folders
IFolder srcMainJava = project.getFolder("src/main/java");
createFolder(srcMainJava);
IFolder srcMainResource = project.getFolder("src/main/resource");
createFolder(srcMainResource);
IFolder srcTestJava = project.getFolder("src/test/java");
createFolder(srcTestJava);
IFolder srcTestResource = project.getFolder("src/test/resource");
createFolder(srcTestResource);
// create aerospike folders
IFolder srcUDF = project.getFolder(store.getString(PreferenceConstants.UDF_PATH));
createFolder(srcUDF);
IFolder srcGenerated = project.getFolder(store.getString(PreferenceConstants.GENERATION_PATH));
createFolder(srcGenerated);
IFolder srcAql = project.getFolder("aql");
createFolder(srcAql);
// create the pom.xml
ST template = projectSTG.getInstanceOf("pom");
template.add("name", projectName);
template.add("artifactId", artifactId);
template.add("version", version);
template.add("author", author);
template.add("email", email);
template.add("mainClass", mainClass);
template.add("package", packageString);
createFile(project, null, "pom.xml", monitor, template);
// create the log4J.properties
template = projectSTG.getInstanceOf("log4J");
template.add("package", packageString);
template.add("mainClass", mainClass);
createFile(project, srcMainJava, "log4j.properties", monitor, template);
// create the .gitignore
template = projectSTG.getInstanceOf("ignore");
createFile(project, null, ".gitignore", monitor, template);
// create the README
template = projectSTG.getInstanceOf("readme");
template.add("name", projectName);
createFile(project, null, "README.md", monitor, template);
// create the README
template = projectSTG.getInstanceOf("classpath");
createFile(project, null, ".classpath", monitor, template);
// create JUnit
if (generateJUnit){
// IPackageFragment pack = javaProject.getPackageFragmentRoot(srcTestJava)
// .createPackageFragment(packageString, false, null);
IFolder testFolder = srcTestJava.getFolder(packageToFolder(packageString));
createFolder(testFolder);
template = projectSTG.getInstanceOf("junit");
template.add("name", mainClass + "Test");
template.add("package", packageString);
template.add("classUnderTest", mainClass);
// pack.createCompilationUnit(mainClass + "Test" + ".java", template.render(), false, monitor);
final IFile junitMain = createFile(project, testFolder, mainClass + "Test.java", monitor, template);
}
// create main class
// IPackageFragment pack = javaProject.getPackageFragmentRoot(srcMainJava)
// .createPackageFragment(packageString, false, null);
IFolder mainFolder = srcMainJava.getFolder(packageToFolder(packageString));
createFolder(mainFolder);
template = projectSTG.getInstanceOf("mainClass");
template.add("name", mainClass);
template.add("package", packageString);
template.add("author", author);
template.add("seedNode", seedNode);
template.add("port", port);
// final ICompilationUnit cu = pack.createCompilationUnit(mainClass+".java", template.render(), false, monitor);
final IFile javaMain = createFile(project, mainFolder, mainClass+".java", monitor, template);
// open editor on main class
monitor.setTaskName("Opening file for editing...");
getShell().getDisplay().asyncExec(new Runnable() {
public void run() {
IWorkbenchPage page =
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
try {
IEditorPart editor = IDE.openEditor(page, javaMain, true);
} catch (PartInitException e) {
}
}
});
//project build
project.build(IncrementalProjectBuilder.FULL_BUILD, monitor);
} catch (CoreException e) {
throw new InvocationTargetException(e);
} finally {
monitor.done();
}
}
};
try {
getContainer().run(true, false, op);
} catch (InterruptedException e) {
return false;
} catch (InvocationTargetException e) {
Throwable realException = e.getTargetException();
MessageDialog.openError(getShell(), "Error", realException.getMessage());
return false;
}
return true;
}
}