Skip to main content
summaryrefslogtreecommitdiffstats
path: root/jpa
diff options
context:
space:
mode:
authorpfullbright2007-11-09 15:29:12 +0000
committerpfullbright2007-11-09 15:29:12 +0000
commit82eeb4abf3b912c44366973f7f1ea1e84cf55622 (patch)
treee50e56af74e736160f3d63df1effc0282399d033 /jpa
parent22035461086e7f739dba03bd217f7360bae6a7ab (diff)
downloadwebtools.dali-82eeb4abf3b912c44366973f7f1ea1e84cf55622.tar.gz
webtools.dali-82eeb4abf3b912c44366973f7f1ea1e84cf55622.tar.xz
webtools.dali-82eeb4abf3b912c44366973f7f1ea1e84cf55622.zip
fix for bug 208147 - we no longer hang on to "edit" state for emf resources
Diffstat (limited to 'jpa')
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/META-INF/MANIFEST.MF1
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaContentNode.java13
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmXmlJpaFileContentProvider.java104
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlRootContentNode.java18
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmArtifactEdit.java56
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceXmlJpaFileContentProvider.java101
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceXmlRootContentNode.java17
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/PersistenceArtifactEdit.java56
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaFacetPostInstallDelegate.java8
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/BaseJpaPlatform.java4
10 files changed, 253 insertions, 125 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.core/META-INF/MANIFEST.MF b/jpa/plugins/org.eclipse.jpt.core/META-INF/MANIFEST.MF
index ce8a9b8163..a7485662bf 100644
--- a/jpa/plugins/org.eclipse.jpt.core/META-INF/MANIFEST.MF
+++ b/jpa/plugins/org.eclipse.jpt.core/META-INF/MANIFEST.MF
@@ -26,6 +26,7 @@ Require-Bundle: org.eclipse.core.commands,
org.eclipse.jst.jee.ejb,
org.eclipse.text,
org.eclipse.wst.common.emf,
+ org.eclipse.wst.common.emfworkbench.integration,
org.eclipse.wst.common.frameworks,
org.eclipse.wst.common.modulecore,
org.eclipse.wst.common.project.facet.core,
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaContentNode.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaContentNode.java
index 5676d2e104..13c5f41997 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaContentNode.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaContentNode.java
@@ -22,19 +22,16 @@ package org.eclipse.jpt.core.internal;
public interface IJpaContentNode extends IJpaSourceObject
{
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @model kind="operation" required="true"
- * @generated
- */
- IJpaFile getJpaFile();
-
- /**
* Return a unique identifier for all of this class of content nodes
*/
Object getId();
/**
+ * Return the root content node containing this node
+ */
+ IJpaRootContentNode getRoot();
+
+ /**
* Return the text range to be used for selection. This is the text you want selected
* when selecting the object in the editor. StructureView uses this for selection
* from the structure to the source editor.
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmXmlJpaFileContentProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmXmlJpaFileContentProvider.java
index a70beb1c94..98a51c94da 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmXmlJpaFileContentProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmXmlJpaFileContentProvider.java
@@ -9,63 +9,59 @@
******************************************************************************/
package org.eclipse.jpt.core.internal.content.orm;
+import java.io.IOException;
import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.IPath;
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.impl.AdapterImpl;
import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase;
import org.eclipse.jpt.core.internal.IJpaFileContentProvider;
import org.eclipse.jpt.core.internal.IJpaRootContentNode;
import org.eclipse.jpt.core.internal.JptCorePlugin;
import org.eclipse.jpt.core.internal.content.orm.resource.OrmArtifactEdit;
-import org.eclipse.jpt.core.internal.emfutility.ComponentUtilities;
+import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelEvent;
+import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelListener;
public class OrmXmlJpaFileContentProvider implements IJpaFileContentProvider
{
- public static OrmXmlJpaFileContentProvider INSTANCE = new OrmXmlJpaFileContentProvider();
+ //singleton
+ private static final OrmXmlJpaFileContentProvider INSTANCE = new OrmXmlJpaFileContentProvider();
- private IFile file;
+ /**
+ * Return the singleton.
+ */
+ public static IJpaFileContentProvider instance() {
+ return INSTANCE;
+ }
/**
* Restrict access
*/
private OrmXmlJpaFileContentProvider() {
-
+ super();
}
public IJpaRootContentNode buildRootContent(IFile resourceFile) {
- file = resourceFile;
- IPath deployPath = ComponentUtilities.computeDeployPath(resourceFile);
- OrmArtifactEdit artifactEdit =
- OrmArtifactEdit.getArtifactEditForWrite(
- resourceFile.getProject(),
- deployPath.toString());
- OrmResource resource = artifactEdit.getOrmResource();
+ OrmArtifactEdit oae =
+ OrmArtifactEdit.getArtifactEditForRead(resourceFile.getProject());
+ OrmResource resource =
+ oae.getOrmResource(resourceFile);
XmlRootContentNode root = OrmFactory.eINSTANCE.createXmlRootContentNode();
-
- if (resourceFile.equals(resource.getFile())) {
- root.setArtifactEdit(artifactEdit);
- root.setEntityMappings(resource.getEntityMappings());
- resource.eAdapters().add(buildRootNodeListener(root));
- }
- else {
- artifactEdit.dispose();
- }
-
+ root.setResource(resource);
+ root.setEntityMappings(resource.getEntityMappings());
+ resource.eAdapters().add(buildRootNodeListener(resourceFile, root));
+ oae.addListener(buildReloadListener(resource));
return root;
}
- private Adapter buildRootNodeListener(XmlRootContentNode root) {
- return new RootAdapter(root);
+ private Adapter buildRootNodeListener(IFile resourceFile, XmlRootContentNode root) {
+ return new RootAdapter(resourceFile, root);
}
- protected ResourceSet getResourceSet(IFile file) {
- return WorkbenchResourceHelperBase.getResourceSet(file.getProject());
+ private EditModelListener buildReloadListener(OrmResource resource) {
+ return new ReloadListener(resource);
}
public String contentType() {
@@ -75,28 +71,69 @@ public class OrmXmlJpaFileContentProvider implements IJpaFileContentProvider
private class RootAdapter extends AdapterImpl
{
- XmlRootContentNode root;
+ final IFile resourceFile;
+ final XmlRootContentNode rootContentNode;
- private RootAdapter(XmlRootContentNode rootContentNode) {
+ RootAdapter(IFile resourceFile, XmlRootContentNode rootContentNode) {
super();
- root = rootContentNode;
+ this.resourceFile = resourceFile;
+ this.rootContentNode = rootContentNode;
}
+ @Override
public void notifyChanged(Notification notification) {
int featureId = notification.getFeatureID(Resource.class);
if (featureId == Resource.RESOURCE__CONTENTS) {
if (notification.getEventType() == Notification.ADD
|| notification.getEventType() == Notification.REMOVE) {
OrmResource resource = (OrmResource) notification.getNotifier();
- root.setEntityMappings(resource.getEntityMappings());
+ this.rootContentNode.setEntityMappings(resource.getEntityMappings());
}
}
+ }
+ }
+
+
+ private class ReloadListener implements EditModelListener
+ {
+ final OrmResource resource;
+
+ ReloadListener(OrmResource resource) {
+ super();
+ this.resource = resource;
+ }
+
+ public void editModelChanged(EditModelEvent anEvent) {
+ switch (anEvent.getEventCode()) {
+ case EditModelEvent.UNLOADED_RESOURCE :
+ if (anEvent.getChangedResources().contains(resource)
+ && ! resource.isLoaded()) {
+ try {
+ resource.load(resource.getResourceSet().getLoadOptions());
+ }
+ catch (IOException ioe) {
+ JptCorePlugin.log(ioe);
+ }
+ }
+ break;
+ case EditModelEvent.REMOVED_RESOURCE :
+ if (anEvent.getChangedResources().contains(resource)) {
+ anEvent.getEditModel().removeListener(this);
+ }
+ break;
+// case EditModelEvent.SAVE :
+// case EditModelEvent.PRE_DISPOSE :
+ }
+
+ }
// commenting out for now - this *was* a workaround for 202190, but with ArtifactEdit
// usage, it no longer works
+ //
+ // 11/07/07 - Actually, it has now been replaced by the above code
// else if (featureId == Resource.RESOURCE__IS_LOADED) {
// if (file.exists()) {
// // dumb translator is unloading my resource, reload it
// if (notification.getNewBooleanValue() == false) {
-// OrmResource resource = (OrmResource) notification.getNotifier();
+// PersistenceResource resource = (PersistenceResource) notification.getNotifier();
// try {
// resource.load(Collections.EMPTY_MAP);
// }
@@ -107,6 +144,5 @@ public class OrmXmlJpaFileContentProvider implements IJpaFileContentProvider
// }
// }
// }
- }
}
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlRootContentNode.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlRootContentNode.java
index 79e0c36d95..383e50f83d 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlRootContentNode.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlRootContentNode.java
@@ -22,7 +22,6 @@ import org.eclipse.jpt.core.internal.ITextRange;
import org.eclipse.jpt.core.internal.JpaCorePackage;
import org.eclipse.jpt.core.internal.JpaFile;
import org.eclipse.jpt.core.internal.XmlEObject;
-import org.eclipse.jpt.core.internal.content.orm.resource.OrmArtifactEdit;
/**
* <!-- begin-user-doc -->
@@ -53,7 +52,7 @@ public class XmlRootContentNode extends XmlEObject
*/
protected EntityMappingsInternal entityMappings;
- private OrmArtifactEdit artifactEdit;
+ private OrmResource resource;
/**
@@ -80,6 +79,11 @@ public class XmlRootContentNode extends XmlEObject
return IXmlContentNodes.XML_ROOT_ID;
}
+ @Override
+ public IJpaRootContentNode getRoot() {
+ return this;
+ }
+
/**
* Returns the value of the '<em><b>Jpa File</b></em>' container reference.
* It is bidirectional and its opposite is '{@link org.eclipse.jpt.core.internal.JpaFile#getContent <em>Content</em>}'.
@@ -327,8 +331,8 @@ public class XmlRootContentNode extends XmlEObject
}
public void dispose() {
- if (artifactEdit != null) {
- artifactEdit.dispose();
+ if (resource != null) {
+ resource.releaseFromRead();
}
}
@@ -365,8 +369,8 @@ public class XmlRootContentNode extends XmlEObject
getEntityMappings().handleJavaElementChangedEvent(event);
}
}
-
- public void setArtifactEdit(OrmArtifactEdit ormArtifactEdit) {
- artifactEdit = ormArtifactEdit;
+
+ public void setResource(OrmResource ormResource) {
+ resource = ormResource;
}
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmArtifactEdit.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmArtifactEdit.java
index 10f0065d9b..c41fdcec5a 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmArtifactEdit.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmArtifactEdit.java
@@ -1,5 +1,7 @@
package org.eclipse.jpt.core.internal.content.orm.resource;
+import java.io.IOException;
+import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.emf.common.util.URI;
import org.eclipse.jpt.core.internal.JptCorePlugin;
@@ -10,15 +12,13 @@ public class OrmArtifactEdit extends ArtifactEdit
{
/**
* @param aProject
- * @param fileURI - this must be in a deployment relevant form
- * (e.g "META-INF/orm.xml" instead of "src/META-INF/orm.xml")
- * @return the orm artifact for the file URI in project aProject.
+ * @return an orm artifact for the project aProject.
* Opened only for read access (no write)
*/
- public static OrmArtifactEdit getArtifactEditForRead(IProject aProject, String fileURI) {
+ public static OrmArtifactEdit getArtifactEditForRead(IProject aProject) {
OrmArtifactEdit artifactEdit = null;
try {
- artifactEdit = new OrmArtifactEdit(aProject, URI.createURI(fileURI), true);
+ artifactEdit = new OrmArtifactEdit(aProject, true);
}
catch (IllegalArgumentException iae) {
// suppress illegal argument exception
@@ -29,15 +29,13 @@ public class OrmArtifactEdit extends ArtifactEdit
/**
* @param aProject
- * @param fileURI - this must be in a deployment relevant form
- * (e.g "META-INF/orm.xml" instead of "src/META-INF/orm.xml")
- * @return the orm artifact for the file URI in project aProject.
+ * @return an orm artifact for the project aProject.
* Opened for both write and read access
*/
- public static OrmArtifactEdit getArtifactEditForWrite(IProject aProject, String fileURI) {
+ public static OrmArtifactEdit getArtifactEditForWrite(IProject aProject) {
OrmArtifactEdit artifactEdit = null;
try {
- artifactEdit = new OrmArtifactEdit(aProject, URI.createURI(fileURI), false);
+ artifactEdit = new OrmArtifactEdit(aProject, false);
}
catch (IllegalArgumentException iae) {
// suppress illegal argument exception
@@ -47,19 +45,43 @@ public class OrmArtifactEdit extends ArtifactEdit
}
- private URI fileURI;
-
-
- public OrmArtifactEdit(IProject aProject, URI aFileURI, boolean toAccessAsReadOnly)
+ public OrmArtifactEdit(IProject aProject, boolean toAccessAsReadOnly)
throws IllegalArgumentException {
super(aProject, toAccessAsReadOnly);
- fileURI = aFileURI;
}
- public OrmResource getOrmResource() {
+ /**
+ * @return an orm resource for the given file
+ */
+ public OrmResource getOrmResource(IFile file) {
+ // This *seems* to do the same basic thing as below, but circumvents the
+ // URI munging that ArtifactEditModel does (see bug 209093)
+ try {
+ OrmResource resource =
+ (OrmResource) getArtifactEditModel().createResource(URI.createPlatformResourceURI(file.getFullPath().toString()));
+ if (! resource.isLoaded()) {
+ resource.load(getArtifactEditModel().getResourceSet().getLoadOptions());
+ }
+ return resource;
+ }
+ catch (ClassCastException cce) {
+ return null;
+ }
+ catch (IOException ioe) {
+ JptCorePlugin.log(ioe);
+ return null;
+ }
+ }
+
+ /**
+ * @param fileURI - this must be in a deployment relevant form
+ * (e.g "META-INF/orm.xml" instead of "src/META-INF/orm.xml")
+ * @return an orm resource for the given deployment file URI
+ */
+ public OrmResource getOrmResource(String fileURI) {
try {
- return (OrmResource) getArtifactEditModel().getResource(fileURI);
+ return (OrmResource) getArtifactEditModel().getResource(URI.createURI(fileURI));
}
catch (ClassCastException cce) {
return null;
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceXmlJpaFileContentProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceXmlJpaFileContentProvider.java
index c39da31019..881402923b 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceXmlJpaFileContentProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceXmlJpaFileContentProvider.java
@@ -9,8 +9,8 @@
******************************************************************************/
package org.eclipse.jpt.core.internal.content.persistence;
+import java.io.IOException;
import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.IPath;
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.impl.AdapterImpl;
@@ -20,14 +20,21 @@ import org.eclipse.jpt.core.internal.IJpaRootContentNode;
import org.eclipse.jpt.core.internal.JptCorePlugin;
import org.eclipse.jpt.core.internal.content.persistence.resource.PersistenceArtifactEdit;
import org.eclipse.jpt.core.internal.content.persistence.resource.PersistenceResource;
-import org.eclipse.jpt.core.internal.emfutility.ComponentUtilities;
+import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelEvent;
+import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelListener;
public class PersistenceXmlJpaFileContentProvider implements IJpaFileContentProvider
{
- public static PersistenceXmlJpaFileContentProvider INSTANCE = new PersistenceXmlJpaFileContentProvider();
+ //singleton
+ private static final PersistenceXmlJpaFileContentProvider INSTANCE = new PersistenceXmlJpaFileContentProvider();
- private IFile file;
+ /**
+ * Return the singleton.
+ */
+ public static IJpaFileContentProvider instance() {
+ return INSTANCE;
+ }
/**
@@ -37,31 +44,25 @@ public class PersistenceXmlJpaFileContentProvider implements IJpaFileContentProv
super();
}
-
public IJpaRootContentNode buildRootContent(IFile resourceFile) {
- file = resourceFile;
- IPath deployPath = ComponentUtilities.computeDeployPath(resourceFile);
- PersistenceArtifactEdit artifactEdit =
- PersistenceArtifactEdit.getArtifactEditForWrite(
- resourceFile.getProject(),
- deployPath.toString());
- PersistenceResource resource = artifactEdit.getPersistenceResource();
- PersistenceXmlRootContentNode root = PersistenceFactory.eINSTANCE.createPersistenceXmlRootContentNode();
-
- if (resourceFile.equals(resource.getFile())) {
- root.setArtifactEdit(artifactEdit);
- root.setPersistence(resource.getPersistence());
- resource.eAdapters().add(buildRootNodeListener(root));
- }
- else {
- artifactEdit.dispose();
- }
-
+ PersistenceArtifactEdit pae =
+ PersistenceArtifactEdit.getArtifactEditForRead(resourceFile.getProject());
+ PersistenceResource resource =
+ pae.getPersistenceResource(resourceFile);
+ PersistenceXmlRootContentNode root = PersistenceFactory.eINSTANCE.createPersistenceXmlRootContentNode();
+ root.setResource(resource);
+ root.setPersistence(resource.getPersistence());
+ resource.eAdapters().add(buildRootNodeListener(resourceFile, root));
+ pae.addListener(buildReloadListener(resource));
return root;
}
- private Adapter buildRootNodeListener(PersistenceXmlRootContentNode root) {
- return new RootAdapter(root);
+ private Adapter buildRootNodeListener(IFile resourceFile, PersistenceXmlRootContentNode rootContentNode) {
+ return new RootAdapter(resourceFile, rootContentNode);
+ }
+
+ private EditModelListener buildReloadListener(PersistenceResource resource) {
+ return new ReloadListener(resource);
}
public String contentType() {
@@ -71,24 +72,65 @@ public class PersistenceXmlJpaFileContentProvider implements IJpaFileContentProv
private class RootAdapter extends AdapterImpl
{
- PersistenceXmlRootContentNode root;
+ final IFile resourceFile;
+ final PersistenceXmlRootContentNode rootContentNode;
- private RootAdapter(PersistenceXmlRootContentNode rootContentNode) {
+ RootAdapter(IFile resourceFile, PersistenceXmlRootContentNode rootContentNode) {
super();
- root = rootContentNode;
+ this.resourceFile = resourceFile;
+ this.rootContentNode = rootContentNode;
}
+ @Override
public void notifyChanged(Notification notification) {
int featureId = notification.getFeatureID(Resource.class);
if (featureId == Resource.RESOURCE__CONTENTS) {
if (notification.getEventType() == Notification.ADD
|| notification.getEventType() == Notification.REMOVE) {
PersistenceResource resource = (PersistenceResource) notification.getNotifier();
- root.setPersistence(resource.getPersistence());
+ this.rootContentNode.setPersistence(resource.getPersistence());
}
}
+ }
+ }
+
+
+ private class ReloadListener implements EditModelListener
+ {
+ final PersistenceResource resource;
+
+ ReloadListener(PersistenceResource resource) {
+ super();
+ this.resource = resource;
+ }
+
+ public void editModelChanged(EditModelEvent anEvent) {
+ switch (anEvent.getEventCode()) {
+ case EditModelEvent.UNLOADED_RESOURCE :
+ if (anEvent.getChangedResources().contains(resource)
+ && ! resource.isLoaded()) {
+ try {
+ resource.load(resource.getResourceSet().getLoadOptions());
+ }
+ catch (IOException ioe) {
+ JptCorePlugin.log(ioe);
+ }
+ }
+ break;
+ case EditModelEvent.REMOVED_RESOURCE :
+ if (anEvent.getChangedResources().contains(resource)) {
+ anEvent.getEditModel().removeListener(this);
+ }
+ break;
+// case EditModelEvent.SAVE :
+// case EditModelEvent.PRE_DISPOSE :
+ }
+
+ }
// commenting out for now - this *was* a workaround for 202190, but with ArtifactEdit
// usage, it no longer works
+ //
+ // 11/07/07 - Actually, it has now been replaced by the above code
// else if (featureId == Resource.RESOURCE__IS_LOADED) {
// if (file.exists()) {
// // dumb translator is unloading my resource, reload it
@@ -104,6 +146,5 @@ public class PersistenceXmlJpaFileContentProvider implements IJpaFileContentProv
// }
// }
// }
- }
}
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceXmlRootContentNode.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceXmlRootContentNode.java
index b9ba15d6ad..d23fc189d8 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceXmlRootContentNode.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceXmlRootContentNode.java
@@ -24,7 +24,7 @@ import org.eclipse.jpt.core.internal.JpaCorePackage;
import org.eclipse.jpt.core.internal.JpaFile;
import org.eclipse.jpt.core.internal.XmlEObject;
import org.eclipse.jpt.core.internal.content.persistence.resource.IPersistenceXmlContentNodes;
-import org.eclipse.jpt.core.internal.content.persistence.resource.PersistenceArtifactEdit;
+import org.eclipse.jpt.core.internal.content.persistence.resource.PersistenceResource;
/**
* <!-- begin-user-doc -->
@@ -55,7 +55,7 @@ public class PersistenceXmlRootContentNode extends XmlEObject
*/
protected Persistence persistence;
- private PersistenceArtifactEdit artifactEdit;
+ private PersistenceResource resource;
/**
@@ -343,8 +343,8 @@ public class PersistenceXmlRootContentNode extends XmlEObject
}
public void dispose() {
- if (artifactEdit != null) {
- artifactEdit.dispose();
+ if (resource != null) {
+ resource.releaseFromRead();
}
}
@@ -372,11 +372,16 @@ public class PersistenceXmlRootContentNode extends XmlEObject
return IPersistenceXmlContentNodes.PERSISTENCEXML_ROOT_ID;
}
+ @Override
+ public IJpaRootContentNode getRoot() {
+ return this;
+ }
+
public void handleJavaElementChangedEvent(ElementChangedEvent event) {
// TODO Auto-generated method stub
}
- public void setArtifactEdit(PersistenceArtifactEdit persistenceArtifactEdit) {
- artifactEdit = persistenceArtifactEdit;
+ public void setResource(PersistenceResource persistenceResource) {
+ resource = persistenceResource;
}
} \ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/PersistenceArtifactEdit.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/PersistenceArtifactEdit.java
index 2ed71db7e3..38140cb550 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/PersistenceArtifactEdit.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/PersistenceArtifactEdit.java
@@ -1,5 +1,7 @@
package org.eclipse.jpt.core.internal.content.persistence.resource;
+import java.io.IOException;
+import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.emf.common.util.URI;
import org.eclipse.jpt.core.internal.JptCorePlugin;
@@ -9,15 +11,13 @@ public class PersistenceArtifactEdit extends ArtifactEdit
{
/**
* @param aProject
- * @param fileURI - this must be in a deployment relevant form
- * (e.g "META-INF/persistence.xml" instead of "src/META-INF/persistence.xml")
- * @return the persistence artifact for the file URI in project aProject.
+ * @return a persistence artifact for project aProject.
* Opened only for read access (no write)
*/
- public static PersistenceArtifactEdit getArtifactEditForRead(IProject aProject, String fileURI) {
+ public static PersistenceArtifactEdit getArtifactEditForRead(IProject aProject) {
PersistenceArtifactEdit artifactEdit = null;
try {
- artifactEdit = new PersistenceArtifactEdit(aProject, URI.createURI(fileURI), true);
+ artifactEdit = new PersistenceArtifactEdit(aProject, true);
}
catch (IllegalArgumentException iae) {
// suppress illegal argument exception
@@ -28,15 +28,13 @@ public class PersistenceArtifactEdit extends ArtifactEdit
/**
* @param aProject
- * @param fileURI - this must be in a deployment relevant form
- * (e.g "META-INF/persistence.xml" instead of "src/META-INF/persistence.xml")
- * @return the persistence artifact for the file URI in project aProject.
+ * @return a persistence artifact for the project aProject.
* Opened for both write and read access
*/
- public static PersistenceArtifactEdit getArtifactEditForWrite(IProject aProject, String fileURI) {
+ public static PersistenceArtifactEdit getArtifactEditForWrite(IProject aProject) {
PersistenceArtifactEdit artifactEdit = null;
try {
- artifactEdit = new PersistenceArtifactEdit(aProject, URI.createURI(fileURI), false);
+ artifactEdit = new PersistenceArtifactEdit(aProject, false);
}
catch (IllegalArgumentException iae) {
// suppress illegal argument exception
@@ -46,19 +44,43 @@ public class PersistenceArtifactEdit extends ArtifactEdit
}
- private URI fileURI;
-
-
- public PersistenceArtifactEdit(IProject aProject, URI aFileURI, boolean toAccessAsReadOnly)
+ public PersistenceArtifactEdit(IProject aProject, boolean toAccessAsReadOnly)
throws IllegalArgumentException {
super(aProject, toAccessAsReadOnly);
- fileURI = aFileURI;
}
- public PersistenceResource getPersistenceResource() {
+ /**
+ * @return a persistence resource for the given file
+ */
+ public PersistenceResource getPersistenceResource(IFile file) {
+ // This *seems* to do the same basic thing as below, but circumvents the
+ // URI munging that ArtifactEditModel does (see bug 209093)
+ try {
+ PersistenceResource resource =
+ (PersistenceResource) getArtifactEditModel().createResource(URI.createPlatformResourceURI(file.getFullPath().toString()));
+ if (! resource.isLoaded()) {
+ resource.load(getArtifactEditModel().getResourceSet().getLoadOptions());
+ }
+ return resource;
+ }
+ catch (ClassCastException cce) {
+ return null;
+ }
+ catch (IOException ioe) {
+ JptCorePlugin.log(ioe);
+ return null;
+ }
+ }
+
+ /**
+ * @param fileURI - this must be in a deployment relevant form
+ * (e.g "META-INF/persistence.xml" instead of "src/META-INF/persistence.xml")
+ * @return a persistence resource for the given deployment file URI
+ */
+ public PersistenceResource getPersistenceResource(String fileURI) {
try {
- return (PersistenceResource) getArtifactEditModel().getResource(fileURI);
+ return (PersistenceResource) getArtifactEditModel().getResource(URI.createURI(fileURI));
}
catch (ClassCastException cce) {
return null;
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaFacetPostInstallDelegate.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaFacetPostInstallDelegate.java
index 9c54db2511..1d986b4fd2 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaFacetPostInstallDelegate.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaFacetPostInstallDelegate.java
@@ -82,8 +82,8 @@ public class JpaFacetPostInstallDelegate
}
PersistenceArtifactEdit pae =
- PersistenceArtifactEdit.getArtifactEditForWrite(project, deployPath);
- PersistenceResource resource = pae.getPersistenceResource();
+ PersistenceArtifactEdit.getArtifactEditForWrite(project);
+ PersistenceResource resource = pae.getPersistenceResource(deployPath);
// fix for bug 202811 - only add content if it does not already have content
if (resource.getPersistence() == null) {
@@ -112,8 +112,8 @@ public class JpaFacetPostInstallDelegate
}
OrmArtifactEdit oae =
- OrmArtifactEdit.getArtifactEditForWrite(project, deployPath);
- OrmResource resource = oae.getOrmResource();
+ OrmArtifactEdit.getArtifactEditForWrite(project);
+ OrmResource resource = oae.getOrmResource(deployPath);
// fix for bug 202811 - only add content if it does not already have content
if (resource.getEntityMappings() == null) {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/BaseJpaPlatform.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/BaseJpaPlatform.java
index 83e7046f6c..731300372d 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/BaseJpaPlatform.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/BaseJpaPlatform.java
@@ -124,9 +124,9 @@ public abstract class BaseJpaPlatform implements IJpaPlatform
public Collection<IJpaFileContentProvider> jpaFileContentProviders() {
if (this.contentProviders == null) {
this.contentProviders = new ArrayList<IJpaFileContentProvider>();
- this.contentProviders.add(PersistenceXmlJpaFileContentProvider.INSTANCE);
+ this.contentProviders.add(PersistenceXmlJpaFileContentProvider.instance());
this.contentProviders.add(JavaJpaFileContentProvider.INSTANCE);
- this.contentProviders.add(OrmXmlJpaFileContentProvider.INSTANCE);
+ this.contentProviders.add(OrmXmlJpaFileContentProvider.instance());
}
return this.contentProviders;
}

Back to the top