[389963] URIResolver shared between new instances of a model
diff --git a/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/FileBufferModelManager.java b/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/FileBufferModelManager.java
index 6ae82d5..aad98e6 100644
--- a/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/FileBufferModelManager.java
+++ b/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/FileBufferModelManager.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2001, 2010 IBM Corporation and others.
+ * Copyright (c) 2001, 2012 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
@@ -53,6 +53,7 @@
import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
import org.eclipse.wst.sse.core.internal.provisional.exceptions.ResourceInUse;
import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
+import org.eclipse.wst.sse.core.internal.util.URIResolverExtension;
import org.eclipse.wst.sse.core.internal.util.URIResolver;
/**
@@ -102,7 +103,7 @@
/**
* A URIResolver instance of models built on java.io.Files
*/
- static class ExternalURIResolver implements URIResolver {
+ static class ExternalURIResolver implements URIResolver, URIResolverExtension {
IPath fLocation;
ExternalURIResolver(IPath location) {
@@ -164,13 +165,17 @@
public void setProject(IProject newProject) {
}
+
+ public URIResolver newInstance() {
+ return new ExternalURIResolver(fLocation != null ? (IPath) fLocation.clone() : null);
+ }
}
/**
* A URIResolver instance of models built on the extensible WST URI
* resolver
*/
- static class CommonURIResolver implements URIResolver {
+ static class CommonURIResolver implements URIResolver, URIResolverExtension {
String fLocation;
IPath fPath;
private IProject fProject;
@@ -182,6 +187,9 @@
fProject = workspaceFile.getProject();
}
+ private CommonURIResolver() {
+ }
+
public String getFileBaseLocation() {
return fLocation;
}
@@ -245,6 +253,14 @@
public void setProject(IProject newProject) {
fProject = newProject;
}
+
+ public URIResolver newInstance() {
+ CommonURIResolver resolver = new CommonURIResolver();
+ resolver.fLocation = fLocation;
+ resolver.fPath = (IPath) fPath.clone();
+ resolver.fProject = fProject;
+ return resolver;
+ }
}
/**
diff --git a/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/model/ModelManagerImpl.java b/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/model/ModelManagerImpl.java
index 82c1854..c195417 100644
--- a/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/model/ModelManagerImpl.java
+++ b/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/model/ModelManagerImpl.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2001, 2010 IBM Corporation and others.
+ * Copyright (c) 2001, 2012 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
@@ -80,6 +80,7 @@
import org.eclipse.wst.sse.core.internal.provisional.exceptions.ResourceInUse;
import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
import org.eclipse.wst.sse.core.internal.util.Assert;
+import org.eclipse.wst.sse.core.internal.util.URIResolverExtension;
import org.eclipse.wst.sse.core.internal.util.ProjectResolver;
import org.eclipse.wst.sse.core.internal.util.URIResolver;
import org.eclipse.wst.sse.core.internal.util.Utilities;
@@ -895,6 +896,9 @@
((AbstractStructuredModel) newModel).setContentTypeIdentifier(oldModel.getContentTypeIdentifier());
}
URIResolver oldResolver = oldModel.getResolver();
+ if (oldResolver instanceof URIResolverExtension) {
+ oldResolver = ((URIResolverExtension) oldResolver).newInstance();
+ }
newModel.setResolver(oldResolver);
try {
newModel.setId(DUPLICATED_MODEL);
diff --git a/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/util/URIResolverExtension.java b/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/util/URIResolverExtension.java
new file mode 100644
index 0000000..31224ed
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/util/URIResolverExtension.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2012 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.wst.sse.core.internal.util;
+
+/**
+ * Extension to the {@link URIResolver} interface. Implementing this interface
+ * allows for a new copy of the URIResolver to be created
+ *
+ */
+public interface URIResolverExtension {
+ /**
+ * Creates a new instance of the implementing {@link URIResolver}
+ *
+ * @return a new instance of the {@link URIResolver}
+ */
+ URIResolver newInstance();
+}
diff --git a/features/org.eclipse.wst.xml_core.feature.patch/buildnotes_org.eclipse.wst.xml_core.feature.patch.html b/features/org.eclipse.wst.xml_core.feature.patch/buildnotes_org.eclipse.wst.xml_core.feature.patch.html
index 0cb2086..ad16b36 100644
--- a/features/org.eclipse.wst.xml_core.feature.patch/buildnotes_org.eclipse.wst.xml_core.feature.patch.html
+++ b/features/org.eclipse.wst.xml_core.feature.patch/buildnotes_org.eclipse.wst.xml_core.feature.patch.html
@@ -12,5 +12,6 @@
<p>Bug <a href='https://bugs.eclipse.org/376202'>376608</a>. XSI types not correctly supported in Content Model</p>
<p>Bug <a href='https://bugs.eclipse.org/376220'>376914</a>. XSI types not correctly supported in Content Model - XSD component</p>
<p>Bug <a href='https://bugs.eclipse.org/379984'>379984</a>. getAttributeNode in ElementImpl should not perform modifications on the document</p>
+<p>Bug <a href='https://bugs.eclipse.org/389963'>389963</a>. URIResolver shared between new instances of a model</p>
</body>
-</head>
\ No newline at end of file
+</head>
diff --git a/features/org.eclipse.wst.xml_core.feature.patch/feature.properties b/features/org.eclipse.wst.xml_core.feature.patch/feature.properties
index 7165742..3d76b75 100644
--- a/features/org.eclipse.wst.xml_core.feature.patch/feature.properties
+++ b/features/org.eclipse.wst.xml_core.feature.patch/feature.properties
@@ -30,6 +30,7 @@
Bug https://bugs.eclipse.org/376608 XSI types not correctly supported in Content Model\n\
Bug https://bugs.eclipse.org/376914 XSI types not correctly supported in Content Model - XSD component\n\
Bug https://bugs.eclipse.org/379984 getAttributeNode in ElementImpl should not perform modifications on the document\n\
+Bug https://bugs.eclipse.org/389963 URIResolver shared between new instances of a model \n\
\n\
# "copyright" property - text of the "Feature Update Copyright"
copyright=\