blob: af2f63ffbaa07fc12397b76e46374052e6aec964 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.uima.ruta.ide.ui.wizards;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.uima.ruta.engine.RutaEngine;
import org.apache.uima.ruta.ide.core.RutaNature;
import org.apache.uima.ruta.ide.core.builder.RutaProjectUtils;
import org.apache.uima.ruta.ide.ui.RutaImages;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.dltk.core.DLTKCore;
import org.eclipse.dltk.core.IBuildpathEntry;
import org.eclipse.dltk.core.IScriptProject;
import org.eclipse.dltk.internal.ui.util.CoreUtility;
import org.eclipse.dltk.internal.ui.wizards.buildpath.BPListElement;
import org.eclipse.dltk.ui.DLTKUIPlugin;
import org.eclipse.dltk.ui.wizards.BuildpathsBlock;
import org.eclipse.dltk.ui.wizards.ProjectWizard;
import org.eclipse.dltk.ui.wizards.ProjectWizardFirstPage;
import org.eclipse.dltk.ui.wizards.ProjectWizardSecondPage;
import org.eclipse.ui.wizards.newresource.BasicNewProjectResourceWizard;
public class RutaProjectCreationWizard extends ProjectWizard {
public static final String ID_WIZARD = "org.apache.uima.ruta.ide.ui.wizards.RutaProjectWizard"; //$NON-NLS-1$
private ProjectWizardFirstPage fFirstPage;
private ProjectWizardSecondPage fSecondPage;
private IConfigurationElement fConfigElement;
public RutaProjectCreationWizard() {
setDefaultPageImageDescriptor(RutaImages.DESC_WIZBAN_PROJECT_CREATION);
setDialogSettings(DLTKUIPlugin.getDefault().getDialogSettings());
setWindowTitle(RutaWizardMessages.ProjectCreationWizard_title);
}
@Override
public void addPages() {
super.addPages();
fFirstPage = new RutaProjectWizardFirstPage();
fFirstPage.setTitle(RutaWizardMessages.ProjectCreationWizardFirstPage_title);
fFirstPage.setDescription(RutaWizardMessages.ProjectCreationWizardFirstPage_description);
addPage(fFirstPage);
fSecondPage = new RutaProjectWizardSecondPage(fFirstPage);
addPage(fSecondPage);
}
@Override
protected void finishPage(IProgressMonitor monitor) throws InterruptedException, CoreException {
super.finishPage(monitor);
createProject(monitor);
}
public void createProject(IProgressMonitor monitor) throws CoreException {
IScriptProject scriptProject = fSecondPage.getScriptProject();
createRutaProject(scriptProject, fSecondPage.getRawBuildPath(), monitor);
}
public static void createRutaProject(IScriptProject scriptProject, IBuildpathEntry[] buildPath,
IProgressMonitor monitor) throws CoreException {
IProject project = scriptProject.getProject();
IFolder folder = project.getFolder(RutaProjectUtils.getDefaultInputLocation());
if (!folder.exists()) {
CoreUtility.createFolder(folder, true, true, new SubProgressMonitor(monitor, 1));
}
folder = project.getFolder(RutaProjectUtils.getDefaultOutputLocation());
if (!folder.exists()) {
CoreUtility.createFolder(folder, true, true, new SubProgressMonitor(monitor, 1));
}
folder = project.getFolder(RutaProjectUtils.getDefaultTestLocation());
if (!folder.exists()) {
CoreUtility.createFolder(folder, true, true, new SubProgressMonitor(monitor, 1));
}
IFolder descFolder = project.getFolder(RutaProjectUtils.getDefaultDescriptorLocation());
if (!descFolder.exists()) {
CoreUtility.createFolder(descFolder, true, true, new SubProgressMonitor(monitor, 1));
}
IFolder srcFolder = project.getFolder(RutaProjectUtils.getDefaultScriptLocation());
if (!srcFolder.exists()) {
CoreUtility.createFolder(srcFolder, true, true, new SubProgressMonitor(monitor, 1));
}
IFolder rsrcFolder = project.getFolder(RutaProjectUtils.getDefaultResourcesLocation());
if (!rsrcFolder.exists()) {
CoreUtility.createFolder(rsrcFolder, true, true, new SubProgressMonitor(monitor, 1));
}
IFolder utilsFolder = descFolder.getFolder("utils");
if (!utilsFolder.exists()) {
CoreUtility.createFolder(utilsFolder, true, true, new SubProgressMonitor(monitor, 1));
}
List<BPListElement> buildpathEntries = new ArrayList<BPListElement>();
if (buildPath != null) {
for (IBuildpathEntry buildpathEntry : buildPath) {
BPListElement createFromExisting = BPListElement.createFromExisting(buildpathEntry,
scriptProject);
if (createFromExisting.getBuildpathEntry().getEntryKind() != IBuildpathEntry.BPE_SOURCE) {
buildpathEntries.add(createFromExisting);
}
}
}
IBuildpathEntry newSourceEntry = DLTKCore.newSourceEntry(srcFolder.getFullPath());
buildpathEntries.add(BPListElement.createFromExisting(newSourceEntry, scriptProject));
BuildpathsBlock.flush(buildpathEntries, scriptProject, monitor);
copyDescriptors(descFolder);
RutaProjectUtils.addProjectDataPath(project, descFolder);
descFolder.refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
public static void copyDescriptors(IFolder descFolder) {
File descDir = descFolder.getLocation().toFile();
File utilsDir = new File(descFolder.getLocation().toFile(), "utils/");
utilsDir.mkdirs();
copy(descDir, "BasicTypeSystem.xml");
copy(descDir, "BasicEngine.xml");
copy(descDir, "InternalTypeSystem.xml");
copy(utilsDir, "Modifier.xml");
copy(utilsDir, "AnnotationWriter.xml");
copy(utilsDir, "StyleMapCreator.xml");
copy(utilsDir, "XMIWriter.xml");
copy(utilsDir, "SourceDocumentInformation.xml");
copy(utilsDir, "PlainTextAnnotator.xml");
copy(utilsDir, "PlainTextTypeSystem.xml");
copy(utilsDir, "HtmlAnnotator.xml");
copy(utilsDir, "HtmlTypeSystem.xml");
copy(utilsDir, "HtmlConverter.xml");
copy(utilsDir, "Cutter.xml");
copy(utilsDir, "ViewWriter.xml");
}
private static void copy(File dir, String fileName) {
InputStream in = null;
OutputStream out = null;
in = RutaEngine.class.getResourceAsStream(fileName);
try {
out = new FileOutputStream(new File(dir, fileName));
} catch (FileNotFoundException e) {
System.err.println(e);
}
if (in != null && out != null) {
copy(in, out);
}
}
static void copy(InputStream fis, OutputStream fos) {
try {
byte[] buffer = new byte[0xFFFF];
for (int len; (len = fis.read(buffer)) != -1;)
fos.write(buffer, 0, len);
} catch (IOException e) {
System.err.println(e);
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
System.err.println(e);
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
System.err.println(e);
}
}
}
}
@Override
public boolean performFinish() {
boolean res = super.performFinish();
if (res) {
BasicNewProjectResourceWizard.updatePerspective(fConfigElement);
selectAndReveal(fSecondPage.getScriptProject().getProject());
}
return res;
}
public void setInitializationData(IConfigurationElement cfig, String propertyName, Object data) {
fConfigElement = cfig;
}
@Override
public boolean performCancel() {
return super.performCancel();
}
@Override
public String getScriptNature() {
return RutaNature.NATURE_ID;
}
}