[156262] Artifact Edit changes
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 028e480..709cf5b 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
@@ -12,6 +12,7 @@
 
 import java.util.EventObject;
 import java.util.List;
+import java.util.Map;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IAdaptable;
@@ -300,13 +301,29 @@
 	 * Creates an instance facade for the given {@see WorkbenchComponent}.
 	 * </p>
 	 * 
-	 * @param aNature
-	 *            A non-null {@see ModuleCoreNature}&nbsp;for an accessible project
-	 * @param aModule
-	 *            A non-null {@see WorkbenchComponent}&nbsp;pointing to a module from the given
-	 *            {@see ModuleCoreNature}
+	 * @param aProject
+	 * @param toAccessAsReadOnly
+	 * @param forCreate
+	 * @param projectType
+	 * @throws IllegalArgumentException
 	 */
 	protected ArtifactEdit(IProject aProject, boolean toAccessAsReadOnly, boolean forCreate, String projectType) throws IllegalArgumentException {
+		
+		this(aProject,toAccessAsReadOnly,forCreate,projectType,null);
+	}
+	/**
+	 * <p>
+	 * Creates an instance facade for the given {@see WorkbenchComponent}.
+	 * </p>
+	 * 
+	 * @param aProject
+	 * @param toAccessAsReadOnly
+	 * @param forCreate
+	 * @param projectType - Used to pass specific editModel edit (Used to lookup factory)
+	 * @param editModelParams - Properties that can be used to create cacheKey on editModelFactory
+	 * @throws IllegalArgumentException
+	 */
+	protected ArtifactEdit(IProject aProject, boolean toAccessAsReadOnly, boolean forCreate, String projectType, Map editModelParams) throws IllegalArgumentException {
 
 		if (aProject == null || !aProject.isAccessible())
 			throw new IllegalArgumentException("Invalid project: " + aProject);
@@ -324,9 +341,9 @@
 		URI componentURI = ModuleURIUtil.fullyQualifyURI(aProject);
 
 		if (toAccessAsReadOnly)
-			artifactEditModel = nature.getArtifactEditModelForRead(componentURI, this, projectType);
+			artifactEditModel = nature.getArtifactEditModelForRead(componentURI, this, projectType, editModelParams);
 		else
-			artifactEditModel = nature.getArtifactEditModelForWrite(componentURI, this, projectType);
+			artifactEditModel = nature.getArtifactEditModelForWrite(componentURI, this, projectType, editModelParams);
 		isReadOnly = toAccessAsReadOnly;
 		isArtifactEditModelSelfManaged = true;
 		
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 7a78170..d506bc5 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
@@ -323,8 +323,17 @@
 		return getArtifactEditModelForRead(aModuleURI, anAccessorKey, null);
 	}
 	
-	public ArtifactEditModel getArtifactEditModelForRead(URI aModuleURI, Object anAccessorKey, String projectType) {
-		Map params = new HashMap();
+	/**
+	 * @param aModuleURI - used to lookup project
+	 * @param anAccessorKey - used to set client accessor
+	 * @param projectType - used to determine editmodel factory
+	 * @param params - passed for specialized processing in factory
+	 * @return ArtifactEditModel instance
+	 */
+	public ArtifactEditModel getArtifactEditModelForRead(URI aModuleURI, Object anAccessorKey, String projectType, Map params) {
+		
+		if (params == null)
+			params = new HashMap();
 		params.put(ArtifactEditModelFactory.PARAM_MODULE_URI, aModuleURI);
 		if (projectType !=null)
 			return (ArtifactEditModel) getEditModelForRead(projectType, anAccessorKey, params);
@@ -352,6 +361,11 @@
 		}
 		return null;
 	}
+	
+	public ArtifactEditModel getArtifactEditModelForRead(URI aModuleURI, Object anAccessorKey, String projectType) {
+		Map params = new HashMap();
+		return getArtifactEditModelForRead(aModuleURI, anAccessorKey, projectType, params);
+	}
 
 	/**
 	 * <p>
@@ -409,8 +423,17 @@
 	public ArtifactEditModel getArtifactEditModelForWrite(URI aModuleURI, Object anAccessorKey) {
 		return getArtifactEditModelForWrite(aModuleURI, anAccessorKey, null);
 	}
-	public ArtifactEditModel getArtifactEditModelForWrite(URI aModuleURI, Object anAccessorKey, String projectType) {
-		Map params = new HashMap();
+	/**
+	 * @param aModuleURI - used to lookup project
+	 * @param anAccessorKey - used to set client accessor
+	 * @param projectType - used to determine editmodel factory
+	 * @param params - passed for specialized processing in factory
+	 * @return ArtifactEditModel instance
+	 */
+	public ArtifactEditModel getArtifactEditModelForWrite(URI aModuleURI, Object anAccessorKey, String projectType, Map params) {
+		
+		if (params == null)
+			params = new HashMap();
 		params.put(ArtifactEditModelFactory.PARAM_MODULE_URI, aModuleURI);
 		if (projectType != null)
 			return  (ArtifactEditModel) getEditModelForWrite(projectType, anAccessorKey, params);
@@ -438,6 +461,10 @@
 		}
 		return null;
 	}
+	public ArtifactEditModel getArtifactEditModelForWrite(URI aModuleURI, Object anAccessorKey, String projectType) {
+		Map params = new HashMap();
+		return getArtifactEditModelForWrite(aModuleURI, anAccessorKey, projectType, params);
+	}
 
 	public String getNatureID() {
 		return MODULE_NATURE_ID;