Java tutorial
/******************************************************************************* * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is made available under the terms of the * Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Exadel, Inc. and Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.jst.web.ui.operation; import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.Iterator; import java.util.Properties; import java.util.Set; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.operations.AbstractOperation; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.WorkspaceJob; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; import org.eclipse.jdt.core.IClasspathEntry; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jem.util.emf.workbench.ProjectUtilities; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jst.j2ee.internal.web.archive.operations.WebFacetProjectCreationDataModelProvider; import org.eclipse.jst.j2ee.project.facet.IJ2EEModuleFacetInstallDataModelProperties; import org.eclipse.jst.j2ee.web.project.facet.IWebFacetInstallDataModelProperties; import org.eclipse.wst.common.componentcore.ModuleCoreNature; import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetDataModelProperties; import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetProjectCreationDataModelProperties; import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetProjectCreationDataModelProperties.FacetDataModelMap; import org.eclipse.wst.common.componentcore.internal.operation.FacetProjectCreationOperation; import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation; import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelProvider; import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory; import org.eclipse.wst.common.frameworks.datamodel.IDataModel; import org.eclipse.wst.common.frameworks.internal.operations.IProjectCreationPropertiesNew; import org.eclipse.wst.common.project.facet.core.IFacetedProject; import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion; import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager; import org.eclipse.wst.common.project.facet.core.runtime.RuntimeManager; import org.eclipse.wst.server.core.IRuntime; import org.jboss.tools.common.meta.action.SpecialWizard; import org.jboss.tools.common.meta.action.SpecialWizardFactory; import org.jboss.tools.common.model.XModel; import org.jboss.tools.common.model.XModelConstants; import org.jboss.tools.common.model.XModelException; import org.jboss.tools.common.model.XModelObject; import org.jboss.tools.common.model.filesystems.FileSystemsHelper; import org.jboss.tools.common.model.plugin.ModelPlugin; import org.jboss.tools.common.model.project.ClassPathUpdate; import org.jboss.tools.common.model.project.IModelNature; import org.jboss.tools.common.model.project.Watcher; import org.jboss.tools.common.model.project.WatcherLoader; import org.jboss.tools.common.model.ui.ModelUIPlugin; import org.jboss.tools.common.model.util.EclipseResourceUtil; import org.jboss.tools.common.util.FileUtil; import org.jboss.tools.jst.web.WebModelPlugin; import org.jboss.tools.jst.web.context.RegisterServerContext; import org.jboss.tools.jst.web.project.helpers.NewWebProjectContext; import org.jboss.tools.jst.web.server.RegistrationHelper; import org.jboss.tools.jst.web.ui.WebUiPlugin; import org.osgi.framework.Bundle; /** * * @author glory * */ public abstract class WebNatureOperation implements IRunnableWithProgress { public static final String DEFAULT_WEB_CONTENT = "WebContent"; //$NON-NLS-1$ public static final String DEFAULT_WEB_INF = "WEB-INF"; //$NON-NLS-1$ public static final String DEFAULT_JAVA_SOURCES = "JavaSource"; //$NON-NLS-1$ public static final String DEFAULT_JAVA_CLASSES = "classes"; //$NON-NLS-1$ public static final String DEFAULT_WEB_INF_LIBRARY = "lib"; //$NON-NLS-1$ public static final String PROJECT_NAME_ID = "WebNatureOperation.PROJECT_NAME_ID"; //$NON-NLS-1$ public static final String PROJECT_LOCATION_ID = "WebNatureOperation.PROJECT_LOCATION_ID"; //$NON-NLS-1$ public static final String WEB_CONTENT_ID = "WebNatureOperation.WEB_CONTENT_ID"; //$NON-NLS-1$ public static final String WEB_CONTENT_LOCATION_ID = "WebNatureOperation.WEB_CONTENT_LOCATION_ID"; //$NON-NLS-1$ public static final String WEB_INF_ID = "WebNatureOperation.WEB_INF_ID"; //$NON-NLS-1$ public static final String WEB_INF_LOCATION_ID = "WebNatureOperation.WEB_INF_LOCATION_ID"; //$NON-NLS-1$ public static final String WEB_XML_ID = "WebNatureOperation.WEB_XML_ID"; //$NON-NLS-1$ public static final String WEB_XML_LOCATION_ID = "WebNatureOperation.WEB_XML_ID"; //$NON-NLS-1$ public static final String WEB_INF_LIBRARY_ID = "WebNatureOperation.WEB_INF_LIBRARY_ID"; //$NON-NLS-1$ public static final String WEB_INF_LIBRARY_LOCATION_ID = "WebNatureOperation.WEB_INF_LIBRARY_LOCATION_ID"; //$NON-NLS-1$ public static final String JAVA_SOURCES_ID = "WebNatureOperation.JAVA_SOURCES_ID"; //$NON-NLS-1$ public static final String JAVA_SOURCES_LOCATION_ID = "WebNatureOperation.JAVA_SOURCES_LOCATION_ID"; //$NON-NLS-1$ public static final String JAVA_CREATE_SOURCE_FOLDERS_ID = "WebNatureOperation.JAVA_CREATE_SOURCE_FOLDERS_ID"; //$NON-NLS-1$ public static final String JAVA_CLASSES_ID = "WebNatureOperation.JAVA_CLASSES_ID"; //$NON-NLS-1$ public static final String JAVA_CLASSES_LOCATION_ID = "WebNatureOperation.JAVA_CLASSES_LOCATION_ID"; //$NON-NLS-1$ public static final String JAVA_CLASSPATH_ID = "WebNatureOperation.JAVA_CLASSPATH_ID"; //$NON-NLS-1$ public static final String SERVLET_VERSION_ID = "WebNatureOperation.SERVLET_VERSION_ID"; //$NON-NLS-1$ public static final String JSP_VERSION_ID = "WebNatureOperation.JSP_VERSION_ID"; //$NON-NLS-1$ public static final String WEB_VERSION_ID = "WebNatureOperation.WEB_VERSION_ID"; //$NON-NLS-1$ public static final String ANT_BUILD_XML_ID = "WebNatureOperation.ANT_BUILD_XML_ID"; //$NON-NLS-1$ public static final String USE_DEFAULT_LOCATION_ID = "WebNatureOperation.USE_DEFAULT_LOCATION_ID"; //$NON-NLS-1$ public static final String REGISTER_WEB_CONTEXT_ID = "WebNatureOperation.REGISTER_WEB_CONTEXT_ID"; //$NON-NLS-1$ public static final String TEMPLATE_ID = "WebNatureOperation.TEMPLATE_ID"; //$NON-NLS-1$ public static final String TEMPLATE_VERSION_ID = "WebNatureOperation.TEMPLATE_VERSION_ID"; //$NON-NLS-1$ public static final String RUNTIME_NAME = "WebNatureOperation.RUNTIME_NAME"; //$NON-NLS-1$ private static final String PROJECT_ID = "WebNatureOperation.PROJECT_ID"; //$NON-NLS-1$ protected XModel model; private HashMap<String, Object> propertyValue = new HashMap<String, Object>(); private HashMap<String, Object> wizardPropertiesForVelocity = new HashMap<String, Object>(); private Properties wizardPropertiesAsIs; RegisterServerContext registry; boolean isCancelled = false; /** * * @param project * @param projectLocation * @param registry * @param properties */ public WebNatureOperation(IProject project, IPath projectLocation, RegisterServerContext registry, Properties properties) { initDefaults(); setProject(project); setProperty(PROJECT_NAME_ID, project.getName()); setProperty(PROJECT_LOCATION_ID, projectLocation.toString()); setProperty(WEB_CONTENT_LOCATION_ID, projectLocation/*.append(project.getName())*/.append(DEFAULT_WEB_CONTENT).toString()); setProperty(WEB_INF_LOCATION_ID, projectLocation.append(project.getName()).append(DEFAULT_WEB_CONTENT) .append(DEFAULT_WEB_INF).toString()); setProperty(JAVA_CREATE_SOURCE_FOLDERS_ID, Boolean.TRUE); setProperty(JAVA_CLASSES_LOCATION_ID, projectLocation.append(project.getName()).append(DEFAULT_WEB_CONTENT) .append(DEFAULT_WEB_INF).append(DEFAULT_JAVA_CLASSES).toString()); setProperty(WEB_INF_LIBRARY_LOCATION_ID, projectLocation.append(project.getName()) .append(DEFAULT_WEB_CONTENT).append(DEFAULT_WEB_INF).append(DEFAULT_WEB_INF_LIBRARY).toString()); setProperty(SERVLET_VERSION_ID, properties.getProperty(NewWebProjectContext.ATTR_SERVLET_VERSION)); this.registry = registry; // init wizard properties as is for template processor initWizardPropertiesForVelocity(properties); this.wizardPropertiesAsIs = properties; } public boolean isCancelled() { return isCancelled; } /** * * @param properties */ protected void initWizardPropertiesForVelocity(Properties properties) { wizardPropertiesForVelocity.clear(); Iterator<Object> it = properties.keySet().iterator(); while (it.hasNext()) { String key = it.next().toString(); Object o = properties.get(key); if (o instanceof XModelObject) { XModelObject object = (XModelObject) o; XModelObject[] cs = object.getChildren(); for (int i = 0; i < cs.length; i++) { String n = cs[i].getAttributeValue("name"); //$NON-NLS-1$ String v = cs[i].getAttributeValue("value"); //$NON-NLS-1$ if (n != null && v != null) { wizardPropertiesForVelocity.put(n.replace(' ', '_'), v); } } } else { wizardPropertiesForVelocity.put(key.replace(' ', '_'), properties.getProperty(key)); } } } /** * * */ protected void initDefaults() { setProperty(WEB_CONTENT_ID, DEFAULT_WEB_CONTENT); setProperty(WEB_INF_ID, DEFAULT_WEB_INF); setProperty(WEB_INF_LIBRARY_ID, DEFAULT_WEB_INF_LIBRARY); setProperty(JAVA_SOURCES_ID, DEFAULT_JAVA_SOURCES); setProperty(JAVA_CLASSES_ID, DEFAULT_JAVA_CLASSES); } /** * * @param context */ public WebNatureOperation(NewWebProjectContext context) { this(context.getProject(), context.getLocationPath(), context.getRegisterServerContext(), context.getActionProperties()); } /** * */ public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { if (monitor == null) monitor = new NullProgressMonitor(); monitor.beginTask("", 25); //$NON-NLS-1$ try { // clear all .-files clearProjectRoot(monitor); monitor.worked(1); if (monitor.isCanceled()) return; // create Dynamic Web Project from WTP: create Java Nature, create WTP Nature AbstractOperation wcco = createWTPNature(monitor); monitor.worked(5); // create lock createLockFile(); monitor.worked(1); // create Red Hat Web Nature preCreateWebNature(); // createWebNature(); // monitor.worked(4); // create Java Nature JavaCore.create(getProject()); // createJavaNature(); // create java nature now migrate into create WTP nature @see createWTPNature() monitor.worked(3); // update version of FileSystem object // updateVersion(); monitor.worked(1); // refresh project resource // getProject().refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor()); // monitor.worked(3); // update model createWebNature(); monitor.worked(4); getProject().refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor()); monitor.worked(3); updateJavaNature(); // create java nature now migrate into create WTP nature @see createWTPNature() updateVersion(); model.update(); monitor.worked(2); model.save(); monitor.worked(1); createWTPNature2(wcco, monitor); monitor.worked(1); // register application registerServer2(monitor); ///registerServer(monitor); postCreateWebNature(); } catch (CoreException e) { WebModelPlugin.getPluginLog().logError(e); } finally { if (!monitor.isCanceled()) deleteLockFile(); monitor.done(); } } protected String[] dotFilesList = { ".classpath", ".project", IModelNature.PROJECT_FILE, ".runtime", //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ ".wtpmodules", ".settings" //$NON-NLS-1$ //$NON-NLS-2$ }; /* * */ private void clearProjectRoot(IProgressMonitor monitor) throws CoreException { if (!monitor.isCanceled() && !clearProjectRoot()) { monitor.setCanceled(true); } } boolean isProjectRootCleared = false; /** * Returns false if dialog was shown that cancelled operation. */ public boolean clearProjectRoot() { if (!isProjectRootCleared) { isProjectRootCleared = true; IProject project = getProject(); IPath projectLocation = new Path(getProperty(PROJECT_LOCATION_ID)); // project.getLocation(); isCancelled = !checkOverwrite(); if (!isCancelled && !project.exists()) { removeDotFiles(projectLocation); } } return !isCancelled; } protected void removeDotFiles(IPath projectLocation) { for (int i = 0; i < dotFilesList.length; i++) { File file = projectLocation.append(dotFilesList[i]).toFile(); if (file.exists()) FileUtil.remove(file); } } /* * */ private void updateVersion() throws XModelException { Bundle bundle = ModelUIPlugin.getDefault().getBundle(); String version = (String) bundle.getHeaders().get(org.osgi.framework.Constants.BUNDLE_VERSION); model.changeObjectAttribute(FileSystemsHelper.getFileSystems(model), XModelConstants.MODEL_VERSION, version); } /* * */ private void registerServer2(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { XModelObject fs = FileSystemsHelper.getFileSystems(model); try { model.changeObjectAttribute(fs, "application name", registry.getApplicationName()); //$NON-NLS-1$ } catch (XModelException e) { throw new InvocationTargetException(e); } fs.setModified(true); model.save(); if (registry.isEnabled()) { RegistrationHelper.runRegisterInServerJob(getProject(), registry.getTargetServers(), null); } } protected boolean checkOverwrite() { return true; } protected abstract String getNatureID(); protected abstract void preCreateWebNature() throws CoreException; protected abstract void createWebNature() throws CoreException; protected abstract void postCreateWebNature(); /* * */ private void createLockFile() { try { getProject().setSessionProperty(WatcherLoader.LOCK, "true"); //$NON-NLS-1$ } catch (CoreException e) { WebUiPlugin.getPluginLog().logError(e); } } /* * */ private void deleteLockFile() { try { boolean lock = "true".equals(getProject().getSessionProperty(WatcherLoader.LOCK)); //$NON-NLS-1$ if (lock) { getProject().setSessionProperty(WatcherLoader.LOCK, null); if (model != null) { Watcher.getInstance(model).forceUpdate(); } } } catch (CoreException e) { WebUiPlugin.getPluginLog().logError(e); } } /* * */ private void updateJavaNature() throws CoreException { // JavaCore.create(getProject()); EclipseResourceUtil.addNatureToProject(getProject(), JavaCore.NATURE_ID); SpecialWizard w = SpecialWizardFactory .createSpecialWizard("org.jboss.tools.common.model.project.ClassPathUpdateWizard"); //$NON-NLS-1$ Properties p = new Properties(); p.put("model", model); //$NON-NLS-1$ p.put("classes", new Path(getProperty(JAVA_CLASSES_LOCATION_ID))); //$NON-NLS-1$ //webInfLocation.append("classes")); w.setObject(p); w.execute(); } /** * * @param monitor * @throws CoreException */ protected AbstractOperation createWTPNature(IProgressMonitor monitor) throws CoreException { boolean exists = getProject().exists(); String projectName = getProperty(PROJECT_NAME_ID); String projectLocation = getProperty(PROJECT_LOCATION_ID); if (isLinkingToProjectOutsideWorkspace()) { projectLocation = createLinks(projectLocation); } boolean hasJSTWebFacet = false; if (exists) { IFacetedProject fp0 = ProjectFacetsManager.create(getProject()); exists = fp0 != null; if (exists) { Set<IProjectFacetVersion> vs = fp0.getProjectFacets(); if (vs != null) for (IProjectFacetVersion v : vs) { String id = v.getProjectFacet().getId(); if ("jst.web".equals(id)) { //$NON-NLS-1$ hasJSTWebFacet = true; } } } } AbstractDataModelProvider modelProvider = new WebFacetProjectCreationDataModelProvider(); IDataModel dataModel = DataModelFactory.createDataModel(modelProvider); modelProvider.setDataModel(dataModel); AbstractDataModelOperation wcco = (AbstractDataModelOperation) modelProvider.getDefaultOperation(); wcco.setDataModel(dataModel); dataModel.setProperty(IProjectCreationPropertiesNew.PROJECT_NAME, projectName); dataModel.setProperty(IFacetProjectCreationDataModelProperties.FACET_PROJECT_NAME, projectName); String runtimeName = getProperty(WebNatureOperation.RUNTIME_NAME); if (runtimeName != null && runtimeName.length() > 0) { Object o = findFacetRuntime(null); if (o != null) { dataModel.setProperty(IFacetProjectCreationDataModelProperties.FACET_RUNTIME, o); } } if (!isDefaultLocation(projectLocation, true)) { dataModel.setProperty(IProjectCreationPropertiesNew.USE_DEFAULT_LOCATION, Boolean.FALSE); dataModel.setProperty(IProjectCreationPropertiesNew.USER_DEFINED_LOCATION, projectLocation); } if (!getProject().exists()) { IProjectDescription pd = ModelPlugin.getWorkspace().newProjectDescription(getProject().getName()); if (!isDefaultLocation(projectLocation, true)) { pd.setLocation(new Path(projectLocation)); } getProject().create(pd, null); getProject().open(null); JavaCore.create(getProject()); EclipseResourceUtil.addNatureToProject(getProject(), JavaCore.NATURE_ID); } if (getProject().exists()) { ModuleCoreNature.addModuleCoreNatureIfNecessary(getProject(), monitor); String emfNature = "org.eclipse.jem.workbench.JavaEMFNature"; //$NON-NLS-1$ if (!getProject().hasNature(emfNature)) { ProjectUtilities.addNatureToProject(getProject(), emfNature); } } if (!exists || !hasJSTWebFacet) { configFacets(dataModel, projectLocation); return wcco; } else { return null; } } protected void configFacets(IDataModel dataModel, String projectLocation) { String webroot = getProperty(WEB_CONTENT_LOCATION_ID); String[] javaRoot = (String[]) getPropertyObject(JAVA_SOURCES_LOCATION_ID); String sv = getProperty(SERVLET_VERSION_ID); FacetDataModelMap map = (FacetDataModelMap) dataModel .getProperty(IFacetProjectCreationDataModelProperties.FACET_DM_MAP); IDataModel configDM = (IDataModel) map.get("jst.web"); //$NON-NLS-1$ IDataModel configJavaDM = (IDataModel) map.get("java"); //$NON-NLS-1$ if (sv != null && (sv.indexOf("2.3") >= 0 || sv.indexOf("2.4") >= 0 || sv.indexOf("2.5") >= 0 //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ || sv.indexOf("3.0") >= 0)) { configDM.setProperty(IFacetDataModelProperties.FACET_VERSION_STR, sv); } if (configJavaDM != null && sv != null && sv.indexOf("3.0") >= 0) { //$NON-NLS-1$ configJavaDM.setProperty(IFacetDataModelProperties.FACET_VERSION_STR, "1.6"); //$NON-NLS-1$ } String contextRoot = getProperty("WebNatureOperation.CONTEXT_ROOT"); if (contextRoot != null && contextRoot.length() > 0 && !contextRoot.equals(getProject().getName())) { configDM.setProperty(IWebFacetInstallDataModelProperties.CONTEXT_ROOT, contextRoot); } if (webroot != null) { int i = webroot.lastIndexOf("/"); //$NON-NLS-1$ String webRootName = webroot.substring(i + 1); if (webroot.startsWith(projectLocation.replace('\\', '/') + "/")) { //$NON-NLS-1$ webRootName = webroot.substring(projectLocation.length() + 1); } configDM.setProperty(IJ2EEModuleFacetInstallDataModelProperties.CONFIG_FOLDER, webRootName); } if (javaRoot != null && javaRoot.length > 0 && javaRoot[0].length() > 0) { String jr = javaRoot[0].replace('\\', '/'); int i = jr.lastIndexOf("/"); //$NON-NLS-1$ String javaRootName = javaRoot[0].substring(i + 1); if (jr.startsWith(projectLocation.replace('\\', '/') + "/")) { //$NON-NLS-1$ javaRootName = jr.substring(projectLocation.length() + 1); } configDM.setProperty(IWebFacetInstallDataModelProperties.SOURCE_FOLDER, javaRootName); } } //https://bugs.eclipse.org/bugs/show_bug.cgi?id=119066 private void createWTPNature2(AbstractOperation wcco, IProgressMonitor monitor) { try { if (wcco != null) { wcco.execute(monitor, null); } // new RuntimeJob().runInWorkspace(monitor); } catch (ExecutionException e) { WebUiPlugin.getPluginLog().logError(e); } } class RuntimeJob extends WorkspaceJob { public RuntimeJob() { super("Set runtime"); //$NON-NLS-1$ } @Override public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException { IFacetedProject fp = ProjectFacetsManager.create(getProject()); fp.setRuntime(findFacetRuntime(null/*runtime*/), monitor); return Status.OK_STATUS; } } protected boolean isLinkingToProjectOutsideWorkspace() { return false; } protected boolean hasJavaSource() { return true; } protected boolean isDefaultLocation(String projectLocation, boolean exact) { String root = ModelPlugin.getWorkspace().getRoot().getLocation().toString().replace('\\', '/'); try { File f1 = new File(projectLocation); if (f1.exists()) { String pLocation = f1.getCanonicalPath().replace('\\', '/') + '/'; String rLocation = ModelPlugin.getWorkspace().getRoot().getLocation().toFile().getCanonicalPath() .replace('\\', '/') + '/' + getProject().getName() + '/'; return exact ? pLocation.equals(rLocation) : pLocation.startsWith(rLocation); } } catch (IOException e) { WebUiPlugin.getDefault().logError(e); } return exact ? (projectLocation.replace('\\', '/') + '/').equals(root + '/' + getProject().getName() + '/') : (projectLocation.replace('\\', '/') + '/').startsWith(root + '/' + getProject().getName() + '/'); } private String createLinks(String projectLocation) throws CoreException { if (isDefaultLocation(projectLocation, false)) { return projectLocation; } IProject project = getProject(); String root = ModelPlugin.getWorkspace().getRoot().getLocation().toString().replace('\\', '/'); String webroot = getProperty(WEB_CONTENT_LOCATION_ID); String[] javaRoot = (String[]) getPropertyObject(JAVA_SOURCES_LOCATION_ID); String wsProjectLocation = root + "/" + project.getName(); //$NON-NLS-1$ if (!project.exists()) { IProjectDescription pd = ModelPlugin.getWorkspace().newProjectDescription(project.getName()); project.create(pd, null); project.open(null); JavaCore.create(getProject()); EclipseResourceUtil.addNatureToProject(getProject(), JavaCore.NATURE_ID); IJavaProject jp = EclipseResourceUtil.getJavaProject(project); IClasspathEntry entry = new ClassPathUpdate() .createNewClasspathEntry(project.getFullPath().append("src"), IClasspathEntry.CPE_SOURCE); //$NON-NLS-1$ try { jp.setRawClasspath(new IClasspathEntry[] { entry }, project.getFullPath().append("classes"), null); //$NON-NLS-1$ } catch (CoreException e) { WebUiPlugin.getPluginLog().logError(e); } } if (webroot != null) { IFolder f = project.getFolder("WEB-ROOT"); //$NON-NLS-1$ if (f.exists()) { setProperty(WEB_CONTENT_LOCATION_ID, "/WEB-ROOT"); //$NON-NLS-1$ } else if (project.exists() && webroot.startsWith(project.getLocation().toString().replace('\\', '/') + "/")) { f = project.getFolder( webroot.substring(project.getLocation().toString().replace('\\', '/').length() + 1)); } if (!f.exists()) { f = project.getFolder("WEB-ROOT"); //$NON-NLS-1$ f.createLink(new Path(webroot), IFolder.FORCE, null); setProperty(WEB_CONTENT_LOCATION_ID, "/WEB-ROOT"); //$NON-NLS-1$ } } if (javaRoot != null && javaRoot.length > 0 && javaRoot[0].length() > 0) { IFolder f = project.getFolder("src"); //$NON-NLS-1$ if (!f.exists()) f.createLink(new Path(javaRoot[0]), IFolder.FORCE, null); javaRoot[0] = "/src"; //$NON-NLS-1$ } return wsProjectLocation; } // private boolean isProjectLocationInsideWorkspaceProject(String projectLocation) { // File project // return false; // } private org.eclipse.wst.common.project.facet.core.runtime.IRuntime findFacetRuntime(IRuntime runtime) { String runtimeName = getProperty(WebNatureOperation.RUNTIME_NAME); if (runtimeName == null) return null; if (runtime != null) runtimeName = runtime.getName(); for (org.eclipse.wst.common.project.facet.core.runtime.IRuntime r : RuntimeManager.getRuntimes()) { if (runtimeName.equals(r.getName())) { return r; } } return null; } /** * * @param sourceDir * @param targetDir * @throws Exception */ protected void preprocessTemplate(File sourceDir, File targetDir) throws Exception { TemplatePreprocessor preprocessor = new TemplatePreprocessor(); preprocessor.setSourceDir(sourceDir); preprocessor.setTargetDir(targetDir); preprocessor.setParameters(wizardPropertiesForVelocity); preprocessor.execute(); } /** * * @param key * @return */ public String getProperty(String key) { return (String) propertyValue.get(key); } /** * * @param key * @param value */ public void setProperty(String key, Object value) { propertyValue.put(key, value); } /** * * @param key * @return */ public Object getPropertyObject(String key) { return (Object) propertyValue.get(key); } /** * * @param key * @param value */ public void setPropertyObject(String key, Object value) { propertyValue.put(key, value); } /** * * @return */ public IProject getProject() { return (IProject) getPropertyObject(PROJECT_ID); } /** * * @param project */ public void setProject(IProject project) { setPropertyObject(PROJECT_ID, project); } /** * * @return */ public Properties getWizardPropertiesAsIs() { return wizardPropertiesAsIs; } }