/*
* 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 NewAerospikeProjectWizardGo extends NewAerospikeProjectWizard {
public NewAerospikeProjectWizardGo() {
super();
this.language = language.GO;
}
protected boolean generateProject(){
/*
<buildSpec>
<buildCommand>
<name>com.googlecode.goclipse.goBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>com.googlecode.goclipse.core.goNature</nature>
</natures>
*/
URL url = this.getClass().getResource("go_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 version = page.getVersion();
final String packageString = page.getPackage();
final String mainClass = page.getMainClassName();
final String seedNode = page.getSeedNode();
final String port = page.getPortString();
IRunnableWithProgress op = new IRunnableWithProgress() {
public void run(IProgressMonitor monitor) throws InvocationTargetException {
try {
//Create the project
IProject project = createProject(projectName, monitor, "com.googlecode.goclipse.core.goNature");
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, "com.googlecode.goclipse.goBuilder");
// create source folders
IFolder srcMainGo = project.getFolder("src");
createFolder(srcMainGo);
IFolder srcMainBin = project.getFolder("bin");
createFolder(srcMainBin);
// 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 .gitignore
ST 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 main
IFolder mainFolder = srcMainGo.getFolder(packageToFolder(packageString));
createFolder(mainFolder);
template = projectSTG.getInstanceOf("module");
template.add("name", mainClass);
template.add("package", packageString);
template.add("author", author);
template.add("email", email);
template.add("version", version);
template.add("seedNode", seedNode);
template.add("port", port);
final IFile goMain = createFile(project, mainFolder, mainClass+".go", 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, goMain, 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;
}
}