[292934] deprecate ModuleCoreValidator and its supporting classes
diff --git a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/J2EEComponentProjectMigrator.java b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/J2EEComponentProjectMigrator.java
new file mode 100644
index 0000000..0b72e01
--- /dev/null
+++ b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/J2EEComponentProjectMigrator.java
@@ -0,0 +1,634 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.j2ee.internal;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.commands.ExecutionException;
+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.IWorkspace;
+import org.eclipse.core.resources.ProjectScope;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.IScopeContext;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase;
+import org.eclipse.jem.workbench.utility.JemProjectUtilities;
+import org.eclipse.jst.common.frameworks.CommonFrameworksPlugin;
+import org.eclipse.jst.common.project.facet.IJavaFacetInstallDataModelProperties;
+import org.eclipse.jst.common.project.facet.JavaFacetInstallDataModelProvider;
+import org.eclipse.jst.common.project.facet.WtpUtils;
+import org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathContainerUtils;
+import org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathUpdater;
+import org.eclipse.jst.j2ee.internal.earcreation.EarFacetInstallDataModelProvider;
+import org.eclipse.jst.j2ee.internal.ejb.project.operations.EjbFacetInstallDataModelProvider;
+import org.eclipse.jst.j2ee.internal.ejb.project.operations.IEjbFacetInstallDataModelProperties;
+import org.eclipse.jst.j2ee.internal.plugin.J2EEPlugin;
+import org.eclipse.jst.j2ee.internal.plugin.J2EEPreferences;
+import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities;
+import org.eclipse.jst.j2ee.jca.project.facet.ConnectorFacetInstallDataModelProvider;
+import org.eclipse.jst.j2ee.project.facet.AppClientFacetInstallDataModelProvider;
+import org.eclipse.jst.j2ee.project.facet.IAppClientFacetInstallDataModelProperties;
+import org.eclipse.jst.j2ee.project.facet.IJ2EEModuleFacetInstallDataModelProperties;
+import org.eclipse.jst.j2ee.project.facet.UtilityFacetInstallDataModelProvider;
+import org.eclipse.jst.j2ee.web.project.facet.WebFacetInstallDataModelProvider;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.navigator.CommonViewer;
+import org.eclipse.ui.navigator.INavigatorContentService;
+import org.eclipse.wst.common.componentcore.datamodel.FacetProjectCreationDataModelProvider;
+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.ComponentType;
+import org.eclipse.wst.common.componentcore.internal.ComponentcoreFactory;
+import org.eclipse.wst.common.componentcore.internal.IComponentProjectMigrator;
+import org.eclipse.wst.common.componentcore.internal.Property;
+import org.eclipse.wst.common.componentcore.internal.StructureEdit;
+import org.eclipse.wst.common.componentcore.internal.WorkbenchComponent;
+import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
+import org.eclipse.wst.common.frameworks.internal.SimpleValidateEdit;
+import org.eclipse.wst.project.facet.SimpleWebFacetInstallDataModelProvider;
+import org.eclipse.wst.server.core.IRuntime;
+import org.eclipse.wst.server.core.ServerUtil;
+import org.eclipse.jst.j2ee.internal.plugin.J2EEUIPlugin;
+
+/**
+ * This has been deprecated since WTP 3.1.2 and will be deleted post WTP 3.2.
+ * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=292934
+ * @deprecated
+ * @author jsholl
+ */
+public class J2EEComponentProjectMigrator implements IComponentProjectMigrator {
+
+ private static final String WEB_LIB_CONTAINER = "org.eclipse.jst.j2ee.internal.web.container"; //$NON-NLS-1$
+ private static final String WEB_LIB_PATH = "/WEB-INF/lib"; //$NON-NLS-1$
+ private static final String OLD_DEPLOYABLES_PATH = ".deployables"; //$NON-NLS-1$
+ private IProject project;
+
+ private static final String[] J2EE_CONTENT_EXTENSION_IDS = new String[] {
+ "org.eclipse.jst.navigator.j2ee.ui.EARDDContent", //$NON-NLS-1$
+ "org.eclipse.jst.navigator.j2ee.ui.WebDDContent", //$NON-NLS-1$
+ "org.eclipse.jst.navigator.j2ee.ui.EJBDDContent", //$NON-NLS-1$
+ "org.eclipse.jst.navigator.j2ee.ui.ConnectorDDContent" //$NON-NLS-1$
+ };
+
+ private static final String PROJECT_EXPLORER = "org.eclipse.ui.navigator.ProjectExplorer"; //$NON-NLS-1$
+
+ public J2EEComponentProjectMigrator() {
+ super();
+ }
+
+ public void migrateProject(IProject aProject) {
+ if (aProject.isAccessible() && (aProject.getFile(StructureEdit.MODULE_META_FILE_NAME).exists())) {
+ // The file corresponding to StructureEdit.MODULE_META_FILE_NAME is crucial to migration.
+ // If it does not exist, the project cannot be migrated. We should never fail the test for existence
+ // of the file, if we do then something has gone badly wrong.
+ Resource resource = WorkbenchResourceHelperBase.getResource(aProject.getFile(StructureEdit.MODULE_META_FILE_NAME), false);
+ if(resource != null && resource.isLoaded()){
+ // Unload the resource because the model inside the StructureEdit was cached when the
+ // the project was imported, and files may have moved due to migration (.wtpmodules for example).
+ resource.unload();
+ }
+
+ final List files = new ArrayList();
+ files.add(aProject.getFile(J2EEProjectUtilities.DOT_PROJECT));
+ files.add(aProject.getFile(J2EEProjectUtilities.DOT_CLASSPATH));
+ files.add(aProject.getFile(StructureEdit.MODULE_META_FILE_NAME));
+ if(SimpleValidateEdit.validateEdit(files)){
+ project = aProject;
+
+ removeComponentBuilders(project);
+ if (multipleComponentsDetected())
+ createNewProjects();
+ String facetid = getFacetFromProject(project);
+ if (facetid.length() == 0)
+ addFacets(project);
+ J2EEComponentClasspathUpdater.getInstance().queueUpdate(project);
+ }
+ }
+ ensureJ2EEContentExtensionsEnabled();
+ }
+
+ /**
+ * Ensure the J2EE content extension ids are enabled on the project explorer
+ * for the projects being migrated.
+ */
+ private void ensureJ2EEContentExtensionsEnabled() {
+ IViewPart view = null;
+ try {
+ view = PlatformUI.getWorkbench().getWorkbenchWindows()[0].getActivePage().findView(PROJECT_EXPLORER);
+ } catch (Exception e) {
+ //Just bail and return if there is no view
+ }
+ if (view == null)
+ return;
+
+ INavigatorContentService contentService = (INavigatorContentService) view.getAdapter(INavigatorContentService.class);
+ CommonViewer viewer = (CommonViewer) view.getAdapter(CommonViewer.class);
+
+ // Set the J2EE content extensions as enabled now that we have set the J2EE facets
+ if (contentService != null)
+ contentService.getActivationService().activateExtensions(J2EE_CONTENT_EXTENSION_IDS, false);
+
+ // Update the viewer if we are in the current UI thread
+ if (viewer != null) {
+ Display display = viewer.getControl().getDisplay();
+ if (display!=null && Thread.currentThread().equals(display.getThread()))
+ viewer.refresh();
+ }
+ }
+
+ private void createNewProjects() {
+
+ StructureEdit se = null;
+ try {
+ se = StructureEdit.getStructureEditForWrite(project);
+ List comps = se.getComponentModelRoot().getComponents();
+ List removedComps = new ArrayList();
+ for (int i = 1;i<comps.size();i++) {
+ WorkbenchComponent comp = (WorkbenchComponent) comps.get(i);
+ IWorkspace ws = ResourcesPlugin.getWorkspace();
+ IProject newProj = ws.getRoot().getProject(comp.getName());
+ if (!newProj.exists()) {
+ try {
+ createProj(newProj,(!comp.getComponentType().getComponentTypeId().equals(J2EEProjectUtilities.ENTERPRISE_APPLICATION)));
+ WtpUtils.addNatures(newProj);
+ } catch (CoreException e) {
+ J2EEUIPlugin.logError(e);
+ }
+ }
+ if (comp.getComponentType()!=null)
+ addFacetsToProject(newProj,comp.getComponentType().getComponentTypeId(),comp.getComponentType().getVersion(),false);
+ removedComps.add(comp);
+ IFolder compFolder = project.getFolder(comp.getName());
+ if (compFolder.exists())
+ try {
+ compFolder.delete(true,null);
+ } catch (CoreException e) {
+ J2EEUIPlugin.logError(e);
+ }
+ }
+ se.getComponentModelRoot().getComponents().removeAll(removedComps);
+ se.save(null);
+
+ } finally {
+ if (se != null)
+ se.dispose();
+ }
+
+
+ }
+
+ private void createProj(IProject newProj, boolean isJavaProject) throws CoreException {
+ newProj.create(null);
+ IProjectDescription description = ResourcesPlugin.getWorkspace().newProjectDescription(newProj.getName());
+// if (isJavaProject)
+// description.setNatureIds(new String[]{JavaCore.NATURE_ID});
+ description.setLocation(null);
+ newProj.open(null);
+ newProj.setDescription(description, null);
+ }
+
+ private boolean multipleComponentsDetected() {
+ StructureEdit se = null;
+ try {
+ se = StructureEdit.getStructureEditForRead(project);
+ if (se == null) return false;
+ if (se.getComponentModelRoot() == null) return false;
+ return se.getComponentModelRoot().getComponents().size() > 1;
+ } finally {
+ if (se != null)
+ se.dispose();
+ }
+ }
+
+ private void removeComponentBuilders(IProject aProject) {
+ try {
+ aProject.refreshLocal(IResource.DEPTH_INFINITE,null);
+ } catch (CoreException e1) {
+ J2EEUIPlugin.logError(e1);
+ }
+ //IJavaProject javaP = JemProjectUtilities.getJavaProject(aProject);
+ List oldBuilders = new ArrayList();
+ oldBuilders.add("org.eclipse.wst.common.modulecore.ComponentStructuralBuilder"); //$NON-NLS-1$
+ oldBuilders.add("org.eclipse.wst.common.modulecore.ComponentStructuralBuilderDependencyResolver"); //$NON-NLS-1$
+ oldBuilders.add("org.eclipse.wst.common.modulecore.DependencyGraphBuilder"); //$NON-NLS-1$
+ try {
+ J2EEProjectUtilities.removeBuilders(aProject,oldBuilders);
+ } catch (CoreException e) {
+ J2EEUIPlugin.logError(e);
+ }
+ }
+
+ public String getFacetFromProject(IProject aProject) {
+ return J2EEProjectUtilities.getJ2EEProjectType(aProject);
+ }
+
+
+ protected IDataModel setupJavaInstallAction(IProject aProject, boolean existing,String srcFolder) {
+ IDataModel dm = DataModelFactory.createDataModel(new JavaFacetInstallDataModelProvider());
+ dm.setProperty(IFacetDataModelProperties.FACET_PROJECT_NAME, aProject.getName());
+ String jVersion = "1.4"; //$NON-NLS-1$
+ IScopeContext context = new ProjectScope( project );
+ IEclipsePreferences prefs
+ = context.getNode( JavaCore.PLUGIN_ID );
+ if (JavaCore.VERSION_1_5.equals(prefs.get(JavaCore.COMPILER_COMPLIANCE,JavaCore.VERSION_1_4))) {
+ jVersion = "5.0"; //$NON-NLS-1$
+ }
+ dm.setProperty(IFacetDataModelProperties.FACET_VERSION_STR, jVersion);
+ if (!existing)
+ dm.setStringProperty(IJavaFacetInstallDataModelProperties.SOURCE_FOLDER_NAME, srcFolder);
+ return dm;
+ }
+
+ protected IDataModel setupUtilInstallAction(IProject aProject,String specVersion) {
+ IDataModel aFacetInstallDataModel = DataModelFactory.createDataModel(new UtilityFacetInstallDataModelProvider());
+ aFacetInstallDataModel.setProperty(IFacetDataModelProperties.FACET_PROJECT_NAME, aProject.getName());
+ aFacetInstallDataModel.setProperty(IFacetDataModelProperties.FACET_VERSION_STR, specVersion);
+ aFacetInstallDataModel.setBooleanProperty(IJ2EEModuleFacetInstallDataModelProperties.ADD_TO_EAR,false);
+ aFacetInstallDataModel.setStringProperty(IJ2EEModuleFacetInstallDataModelProperties.EAR_PROJECT_NAME,null);
+ return aFacetInstallDataModel;
+ }
+ protected IDataModel setupEarInstallAction(IProject aProject,String specVersion) {
+ IDataModel earFacetInstallDataModel = DataModelFactory.createDataModel(new EarFacetInstallDataModelProvider());
+ earFacetInstallDataModel.setProperty(IFacetDataModelProperties.FACET_PROJECT_NAME, aProject.getName());
+ earFacetInstallDataModel.setProperty(IFacetDataModelProperties.FACET_VERSION_STR, specVersion);
+
+ return earFacetInstallDataModel;
+ }
+ protected IDataModel setupAppClientInstallAction(IProject aProject,String specVersion) {
+ IDataModel aFacetInstallDataModel = DataModelFactory.createDataModel(new AppClientFacetInstallDataModelProvider());
+ aFacetInstallDataModel.setProperty(IFacetDataModelProperties.FACET_PROJECT_NAME, aProject.getName());
+ aFacetInstallDataModel.setProperty(IFacetDataModelProperties.FACET_VERSION_STR, specVersion);
+ aFacetInstallDataModel.setBooleanProperty(IJ2EEModuleFacetInstallDataModelProperties.ADD_TO_EAR,false);
+ aFacetInstallDataModel.setStringProperty(IJ2EEModuleFacetInstallDataModelProperties.EAR_PROJECT_NAME,null);
+ aFacetInstallDataModel.setBooleanProperty(IAppClientFacetInstallDataModelProperties.CREATE_DEFAULT_MAIN_CLASS,false);
+ return aFacetInstallDataModel;
+ }
+ protected IDataModel setupConnectorInstallAction(IProject aProject,String specVersion) {
+ IDataModel aFacetInstallDataModel = DataModelFactory.createDataModel(new ConnectorFacetInstallDataModelProvider());
+ aFacetInstallDataModel.setProperty(IFacetDataModelProperties.FACET_PROJECT_NAME, aProject.getName());
+ aFacetInstallDataModel.setProperty(IFacetDataModelProperties.FACET_VERSION_STR, specVersion);
+ aFacetInstallDataModel.setBooleanProperty(IJ2EEModuleFacetInstallDataModelProperties.ADD_TO_EAR,false);
+ aFacetInstallDataModel.setStringProperty(IJ2EEModuleFacetInstallDataModelProperties.EAR_PROJECT_NAME,null);
+ return aFacetInstallDataModel;
+ }
+
+ private void addFacets(IProject aProject) {
+ StructureEdit edit = null;
+ try {
+ edit = StructureEdit.getStructureEditForWrite(aProject);
+ if (edit == null) return; // Not a component project....
+ edit.getModuleStructuralModel().setUseOldFormat(true);
+ if (edit.getComponent() == null) return; // Can't migrate
+ ComponentType type = edit.getComponent().getComponentType();
+ if (type == null) return; // Can't migrate
+ String compId = type.getComponentTypeId();
+ String specVersion = edit.getComponent().getComponentType().getVersion();
+ moveMetaProperties(edit.getComponent(),type);
+ addFacetsToProject(aProject, compId, specVersion,true);
+ }
+ finally {
+ if (edit != null) {
+ edit.save(null);
+ edit.getModuleStructuralModel().setUseOldFormat(false);
+ edit.dispose();
+ }
+ }
+
+ }
+
+ private void moveMetaProperties(WorkbenchComponent component, ComponentType type) {
+ List props = type.getProperties();
+ List compProps = component.getProperties();
+ for (Iterator iter = props.iterator(); iter.hasNext();) {
+ Property element = (Property) iter.next();
+ Property newProp = ComponentcoreFactory.eINSTANCE.createProperty();
+ newProp.setName(element.getName());
+ newProp.setValue(element.getValue());
+ compProps.add(newProp);
+ }
+ props.clear();
+ }
+
+ private void addFacetsToProject(IProject aProject, String compId, String specVersion,boolean existing) {
+ if (compId.equals(J2EEProjectUtilities.DYNAMIC_WEB))
+ installWEBFacets(aProject,specVersion,existing);
+ else if (compId.equals(J2EEProjectUtilities.EJB))
+ installEJBFacets(aProject,specVersion,existing);
+ else if (compId.equals(J2EEProjectUtilities.APPLICATION_CLIENT))
+ installAppClientFacets(aProject,specVersion,existing);
+ else if (compId.equals(J2EEProjectUtilities.ENTERPRISE_APPLICATION))
+ installEARFacets(aProject,specVersion,existing);
+ else if (compId.equals(J2EEProjectUtilities.JCA))
+ installConnectorFacets(aProject,specVersion,existing);
+ else if (compId.equals(J2EEProjectUtilities.UTILITY))
+ installUtilityFacets(aProject,specVersion,existing);
+ else if (compId.equals(J2EEProjectUtilities.STATIC_WEB))
+ installStaticWebFacets(aProject,specVersion,existing);
+ }
+
+ private void installStaticWebFacets(IProject project2, String specVersion, boolean existing) {
+ IDataModel dm = DataModelFactory.createDataModel(new FacetProjectCreationDataModelProvider());
+ dm.setProperty(IFacetProjectCreationDataModelProperties.FACET_PROJECT_NAME, project2.getName());
+ FacetDataModelMap facetDMs = (FacetDataModelMap) dm.getProperty(IFacetProjectCreationDataModelProperties.FACET_DM_MAP);
+ //facetDMs.add(setupJavaInstallAction(webProj,existing,CreationConstants.DEFAULT_WEB_SOURCE_FOLDER));
+ IDataModel newModel = setupStaticWebInstallAction(project2);
+ facetDMs.add(newModel);
+ //setRuntime(webProj,dm); //Setting runtime property
+ try {
+ /**
+ * Warning cleanup 12/07/2005
+ */
+ //IStatus stat = dm.getDefaultOperation().execute(null,null);
+ dm.getDefaultOperation().execute(null,null);
+ } catch (ExecutionException e) {
+ Throwable realException = e.getCause();
+ if (realException != null && realException instanceof CoreException) {
+ IStatus st = ((CoreException)realException).getStatus();
+ String message = st != null ? st.toString() : ""; //$NON-NLS-1$
+ J2EEUIPlugin.logError(message, realException);
+ }
+ }
+ }
+
+ private IDataModel setupStaticWebInstallAction(IProject project2) {
+ IDataModel webFacetInstallDataModel = DataModelFactory.createDataModel(new SimpleWebFacetInstallDataModelProvider());
+ webFacetInstallDataModel.setProperty(IFacetDataModelProperties.FACET_PROJECT_NAME, project2.getName());
+ webFacetInstallDataModel.setProperty(IFacetDataModelProperties.FACET_VERSION_STR, "1.0"); //$NON-NLS-1$
+
+ return webFacetInstallDataModel;
+ }
+
+ private void installUtilityFacets(IProject aProject, String specVersion, boolean existing) {
+ replaceDeployablesOutputIfNecessary(project);
+ IDataModel dm = DataModelFactory.createDataModel(new FacetProjectCreationDataModelProvider());
+ dm.setProperty(IFacetProjectCreationDataModelProperties.FACET_PROJECT_NAME, aProject.getName());
+ FacetDataModelMap facetDMs = (FacetDataModelMap) dm.getProperty(IFacetProjectCreationDataModelProperties.FACET_DM_MAP);
+ facetDMs.add(setupJavaInstallAction(aProject,existing,"src")); //$NON-NLS-1$
+ IDataModel newModel = setupUtilInstallAction(aProject,specVersion);
+ facetDMs.add(newModel);
+ try {
+ /**
+ * Warning cleanup 12/07/2005
+ */
+ //IStatus stat = dm.getDefaultOperation().execute(null,null);
+ dm.getDefaultOperation().execute(null,null);
+ } catch (ExecutionException e) {
+ Throwable realException = e.getCause();
+ if (realException != null && realException instanceof CoreException) {
+ IStatus st = ((CoreException)realException).getStatus();
+ String message = st != null ? st.toString() : ""; //$NON-NLS-1$
+ J2EEUIPlugin.logError(message, realException);
+ }
+ }
+
+ }
+
+ private void installConnectorFacets(IProject aProject, String specVersion, boolean existing) {
+ replaceDeployablesOutputIfNecessary(project);
+ IDataModel dm = DataModelFactory.createDataModel(new FacetProjectCreationDataModelProvider());
+ dm.setProperty(IFacetProjectCreationDataModelProperties.FACET_PROJECT_NAME, aProject.getName());
+ FacetDataModelMap facetDMs = (FacetDataModelMap) dm.getProperty(IFacetProjectCreationDataModelProperties.FACET_DM_MAP);
+ facetDMs.add(setupJavaInstallAction(aProject,existing,J2EEPlugin.getDefault().getJ2EEPreferences().getString(J2EEPreferences.Keys.JCA_CONTENT_FOLDER)));
+ IDataModel newModel = setupConnectorInstallAction(aProject,specVersion);
+ facetDMs.add(newModel);
+ try {
+ /**
+ * Warning cleanup 12/07/2005
+ */
+ //IStatus stat = dm.getDefaultOperation().execute(null,null);
+ dm.getDefaultOperation().execute(null,null);
+ } catch (ExecutionException e) {
+ Throwable realException = e.getCause();
+ if (realException != null && realException instanceof CoreException) {
+ IStatus st = ((CoreException)realException).getStatus();
+ String message = st != null ? st.toString() : ""; //$NON-NLS-1$
+ J2EEUIPlugin.logError(message, realException);
+ }
+ }
+
+ }
+
+ private void installEARFacets(IProject aProject, String specVersion, boolean existing) {
+ IDataModel dm = DataModelFactory.createDataModel(new FacetProjectCreationDataModelProvider());
+ dm.setProperty(IFacetProjectCreationDataModelProperties.FACET_PROJECT_NAME, aProject.getName());
+ FacetDataModelMap facetDMs = (FacetDataModelMap) dm.getProperty(IFacetProjectCreationDataModelProperties.FACET_DM_MAP);
+ IDataModel newModel = setupEarInstallAction(aProject,specVersion);
+ facetDMs.add(newModel);
+ try {
+ /**
+ * Warning cleanup 12/07/2005
+ */
+ //IStatus stat = dm.getDefaultOperation().execute(null,null);
+ dm.getDefaultOperation().execute(null,null);
+ } catch (ExecutionException e) {
+ Throwable realException = e.getCause();
+ if (realException != null && realException instanceof CoreException) {
+ IStatus st = ((CoreException)realException).getStatus();
+ String message = st != null ? st.toString() : ""; //$NON-NLS-1$
+ J2EEUIPlugin.logError(message, realException);
+ }
+ }
+
+ }
+
+ private void installAppClientFacets(IProject aProject, String specVersion, boolean existing) {
+ replaceDeployablesOutputIfNecessary(project);
+ IDataModel dm = DataModelFactory.createDataModel(new FacetProjectCreationDataModelProvider());
+ dm.setProperty(IFacetProjectCreationDataModelProperties.FACET_PROJECT_NAME, aProject.getName());
+ FacetDataModelMap facetDMs = (FacetDataModelMap) dm.getProperty(IFacetProjectCreationDataModelProperties.FACET_DM_MAP);
+ facetDMs.add(setupJavaInstallAction(aProject,existing,J2EEPlugin.getDefault().getJ2EEPreferences().getString(J2EEPreferences.Keys.APP_CLIENT_CONTENT_FOLDER)));
+ IDataModel newModel = setupAppClientInstallAction(aProject,specVersion);
+ facetDMs.add(newModel);
+ try {
+ /**
+ * Warning cleanup 12/07/2005
+ */
+ //IStatus stat = dm.getDefaultOperation().execute(null,null);
+ dm.getDefaultOperation().execute(null,null);
+ } catch (ExecutionException e) {
+ Throwable realException = e.getCause();
+ if (realException != null && realException instanceof CoreException) {
+ IStatus st = ((CoreException)realException).getStatus();
+ String message = st != null ? st.toString() : ""; //$NON-NLS-1$
+ J2EEUIPlugin.logError(message, realException);
+ }
+ }
+
+ }
+
+ private void installEJBFacets(IProject ejbProject2,String ejbVersion, boolean existing) {
+ replaceDeployablesOutputIfNecessary(project);
+ IDataModel dm = DataModelFactory.createDataModel(new FacetProjectCreationDataModelProvider());
+ dm.setProperty(IFacetProjectCreationDataModelProperties.FACET_PROJECT_NAME, ejbProject2.getName());
+ FacetDataModelMap facetDMs = (FacetDataModelMap) dm.getProperty(IFacetProjectCreationDataModelProperties.FACET_DM_MAP);
+ facetDMs.add(setupJavaInstallAction(ejbProject2,existing,J2EEPlugin.getDefault().getJ2EEPreferences().getString(J2EEPreferences.Keys.EJB_CONTENT_FOLDER)));
+ IDataModel newModel = setupEjbInstallAction(ejbProject2,ejbVersion,existing);
+ facetDMs.add(newModel);
+ //setRuntime(ejbProject2,dm); //Setting runtime property
+ try {
+ /**
+ * Warning cleanup 12/07/2005
+ */
+ //IStatus stat = dm.getDefaultOperation().execute(null,null);
+ dm.getDefaultOperation().execute(null,null);
+ } catch (ExecutionException e) {
+ Throwable realException = e.getCause();
+ if (realException != null && realException instanceof CoreException) {
+ IStatus st = ((CoreException)realException).getStatus();
+ String message = st != null ? st.toString() : ""; //$NON-NLS-1$
+ J2EEUIPlugin.logError(message, realException);
+ }
+ }
+
+ }
+ private void installWEBFacets(IProject webProj,String specVersion, boolean existing) {
+ removeOldWebContainerIfNecessary(project);
+ replaceDeployablesOutputIfNecessary(project);
+
+ IDataModel dm = DataModelFactory.createDataModel(new FacetProjectCreationDataModelProvider());
+ dm.setProperty(IFacetProjectCreationDataModelProperties.FACET_PROJECT_NAME, webProj.getName());
+ FacetDataModelMap facetDMs = (FacetDataModelMap) dm.getProperty(IFacetProjectCreationDataModelProperties.FACET_DM_MAP);
+ facetDMs.add(setupJavaInstallAction(webProj,existing, CommonFrameworksPlugin.getDefault().getPluginPreferences().getString(CommonFrameworksPlugin.DEFAULT_SOURCE_FOLDER)));
+ IDataModel newModel = setupWebInstallAction(webProj,specVersion);
+ facetDMs.add(newModel);
+ //setRuntime(webProj,dm); //Setting runtime property
+ try {
+ /**
+ * Warning cleanup 12/07/2005
+ */
+ //IStatus stat = dm.getDefaultOperation().execute(null,null);
+ dm.getDefaultOperation().execute(null,null);
+ } catch (ExecutionException e) {
+ Throwable realException = e.getCause();
+ if (realException != null && realException instanceof CoreException) {
+ IStatus st = ((CoreException)realException).getStatus();
+ String message = st != null ? st.toString() : ""; //$NON-NLS-1$
+ J2EEUIPlugin.logError(message, realException);
+ }
+ } catch (Exception ex) {
+ if (ex instanceof CoreException) {
+ IStatus st = ((CoreException)ex).getStatus();
+ String message = st != null ? st.toString() : ""; //$NON-NLS-1$
+ J2EEUIPlugin.logError(message, ex);
+ }
+ }
+
+
+ }
+ private void replaceDeployablesOutputIfNecessary(IProject proj) {
+
+
+ IJavaProject jproj = JemProjectUtilities.getJavaProject(proj);
+ final IClasspathEntry[] current;
+ boolean deployablesFound = false;
+ try {
+ current = jproj.getRawClasspath();
+ List updatedList = new ArrayList();
+ IPath sourcePath = null;
+ for (int i = 0; i < current.length; i++) {
+ IClasspathEntry entry = current[i];
+ if ((entry.getEntryKind() == IClasspathEntry.CPE_SOURCE) && (entry.getOutputLocation() != null && entry.getOutputLocation().toString().indexOf(OLD_DEPLOYABLES_PATH) != -1)) {
+ sourcePath = entry.getPath();
+ updatedList.add(JavaCore.newSourceEntry(sourcePath));
+ deployablesFound = true;
+ }
+ else
+ updatedList.add(entry);
+ }
+ if (deployablesFound) {
+ IClasspathEntry[] updated = (IClasspathEntry[])updatedList.toArray(new IClasspathEntry[updatedList.size()]);
+ jproj.setRawClasspath(updated, null);
+ jproj.save(null, true);
+ }
+ } catch (JavaModelException e) {
+ J2EEUIPlugin.logError(e);
+ }
+
+
+
+ }
+
+ private void removeOldWebContainerIfNecessary(IProject webProj) {
+
+ IJavaProject jproj = JemProjectUtilities.getJavaProject(webProj);
+ final IClasspathEntry[] current;
+ try {
+ current = jproj.getRawClasspath();
+ List updatedList = new ArrayList();
+ boolean useDefaultWebAppLibraries = J2EEComponentClasspathContainerUtils.getDefaultUseWebAppLibraries();
+ for (int i = 0; i < current.length; i++) {
+ IClasspathEntry entry = current[i];
+ // the web container is added to the classpath if:
+ // 1. they don't have an entry for WEB_LIB_CONTAINER AND
+ // 2. they have an entry for WEB_LIB_PATH BUT
+ // they do not have the preference checked to use the Web App classpath container
+ if ((entry.getPath().toString().indexOf(WEB_LIB_CONTAINER) == -1) &&
+ ((entry.getPath().toString().indexOf(WEB_LIB_PATH) == -1) || !useDefaultWebAppLibraries))
+ updatedList.add(entry);
+ }
+ IClasspathEntry[] updated = (IClasspathEntry[])updatedList.toArray(new IClasspathEntry[updatedList.size()]);
+ jproj.setRawClasspath(updated, null);
+ jproj.save(null, true);
+ } catch (JavaModelException e) {
+ J2EEUIPlugin.logError(e);
+ }
+
+ }
+
+ protected IRuntime getRuntimeByID(String id) {
+ IRuntime[] targets = ServerUtil.getRuntimes("", ""); //$NON-NLS-1$ //$NON-NLS-2$
+ for (int i = 0; i < targets.length; i++) {
+ IRuntime target = targets[i];
+ if (id.equals(target.getId()))
+ return target;
+ }
+ return null;
+ }
+
+ protected IDataModel setupEjbInstallAction(IProject aProject,String ejbVersion, boolean existing) {
+ IDataModel ejbFacetInstallDataModel = DataModelFactory.createDataModel(new EjbFacetInstallDataModelProvider());
+ ejbFacetInstallDataModel.setProperty(IFacetDataModelProperties.FACET_PROJECT_NAME, aProject.getName());
+ ejbFacetInstallDataModel.setProperty(IFacetDataModelProperties.FACET_VERSION_STR, ejbVersion);
+ ejbFacetInstallDataModel.setBooleanProperty(IJ2EEModuleFacetInstallDataModelProperties.ADD_TO_EAR,false);
+ ejbFacetInstallDataModel.setStringProperty(IJ2EEModuleFacetInstallDataModelProperties.EAR_PROJECT_NAME,null);
+ if (!existing)
+ ejbFacetInstallDataModel.setProperty(IEjbFacetInstallDataModelProperties.CONFIG_FOLDER, J2EEPlugin.getDefault().getJ2EEPreferences().getString(J2EEPreferences.Keys.EJB_CONTENT_FOLDER));
+ return ejbFacetInstallDataModel;
+ }
+
+ protected IDataModel setupWebInstallAction(IProject aProject,String specVersion) {
+ IDataModel webFacetInstallDataModel = DataModelFactory.createDataModel(new WebFacetInstallDataModelProvider());
+ webFacetInstallDataModel.setProperty(IFacetDataModelProperties.FACET_PROJECT_NAME, aProject.getName());
+ webFacetInstallDataModel.setProperty(IFacetDataModelProperties.FACET_VERSION_STR, specVersion);
+ webFacetInstallDataModel.setBooleanProperty(IJ2EEModuleFacetInstallDataModelProperties.ADD_TO_EAR,false);
+ webFacetInstallDataModel.setStringProperty(IJ2EEModuleFacetInstallDataModelProperties.EAR_PROJECT_NAME,null);
+ return webFacetInstallDataModel;
+ }
+
+
+}
diff --git a/plugins/org.eclipse.wst.web.ui/plugin.xml b/plugins/org.eclipse.wst.web.ui/plugin.xml
index 6dae27e..d2547b1 100644
--- a/plugins/org.eclipse.wst.web.ui/plugin.xml
+++ b/plugins/org.eclipse.wst.web.ui/plugin.xml
@@ -59,6 +59,14 @@
</extension>
<extension
+ point="org.eclipse.ui.ide.markerResolution">
+ <markerResolutionGenerator
+ markerType="org.eclipse.wst.common.modulecore.ModuleCoreValidatorMarker"
+ class="org.eclipse.wst.web.ui.internal.ModuleCoreValidatorMarkerResolutions">
+ </markerResolutionGenerator>
+ </extension>
+
+ <extension
point="org.eclipse.ui.perspectives">
<perspective
name="%perspective.name"
diff --git a/plugins/org.eclipse.wst.web.ui/static_web_ui/org/eclipse/wst/web/ui/internal/ModuleCoreValidatorMarkerResolutions.java b/plugins/org.eclipse.wst.web.ui/static_web_ui/org/eclipse/wst/web/ui/internal/ModuleCoreValidatorMarkerResolutions.java
new file mode 100644
index 0000000..7a59260
--- /dev/null
+++ b/plugins/org.eclipse.wst.web.ui/static_web_ui/org/eclipse/wst/web/ui/internal/ModuleCoreValidatorMarkerResolutions.java
@@ -0,0 +1,123 @@
+/******************************************************************************
+ * Copyright (c) 2005 BEA Systems, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are 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:
+ * Konstantin Komissarchik - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.wst.web.ui.internal;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.IMarkerResolution;
+import org.eclipse.ui.IMarkerResolutionGenerator;
+import org.eclipse.ui.views.markers.WorkbenchMarkerResolution;
+import org.eclipse.wst.common.componentcore.internal.ModuleMigratorManager;
+import org.eclipse.wst.web.ui.internal.WSTWebUIPlugin;
+
+/**
+ * This has been deprecated since WTP 3.1.2 and will be deleted post WTP 3.2.
+ * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=292934
+ * @deprecated
+ * @author <a href="mailto:kosta@bea.com">Konstantin Komissarchik</a>
+ */
+public final class ModuleCoreValidatorMarkerResolutions
+
+ implements IMarkerResolutionGenerator
+
+{
+ public IMarkerResolution[] getResolutions( IMarker marker )
+ {
+ return new IMarkerResolution[]
+ {
+ new ModuleCoreMigrationResolution( marker )
+ };
+ }
+
+ private class ModuleCoreMigrationResolution extends WorkbenchMarkerResolution
+
+ {
+ private final IMarker theMarker;
+ private final String MARKERTYPE = "org.eclipse.wst.common.modulecore.ModuleCoreValidatorMarker"; //$NON-NLS-1$
+
+ public ModuleCoreMigrationResolution( IMarker marker )
+ {
+ this.theMarker = marker;
+ }
+
+ public String getLabel()
+ {
+ return Resources.migrateMetaData;
+ }
+
+
+
+ public void run( IMarker marker )
+ {
+
+ IProject proj = marker.getResource().getProject();
+
+ try
+ {
+ ModuleMigratorManager manager = ModuleMigratorManager.getManager(proj);
+ if (!manager.isMigrating() && !ResourcesPlugin.getWorkspace().isTreeLocked())
+ manager.migrateOldMetaData(proj,true);
+ }
+ catch( Exception e )
+ {
+ WSTWebUIPlugin.logError(e);
+ }
+ }
+
+ public String getDescription() {
+ return Resources.migrateMetaData;
+ }
+
+ public Image getImage() {
+ return null;
+ }
+
+ @Override
+ public IMarker[] findOtherMarkers(IMarker[] markers) {
+ List marks = new ArrayList();
+ for (int i = 0; i < markers.length; i++) {
+ IMarker marker = markers[i];
+ try {
+ if (marker.getType().equals(MARKERTYPE) && !(marker.equals(theMarker)))
+ marks.add(marker);
+ } catch (CoreException e) {
+ WSTWebUIPlugin.logError(e);
+ }
+ }
+ return (IMarker[])marks.toArray(new IMarker[marks.size()]);
+ }
+
+ }
+
+ private static final class Resources
+
+ extends NLS
+
+ {
+ public static String migrateMetaData;
+
+ static
+ {
+ initializeMessages( ModuleCoreValidatorMarkerResolutions.class.getName(),
+ Resources.class );
+ }
+ }
+
+
+}
diff --git a/plugins/org.eclipse.wst.web.ui/static_web_ui/org/eclipse/wst/web/ui/internal/ModuleCoreValidatorMarkerResolutions.properties b/plugins/org.eclipse.wst.web.ui/static_web_ui/org/eclipse/wst/web/ui/internal/ModuleCoreValidatorMarkerResolutions.properties
new file mode 100644
index 0000000..4491dfe
--- /dev/null
+++ b/plugins/org.eclipse.wst.web.ui/static_web_ui/org/eclipse/wst/web/ui/internal/ModuleCoreValidatorMarkerResolutions.properties
@@ -0,0 +1,11 @@
+###############################################################################
+# Copyright (c) 2005, 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are 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:
+# IBM Corporation - initial API and implementation
+###############################################################################
+migrateMetaData=Migrate metadata