[98766] Enabling Access to editmodel through adapter
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EMFWorkbenchContext.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EMFWorkbenchContext.java
index 8929ec5..4c903a8 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EMFWorkbenchContext.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EMFWorkbenchContext.java
@@ -151,7 +151,7 @@
- private EditModel getExistingEditModel(String editModelID, Map params, boolean isReadOnly) {
+ public EditModel getExistingEditModel(String editModelID, Map params, boolean isReadOnly) {
EditModel editModel = null;
if (isReadOnly) {
editModel = (EditModel) this.readOnlyModels.get(getCacheID(editModelID, params));
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ArtifactEdit.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ArtifactEdit.java
index 4fb2f1f..3afb8f1 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ArtifactEdit.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ArtifactEdit.java
@@ -11,7 +11,9 @@
import java.util.List;
import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Platform;
import org.eclipse.emf.common.command.CommandStack;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
@@ -56,7 +58,7 @@
* @see ArtifactEditModel
* @since 1.0
*/
-public class ArtifactEdit implements IEditModelHandler {
+public class ArtifactEdit implements IEditModelHandler, IAdaptable{
public static final Class ADAPTER_TYPE = ArtifactEdit.class;
private final ArtifactEditModel artifactEditModel;
@@ -506,4 +508,8 @@
public Resource getResource(URI aUri) {
return getArtifactEditModel().getResource(aUri);
}
+
+ public Object getAdapter(Class adapterType) {
+ return Platform.getAdapterManager().getAdapter(this, adapterType);
+ }
}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ModuleCoreNature.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ModuleCoreNature.java
index a4e4a74..2ac4784 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ModuleCoreNature.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ModuleCoreNature.java
@@ -38,6 +38,7 @@
import org.eclipse.wst.common.componentcore.internal.impl.ModuleURIUtil;
import org.eclipse.wst.common.componentcore.internal.impl.WTPResourceFactoryRegistry;
import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
+import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel;
import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelNature;
/**
@@ -523,5 +524,9 @@
return null;
}
+ public EditModel getExistingEditModel(String artifactEditModelId,Map params, boolean isReadOnly) {
+ return getEmfContext().getExistingEditModel(artifactEditModelId,params,isReadOnly);
+ }
+
}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ArtifactEditModel.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ArtifactEditModel.java
index 7d386d5..93248f0 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ArtifactEditModel.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ArtifactEditModel.java
@@ -17,6 +17,7 @@
import org.eclipse.core.runtime.Platform;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.wst.common.componentcore.ArtifactEdit;
import org.eclipse.wst.common.componentcore.ComponentCore;
import org.eclipse.wst.common.componentcore.internal.impl.PlatformURLModuleConnection;
import org.eclipse.wst.common.componentcore.resources.ComponentHandle;
@@ -53,6 +54,7 @@
public class ArtifactEditModel extends EditModel implements IAdaptable {
+ public static final Class ADAPTER_TYPE = ArtifactEditModel.class;
private final ComponentHandle componentHandle;
private final IPath modulePath;
private final IVirtualComponent virtualComponent;
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModulecorePlugin.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModulecorePlugin.java
index 9b343c4..eed6366 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModulecorePlugin.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModulecorePlugin.java
@@ -6,6 +6,7 @@
import org.eclipse.core.runtime.IAdapterManager;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Plugin;
+import org.eclipse.wst.common.componentcore.ArtifactEdit;
import org.eclipse.wst.common.componentcore.internal.impl.PlatformURLModuleConnection;
import org.eclipse.wst.common.componentcore.internal.impl.WTPModulesInit;
import org.eclipse.wst.common.componentcore.internal.util.ArtifactEditAdapterFactory;
@@ -40,6 +41,7 @@
manager.registerAdapters(new ModuleCoreEclipseAdapterFactory(), ModuleStructuralModel.class);
manager.registerAdapters(new ArtifactEditAdapterFactory(), ArtifactEditModel.class);
+ manager.registerAdapters(new ArtifactEditAdapterFactory(), ArtifactEdit.class);
PlatformURLModuleConnection.startup();
WTPModulesInit.init();
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeNode.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeNode.java
index df51e4f..7c0c63a 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeNode.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeNode.java
@@ -24,6 +24,7 @@
import org.eclipse.wst.common.componentcore.internal.StructureEdit;
import org.eclipse.wst.common.componentcore.internal.WorkbenchComponent;
import org.eclipse.wst.common.componentcore.internal.util.IPathProvider;
+import org.eclipse.wst.common.internal.emf.utilities.EtoolsCopyUtility;
/**
* <p>
@@ -190,10 +191,9 @@
if(newResource == null) {
// flesh out the tree
- newResource = ComponentcorePackage.eINSTANCE.getComponentcoreFactory().createComponentResource();
if ((toCreateResourceAlways) || (foundResource = eclipseContainer.findMember(aPath)) != null) {
+ newResource = ComponentcorePackage.eINSTANCE.getComponentcoreFactory().createComponentResource();
newResource.setComponent(moduleResource.getComponent());
-
newResource.setRuntimePath(runtimeURI);
newResource.setSourcePath(eclipseContainer.getProjectRelativePath().append(aPath));
resultSet.add(newResource);
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ArtifactEditAdapterFactory.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ArtifactEditAdapterFactory.java
index 502bf1c..ed515d6 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ArtifactEditAdapterFactory.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ArtifactEditAdapterFactory.java
@@ -10,9 +10,22 @@
*******************************************************************************/
package org.eclipse.wst.common.componentcore.internal.util;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.emf.common.util.URI;
import org.eclipse.wst.common.componentcore.ArtifactEdit;
+import org.eclipse.wst.common.componentcore.ModuleCoreNature;
+import org.eclipse.wst.common.componentcore.UnresolveableURIException;
import org.eclipse.wst.common.componentcore.internal.ArtifactEditModel;
+import org.eclipse.wst.common.componentcore.internal.StructureEdit;
+import org.eclipse.wst.common.componentcore.internal.WorkbenchComponent;
+import org.eclipse.wst.common.componentcore.internal.impl.ArtifactEditModelFactory;
+import org.eclipse.wst.common.componentcore.internal.impl.ModuleURIUtil;
+import org.eclipse.wst.common.componentcore.resources.ComponentHandle;
+import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelFactory;
/**
* <p>
@@ -29,6 +42,7 @@
public class ArtifactEditAdapterFactory implements IAdapterFactory {
private static final Class ARTIFACT_EDIT_MODEL_CLASS = ArtifactEditModel.class;
+ private static final Class ARTIFACT_EDIT_CLASS = ArtifactEdit.class;
/**
* <p>
@@ -37,18 +51,44 @@
* @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, java.lang.Class)
*/
public Object getAdapter(Object anAdaptableObject, Class anAdapterType) {
+ if (anAdapterType == ArtifactEditModel.ADAPTER_TYPE) {
+ if (anAdaptableObject instanceof ArtifactEdit) {
+ ArtifactEdit edit = (ArtifactEdit)anAdaptableObject;
+ ComponentHandle aHandle = edit.getComponentHandle();
+ URI componentURI = ModuleURIUtil.fullyQualifyURI(aHandle);
+ ModuleCoreNature nature = ModuleCoreNature.getModuleCoreNature(edit.getComponent().getProject());
+ Map params = new HashMap();
+ params.put(ArtifactEditModelFactory.PARAM_MODULE_URI, componentURI);
+ return nature.getExistingEditModel(getArtifactEditModelId(componentURI),params,edit.isReadOnly());
+ }
+ }
if (anAdapterType == ArtifactEdit.ADAPTER_TYPE) {
if (anAdaptableObject instanceof ArtifactEditModel)
return new ArtifactEdit((ArtifactEditModel) anAdaptableObject);
}
return null;
}
+ private String getArtifactEditModelId(URI aModuleURI) {
+ StructureEdit editUtility = null;
+ try {
+ IProject project = StructureEdit.getContainingProject(aModuleURI);
+ editUtility = StructureEdit.getStructureEditForRead(project);
+ WorkbenchComponent module = editUtility.findComponentByName(ModuleURIUtil.getDeployedName(aModuleURI));
+ return module.getComponentType().getComponentTypeId();
+ } catch (UnresolveableURIException uurie) {
+ // Ignore
+ } finally {
+ if (editUtility != null)
+ editUtility.dispose();
+ }
+ return null;
+ }
/**
* @see org.eclipse.core.runtime.IAdapterFactory#getAdapterList()
*/
public Class[] getAdapterList() {
- return new Class[]{ARTIFACT_EDIT_MODEL_CLASS};
+ return new Class[]{ARTIFACT_EDIT_MODEL_CLASS,ARTIFACT_EDIT_CLASS};
}
}
\ No newline at end of file