diff options
author | pfullbright | 2009-11-03 22:37:08 +0000 |
---|---|---|
committer | pfullbright | 2009-11-03 22:37:08 +0000 |
commit | 9bd97f81a826acffbde877fe510f49a1ac7fbe8e (patch) | |
tree | 8da207a913f69c8f1b9f00c87c11a522d87d7187 | |
parent | 0f4f9b2eddd71c69683df17716e92d335dcbec84 (diff) | |
download | webtools.dali-9bd97f81a826acffbde877fe510f49a1ac7fbe8e.tar.gz webtools.dali-9bd97f81a826acffbde877fe510f49a1ac7fbe8e.tar.xz webtools.dali-9bd97f81a826acffbde877fe510f49a1ac7fbe8e.zip |
Added menu item to upgrade document version of legacy xml documents
26 files changed, 502 insertions, 114 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 1b8dc9deae..216d57df1b 100644 --- a/jpa/plugins/org.eclipse.jpt.core/META-INF/MANIFEST.MF +++ b/jpa/plugins/org.eclipse.jpt.core/META-INF/MANIFEST.MF @@ -65,6 +65,7 @@ Export-Package: org.eclipse.jpt.core, org.eclipse.jpt.core.internal.resource.java.source;x-internal:=true, org.eclipse.jpt.core.internal.resource.orm;x-internal:=true, org.eclipse.jpt.core.internal.resource.persistence;x-internal:=true, + org.eclipse.jpt.core.internal.resource.xml, org.eclipse.jpt.core.internal.synch;x-internal:=true, org.eclipse.jpt.core.internal.utility;x-internal:=true, org.eclipse.jpt.core.internal.utility.jdt;x-internal:=true, diff --git a/jpa/plugins/org.eclipse.jpt.core/plugin.xml b/jpa/plugins/org.eclipse.jpt.core/plugin.xml index f630fc9650..ca2dc41c5b 100644 --- a/jpa/plugins/org.eclipse.jpt.core/plugin.xml +++ b/jpa/plugins/org.eclipse.jpt.core/plugin.xml @@ -81,25 +81,36 @@ type="org.eclipse.jpt.core.context.PersistentAttribute" namespace="org.eclipse.jpt.core" properties="isMapped, isVirtual" - class="org.eclipse.jpt.core.internal.context.PersistentAttributePropertyTester"> - </propertyTester> + class="org.eclipse.jpt.core.internal.context.PersistentAttributePropertyTester"/> <propertyTester id="org.eclipse.jpt.core.propertyTester.platformResource" type="org.eclipse.core.resources.IResource" namespace="org.eclipse.jpt.core" properties="jpaPlatform" - class="org.eclipse.jpt.core.internal.JpaPlatformTester"> - </propertyTester> + class="org.eclipse.jpt.core.internal.JpaPlatformTester"/> <propertyTester id="org.eclipse.jpt.core.propertyTester.javaElement" type="org.eclipse.jdt.core.IJavaElement" namespace="org.eclipse.jpt.core" properties="jpaPlatform" - class="org.eclipse.jpt.core.internal.JpaPlatformTester"> - </propertyTester> - + class="org.eclipse.jpt.core.internal.JpaPlatformTester"/> + + <propertyTester + id="org.eclipse.jpt.core.propertyTester.xmlResource" + type="org.eclipse.jpt.core.resource.xml.JpaXmlResource" + namespace="org.eclipse.jpt.core" + properties="isLatestSupportedVersion" + class="org.eclipse.jpt.core.internal.resource.xml.JpaXmlResourcePropertyTester"/> + + <propertyTester + id="org.eclipse.jpt.core.propertyTester.xmlFile" + type="org.eclipse.jpt.core.context.XmlFile" + namespace="org.eclipse.jpt.core" + properties="isLatestSupportedVersion" + class="org.eclipse.jpt.core.internal.resource.xml.JpaXmlResourcePropertyTester"/> + </extension> @@ -124,6 +135,12 @@ <adapter type="org.eclipse.jpt.core.IResourcePart"/> </factory> + <factory + class="org.eclipse.jpt.core.internal.resource.xml.JpaXmlResourceAdapterFactory" + adaptableType="org.eclipse.core.resources.IFile"> + <adapter type="org.eclipse.jpt.core.resource.xml.JpaXmlResource"/> + </factory> + </extension> diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/JpaPlatform.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/JpaPlatform.java index d2505072df..d250b5a102 100644 --- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/JpaPlatform.java +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/JpaPlatform.java @@ -10,6 +10,7 @@ package org.eclipse.jpt.core; import org.eclipse.core.resources.IFile; +import org.eclipse.core.runtime.content.IContentType; import org.eclipse.jpt.core.context.java.JavaAttributeMappingDefinition; import org.eclipse.jpt.core.context.java.JavaPersistentAttribute; import org.eclipse.jpt.core.context.java.JavaPersistentType; @@ -137,19 +138,27 @@ public interface JpaPlatform JavaAttributeMappingDefinition getSpecifiedJavaAttributeMappingDefinition(String mappingKey); - // ********** Mapping Files ********** + // ********** resource types and definitions ********** /** * Return a {@link ResourceDefinition} to describe the context model for a file of the given * resource type. - * Thrown an {@link IllegalArgumentException} if the resource type is not supported by the platform. + * Throw an {@link IllegalArgumentException} if the resource type is not supported by the platform. * - * @param resourceType The resource type of a potential mapping file - * @return The resource definition that can be used to describe the context model of such - * a file + * @param resourceType The resource type of a potential resource definition + * @return The resource definition that can be used for such a file */ ResourceDefinition getResourceDefinition(JpaResourceType resourceType); + /** + * Return the most recent supported {@link JpaResourceType} for the given content type. + * Throw an {@link IllegalArgumentException} if the content type is not supported by the platform. + * + * @param contentType A content type supported by the platform + * @return The most recent resource type supported by the platform + */ + JpaResourceType getMostRecentSupportedResourceType(IContentType contentType); + // ********** database ********** diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/JpaPlatformProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/JpaPlatformProvider.java index 181b05d80f..4b52edc877 100644 --- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/JpaPlatformProvider.java +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/JpaPlatformProvider.java @@ -10,6 +10,7 @@ package org.eclipse.jpt.core; import java.util.ListIterator; +import org.eclipse.core.runtime.content.IContentType; import org.eclipse.jpt.core.context.java.JavaAttributeMappingDefinition; import org.eclipse.jpt.core.context.java.JavaTypeMappingDefinition; @@ -35,6 +36,11 @@ import org.eclipse.jpt.core.context.java.JavaTypeMappingDefinition; public interface JpaPlatformProvider { /** + * Return the most recent resource type for the given content type supported by this platform + */ + public JpaResourceType getMostRecentSupportedResourceType(IContentType contentType); + + /** * Return the resource model providers that apply to this platform. */ ListIterator<JpaResourceModelProvider> resourceModelProviders(); diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/MappingFile.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/MappingFile.java index a10e12c49f..6c495d298d 100644 --- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/MappingFile.java +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/MappingFile.java @@ -9,7 +9,6 @@ ******************************************************************************/ package org.eclipse.jpt.core.context; -import org.eclipse.jpt.core.JpaStructureNode; import org.eclipse.jpt.core.context.persistence.PersistentTypeContainer; import org.eclipse.jpt.core.resource.xml.JpaXmlResource; @@ -23,14 +22,9 @@ import org.eclipse.jpt.core.resource.xml.JpaXmlResource; * will almost certainly be broken (repeatedly) as the API evolves. */ public interface MappingFile - extends XmlContextNode, JpaStructureNode, PersistentTypeContainer + extends XmlFile, PersistentTypeContainer { /** - * Return the underlying xml resource - */ - JpaXmlResource getXmlResource(); - - /** * Return the root object of this mapping file */ MappingFileRoot getRoot(); diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/XmlFile.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/XmlFile.java new file mode 100644 index 0000000000..9e54b71830 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/XmlFile.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2009 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.context; + +import org.eclipse.jpt.core.JpaStructureNode; +import org.eclipse.jpt.core.resource.xml.JpaXmlResource; + +/** + * Context representation of any JPA XML file. + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface XmlFile + extends XmlContextNode, JpaStructureNode +{ + /** + * Return the resource model object + */ + JpaXmlResource getXmlResource(); +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/PersistenceXml.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/PersistenceXml.java index 81821b259d..a87a5c95f8 100644 --- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/PersistenceXml.java +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/PersistenceXml.java @@ -9,8 +9,7 @@ ******************************************************************************/ package org.eclipse.jpt.core.context.persistence; -import org.eclipse.jpt.core.JpaStructureNode; -import org.eclipse.jpt.core.context.XmlContextNode; +import org.eclipse.jpt.core.context.XmlFile; import org.eclipse.jpt.core.jpa2.MetamodelGenerator; import org.eclipse.jpt.core.resource.xml.JpaXmlResource; @@ -24,7 +23,7 @@ import org.eclipse.jpt.core.resource.xml.JpaXmlResource; * will almost certainly be broken (repeatedly) as the API evolves. */ public interface PersistenceXml - extends XmlContextNode, JpaStructureNode, MetamodelGenerator + extends XmlFile, MetamodelGenerator { // **************** persistence ******************************************* @@ -39,11 +38,6 @@ public interface PersistenceXml */ Persistence getPersistence(); - /** - * Return the resource model object - */ - JpaXmlResource getXmlResource(); - // **************** updating ********************************************** diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/GenericJpaPlatform.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/GenericJpaPlatform.java index a8786bec38..7e044a5955 100644 --- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/GenericJpaPlatform.java +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/GenericJpaPlatform.java @@ -206,7 +206,7 @@ public class GenericJpaPlatform } - // ********** Mapping Files ********** + // ********** resource types and definitions ********** public ResourceDefinition getResourceDefinition(JpaResourceType resourceType) { for (ResourceDefinition resourceDefinition : CollectionTools.iterable(resourceDefinitions())) { @@ -221,6 +221,10 @@ public class GenericJpaPlatform return this.platformProvider.resourceDefinitions(); } + public JpaResourceType getMostRecentSupportedResourceType(IContentType contentType) { + return this.platformProvider.getMostRecentSupportedResourceType(contentType); + } + // ********** database ********** diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/GenericJpaPlatformProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/GenericJpaPlatformProvider.java index f36b315c9c..751b62c1da 100644 --- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/GenericJpaPlatformProvider.java +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/GenericJpaPlatformProvider.java @@ -9,8 +9,11 @@ ******************************************************************************/ package org.eclipse.jpt.core.internal; +import org.eclipse.core.runtime.content.IContentType; import org.eclipse.jpt.core.JpaPlatformProvider; import org.eclipse.jpt.core.JpaResourceModelProvider; +import org.eclipse.jpt.core.JpaResourceType; +import org.eclipse.jpt.core.JptCorePlugin; import org.eclipse.jpt.core.ResourceDefinition; import org.eclipse.jpt.core.context.java.JavaAttributeMappingDefinition; import org.eclipse.jpt.core.context.java.JavaTypeMappingDefinition; @@ -62,6 +65,24 @@ public class GenericJpaPlatformProvider // ********** resource models ********** + public JpaResourceType getMostRecentSupportedResourceType(IContentType contentType) { + if (contentType.equals(JptCorePlugin.JAVA_SOURCE_CONTENT_TYPE)) { + return JptCorePlugin.JAVA_SOURCE_RESOURCE_TYPE; + } + else if (contentType.equals(JptCorePlugin.JAR_CONTENT_TYPE)) { + return JptCorePlugin.JAR_RESOURCE_TYPE; + } + else if (contentType.equals(JptCorePlugin.PERSISTENCE_XML_CONTENT_TYPE)) { + return JptCorePlugin.PERSISTENCE_XML_1_0_RESOURCE_TYPE; + } + else if (contentType.equals(JptCorePlugin.ORM_XML_CONTENT_TYPE)) { + return JptCorePlugin.ORM_XML_1_0_RESOURCE_TYPE; + } + else { + throw new IllegalArgumentException(contentType.toString()); + } + } + @Override protected JpaResourceModelProvider[] buildResourceModelProviders() { // order should not be important here diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/orm/GenericEntityMappings.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/orm/GenericEntityMappings.java index 52daa73900..429d0b6cd2 100644 --- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/orm/GenericEntityMappings.java +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/orm/GenericEntityMappings.java @@ -12,9 +12,7 @@ package org.eclipse.jpt.core.internal.jpa1.context.orm; import org.eclipse.jpt.core.JptCorePlugin; import org.eclipse.jpt.core.context.orm.OrmXml; import org.eclipse.jpt.core.internal.context.orm.AbstractEntityMappings; -import org.eclipse.jpt.core.resource.orm.JPA; import org.eclipse.jpt.core.resource.orm.XmlEntityMappings; -import org.eclipse.jpt.core.resource.orm.v2_0.JPA2_0; public class GenericEntityMappings extends AbstractEntityMappings @@ -26,15 +24,7 @@ public class GenericEntityMappings @Override protected String latestDocumentVersion() { - String jpaPlatformVersion = getJpaPlatform().getJpaVersion().getJpaVersion(); - if (jpaPlatformVersion.equals(JptCorePlugin.JPA_FACET_VERSION_1_0)) { - return JPA.SCHEMA_VERSION; - } - else if (jpaPlatformVersion.equals(JptCorePlugin.JPA_FACET_VERSION_2_0)) { - return JPA2_0.SCHEMA_VERSION; - } - else { - throw new IllegalStateException("Platform version not recognized."); - } + return getJpaPlatform().getMostRecentSupportedResourceType( + JptCorePlugin.ORM_XML_CONTENT_TYPE).getVersion(); } } diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/persistence/GenericPersistence.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/persistence/GenericPersistence.java index 8ac1004a67..3956937faa 100644 --- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/persistence/GenericPersistence.java +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/persistence/GenericPersistence.java @@ -21,11 +21,9 @@ import org.eclipse.jpt.core.context.persistence.PersistenceXml; import org.eclipse.jpt.core.internal.context.persistence.AbstractPersistenceXmlContextNode; import org.eclipse.jpt.core.internal.validation.DefaultJpaValidationMessages; import org.eclipse.jpt.core.internal.validation.JpaValidationMessages; -import org.eclipse.jpt.core.resource.persistence.JPA; import org.eclipse.jpt.core.resource.persistence.PersistenceFactory; import org.eclipse.jpt.core.resource.persistence.XmlPersistence; import org.eclipse.jpt.core.resource.persistence.XmlPersistenceUnit; -import org.eclipse.jpt.core.resource.persistence.v2_0.JPA2_0; import org.eclipse.jpt.core.utility.TextRange; import org.eclipse.jpt.utility.internal.CollectionTools; import org.eclipse.jpt.utility.internal.iterators.EmptyListIterator; @@ -229,16 +227,8 @@ public class GenericPersistence } protected String latestDocumentVersion() { - String jpaPlatformVersion = getJpaPlatform().getJpaVersion().getJpaVersion(); - if (jpaPlatformVersion.equals(JptCorePlugin.JPA_FACET_VERSION_1_0)) { - return JPA.SCHEMA_VERSION; - } - else if (jpaPlatformVersion.equals(JptCorePlugin.JPA_FACET_VERSION_2_0)) { - return JPA2_0.SCHEMA_VERSION; - } - else { - throw new IllegalStateException("Platform version not recognized."); - } + return getJpaPlatform().getMostRecentSupportedResourceType( + JptCorePlugin.PERSISTENCE_XML_CONTENT_TYPE).getVersion(); } /** diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/Generic2_0JpaPlatformProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/Generic2_0JpaPlatformProvider.java index b635ecff80..6247e02782 100644 --- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/Generic2_0JpaPlatformProvider.java +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/Generic2_0JpaPlatformProvider.java @@ -9,8 +9,11 @@ ******************************************************************************/ package org.eclipse.jpt.core.internal.jpa2; +import org.eclipse.core.runtime.content.IContentType; import org.eclipse.jpt.core.JpaPlatformProvider; import org.eclipse.jpt.core.JpaResourceModelProvider; +import org.eclipse.jpt.core.JpaResourceType; +import org.eclipse.jpt.core.JptCorePlugin; import org.eclipse.jpt.core.ResourceDefinition; import org.eclipse.jpt.core.context.java.JavaAttributeMappingDefinition; import org.eclipse.jpt.core.context.java.JavaTypeMappingDefinition; @@ -71,6 +74,24 @@ public class Generic2_0JpaPlatformProvider // ********** resource models ********** + public JpaResourceType getMostRecentSupportedResourceType(IContentType contentType) { + if (contentType.equals(JptCorePlugin.JAVA_SOURCE_CONTENT_TYPE)) { + return JptCorePlugin.JAVA_SOURCE_RESOURCE_TYPE; + } + else if (contentType.equals(JptCorePlugin.JAR_CONTENT_TYPE)) { + return JptCorePlugin.JAR_RESOURCE_TYPE; + } + else if (contentType.equals(JptCorePlugin.PERSISTENCE_XML_CONTENT_TYPE)) { + return JptCorePlugin.PERSISTENCE_XML_2_0_RESOURCE_TYPE; + } + else if (contentType.equals(JptCorePlugin.ORM_XML_CONTENT_TYPE)) { + return JptCorePlugin.ORM_XML_2_0_RESOURCE_TYPE; + } + else { + throw new IllegalArgumentException(contentType.toString()); + } + } + @Override protected JpaResourceModelProvider[] buildResourceModelProviders() { // order should not be important here diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/operations/OrmFileCreationDataModelProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/operations/OrmFileCreationDataModelProvider.java index 50ae2c426c..a8322a227c 100644 --- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/operations/OrmFileCreationDataModelProvider.java +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/operations/OrmFileCreationDataModelProvider.java @@ -12,7 +12,6 @@ package org.eclipse.jpt.core.internal.operations; import java.util.Iterator; import java.util.Set; -import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; @@ -97,16 +96,8 @@ public class OrmFileCreationDataModelProvider if (getProject() == null) { return null; } - try { - String facetVersion = getJpaFacetVersion(getProject()); - if (facetVersion.equals(JptCorePlugin.JPA_FACET_VERSION_1_0)) { - return JPA.SCHEMA_VERSION; - } - } - catch (CoreException ce) { - // fall through to final return - } - return JPA2_0.SCHEMA_VERSION; + return getJpaProject().getJpaPlatform().getMostRecentSupportedResourceType( + JptCorePlugin.ORM_XML_CONTENT_TYPE).getVersion(); } protected PersistenceUnit getDefaultPersistenceUnit() { diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/operations/PersistenceFileCreationDataModelProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/operations/PersistenceFileCreationDataModelProvider.java index 94411c40f1..e8d744dc1f 100644 --- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/operations/PersistenceFileCreationDataModelProvider.java +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/operations/PersistenceFileCreationDataModelProvider.java @@ -10,7 +10,6 @@ *******************************************************************************/ package org.eclipse.jpt.core.internal.operations; -import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.Path; import org.eclipse.jpt.core.JptCorePlugin; import org.eclipse.jpt.core.resource.persistence.JPA; @@ -44,16 +43,8 @@ public class PersistenceFileCreationDataModelProvider if (getProject() == null) { return null; } - try { - String facetVersion = getJpaFacetVersion(getProject()); - if (facetVersion.equals(JptCorePlugin.JPA_FACET_VERSION_1_0)) { - return JPA.SCHEMA_VERSION; - } - } - catch (CoreException ce) { - // fall through to final return - } - return JPA2_0.SCHEMA_VERSION; + return getJpaProject().getJpaPlatform().getMostRecentSupportedResourceType( + JptCorePlugin.PERSISTENCE_XML_CONTENT_TYPE).getVersion(); } diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/xml/JpaXmlResourceAdapterFactory.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/xml/JpaXmlResourceAdapterFactory.java new file mode 100644 index 0000000000..c03f4b15b8 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/xml/JpaXmlResourceAdapterFactory.java @@ -0,0 +1,48 @@ +/******************************************************************************* + * Copyright (c) 2009 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.resource.xml; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.runtime.IAdapterFactory; +import org.eclipse.jpt.core.JpaFile; +import org.eclipse.jpt.core.JpaResourceModel; +import org.eclipse.jpt.core.JptCorePlugin; +import org.eclipse.jpt.core.resource.xml.JpaXmlResource; + +public class JpaXmlResourceAdapterFactory + implements IAdapterFactory +{ + private static final Class<?>[] ADAPTER_LIST = new Class[] { JpaXmlResource.class }; + + public Class<?>[] getAdapterList() { + return ADAPTER_LIST; + } + + public Object getAdapter(Object adaptableObject, @SuppressWarnings("unchecked") Class adapterType) { + if (adaptableObject instanceof IFile) { + return this.getAdapter((IFile) adaptableObject, adapterType); + } + return null; + } + + private Object getAdapter(final IFile file, Class <?>adapterType) { + if (adapterType == JpaXmlResource.class) { + JpaFile jpaFile = JptCorePlugin.getJpaFile(file); + if (jpaFile != null) { + JpaResourceModel resourceModel = jpaFile.getResourceModel(); + if (resourceModel instanceof JpaXmlResource) { + return resourceModel; + } + } + } + return null; + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/xml/JpaXmlResourcePropertyTester.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/xml/JpaXmlResourcePropertyTester.java new file mode 100644 index 0000000000..6bb19d5084 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/xml/JpaXmlResourcePropertyTester.java @@ -0,0 +1,51 @@ +/******************************************************************************* + * Copyright (c) 2009 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.resource.xml; + +import org.eclipse.core.expressions.PropertyTester; +import org.eclipse.core.runtime.content.IContentType; +import org.eclipse.jpt.core.JpaProject; +import org.eclipse.jpt.core.context.XmlFile; +import org.eclipse.jpt.core.resource.xml.JpaXmlResource; + +public class JpaXmlResourcePropertyTester + extends PropertyTester +{ + public static final String IS_LATEST_SUPPORTED_VERSION = "isLatestSupportedVersion"; + + + public boolean test(Object receiver, String property, Object[] args, Object expectedValue) { + JpaXmlResource xmlResource = null; + if (receiver instanceof JpaXmlResource) { + xmlResource = (JpaXmlResource) receiver; + } + else if (receiver instanceof XmlFile) { + xmlResource = ((XmlFile) receiver).getXmlResource(); + } + else { + return false; + } + + if (IS_LATEST_SUPPORTED_VERSION.equals(property)) { + Boolean expectedIsLatestSupportedVersion = (Boolean) expectedValue; + JpaProject jpaProject = xmlResource.getJpaProject(); + IContentType contentType = xmlResource.getContentType(); + Boolean actualIsLatestSupportedVersion = + xmlResource.getVersion() != null + && xmlResource.getVersion().equals( + jpaProject.getJpaPlatform().getMostRecentSupportedResourceType(contentType).getVersion()); + + return actualIsLatestSupportedVersion == expectedIsLatestSupportedVersion; + } + + return false; + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/xml/JpaXmlResource.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/xml/JpaXmlResource.java index 8f4a2c9a2f..e0ad685837 100644 --- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/xml/JpaXmlResource.java +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/xml/JpaXmlResource.java @@ -13,6 +13,7 @@ package org.eclipse.jpt.core.resource.xml; import java.io.IOException; import java.util.Collections; import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.content.IContentType; @@ -24,6 +25,7 @@ import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase; import org.eclipse.jem.util.plugin.JEMUtilPlugin; +import org.eclipse.jpt.core.JpaProject; import org.eclipse.jpt.core.JpaResourceModel; import org.eclipse.jpt.core.JpaResourceModelListener; import org.eclipse.jpt.core.JpaResourceType; @@ -186,6 +188,14 @@ public class JpaXmlResource return ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(fileName)); } + public IProject getProject() { + return getFile().getProject(); + } + + public JpaProject getJpaProject() { + return JptCorePlugin.getJpaProject(getProject()); + } + public void modify(Runnable runnable) { try { runnable.run(); diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/EclipseLinkJpaPlatformProvider.java b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/EclipseLinkJpaPlatformProvider.java index ff532e8065..f88ba88af5 100644 --- a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/EclipseLinkJpaPlatformProvider.java +++ b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/EclipseLinkJpaPlatformProvider.java @@ -9,8 +9,11 @@ *******************************************************************************/ package org.eclipse.jpt.eclipselink.core.internal; +import org.eclipse.core.runtime.content.IContentType; import org.eclipse.jpt.core.JpaPlatformProvider; import org.eclipse.jpt.core.JpaResourceModelProvider; +import org.eclipse.jpt.core.JpaResourceType; +import org.eclipse.jpt.core.JptCorePlugin; import org.eclipse.jpt.core.ResourceDefinition; import org.eclipse.jpt.core.context.java.JavaAttributeMappingDefinition; import org.eclipse.jpt.core.context.java.JavaTypeMappingDefinition; @@ -71,6 +74,27 @@ public class EclipseLinkJpaPlatformProvider // ********* resource models ********* + public JpaResourceType getMostRecentSupportedResourceType(IContentType contentType) { + if (contentType.equals(JptCorePlugin.JAVA_SOURCE_CONTENT_TYPE)) { + return JptCorePlugin.JAVA_SOURCE_RESOURCE_TYPE; + } + else if (contentType.equals(JptCorePlugin.JAR_CONTENT_TYPE)) { + return JptCorePlugin.JAR_RESOURCE_TYPE; + } + else if (contentType.equals(JptCorePlugin.PERSISTENCE_XML_CONTENT_TYPE)) { + return JptCorePlugin.PERSISTENCE_XML_1_0_RESOURCE_TYPE; + } + else if (contentType.equals(JptCorePlugin.ORM_XML_CONTENT_TYPE)) { + return JptCorePlugin.ORM_XML_1_0_RESOURCE_TYPE; + } + else if (contentType.equals(JptEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_CONTENT_TYPE)) { + return JptEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_1_0_RESOURCE_TYPE; + } + else { + throw new IllegalArgumentException(contentType.toString()); + } + } + @Override protected JpaResourceModelProvider[] buildResourceModelProviders() { // order should not be important here diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/orm/EclipseLinkEntityMappingsImpl.java b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/orm/EclipseLinkEntityMappingsImpl.java index f5f12b3f11..e4134f2d81 100644 --- a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/orm/EclipseLinkEntityMappingsImpl.java +++ b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/orm/EclipseLinkEntityMappingsImpl.java @@ -15,10 +15,7 @@ import org.eclipse.jpt.core.internal.context.orm.AbstractEntityMappings; import org.eclipse.jpt.eclipselink.core.context.orm.EclipseLinkConverterHolder; import org.eclipse.jpt.eclipselink.core.context.orm.EclipseLinkEntityMappings; import org.eclipse.jpt.eclipselink.core.internal.JptEclipseLinkCorePlugin; -import org.eclipse.jpt.eclipselink.core.resource.orm.EclipseLink; import org.eclipse.jpt.eclipselink.core.resource.orm.XmlEntityMappings; -import org.eclipse.jpt.eclipselink.core.resource.orm.v1_1.EclipseLink1_1; -import org.eclipse.jpt.eclipselink.core.resource.orm.v2_0.EclipseLink2_0; import org.eclipse.wst.validation.internal.provisional.core.IMessage; import org.eclipse.wst.validation.internal.provisional.core.IReporter; @@ -57,18 +54,7 @@ public class EclipseLinkEntityMappingsImpl @Override protected String latestDocumentVersion() { - String jpaPlatformVersion = getJpaPlatform().getJpaVersion().getVersion(); - if (jpaPlatformVersion.equals(JptEclipseLinkCorePlugin.ECLIPSELINK_PLATFORM_VERSION_1_0)) { - return EclipseLink.SCHEMA_VERSION; - } - else if (jpaPlatformVersion.equals(JptEclipseLinkCorePlugin.ECLIPSELINK_PLATFORM_VERSION_1_1)) { - return EclipseLink1_1.SCHEMA_VERSION; - } - else if (jpaPlatformVersion.equals(JptEclipseLinkCorePlugin.ECLIPSELINK_PLATFORM_VERSION_2_0)) { - return EclipseLink2_0.SCHEMA_VERSION; - } - else { - throw new IllegalStateException("Platform version not recognized."); - } + return getJpaPlatform().getMostRecentSupportedResourceType( + JptEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_CONTENT_TYPE).getVersion(); } } diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/operations/EclipseLinkOrmFileCreationDataModelProvider.java b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/operations/EclipseLinkOrmFileCreationDataModelProvider.java index 6b6566cbd6..c8806df231 100644 --- a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/operations/EclipseLinkOrmFileCreationDataModelProvider.java +++ b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/operations/EclipseLinkOrmFileCreationDataModelProvider.java @@ -50,19 +50,8 @@ public class EclipseLinkOrmFileCreationDataModelProvider if (getProject() == null) { return null; } - String platformVersion = getJpaProject().getJpaPlatform().getJpaVersion().getVersion(); - if (platformVersion.equals(JptEclipseLinkCorePlugin.ECLIPSELINK_PLATFORM_VERSION_1_0)) { - return EclipseLink.SCHEMA_VERSION; - } - else if (platformVersion.equals(JptEclipseLinkCorePlugin.ECLIPSELINK_PLATFORM_VERSION_1_1)) { - return EclipseLink1_1.SCHEMA_VERSION; - } - else if (platformVersion.equals(JptEclipseLinkCorePlugin.ECLIPSELINK_PLATFORM_VERSION_2_0)) { - return EclipseLink2_0.SCHEMA_VERSION; - } - else { - throw new IllegalStateException("Illegal EclipseLink platform version: " + platformVersion); - } + return getJpaProject().getJpaPlatform().getMostRecentSupportedResourceType( + JptEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_CONTENT_TYPE).getVersion(); } @Override diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v1_1/EclipseLink1_1JpaPlatformProvider.java b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v1_1/EclipseLink1_1JpaPlatformProvider.java index 69240a5abe..314943e1c8 100644 --- a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v1_1/EclipseLink1_1JpaPlatformProvider.java +++ b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v1_1/EclipseLink1_1JpaPlatformProvider.java @@ -9,8 +9,11 @@ *******************************************************************************/ package org.eclipse.jpt.eclipselink.core.internal.v1_1; +import org.eclipse.core.runtime.content.IContentType; import org.eclipse.jpt.core.JpaPlatformProvider; import org.eclipse.jpt.core.JpaResourceModelProvider; +import org.eclipse.jpt.core.JpaResourceType; +import org.eclipse.jpt.core.JptCorePlugin; import org.eclipse.jpt.core.ResourceDefinition; import org.eclipse.jpt.core.context.java.JavaAttributeMappingDefinition; import org.eclipse.jpt.core.context.java.JavaTypeMappingDefinition; @@ -32,6 +35,7 @@ import org.eclipse.jpt.core.internal.context.java.JavaTransientMappingDefinition import org.eclipse.jpt.core.internal.context.java.JavaVersionMappingDefinition; import org.eclipse.jpt.core.internal.jpa1.context.orm.GenericOrmXmlDefinition; import org.eclipse.jpt.eclipselink.core.internal.EclipseLinkOrmResourceModelProvider; +import org.eclipse.jpt.eclipselink.core.internal.JptEclipseLinkCorePlugin; import org.eclipse.jpt.eclipselink.core.internal.context.java.JavaEclipseLinkBasicCollectionMappingDefinition; import org.eclipse.jpt.eclipselink.core.internal.context.java.JavaEclipseLinkBasicMapMappingDefinition; import org.eclipse.jpt.eclipselink.core.internal.context.java.JavaEclipseLinkOneToManyMappingDefinition; @@ -73,6 +77,27 @@ public class EclipseLink1_1JpaPlatformProvider // ********** resource models ********** + public JpaResourceType getMostRecentSupportedResourceType(IContentType contentType) { + if (contentType.equals(JptCorePlugin.JAVA_SOURCE_CONTENT_TYPE)) { + return JptCorePlugin.JAVA_SOURCE_RESOURCE_TYPE; + } + else if (contentType.equals(JptCorePlugin.JAR_CONTENT_TYPE)) { + return JptCorePlugin.JAR_RESOURCE_TYPE; + } + else if (contentType.equals(JptCorePlugin.PERSISTENCE_XML_CONTENT_TYPE)) { + return JptCorePlugin.PERSISTENCE_XML_1_0_RESOURCE_TYPE; + } + else if (contentType.equals(JptCorePlugin.ORM_XML_CONTENT_TYPE)) { + return JptCorePlugin.ORM_XML_1_0_RESOURCE_TYPE; + } + else if (contentType.equals(JptEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_CONTENT_TYPE)) { + return JptEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_1_1_RESOURCE_TYPE; + } + else { + throw new IllegalArgumentException(contentType.toString()); + } + } + @Override protected JpaResourceModelProvider[] buildResourceModelProviders() { // order should not be important here diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/EclipseLink2_0JpaPlatformProvider.java b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/EclipseLink2_0JpaPlatformProvider.java index a0e37e355a..b5c1ff1e1f 100644 --- a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/EclipseLink2_0JpaPlatformProvider.java +++ b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/EclipseLink2_0JpaPlatformProvider.java @@ -9,8 +9,11 @@ *******************************************************************************/ package org.eclipse.jpt.eclipselink.core.internal.v2_0; +import org.eclipse.core.runtime.content.IContentType; import org.eclipse.jpt.core.JpaPlatformProvider; import org.eclipse.jpt.core.JpaResourceModelProvider; +import org.eclipse.jpt.core.JpaResourceType; +import org.eclipse.jpt.core.JptCorePlugin; import org.eclipse.jpt.core.ResourceDefinition; import org.eclipse.jpt.core.context.java.JavaAttributeMappingDefinition; import org.eclipse.jpt.core.context.java.JavaTypeMappingDefinition; @@ -34,6 +37,7 @@ import org.eclipse.jpt.core.internal.jpa2.context.java.JavaElementCollectionMapp import org.eclipse.jpt.core.internal.jpa2.context.java.JavaIdMappingDefinition2_0; import org.eclipse.jpt.core.internal.jpa2.context.orm.GenericOrmXml2_0Definition; import org.eclipse.jpt.eclipselink.core.internal.EclipseLinkOrmResourceModelProvider; +import org.eclipse.jpt.eclipselink.core.internal.JptEclipseLinkCorePlugin; import org.eclipse.jpt.eclipselink.core.internal.context.java.JavaEclipseLinkBasicCollectionMappingDefinition; import org.eclipse.jpt.eclipselink.core.internal.context.java.JavaEclipseLinkBasicMapMappingDefinition; import org.eclipse.jpt.eclipselink.core.internal.context.java.JavaEclipseLinkOneToManyMappingDefinition; @@ -77,6 +81,27 @@ public class EclipseLink2_0JpaPlatformProvider // ********** resource models ********** + public JpaResourceType getMostRecentSupportedResourceType(IContentType contentType) { + if (contentType.equals(JptCorePlugin.JAVA_SOURCE_CONTENT_TYPE)) { + return JptCorePlugin.JAVA_SOURCE_RESOURCE_TYPE; + } + else if (contentType.equals(JptCorePlugin.JAR_CONTENT_TYPE)) { + return JptCorePlugin.JAR_RESOURCE_TYPE; + } + else if (contentType.equals(JptCorePlugin.PERSISTENCE_XML_CONTENT_TYPE)) { + return JptCorePlugin.PERSISTENCE_XML_2_0_RESOURCE_TYPE; + } + else if (contentType.equals(JptCorePlugin.ORM_XML_CONTENT_TYPE)) { + return JptCorePlugin.ORM_XML_2_0_RESOURCE_TYPE; + } + else if (contentType.equals(JptEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_CONTENT_TYPE)) { + return JptEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_2_0_RESOURCE_TYPE; + } + else { + throw new IllegalArgumentException(contentType.toString()); + } + } + @Override protected JpaResourceModelProvider[] buildResourceModelProviders() { // order should not be important here diff --git a/jpa/plugins/org.eclipse.jpt.ui/plugin.properties b/jpa/plugins/org.eclipse.jpt.ui/plugin.properties index 5939c0ed40..35f0098a57 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/plugin.properties +++ b/jpa/plugins/org.eclipse.jpt.ui/plugin.properties @@ -36,6 +36,7 @@ newJpaMappingFileWizardDesc = Create a JPA Mapping File newJpaEntityFromTableWizardName = Entities From Tables newJpaEntityFromTableWizardDesc = Create JPA Entities from database tables +upgradeToLatestVersion = Upgrade document version jpaStructureViewCommandCategory = JPA Structure View addPersistentClass = Add Class ... removePersistentClass = Remove Class diff --git a/jpa/plugins/org.eclipse.jpt.ui/plugin.xml b/jpa/plugins/org.eclipse.jpt.ui/plugin.xml index 339bf6442c..5a6a717182 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/plugin.xml +++ b/jpa/plugins/org.eclipse.jpt.ui/plugin.xml @@ -79,11 +79,11 @@ id="generic.ui" jpaPlatform="generic" factoryClass="org.eclipse.jpt.ui.internal.platform.generic.GenericJpaPlatformUiFactory"/> - <jpaPlatformUi - factoryClass="org.eclipse.jpt.ui.internal.jpa2.platform.generic.Generic2_0JpaPlatformUiFactory" - id="generic2_0.ui" - jpaPlatform="generic2_0"> - </jpaPlatformUi> + + <jpaPlatformUi + id="generic2_0.ui" + jpaPlatform="generic2_0" + factoryClass="org.eclipse.jpt.ui.internal.jpa2.platform.generic.Generic2_0JpaPlatformUiFactory"/> </extension> @@ -112,6 +112,10 @@ <extension point="org.eclipse.ui.commands"> + <command + id="org.eclipse.jpt.ui.xmlFileUpgradeToLatestVersion" + name="%upgradeToLatestVersion"/> + <category id="org.eclipse.jpt.ui.jpaStructureViewCommands" name="%jpaStructureViewCommandCategory"> @@ -167,11 +171,11 @@ name="%mapAsSpecifiedMappingParameterName" optional="false"> </commandParameter> - <commandParameter - id="defaultPersistentAttributeMappingKey" - name="%mapAsDefaultMappingParameterName" - optional="false"> - </commandParameter> + <commandParameter + id="defaultPersistentAttributeMappingKey" + name="%mapAsDefaultMappingParameterName" + optional="false"> + </commandParameter> </command> </extension> @@ -201,6 +205,32 @@ point="org.eclipse.ui.handlers"> <handler + commandId="org.eclipse.jpt.ui.xmlFileUpgradeToLatestVersion" + class="org.eclipse.jpt.ui.internal.commands.UpgradeXmlFileVersionHandler"> + <enabledWhen> + <and> + <count value="1"/> + <iterate> + <or> + <adapt + type="org.eclipse.jpt.core.context.XmlFile"> + <test + property="org.eclipse.jpt.core.isLatestSupportedVersion" + value="false"/> + </adapt> + <adapt + type="org.eclipse.jpt.core.resource.xml.JpaXmlResource"> + <test + property="org.eclipse.jpt.core.isLatestSupportedVersion" + value="false"/> + </adapt> + </or> + </iterate> + </and> + </enabledWhen> + </handler> + + <handler commandId="org.eclipse.jpt.ui.entityMappingsAddPersistentClass" class="org.eclipse.jpt.ui.internal.commands.AddPersistentClassHandler"> <activeWhen> @@ -325,6 +355,64 @@ <extension point="org.eclipse.ui.menus"> + <!-- contributions for any popup --> + <menuContribution + locationURI="popup:org.eclipse.ui.popup.any"> + <!-- "JPA Tools" submenu for anything that adapts to JpaXmlResource (IFile objects, mostly) --> + <menu + id="org.eclipse.jpt.ui.project.JPATools" + label="%jpaMenuName"> + <visibleWhen> + <with + variable="selection"> + <iterate ifEmpty="false"> + <adapt + type="org.eclipse.jpt.core.resource.xml.JpaXmlResource"/> + </iterate> + </with> + </visibleWhen> + </menu> + <!-- commands for objects that don't need "JPA Tools" submenu --> + <command + commandId="org.eclipse.jpt.ui.xmlFileUpgradeToLatestVersion"> + <visibleWhen> + <with + variable="selection"> + <iterate ifEmpty="false"> + <adapt + type="org.eclipse.jpt.core.context.XmlFile"> + <test + property="org.eclipse.jpt.core.isLatestSupportedVersion" + value="false"/> + </adapt> + </iterate> + </with> + </visibleWhen> + </command> + </menuContribution> + + <!-- contributions to the "JPA Tools" submenu --> + <menuContribution + locationURI="popup:org.eclipse.jpt.ui.project.JPATools"> + <command + commandId="org.eclipse.jpt.ui.xmlFileUpgradeToLatestVersion"> + <visibleWhen> + <with + variable="selection"> + <iterate ifEmpty="false"> + <adapt + type="org.eclipse.jpt.core.resource.xml.JpaXmlResource"> + <test + property="org.eclipse.jpt.core.isLatestSupportedVersion" + value="false"/> + </adapt> + </iterate> + </with> + </visibleWhen> + </command> + </menuContribution> + + <!-- contributions to objects in the JPA structure view --> <menuContribution locationURI="popup:org.eclipse.jpt.ui.jpaStructureView"> <command @@ -409,7 +497,7 @@ class="org.eclipse.jpt.ui.internal.menus.PersistentTypeMapAsContribution"> </dynamic> </menu> - + <menu id="org.eclipse.jpt.ui.persistentAttributeMapAs" label="%mapAs" diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/commands/UpgradeXmlFileVersionHandler.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/commands/UpgradeXmlFileVersionHandler.java new file mode 100644 index 0000000000..afa0169bc2 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/commands/UpgradeXmlFileVersionHandler.java @@ -0,0 +1,59 @@ +/******************************************************************************* + * Copyright (c) 2009 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.ui.internal.commands; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.content.IContentType; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jpt.core.context.XmlFile; +import org.eclipse.jpt.core.resource.xml.JpaRootEObject; +import org.eclipse.jpt.core.resource.xml.JpaXmlResource; +import org.eclipse.ui.handlers.HandlerUtil; + +public class UpgradeXmlFileVersionHandler extends AbstractHandler +{ + public Object execute(ExecutionEvent event) throws ExecutionException { + IStructuredSelection selection + = (IStructuredSelection) HandlerUtil.getCurrentSelectionChecked(event); + + // only applies for a singly selected objects that adapt to JpaXmlResource or XmlFile + Object selectedObject = selection.getFirstElement(); + JpaXmlResource xmlResource = + (JpaXmlResource) Platform.getAdapterManager().getAdapter(selectedObject, JpaXmlResource.class); + if (xmlResource == null) { + XmlFile xmlFile = + (XmlFile) Platform.getAdapterManager().getAdapter(selectedObject, XmlFile.class); + if (xmlFile != null) { + xmlResource = xmlFile.getXmlResource(); + } + } + if (xmlResource == null) { + return null; + } + + final JpaRootEObject root = xmlResource.getRootObject(); + IContentType contentType = xmlResource.getContentType(); + final String newVersion = + xmlResource.getJpaProject().getJpaPlatform().getMostRecentSupportedResourceType(contentType).getVersion(); + + xmlResource.modify( + new Runnable() { + public void run() { + root.setVersion(newVersion); + } + }); + + return null; + } +} diff --git a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/TestJpaPlatformProvider.java b/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/TestJpaPlatformProvider.java index f0a5733cff..466b73fd53 100644 --- a/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/TestJpaPlatformProvider.java +++ b/jpa/tests/org.eclipse.jpt.core.tests.extension.resource/src/org/eclipse/jpt/core/tests/extension/resource/TestJpaPlatformProvider.java @@ -9,8 +9,11 @@ ******************************************************************************/ package org.eclipse.jpt.core.tests.extension.resource; +import org.eclipse.core.runtime.content.IContentType; import org.eclipse.jpt.core.JpaPlatformProvider; import org.eclipse.jpt.core.JpaResourceModelProvider; +import org.eclipse.jpt.core.JpaResourceType; +import org.eclipse.jpt.core.JptCorePlugin; import org.eclipse.jpt.core.ResourceDefinition; import org.eclipse.jpt.core.context.java.JavaAttributeMappingDefinition; import org.eclipse.jpt.core.context.java.JavaTypeMappingDefinition; @@ -62,6 +65,24 @@ public class TestJpaPlatformProvider extends AbstractJpaPlatformProvider // ********** resource models ********** + public JpaResourceType getMostRecentSupportedResourceType(IContentType contentType) { + if (contentType.equals(JptCorePlugin.JAVA_SOURCE_CONTENT_TYPE)) { + return JptCorePlugin.JAVA_SOURCE_RESOURCE_TYPE; + } + else if (contentType.equals(JptCorePlugin.JAR_CONTENT_TYPE)) { + return JptCorePlugin.JAR_RESOURCE_TYPE; + } + else if (contentType.equals(JptCorePlugin.PERSISTENCE_XML_CONTENT_TYPE)) { + return JptCorePlugin.PERSISTENCE_XML_1_0_RESOURCE_TYPE; + } + else if (contentType.equals(JptCorePlugin.ORM_XML_CONTENT_TYPE)) { + return JptCorePlugin.ORM_XML_1_0_RESOURCE_TYPE; + } + else { + throw new IllegalArgumentException(contentType.toString()); + } + } + @Override protected JpaResourceModelProvider[] buildResourceModelProviders() { // order should not be important here |