Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpfullbright2007-09-12 20:51:43 +0000
committerpfullbright2007-09-12 20:51:43 +0000
commitb40168262a0554e4aba14eda7d1acef99ece2a36 (patch)
tree76422b120186462315fabf75649e25ae46fc2cf1 /jpa/plugins/org.eclipse.jpt.core
parente6b624669f7a3616105a8a08a669e05dd9dd37a4 (diff)
downloadwebtools.dali-b40168262a0554e4aba14eda7d1acef99ece2a36.tar.gz
webtools.dali-b40168262a0554e4aba14eda7d1acef99ece2a36.tar.xz
webtools.dali-b40168262a0554e4aba14eda7d1acef99ece2a36.zip
combined port of bug fixes for 192477, 202684, 202811, and 202959 - adding artifact edit functionality
Diffstat (limited to 'jpa/plugins/org.eclipse.jpt.core')
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/plugin.xml51
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaModelManager.java64
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JptCorePlugin.java4
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmInit.java56
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmResource.java (renamed from jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmXmlResource.java)10
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmXmlJpaFileContentProvider.java72
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlRootContentNode.java32
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmArtifactEdit.java68
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmResourceFactory.java30
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmResourceImpl.java (renamed from jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmXmlResourceImpl.java)49
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmXmlResourceFactory.java59
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceInit.java55
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceXmlJpaFileContentProvider.java68
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceXmlRootContentNode.java34
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/PersistenceArtifactEdit.java67
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/PersistenceResource.java35
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/PersistenceResourceFactory.java38
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/PersistenceXmlResourceFactory.java58
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/emfutility/ComponentUtilities.java67
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaFacetInstallDelegate.java13
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaFacetPostInstallDelegate.java107
21 files changed, 603 insertions, 434 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.core/plugin.xml b/jpa/plugins/org.eclipse.jpt.core/plugin.xml
index fdfb6a5234..a9363ed563 100644
--- a/jpa/plugins/org.eclipse.jpt.core/plugin.xml
+++ b/jpa/plugins/org.eclipse.jpt.core/plugin.xml
@@ -41,21 +41,22 @@
point="org.eclipse.core.runtime.contentTypes">
<content-type
- base-type="org.eclipse.core.runtime.xml"
- file-names="orm.xml"
- id="org.eclipse.jpt.core.content.orm"
- name="%ORM_XML_CONTENT"
- priority="normal">
- Only allowing file names of orm.xml. Extenders will have to specify a different file name.
- Limitation with WTP translators for registering files names instead of content types
+ id="org.eclipse.jpt.core.content.orm"
+ name="%ORM_XML_CONTENT"
+ base-type="org.eclipse.core.runtime.xml"
+ file-names="orm.xml"
+ priority="normal">
+ Only allowing file names of orm.xml. Extenders will have to specify a different file name.
+ Limitation with WTP translators for registering files names instead of content types
</content-type>
+
<content-type
- base-type="org.eclipse.core.runtime.xml"
- file-names="persistence.xml"
- id="org.eclipse.jpt.core.content.persistence"
- name="%PERSISTENCE_XML_CONTENT"
- priority="normal">
- Only allowing file names of persistence.xml.
+ id="org.eclipse.jpt.core.content.persistence"
+ name="%PERSISTENCE_XML_CONTENT"
+ base-type="org.eclipse.core.runtime.xml"
+ file-names="persistence.xml"
+ priority="normal">
+ Only allowing file names of persistence.xml.
</content-type>
</extension>
@@ -82,6 +83,30 @@
<extension
+ point="org.eclipse.wst.common.modulecore.resourceFactories">
+
+ <resourceFactory
+ class="org.eclipse.jpt.core.internal.content.persistence.resource.PersistenceResourceFactory"
+ isDefault="true"
+ shortSegment="persistence.xml">
+ <contentTypeBinding
+ contentTypeId="org.eclipse.jpt.core.content.persistence">
+ </contentTypeBinding>
+ </resourceFactory>
+
+ <resourceFactory
+ class="org.eclipse.jpt.core.internal.content.orm.resource.OrmResourceFactory"
+ isDefault="true"
+ shortSegment="orm.xml">
+ <contentTypeBinding
+ contentTypeId="org.eclipse.jpt.core.content.orm">
+ </contentTypeBinding>
+ </resourceFactory>
+
+ </extension>
+
+
+ <extension
point="org.eclipse.wst.common.project.facet.core.facets">
<project-facet id="jpt.jpa">
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaModelManager.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaModelManager.java
index f69d462b04..9a02709e11 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaModelManager.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaModelManager.java
@@ -161,6 +161,33 @@ public class JpaModelManager
}
/**
+ * Determine whether project should be created, then create it if necessary
+ */
+ private synchronized void processProject(IProject project) {
+ JpaProject jpaProject = (JpaProject) model.getJpaProject(project);
+ boolean jpaFacetExists = false;
+ try {
+ jpaFacetExists = FacetedProjectFramework.hasProjectFacet(project, JptCorePlugin.FACET_ID);
+ }
+ catch (CoreException ce) {
+ // nothing to do, assume facet doesn't exist
+ JptCorePlugin.log(ce);
+ }
+
+ if (jpaProject == null && jpaFacetExists) {
+ try {
+ JpaModelManager.instance().createFilledJpaProject(project);
+ }
+ catch (CoreException ce) {
+ JptCorePlugin.log(ce);
+ }
+ }
+ else if (jpaProject != null && ! jpaFacetExists) {
+ jpaProject.dispose();
+ }
+ }
+
+ /**
* INTERNAL ONLY
*
* Fills the IJpaProject associated with the IProject, if it exists
@@ -383,8 +410,6 @@ public class JpaModelManager
// - if the project is closed, it has already lost its jpa facet
IProject project = (IProject) resource;
- // could be problems here ...
- JpaProject jpaProject = (JpaProject) model.getJpaProject(project);
switch (delta.getKind()) {
case IResourceDelta.REMOVED :
// we should have already handled this in the PRE_DELETE event
@@ -397,16 +422,7 @@ public class JpaModelManager
case IResourceDelta.CHANGED :
if ((delta.getFlags() & IResourceDelta.OPEN) != 0) {
if (project.isOpen()) {
- // project has been opened, but don't create it if it's already there
- // (which can happen on project creation)
- if (jpaProject == null) {
- try {
- JpaModelManager.instance().createFilledJpaProject(project);
- }
- catch (CoreException ce) {
- JptCorePlugin.log(ce);
- }
- }
+ JpaModelManager.instance().processProject(project);
}
}
break;
@@ -509,29 +525,7 @@ public class JpaModelManager
}
protected void handleEvent(IFacetedProjectEvent event) {
- IProject project = event.getProject().getProject();
- JpaProject jpaProject = (JpaProject) model.getJpaProject(project);
- boolean jpaFacetExists = false;
- try {
- jpaFacetExists = FacetedProjectFramework.hasProjectFacet(project, JptCorePlugin.FACET_ID);
- }
- catch (CoreException ce) {
- // nothing to do, assume facet doesn't exist
- JptCorePlugin.log(ce);
- }
-
- if (jpaFacetExists && jpaProject == null) {
- try {
- JpaModelManager.instance().createFilledJpaProject(project);
- }
- catch (CoreException ce) {
- // nothing to do, nothing we *can* do
- JptCorePlugin.log(ce);
- }
- }
- else if (jpaProject != null && ! jpaFacetExists) {
- jpaProject.dispose();
- }
+ JpaModelManager.instance().processProject(event.getProject().getProject());
}
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JptCorePlugin.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JptCorePlugin.java
index 38c42985ff..eafe676c29 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JptCorePlugin.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JptCorePlugin.java
@@ -15,8 +15,6 @@ import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.core.runtime.Status;
import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jpt.core.internal.content.orm.OrmInit;
-import org.eclipse.jpt.core.internal.content.persistence.PersistenceInit;
import org.osgi.framework.BundleContext;
public class JptCorePlugin extends Plugin
@@ -133,8 +131,6 @@ public class JptCorePlugin extends Plugin
public void start(BundleContext context) throws Exception {
super.start(context);
modelManager().start();
- OrmInit.init();
- PersistenceInit.init();
}
@Override
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmInit.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmInit.java
deleted file mode 100644
index b93a2b8831..0000000000
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmInit.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2007 Oracle. 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:
- * Oracle - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.core.internal.content.orm;
-
-import org.eclipse.emf.ecore.EFactory;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.jpt.core.internal.content.orm.resource.OrmXmlResourceFactory;
-import org.eclipse.wst.common.componentcore.internal.impl.WTPEntityResolver;
-import org.eclipse.wst.common.internal.emf.utilities.DOMUtilities;
-import org.eclipse.wst.common.internal.emf.utilities.ExtendedEcoreUtil;
-
-public class OrmInit
-{
- private static boolean initialized = false;
-
- public static void init() {
- init(true);
- }
-
- public static void init(boolean shouldPreregisterPackages) {
- if (! initialized) {
- initialized = true;
- DOMUtilities.setDefaultEntityResolver(WTPEntityResolver.INSTANCE);
- initResourceFactories();
- }
- if (shouldPreregisterPackages) {
- preregisterPackages();
- }
- }
-
- private static void initResourceFactories() {
- OrmXmlResourceFactory.register();
- }
-
- private static void preregisterPackages() {
- ExtendedEcoreUtil.preRegisterPackage(
- "orm.xmi", //$NON-NLS-1$
- new EPackage.Descriptor() {
- public EPackage getEPackage() {
- return OrmPackage.eINSTANCE;
- }
-
- public EFactory getEFactory() {
- return OrmFactory.eINSTANCE;
- }
- }
- );
- }
-}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmXmlResource.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmResource.java
index 6f6d02c524..85e0f02b0a 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmXmlResource.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmResource.java
@@ -8,13 +8,19 @@
*******************************************************************************/
package org.eclipse.jpt.core.internal.content.orm;
+import org.eclipse.core.resources.IFile;
import org.eclipse.wst.common.internal.emf.resource.TranslatorResource;
-public interface OrmXmlResource extends TranslatorResource
+public interface OrmResource extends TranslatorResource
{
/**
* Return the root object
*/
- EntityMappingsInternal getXmlFileContent();
+ EntityMappingsInternal getEntityMappings();
+
+ /**
+ * Return the platform file associated with this resource
+ */
+ IFile getFile();
}
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 c85ec9cb20..aea9b9256b 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,28 +9,25 @@
******************************************************************************/
package org.eclipse.jpt.core.internal.content.orm;
-import java.io.IOException;
-import java.util.Collections;
-
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.common.util.URI;
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.IJpaFile;
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.OrmXmlResourceFactory;
+import org.eclipse.jpt.core.internal.content.orm.resource.OrmArtifactEdit;
+import org.eclipse.jpt.core.internal.emfutility.ComponentUtilities;
public class OrmXmlJpaFileContentProvider implements IJpaFileContentProvider
{
//singleton
private static final OrmXmlJpaFileContentProvider INSTANCE = new OrmXmlJpaFileContentProvider();
+
/**
* Return the singleton.
*/
@@ -48,13 +45,24 @@ public class OrmXmlJpaFileContentProvider implements IJpaFileContentProvider
public IJpaRootContentNode buildRootContent(IJpaFile jpaFile) {
IFile resourceFile = jpaFile.getFile();
- OrmXmlResourceFactory.register();
- URI fileURI = URI.createPlatformResourceURI(resourceFile.getFullPath().toString(), true);
- OrmXmlResource resource = (OrmXmlResource) getResourceSet(resourceFile).getResource(fileURI, true);
+ IPath deployPath = ComponentUtilities.computeDeployPath(resourceFile);
+ OrmArtifactEdit artifactEdit =
+ OrmArtifactEdit.getArtifactEditForWrite(
+ resourceFile.getProject(),
+ deployPath.toString());
+ OrmResource resource = artifactEdit.getOrmResource();
XmlRootContentNode root = OrmFactory.eINSTANCE.createXmlRootContentNode();
+
+ if (resourceFile.equals(resource.getFile())) {
+ root.setArtifactEdit(artifactEdit);
+ root.setEntityMappings(resource.getEntityMappings());
+ resource.eAdapters().add(buildRootNodeListener(resourceFile, root));
+ }
+ else {
+ artifactEdit.dispose();
+ }
+
jpaFile.setContent(root);
- root.setEntityMappings(resource.getXmlFileContent());
- resource.eAdapters().add(buildRootNodeListener(resourceFile, root));
return root;
}
@@ -62,10 +70,6 @@ public class OrmXmlJpaFileContentProvider implements IJpaFileContentProvider
return new RootAdapter(resourceFile, root);
}
- protected ResourceSet getResourceSet(IFile file) {
- return WorkbenchResourceHelperBase.getResourceSet(file.getProject());
- }
-
public String contentType() {
return JptCorePlugin.ORM_XML_CONTENT_TYPE;
}
@@ -87,25 +91,27 @@ public class OrmXmlJpaFileContentProvider implements IJpaFileContentProvider
if (featureId == Resource.RESOURCE__CONTENTS) {
if (notification.getEventType() == Notification.ADD
|| notification.getEventType() == Notification.REMOVE) {
- OrmXmlResource resource = (OrmXmlResource) notification.getNotifier();
- this.rootContentNode.setEntityMappings(resource.getXmlFileContent());
- }
- }
- else if (featureId == Resource.RESOURCE__IS_LOADED) {
- if (this.resourceFile.exists()) {
- // dumb translator is unloading my resource, reload it
- if (notification.getNewBooleanValue() == false) {
- OrmXmlResource resource = (OrmXmlResource) notification.getNotifier();
- try {
- resource.load(Collections.EMPTY_MAP);
- }
- catch (IOException ioe) {
- // hmmm, log for now
- JptCorePlugin.log(ioe);
- }
- }
+ OrmResource resource = (OrmResource) notification.getNotifier();
+ this.rootContentNode.setEntityMappings(resource.getEntityMappings());
}
}
+ // commenting out for now - this *was* a workaround for 202190, but with ArtifactEdit
+ // usage, it no longer works
+// 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();
+// try {
+// resource.load(Collections.EMPTY_MAP);
+// }
+// catch (IOException ioe) {
+// // hmmm, log for now
+// JptCorePlugin.log(ioe);
+// }
+// }
+// }
+// }
}
}
}
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 dc02b8e28d..381cdd76da 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
@@ -18,9 +18,11 @@ import org.eclipse.jdt.core.ElementChangedEvent;
import org.eclipse.jpt.core.internal.IJpaContentNode;
import org.eclipse.jpt.core.internal.IJpaFile;
import org.eclipse.jpt.core.internal.IJpaRootContentNode;
+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 -->
@@ -50,7 +52,10 @@ public class XmlRootContentNode extends XmlEObject
* @ordered
*/
protected EntityMappingsInternal entityMappings;
-
+
+ private OrmArtifactEdit artifactEdit;
+
+
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
@@ -321,6 +326,17 @@ public class XmlRootContentNode extends XmlEObject
return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
}
+ public void dispose() {
+ if (artifactEdit != null) {
+ artifactEdit.dispose();
+ }
+ }
+
+ @Override
+ public ITextRange fullTextRange() {
+ return ITextRange.Empty.instance();
+ }
+
/* (non-Javadoc)
*
* @see IJpaRootContentNode#getContentNode(int)
@@ -337,14 +353,12 @@ public class XmlRootContentNode extends XmlEObject
* @see IJpaRootContentNode#handleJavaElementChangedEvent(ElementChangedEvent)
*/
public void handleJavaElementChangedEvent(ElementChangedEvent event) {
- getEntityMappings().handleJavaElementChangedEvent(event);
+ if (getEntityMappings() != null) {
+ getEntityMappings().handleJavaElementChangedEvent(event);
+ }
}
-
- /* (non-Javadoc)
- *
- * @see IJpaRootContentNode#dispose()
- */
- public void dispose() {
- // TODO
+
+ public void setArtifactEdit(OrmArtifactEdit ormArtifactEdit) {
+ artifactEdit = ormArtifactEdit;
}
}
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
new file mode 100644
index 0000000000..10f0065d9b
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmArtifactEdit.java
@@ -0,0 +1,68 @@
+package org.eclipse.jpt.core.internal.content.orm.resource;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.jpt.core.internal.JptCorePlugin;
+import org.eclipse.jpt.core.internal.content.orm.OrmResource;
+import org.eclipse.wst.common.componentcore.ArtifactEdit;
+
+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.
+ * Opened only for read access (no write)
+ */
+ public static OrmArtifactEdit getArtifactEditForRead(IProject aProject, String fileURI) {
+ OrmArtifactEdit artifactEdit = null;
+ try {
+ artifactEdit = new OrmArtifactEdit(aProject, URI.createURI(fileURI), true);
+ }
+ catch (IllegalArgumentException iae) {
+ // suppress illegal argument exception
+ JptCorePlugin.log(iae);
+ }
+ return 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.
+ * Opened for both write and read access
+ */
+ public static OrmArtifactEdit getArtifactEditForWrite(IProject aProject, String fileURI) {
+ OrmArtifactEdit artifactEdit = null;
+ try {
+ artifactEdit = new OrmArtifactEdit(aProject, URI.createURI(fileURI), false);
+ }
+ catch (IllegalArgumentException iae) {
+ // suppress illegal argument exception
+ JptCorePlugin.log(iae);
+ }
+ return artifactEdit;
+ }
+
+
+ private URI fileURI;
+
+
+ public OrmArtifactEdit(IProject aProject, URI aFileURI, boolean toAccessAsReadOnly)
+ throws IllegalArgumentException {
+ super(aProject, toAccessAsReadOnly);
+ fileURI = aFileURI;
+ }
+
+
+ public OrmResource getOrmResource() {
+ try {
+ return (OrmResource) getArtifactEditModel().getResource(fileURI);
+ }
+ catch (ClassCastException cce) {
+ return null;
+ }
+ }
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmResourceFactory.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmResourceFactory.java
new file mode 100644
index 0000000000..3cde563841
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmResourceFactory.java
@@ -0,0 +1,30 @@
+package org.eclipse.jpt.core.internal.content.orm.resource;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.wst.common.internal.emf.resource.Renderer;
+import org.eclipse.wst.common.internal.emf.resource.RendererFactory;
+import org.eclipse.wst.common.internal.emf.resource.TranslatorResource;
+import org.eclipse.wst.common.internal.emf.resource.TranslatorResourceFactory;
+
+public class OrmResourceFactory extends TranslatorResourceFactory
+{
+ public OrmResourceFactory() {
+ this(RendererFactory.getDefaultRendererFactory());
+ }
+
+ public OrmResourceFactory(RendererFactory aRendererFactory, boolean listeningForUpdates) {
+ super(aRendererFactory, listeningForUpdates);
+ }
+
+ public OrmResourceFactory(RendererFactory aRendererFactory) {
+ super(aRendererFactory);
+ }
+
+
+ /**
+ * @see TranslatorResourceFactory#createResource(URI, Renderer)
+ */
+ protected TranslatorResource createResource(URI uri, Renderer renderer) {
+ return new OrmResourceImpl(uri, renderer);
+ }
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmXmlResourceImpl.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmResourceImpl.java
index 62f1eab457..3e84f7c62f 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmXmlResourceImpl.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmResourceImpl.java
@@ -8,25 +8,30 @@
*******************************************************************************/
package org.eclipse.jpt.core.internal.content.orm.resource;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.Path;
import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.URIConverter;
+import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase;
+import org.eclipse.jem.util.plugin.JEMUtilPlugin;
import org.eclipse.jpt.core.internal.content.orm.EntityMappingsInternal;
-import org.eclipse.jpt.core.internal.content.orm.OrmXmlResource;
+import org.eclipse.jpt.core.internal.content.orm.OrmResource;
import org.eclipse.wst.common.internal.emf.resource.Renderer;
import org.eclipse.wst.common.internal.emf.resource.Translator;
import org.eclipse.wst.common.internal.emf.resource.TranslatorResource;
import org.eclipse.wst.common.internal.emf.resource.TranslatorResourceImpl;
-public class OrmXmlResourceImpl extends TranslatorResourceImpl
- implements OrmXmlResource
+public class OrmResourceImpl extends TranslatorResourceImpl
+ implements OrmResource
{
-
private Translator rootTranslator;
- public OrmXmlResourceImpl(Renderer aRenderer) {
+ public OrmResourceImpl(Renderer aRenderer) {
super(aRenderer);
}
- public OrmXmlResourceImpl(URI uri, Renderer aRenderer) {
+ public OrmResourceImpl(URI uri, Renderer aRenderer) {
super(uri, aRenderer);
}
@@ -78,9 +83,37 @@ public class OrmXmlResourceImpl extends TranslatorResourceImpl
}
/**
- * @see OrmXmlResource#getXmlFileContent()
+ * @see OrmResource#getEntityMappings()
*/
- public EntityMappingsInternal getXmlFileContent() {
+ public EntityMappingsInternal getEntityMappings() {
return (EntityMappingsInternal) getRootObject();
}
+
+ public IFile getFile() {
+ IFile file = null;
+ file = getFile(getURI());
+ if (file == null) {
+ if (getResourceSet() != null) {
+ URIConverter converter = getResourceSet().getURIConverter();
+ URI convertedUri = converter.normalize(getURI());
+ if (! getURI().equals(convertedUri)) {
+ file = getFile(convertedUri);
+ }
+ }
+ }
+ return file;
+ }
+
+ /**
+ * Return the IFile for the <code>uri</code> within the Workspace. This URI is assumed to be
+ * absolute in the following format: platform:/resource/....
+ */
+ private IFile getFile(URI uri) {
+ if (WorkbenchResourceHelperBase.isPlatformResourceURI(uri)) {
+ String fileString = URI.decode(uri.path());
+ fileString = fileString.substring(JEMUtilPlugin.PLATFORM_RESOURCE.length() + 1);
+ return ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(fileString));
+ }
+ return null;
+ }
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmXmlResourceFactory.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmXmlResourceFactory.java
deleted file mode 100644
index 00b4b8fbce..0000000000
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmXmlResourceFactory.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2007 Oracle. 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: Oracle. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.core.internal.content.orm.resource;
-
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.wst.common.componentcore.internal.impl.WTPResourceFactoryRegistry;
-import org.eclipse.wst.common.internal.emf.resource.Renderer;
-import org.eclipse.wst.common.internal.emf.resource.RendererFactory;
-import org.eclipse.wst.common.internal.emf.resource.TranslatorResource;
-import org.eclipse.wst.common.internal.emf.resource.TranslatorResourceFactory;
-import org.eclipse.wst.xml.core.internal.emf2xml.EMF2DOMSSERendererFactory;
-
-public class OrmXmlResourceFactory extends TranslatorResourceFactory
-{
- public static final String ORM_XML_FILE_NAME = "orm.xml"; //$NON-NLS-1$
- public static final URI ORM_XML_FILE_URI = URI.createURI(ORM_XML_FILE_NAME); //$NON-NLS-1$
-
- /**
- * Register myself with the Resource.Factory.Registry
- */
- public static void registerWith(RendererFactory rendererFactory) {
- WTPResourceFactoryRegistry.INSTANCE.registerLastFileSegment(ORM_XML_FILE_NAME, new OrmXmlResourceFactory(rendererFactory));
- }
-
- /**
- * Register myself using the default renderer factory.
- * @see #registerWith(RendererFactory)
- */
- public static void register() {
- registerWith(EMF2DOMSSERendererFactory.INSTANCE);
- }
-
- public static Resource.Factory getRegisteredFactory() {
- return WTPResourceFactoryRegistry.INSTANCE.getFactory(ORM_XML_FILE_URI);
- }
-
-
- public OrmXmlResourceFactory(RendererFactory aRendererFactory, boolean listeningForUpdates) {
- super(aRendererFactory, listeningForUpdates);
- }
-
- public OrmXmlResourceFactory(RendererFactory aRendererFactory) {
- super(aRendererFactory);
- }
-
- /**
- * @see TranslatorResourceFactory#createResource(URI, Renderer)
- */
- protected TranslatorResource createResource(URI uri, Renderer renderer) {
- return new OrmXmlResourceImpl(uri, renderer);
- }
-}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceInit.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceInit.java
deleted file mode 100644
index 462191e630..0000000000
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceInit.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2007 Oracle. 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: Oracle. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.core.internal.content.persistence;
-
-import org.eclipse.emf.ecore.EFactory;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.jpt.core.internal.content.persistence.resource.PersistenceXmlResourceFactory;
-import org.eclipse.wst.common.componentcore.internal.impl.WTPEntityResolver;
-import org.eclipse.wst.common.internal.emf.utilities.DOMUtilities;
-import org.eclipse.wst.common.internal.emf.utilities.ExtendedEcoreUtil;
-
-public class PersistenceInit
-{
- private static boolean initialized = false;
-
- public static void init() {
- init(true);
- }
-
- public static void init(boolean shouldPreregisterPackages) {
- if (! initialized) {
- initialized = true;
- DOMUtilities.setDefaultEntityResolver(WTPEntityResolver.INSTANCE);
- initResourceFactories();
- }
- if (shouldPreregisterPackages) {
- preregisterPackages();
- }
- }
-
- private static void initResourceFactories() {
- PersistenceXmlResourceFactory.register();
- }
-
- private static void preregisterPackages() {
- ExtendedEcoreUtil.preRegisterPackage(
- "packaging.xmi", //$NON-NLS-1$
- new EPackage.Descriptor() {
- public EPackage getEPackage() {
- return PersistencePackage.eINSTANCE;
- }
-
- public EFactory getEFactory() {
- return PersistenceFactory.eINSTANCE;
- }
- }
- );
- }
-}
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 8757acbcd8..cea5a4b6ad 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,29 +9,26 @@
******************************************************************************/
package org.eclipse.jpt.core.internal.content.persistence;
-import java.io.IOException;
-import java.util.Collections;
-
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.common.util.URI;
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.IJpaFile;
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.persistence.resource.PersistenceArtifactEdit;
import org.eclipse.jpt.core.internal.content.persistence.resource.PersistenceResource;
-import org.eclipse.jpt.core.internal.content.persistence.resource.PersistenceXmlResourceFactory;
+import org.eclipse.jpt.core.internal.emfutility.ComponentUtilities;
public class PersistenceXmlJpaFileContentProvider implements IJpaFileContentProvider
{
//singleton
private static final PersistenceXmlJpaFileContentProvider INSTANCE = new PersistenceXmlJpaFileContentProvider();
+
/**
* Return the singleton.
*/
@@ -49,13 +46,24 @@ public class PersistenceXmlJpaFileContentProvider implements IJpaFileContentProv
public IJpaRootContentNode buildRootContent(IJpaFile jpaFile) {
IFile resourceFile = jpaFile.getFile();
- PersistenceXmlResourceFactory.register();
- URI fileURI = URI.createPlatformResourceURI(resourceFile.getFullPath().toString(), true);
- PersistenceResource resource = (PersistenceResource) getResourceSet(resourceFile).getResource(fileURI, true);
+ 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(resourceFile, root));
+ }
+ else {
+ artifactEdit.dispose();
+ }
+
jpaFile.setContent(root);
- root.setPersistence(resource.getPersistence());
- resource.eAdapters().add(buildRootNodeListener(resourceFile, root));
return root;
}
@@ -63,10 +71,6 @@ public class PersistenceXmlJpaFileContentProvider implements IJpaFileContentProv
return new RootAdapter(resourceFile, rootContentNode);
}
- protected ResourceSet getResourceSet(IFile file) {
- return WorkbenchResourceHelperBase.getResourceSet(file.getProject());
- }
-
public String contentType() {
return JptCorePlugin.PERSISTENCE_XML_CONTENT_TYPE;
}
@@ -93,21 +97,23 @@ public class PersistenceXmlJpaFileContentProvider implements IJpaFileContentProv
this.rootContentNode.setPersistence(resource.getPersistence());
}
}
- else if (featureId == Resource.RESOURCE__IS_LOADED) {
- if (this.resourceFile.exists()) {
- // dumb translator is unloading my resource, reload it
- if (notification.getNewBooleanValue() == false) {
- PersistenceResource resource = (PersistenceResource) notification.getNotifier();
- try {
- resource.load(Collections.EMPTY_MAP);
- }
- catch (IOException ioe) {
- // hmmm, log for now
- JptCorePlugin.log(ioe);
- }
- }
- }
- }
+ // commenting out for now - this *was* a workaround for 202190, but with ArtifactEdit
+ // usage, it no longer works
+// else if (featureId == Resource.RESOURCE__IS_LOADED) {
+// if (file.exists()) {
+// // dumb translator is unloading my resource, reload it
+// if (notification.getNewBooleanValue() == false) {
+// PersistenceResource resource = (PersistenceResource) notification.getNotifier();
+// try {
+// resource.load(Collections.EMPTY_MAP);
+// }
+// catch (IOException ioe) {
+// // hmmm, log for now
+// JptCorePlugin.log(ioe);
+// }
+// }
+// }
+// }
}
}
}
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 f19b7294a3..0bd7a0802a 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
@@ -19,10 +19,12 @@ import org.eclipse.jdt.core.ElementChangedEvent;
import org.eclipse.jpt.core.internal.IJpaContentNode;
import org.eclipse.jpt.core.internal.IJpaFile;
import org.eclipse.jpt.core.internal.IJpaRootContentNode;
+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.persistence.resource.IPersistenceXmlContentNodes;
+import org.eclipse.jpt.core.internal.content.persistence.resource.PersistenceArtifactEdit;
/**
* <!-- begin-user-doc -->
@@ -52,7 +54,10 @@ public class PersistenceXmlRootContentNode extends XmlEObject
* @ordered
*/
protected Persistence persistence;
-
+
+ private PersistenceArtifactEdit artifactEdit;
+
+
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
@@ -336,23 +341,34 @@ public class PersistenceXmlRootContentNode extends XmlEObject
}
return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
}
-
+
public void dispose() {
- // TODO Auto-generated method stub
+ if (artifactEdit != null) {
+ artifactEdit.dispose();
+ }
}
-
- public void handleJavaElementChangedEvent(ElementChangedEvent event) {
- // TODO Auto-generated method stub
+
+ @Override
+ public ITextRange fullTextRange() {
+ return ITextRange.Empty.instance();
}
-
+
public IJpaContentNode getContentNode(int offset) {
if (getPersistence() == null || !getPersistence().getNode().contains(offset)) {
return this;
}
return getPersistence().getContentNode(offset);
}
-
+
public Object getId() {
return IPersistenceXmlContentNodes.PERSISTENCEXML_ROOT_ID;
}
-} // PersistenceXmlRootContentNode
+
+ public void handleJavaElementChangedEvent(ElementChangedEvent event) {
+ // TODO Auto-generated method stub
+ }
+
+ public void setArtifactEdit(PersistenceArtifactEdit persistenceArtifactEdit) {
+ artifactEdit = persistenceArtifactEdit;
+ }
+} \ 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
new file mode 100644
index 0000000000..2ed71db7e3
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/PersistenceArtifactEdit.java
@@ -0,0 +1,67 @@
+package org.eclipse.jpt.core.internal.content.persistence.resource;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.jpt.core.internal.JptCorePlugin;
+import org.eclipse.wst.common.componentcore.ArtifactEdit;
+
+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.
+ * Opened only for read access (no write)
+ */
+ public static PersistenceArtifactEdit getArtifactEditForRead(IProject aProject, String fileURI) {
+ PersistenceArtifactEdit artifactEdit = null;
+ try {
+ artifactEdit = new PersistenceArtifactEdit(aProject, URI.createURI(fileURI), true);
+ }
+ catch (IllegalArgumentException iae) {
+ // suppress illegal argument exception
+ JptCorePlugin.log(iae);
+ }
+ return 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.
+ * Opened for both write and read access
+ */
+ public static PersistenceArtifactEdit getArtifactEditForWrite(IProject aProject, String fileURI) {
+ PersistenceArtifactEdit artifactEdit = null;
+ try {
+ artifactEdit = new PersistenceArtifactEdit(aProject, URI.createURI(fileURI), false);
+ }
+ catch (IllegalArgumentException iae) {
+ // suppress illegal argument exception
+ JptCorePlugin.log(iae);
+ }
+ return artifactEdit;
+ }
+
+
+ private URI fileURI;
+
+
+ public PersistenceArtifactEdit(IProject aProject, URI aFileURI, boolean toAccessAsReadOnly)
+ throws IllegalArgumentException {
+ super(aProject, toAccessAsReadOnly);
+ fileURI = aFileURI;
+ }
+
+
+ public PersistenceResource getPersistenceResource() {
+ try {
+ return (PersistenceResource) getArtifactEditModel().getResource(fileURI);
+ }
+ catch (ClassCastException cce) {
+ return null;
+ }
+ }
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/PersistenceResource.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/PersistenceResource.java
index d05495ab4d..178ba8a88b 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/PersistenceResource.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/PersistenceResource.java
@@ -8,7 +8,13 @@
*******************************************************************************/
package org.eclipse.jpt.core.internal.content.persistence.resource;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.Path;
import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.URIConverter;
+import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase;
+import org.eclipse.jem.util.plugin.JEMUtilPlugin;
import org.eclipse.jpt.core.internal.content.persistence.Persistence;
import org.eclipse.wst.common.internal.emf.resource.Renderer;
import org.eclipse.wst.common.internal.emf.resource.Translator;
@@ -17,7 +23,6 @@ import org.eclipse.wst.common.internal.emf.resource.TranslatorResourceImpl;
public class PersistenceResource extends TranslatorResourceImpl
{
-
public PersistenceResource(Renderer aRenderer) {
super(aRenderer);
}
@@ -72,4 +77,32 @@ public class PersistenceResource extends TranslatorResourceImpl
public Persistence getPersistence() {
return (Persistence) getRootObject();
}
+
+ public IFile getFile() {
+ IFile file = null;
+ file = getFile(getURI());
+ if (file == null) {
+ if (getResourceSet() != null) {
+ URIConverter converter = getResourceSet().getURIConverter();
+ URI convertedUri = converter.normalize(getURI());
+ if (! getURI().equals(convertedUri)) {
+ file = getFile(convertedUri);
+ }
+ }
+ }
+ return file;
+ }
+
+ /**
+ * Return the IFile for the <code>uri</code> within the Workspace. This URI is assumed to be
+ * absolute in the following format: platform:/resource/....
+ */
+ private IFile getFile(URI uri) {
+ if (WorkbenchResourceHelperBase.isPlatformResourceURI(uri)) {
+ String fileString = URI.decode(uri.path());
+ fileString = fileString.substring(JEMUtilPlugin.PLATFORM_RESOURCE.length() + 1);
+ return ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(fileString));
+ }
+ return null;
+ }
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/PersistenceResourceFactory.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/PersistenceResourceFactory.java
new file mode 100644
index 0000000000..d999172406
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/PersistenceResourceFactory.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Oracle. 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: Oracle. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jpt.core.internal.content.persistence.resource;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.wst.common.internal.emf.resource.Renderer;
+import org.eclipse.wst.common.internal.emf.resource.RendererFactory;
+import org.eclipse.wst.common.internal.emf.resource.TranslatorResource;
+import org.eclipse.wst.common.internal.emf.resource.TranslatorResourceFactory;
+
+public class PersistenceResourceFactory extends TranslatorResourceFactory
+{
+ public PersistenceResourceFactory() {
+ this(RendererFactory.getDefaultRendererFactory());
+ }
+
+ public PersistenceResourceFactory(RendererFactory aRendererFactory, boolean listeningForUpdates) {
+ super(aRendererFactory, listeningForUpdates);
+ }
+
+ public PersistenceResourceFactory(RendererFactory aRendererFactory) {
+ super(aRendererFactory);
+ }
+
+
+ /**
+ * @see TranslatorResourceFactory#createResource(URI, Renderer)
+ */
+ protected TranslatorResource createResource(URI uri, Renderer renderer) {
+ return new PersistenceResource(uri, renderer);
+ }
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/PersistenceXmlResourceFactory.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/PersistenceXmlResourceFactory.java
deleted file mode 100644
index ee8a066f16..0000000000
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/PersistenceXmlResourceFactory.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2007 Oracle. 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: Oracle. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.core.internal.content.persistence.resource;
-
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.wst.common.componentcore.internal.impl.WTPResourceFactoryRegistry;
-import org.eclipse.wst.common.internal.emf.resource.Renderer;
-import org.eclipse.wst.common.internal.emf.resource.RendererFactory;
-import org.eclipse.wst.common.internal.emf.resource.TranslatorResource;
-import org.eclipse.wst.common.internal.emf.resource.TranslatorResourceFactory;
-import org.eclipse.wst.xml.core.internal.emf2xml.EMF2DOMSSERendererFactory;
-
-public class PersistenceXmlResourceFactory extends TranslatorResourceFactory
-{
- public static final String PERSISTENCE_XML_FILE_NAME = "persistence.xml"; //$NON-NLS-1$
- public static final URI PERSISTENCE_XML_FILE_URI = URI.createURI(PERSISTENCE_XML_FILE_NAME); //$NON-NLS-1$
-
- /**
- * Register myself with the Resource.Factory.Registry
- */
- public static void registerWith(RendererFactory rendererFactory) {
- WTPResourceFactoryRegistry.INSTANCE.registerLastFileSegment(PERSISTENCE_XML_FILE_NAME, new PersistenceXmlResourceFactory(rendererFactory));
- }
-
- /**
- * Register myself using the default renderer factory.
- * @see #registerWith(RendererFactory)
- */
- public static void register() {
- registerWith(EMF2DOMSSERendererFactory.INSTANCE);
- }
-
- public static Resource.Factory getRegisteredFactory() {
- return WTPResourceFactoryRegistry.INSTANCE.getFactory(PERSISTENCE_XML_FILE_URI);
- }
-
- public PersistenceXmlResourceFactory(RendererFactory aRendererFactory, boolean listeningForUpdates) {
- super(aRendererFactory, listeningForUpdates);
- }
-
- public PersistenceXmlResourceFactory(RendererFactory aRendererFactory) {
- super(aRendererFactory);
- }
-
- /**
- * @see TranslatorResourceFactory#createResource(URI, Renderer)
- */
- protected TranslatorResource createResource(URI uri, Renderer renderer) {
- return new PersistenceResource(uri, renderer);
- }
-}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/emfutility/ComponentUtilities.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/emfutility/ComponentUtilities.java
new file mode 100644
index 0000000000..a6aa26fdb1
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/emfutility/ComponentUtilities.java
@@ -0,0 +1,67 @@
+package org.eclipse.jpt.core.internal.emfutility;
+
+import java.util.Iterator;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jpt.utility.internal.CollectionTools;
+import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
+import org.eclipse.jpt.utility.internal.iterators.FilteringIterator;
+import org.eclipse.jpt.utility.internal.iterators.TreeIterator;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFile;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
+import org.eclipse.wst.common.componentcore.resources.IVirtualResource;
+
+public class ComponentUtilities
+{
+ /**
+ * Return the deployment path for the given source file. If there is no
+ * corresponding deployment file, null will be returned.
+ */
+ public static IPath computeDeployPath(IFile sourceFile) {
+ // Unfortunately, the only current way to do this is to exhaustively
+ // search all deployment files and attempt to match to this file.
+ // Bug 202943 has been logged to track this issue.
+ for (IVirtualFile virtualFile : CollectionTools.iterable(allVirtualFiles(sourceFile.getProject()))) {
+ for (IFile underlyingFile : virtualFile.getUnderlyingFiles()) {
+ if (sourceFile.equals(underlyingFile)) {
+ return virtualFile.getRuntimePath();
+ }
+ }
+ }
+ return null;
+ }
+
+ private static Iterator<IVirtualFile> allVirtualFiles(IProject project) {
+ return new FilteringIterator<IVirtualFile>(allVirtualResources(project)) {
+ @Override
+ protected boolean accept(Object o) {
+ return ((IVirtualResource) o).getType() == IVirtualResource.FILE;
+ }
+ };
+ }
+
+ private static Iterator<IVirtualResource> allVirtualResources(IProject project) {
+ IVirtualComponent virtualComponent = ComponentCore.createComponent(project);
+
+ if (virtualComponent == null) {
+ return EmptyIterator.instance();
+ }
+
+ return new TreeIterator<IVirtualResource>(virtualComponent.getRootFolder()) {
+ @Override
+ protected Iterator<? extends IVirtualResource> children(IVirtualResource next) {
+ if (next.getType() == IVirtualResource.FOLDER) {
+ try {
+ return CollectionTools.iterator(((IVirtualFolder) next).members());
+ }
+ catch (CoreException ce) { /* fall through, return default case */ }
+ }
+ return EmptyIterator.instance();
+ }
+ };
+ }
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaFacetInstallDelegate.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaFacetInstallDelegate.java
index 288e9b1261..791160aff7 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaFacetInstallDelegate.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaFacetInstallDelegate.java
@@ -17,6 +17,7 @@ import org.eclipse.jdt.core.IClasspathAttribute;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jpt.utility.internal.CollectionTools;
import org.eclipse.jpt.utility.internal.StringTools;
import org.eclipse.jst.j2ee.classpathdep.ClasspathDependencyUtil;
import org.eclipse.jst.j2ee.classpathdep.IClasspathDependencyConstants;
@@ -61,15 +62,17 @@ public class JpaFacetInstallDelegate
)
};
}
+
IClasspathEntry jpaLibraryEntry =
JavaCore.newContainerEntry(
new Path(JavaCore.USER_LIBRARY_CONTAINER_ID + "/" + jpaLibrary),
null, attributes, true);
- IClasspathEntry[] newClasspath = new IClasspathEntry[newLength];
- System.arraycopy(classpath, 0, newClasspath, 0, newLength - 1);
- newClasspath[newLength - 1] = jpaLibraryEntry;
-
- javaProject.setRawClasspath(newClasspath, monitor);
+ if (! CollectionTools.contains(classpath, jpaLibraryEntry)) {
+ IClasspathEntry[] newClasspath = new IClasspathEntry[newLength];
+ System.arraycopy(classpath, 0, newClasspath, 0, newLength - 1);
+ newClasspath[newLength - 1] = jpaLibraryEntry;
+ javaProject.setRawClasspath(newClasspath, monitor);
+ }
}
if (monitor != 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 e4cd4cb256..9c54db2511 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
@@ -8,37 +8,37 @@
*******************************************************************************/
package org.eclipse.jpt.core.internal.facet;
-import java.io.IOException;
-import java.util.Iterator;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-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.jpt.core.internal.JpaModelManager;
import org.eclipse.jpt.core.internal.JptCorePlugin;
import org.eclipse.jpt.core.internal.content.orm.EntityMappingsInternal;
import org.eclipse.jpt.core.internal.content.orm.OrmFactory;
-import org.eclipse.jpt.core.internal.content.orm.OrmXmlResource;
+import org.eclipse.jpt.core.internal.content.orm.OrmResource;
+import org.eclipse.jpt.core.internal.content.orm.resource.OrmArtifactEdit;
import org.eclipse.jpt.core.internal.content.persistence.Persistence;
import org.eclipse.jpt.core.internal.content.persistence.PersistenceFactory;
import org.eclipse.jpt.core.internal.content.persistence.PersistenceUnit;
+import org.eclipse.jpt.core.internal.content.persistence.resource.PersistenceArtifactEdit;
import org.eclipse.jpt.core.internal.content.persistence.resource.PersistenceResource;
-import org.eclipse.jpt.utility.internal.CollectionTools;
+import org.eclipse.jst.j2ee.internal.J2EEConstants;
+import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
+import org.eclipse.wst.common.project.facet.core.FacetedProjectFramework;
import org.eclipse.wst.common.project.facet.core.IDelegate;
import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
public class JpaFacetPostInstallDelegate
implements IDelegate, IJpaFacetDataModelProperties
{
+ private final static String WEB_PROJECT_DEPLOY_PREFIX = J2EEConstants.WEB_INF_CLASSES;
+
+ private final static String PERSISTENCE_XML_FILE_PATH = "META-INF/persistence.xml";
+
private final static String ORM_XML_FILE_PATH = "META-INF/orm.xml";
+
public void execute(IProject project, IProjectFacetVersion fv,
Object config, IProgressMonitor monitor) throws CoreException {
@@ -70,64 +70,59 @@ public class JpaFacetPostInstallDelegate
}
private void createPersistenceXml(IProject project, IDataModel dataModel) {
- String sourceFolder = computeSourceFolder(project);
-
- URI fileURI = URI.createPlatformResourceURI(sourceFolder + "/META-INF/persistence.xml", false);
- PersistenceResource resource = (PersistenceResource) getResourceSet(project).createResource(fileURI);
- Persistence persistence = PersistenceFactory.eINSTANCE.createPersistence();
- persistence.setVersion("1.0");
- PersistenceUnit pUnit = PersistenceFactory.eINSTANCE.createPersistenceUnit();
- pUnit.setName(project.getName());
- persistence.getPersistenceUnits().add(pUnit);
-
+ String deployPath = PERSISTENCE_XML_FILE_PATH;
try {
- resource.getContents().add(persistence);
- resource.save(null);
+ if (FacetedProjectFramework.hasProjectFacet(project, IModuleConstants.JST_WEB_MODULE)) {
+ deployPath = WEB_PROJECT_DEPLOY_PREFIX + "/" + deployPath;
+ }
}
- catch (IOException e) {
- JptCorePlugin.log(e);
+ catch (CoreException ce) {
+ // could not determine project facets. assume it doesn't have the facet.
+ JptCorePlugin.log(ce);
}
- }
-
- private void createOrmXml(IProject project, IDataModel dataModel) {
- String sourceFolder = computeSourceFolder(project);
- URI fileURI = URI.createPlatformResourceURI(sourceFolder + "/" + ORM_XML_FILE_PATH, false);
- OrmXmlResource resource = (OrmXmlResource) getResourceSet(project).createResource(fileURI);
- EntityMappingsInternal entityMappings = OrmFactory.eINSTANCE.createEntityMappingsInternal();
- entityMappings.setVersion("1.0");
+ PersistenceArtifactEdit pae =
+ PersistenceArtifactEdit.getArtifactEditForWrite(project, deployPath);
+ PersistenceResource resource = pae.getPersistenceResource();
- try {
- resource.getContents().add(entityMappings);
- resource.save(null);
- }
- catch (IOException e) {
- JptCorePlugin.log(e);
+ // fix for bug 202811 - only add content if it does not already have content
+ if (resource.getPersistence() == null) {
+ Persistence persistence = PersistenceFactory.eINSTANCE.createPersistence();
+ persistence.setVersion("1.0");
+ PersistenceUnit pUnit = PersistenceFactory.eINSTANCE.createPersistenceUnit();
+ pUnit.setName(project.getName());
+ persistence.getPersistenceUnits().add(pUnit);
+ resource.getContents().add(persistence);
+ pae.save(null);
}
+
+ pae.dispose();
}
- private String computeSourceFolder(IProject project) {
- IJavaProject jproject = JavaCore.create(project);
- IClasspathEntry[] classpath;
-
+ private void createOrmXml(IProject project, IDataModel dataModel) {
+ String deployPath = ORM_XML_FILE_PATH;
try {
- classpath = jproject.getRawClasspath();
+ if (FacetedProjectFramework.hasProjectFacet(project, IModuleConstants.JST_WEB_MODULE)) {
+ deployPath = WEB_PROJECT_DEPLOY_PREFIX + "/" + deployPath;
+ }
}
- catch (JavaModelException jme) {
- classpath = new IClasspathEntry[0];
+ catch (CoreException ce) {
+ // could not determine project facets. assume it doesn't have the facet.
+ JptCorePlugin.log(ce);
}
- for (Iterator stream = CollectionTools.iterator(classpath); stream.hasNext(); ) {
- IClasspathEntry next = (IClasspathEntry) stream.next();
- if (next.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
- return next.getPath().toString();
- }
+ OrmArtifactEdit oae =
+ OrmArtifactEdit.getArtifactEditForWrite(project, deployPath);
+ OrmResource resource = oae.getOrmResource();
+
+ // fix for bug 202811 - only add content if it does not already have content
+ if (resource.getEntityMappings() == null) {
+ EntityMappingsInternal entityMappings = OrmFactory.eINSTANCE.createEntityMappingsInternal();
+ entityMappings.setVersion("1.0");
+ resource.getContents().add(entityMappings);
+ oae.save(null);
}
- return "/" + project.getName();
- }
-
- private ResourceSet getResourceSet(IProject project) {
- return WorkbenchResourceHelperBase.getResourceSet(project);
+ oae.dispose();
}
}

Back to the top