Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkmoore2010-07-27 18:55:52 +0000
committerkmoore2010-07-27 18:55:52 +0000
commit4150fda15c5f63e3cf7852e7840189a1352355e3 (patch)
tree951ac6fea3e4996bfa52f07cb6a564d2be0da49a
parentf91f1da1682a7ba6ba4d39488f0cf98ba59617e6 (diff)
downloadwebtools.dali-4150fda15c5f63e3cf7852e7840189a1352355e3.tar.gz
webtools.dali-4150fda15c5f63e3cf7852e7840189a1352355e3.tar.xz
webtools.dali-4150fda15c5f63e3cf7852e7840189a1352355e3.zip
209489 - rename type refactoring participation
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/plugin.properties1
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/plugin.xml10
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/property_files/jpa_core_refactoring.properties7
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/MappingFile.java7
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/PersistentType.java12
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/EntityMappings.java7
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmAttributeMapping.java13
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmIdClassReference.java13
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmPersistentAttribute.java30
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmPersistentType.java13
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmTypeMapping.java9
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/ClassRef.java10
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/MappingFileRef.java6
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/PersistenceUnit.java20
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/PersistenceUnitProperties.java13
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/AbstractJavaPersistentType.java5
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractEntityMappings.java11
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmAttributeMapping.java10
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmEntity.java21
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmMappedSuperclass.java23
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmMultiRelationshipMapping.java34
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmPersistentAttribute.java9
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmRelationshipMapping.java33
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmTypeMapping.java17
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmIdClassReference.java29
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/AbstractMappingFileRef.java7
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/AbstractPersistenceUnit.java39
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/AbstractPersistenceUnitProperties.java12
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/orm/GenericOrmPersistentType.java20
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/orm/GenericOrmXml.java8
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/persistence/GenericClassRef.java15
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/persistence/GenericPersistenceUnitProperty.java20
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/AbstractOrmElementCollectionMapping2_0.java43
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/refactoring/JpaCoreRefactoringMessages.java7
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/refactoring/JpaRenameTypeParticipant.java333
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/AbstractXmlMultiRelationshipMapping.java10
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/AbstractXmlRelationshipMapping.java14
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/AbstractXmlTypeMapping.java16
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlClassReference.java10
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlElementCollection.java18
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlTypeMapping.java9
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/persistence/XmlJavaClassRef.java15
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/persistence/XmlProperty.java17
-rw-r--r--jpa/plugins/org.eclipse.jpt.eclipselink.core/META-INF/MANIFEST.MF3
-rw-r--r--jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/orm/OrmEclipseLinkCustomizer.java58
-rw-r--r--jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/orm/OrmEclipseLinkEmbeddableImpl.java22
-rw-r--r--jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/orm/OrmEclipseLinkEntityImpl.java64
-rw-r--r--jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/orm/OrmEclipseLinkMappedSuperclassImpl.java22
-rw-r--r--jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/persistence/EclipseLinkPersistenceUnit.java15
-rw-r--r--jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/persistence/customization/EclipseLinkCustomization.java35
-rw-r--r--jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/persistence/logging/EclipseLinkLogging.java20
-rw-r--r--jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/persistence/options/EclipseLinkOptions.java20
52 files changed, 1184 insertions, 51 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.core/plugin.properties b/jpa/plugins/org.eclipse.jpt.core/plugin.properties
index a021f8c23a..c0c7fd1604 100644
--- a/jpa/plugins/org.eclipse.jpt.core/plugin.properties
+++ b/jpa/plugins/org.eclipse.jpt.core/plugin.properties
@@ -50,5 +50,6 @@ JPA_VALIDATOR=JPA Validator
JPA_DELETE_TYPE_PARTICIPANT_NAME=JPA Delete Type Participant
JPA_DELETE_PACKAGE_OR_FOLDER_PARTICIPANT_NAME=JPA Delete Package or Folder Participant
JPA_DELETE_MAPPING_FILE_PARTICIPANT_NAME=JPA Delete Mapping File Participant
+JPA_RENAME_TYPE_PARTICIPANT_NAME=JPA Rename Type Participant
JPA_RENAME_MAPPING_FILE_PARTICIPANT_NAME=JPA Rename Mapping File Participant
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.core/plugin.xml b/jpa/plugins/org.eclipse.jpt.core/plugin.xml
index 367a4d4689..cde2967cad 100644
--- a/jpa/plugins/org.eclipse.jpt.core/plugin.xml
+++ b/jpa/plugins/org.eclipse.jpt.core/plugin.xml
@@ -574,6 +574,16 @@
<extension
point="org.eclipse.ltk.core.refactoring.renameParticipants">
<renameParticipant
+ class="org.eclipse.jpt.core.internal.refactoring.JpaRenameTypeParticipant"
+ id="org.eclipse.jpt.core.ltk.jpaRenameTypeParticipant"
+ name="%JPA_RENAME_TYPE_PARTICIPANT_NAME">
+ <enablement>
+ <with variable="element">
+ <instanceof value="org.eclipse.jdt.core.IType"/>
+ </with>
+ </enablement>
+ </renameParticipant>
+ <renameParticipant
class="org.eclipse.jpt.core.internal.refactoring.JpaRenameMappingFileParticipant"
id="org.eclipse.jpt.core.ltk.jpaRenameMappingParticipant"
name="%JPA_RENAME_MAPPING_FILE_PARTICIPANT_NAME">
diff --git a/jpa/plugins/org.eclipse.jpt.core/property_files/jpa_core_refactoring.properties b/jpa/plugins/org.eclipse.jpt.core/property_files/jpa_core_refactoring.properties
index bab94698e5..dc3879158b 100644
--- a/jpa/plugins/org.eclipse.jpt.core/property_files/jpa_core_refactoring.properties
+++ b/jpa/plugins/org.eclipse.jpt.core/property_files/jpa_core_refactoring.properties
@@ -22,6 +22,13 @@ JPA_DELETE_MAPPING_FILE_REFACTORING_CHANGE_PERSISTENCE_XML_NAME=Delete mapping f
JPA_REFACORING_PARTICIPANT_LOADING_JPA_PROJECTS_SUB_TASK_NAME=loading JPA projects
+JPA_RENAME_TYPE_REFACTORING_PARTICIPANT_NAME=JPA rename IType refactoring participant
+JPA_RENAME_PACKAGE_REFACTORING_PARTICIPANT_NAME=JPA rename IPackageFragment refactoring participant
+JPA_RENAME_TYPE_REFACTORING_CHANGE_NAME=Rename classes referenced in JPA metadata files
+JPA_RENAME_TYPE_REFACTORING_CHANGE_PERSISTENCE_XML_NAME=Rename type references in the persistence.xml
+JPA_RENAME_TYPE_REFACTORING_CHANGE_MAPPING_FILE_NAME=Rename type references in the mapping file
+JPA_RENAME_TYPE_REFACTORING_SUB_TASK_NAME=JPA rename type references
+
JPA_RENAME_MAPPING_FILE_REFACTORING_PARTICIPANT_NAME=JPA rename mapping file refactoring participant
JPA_RENAME_MAPPING_FILE_REFACTORING_SUB_TASK_NAME=JPA rename mapping file references
JPA_RENAME_MAPPING_FILE_REFACTORING_CHANGE_NAME=Rename mapping file references in JPA metadata files
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 b8c7e4a331..b8c31e786d 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
@@ -13,6 +13,7 @@ import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.context.persistence.MappingFileRef;
import org.eclipse.jpt.core.context.persistence.PersistentTypeContainer;
import org.eclipse.text.edits.DeleteEdit;
+import org.eclipse.text.edits.ReplaceEdit;
/**
* JPA mapping file (typically <code>orm.xml</code>).
@@ -60,4 +61,10 @@ public interface MappingFile
*/
Iterable<DeleteEdit> createDeleteTypeEdits(IType type);
+ /**
+ * Create ReplaceEdits for renaming any references to the originalType to the newName.
+ * The originalType has not yet been renamed, the newName is the new short name.
+ */
+ Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName);
+
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/PersistentType.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/PersistentType.java
index 580b01f628..ff159afff7 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/PersistentType.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/PersistentType.java
@@ -12,7 +12,6 @@ package org.eclipse.jpt.core.context;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
-
import org.eclipse.jpt.core.JpaStructureNode;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
@@ -26,7 +25,7 @@ import org.eclipse.wst.validation.internal.provisional.core.IReporter;
* pioneering adopters on the understanding that any code that uses this API
* will almost certainly be broken (repeatedly) as the API evolves.
*
- * @version 2.3
+ * @version 3.0
* @since 2.0
*/
public interface PersistentType
@@ -161,6 +160,15 @@ public interface PersistentType
void validate(List<IMessage> messages, IReporter reporter);
+ // ********** misc **********
+
+ /**
+ * Return whether the persistent type applies to the
+ * specified type name qualified with '.'.
+ */
+ boolean isFor(String typeName);
+
+
// ********** owner **********
/**
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/EntityMappings.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/EntityMappings.java
index 44825e9741..e1f17c864d 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/EntityMappings.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/EntityMappings.java
@@ -22,6 +22,7 @@ import org.eclipse.jpt.db.Schema;
import org.eclipse.jpt.db.SchemaContainer;
import org.eclipse.jpt.utility.internal.iterables.ListIterable;
import org.eclipse.text.edits.DeleteEdit;
+import org.eclipse.text.edits.ReplaceEdit;
/**
* Context <code>orm.xml</code> entity mappings.
@@ -178,4 +179,10 @@ public interface EntityMappings
*/
Iterable<DeleteEdit> createDeleteTypeEdits(IType type);
+ /**
+ * Create ReplaceEdits for renaming any references to the originalType to the newName.
+ * The originalType has not yet been renamed, the newName is the new short name.
+ */
+ Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName);
+
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmAttributeMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmAttributeMapping.java
index 041497ffdc..550ee7604a 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmAttributeMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmAttributeMapping.java
@@ -9,11 +9,13 @@
******************************************************************************/
package org.eclipse.jpt.core.context.orm;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.context.AttributeMapping;
import org.eclipse.jpt.core.context.XmlContextNode;
import org.eclipse.jpt.core.resource.orm.Attributes;
import org.eclipse.jpt.core.resource.orm.XmlAttributeMapping;
import org.eclipse.jpt.core.utility.TextRange;
+import org.eclipse.text.edits.ReplaceEdit;
/**
*
@@ -24,7 +26,7 @@ import org.eclipse.jpt.core.utility.TextRange;
* pioneering adopters on the understanding that any code that uses this API
* will almost certainly be broken (repeatedly) as the API evolves.
*
- * @version 2.2
+ * @version 3.0
* @since 2.3
*/
public interface OrmAttributeMapping
@@ -92,4 +94,13 @@ public interface OrmAttributeMapping
*/
void update();
+
+ //******************* refactoring *******************
+
+ /**
+ * Create ReplaceEdits for renaming any references to the originalType to the newName.
+ * The originalType has not yet been renamed, the newName is the new short name.
+ */
+ Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName);
+
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmIdClassReference.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmIdClassReference.java
index 29130b5174..cee22a365d 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmIdClassReference.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmIdClassReference.java
@@ -10,9 +10,11 @@
*******************************************************************************/
package org.eclipse.jpt.core.context.orm;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.context.IdClassReference;
import org.eclipse.jpt.core.context.XmlContextNode;
import org.eclipse.jpt.core.context.java.JavaIdClassReference;
+import org.eclipse.text.edits.ReplaceEdit;
/**
* Provisional API: This interface is part of an interim API that is still
@@ -21,11 +23,20 @@ import org.eclipse.jpt.core.context.java.JavaIdClassReference;
* pioneering adopters on the understanding that any code that uses this API
* will almost certainly be broken (repeatedly) as the API evolves.
*
- * @version 2.3
+ * @version 3.0
* @since 2.3
*/
public interface OrmIdClassReference
extends IdClassReference, XmlContextNode
{
void update(JavaIdClassReference javaIdClassReference);
+
+
+ // ********** refactoring **********
+
+ /**
+ * Create ReplaceEdits for renaming any references to the originalType to the newName.
+ * The originalType has not yet been renamed, the newName is the new short name.
+ */
+ Iterable<ReplaceEdit> createReplaceEdits(IType originalType, String newName);
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmPersistentAttribute.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmPersistentAttribute.java
index 6d4a9ee181..256a022df1 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmPersistentAttribute.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmPersistentAttribute.java
@@ -9,9 +9,11 @@
******************************************************************************/
package org.eclipse.jpt.core.context.orm;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.context.PersistentAttribute;
import org.eclipse.jpt.core.context.XmlContextNode;
import org.eclipse.jpt.core.context.java.JavaPersistentAttribute;
+import org.eclipse.text.edits.ReplaceEdit;
/**
* ORM persistent attribute
@@ -22,7 +24,7 @@ import org.eclipse.jpt.core.context.java.JavaPersistentAttribute;
* pioneering adopters on the understanding that any code that uses this API
* will almost certainly be broken (repeatedly) as the API evolves.
*
- * @version 2.3
+ * @version 3.0
* @since 2.0
*/
public interface OrmPersistentAttribute
@@ -79,12 +81,6 @@ public interface OrmPersistentAttribute
*/
void makeSpecified(String mappingKey);
-
- // ********** miscellaneous **********
-
- boolean contains(int textOffset);
-
- void nameChanged(String oldName, String newName);
// ********** updating **********
@@ -93,8 +89,24 @@ public interface OrmPersistentAttribute
* resource model object. see {@link org.eclipse.jpt.core.JpaProject#update()}
*/
void update();
-
-
+
+
+ // ********** refactoring **********
+
+ /**
+ * Create ReplaceEdits for renaming any references to the originalType to the newName.
+ * The originalType has not yet been renamed, the newName is the new short name.
+ */
+ Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName);
+
+
+ // ********** miscellaneous **********
+
+ boolean contains(int textOffset);
+
+ void nameChanged(String oldName, String newName);
+
+
/**
* interface allowing persistent attributes to be used in multiple places
* (e.g. virtual and specified orm persistent attributes)
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmPersistentType.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmPersistentType.java
index 61a2792bc2..b0a25e8c91 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmPersistentType.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmPersistentType.java
@@ -15,6 +15,7 @@ import org.eclipse.jpt.core.context.PersistentType;
import org.eclipse.jpt.core.context.XmlContextNode;
import org.eclipse.jpt.core.context.java.JavaPersistentType;
import org.eclipse.text.edits.DeleteEdit;
+import org.eclipse.text.edits.ReplaceEdit;
/**
* Context <code>orm.xml</code> persistent type.
@@ -130,16 +131,16 @@ public interface OrmPersistentType
*/
Iterable<DeleteEdit> createDeleteTypeEdits(IType type);
+ /**
+ * Create ReplaceEdits for renaming any references to the originalType to the newName.
+ * The originalType has not yet been renamed, the newName is the new short name.
+ */
+ Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName);
+
//******************* misc *******************
boolean contains(int textOffset);
-
- /**
- * Return whether the persistent type applies to the
- * specified type.
- */
- boolean isFor(String typeName);
void classChanged(String oldClass, String newClass);
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmTypeMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmTypeMapping.java
index b71048f5c8..882062f0aa 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmTypeMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmTypeMapping.java
@@ -11,12 +11,14 @@ package org.eclipse.jpt.core.context.orm;
import java.util.Iterator;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.context.TypeMapping;
import org.eclipse.jpt.core.context.XmlContextNode;
import org.eclipse.jpt.core.resource.orm.XmlEntityMappings;
import org.eclipse.jpt.core.resource.orm.XmlTypeMapping;
import org.eclipse.jpt.core.utility.TextRange;
import org.eclipse.text.edits.DeleteEdit;
+import org.eclipse.text.edits.ReplaceEdit;
/**
*
@@ -90,6 +92,13 @@ public interface OrmTypeMapping
*/
DeleteEdit createDeleteEdit();
+ /**
+ * Create ReplaceEdits for renaming any references to the originalType to the newName.
+ * The originalType has not yet been renamed, the newName is the new short name.
+ */
+ Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName);
+
+
// ********** covariant overrides **********
OrmPersistentType getPersistentType();
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/ClassRef.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/ClassRef.java
index f4263974ba..31a0e0fb48 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/ClassRef.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/ClassRef.java
@@ -16,6 +16,7 @@ import org.eclipse.jpt.core.context.XmlContextNode;
import org.eclipse.jpt.core.context.java.JavaPersistentType;
import org.eclipse.jpt.core.resource.persistence.XmlJavaClassRef;
import org.eclipse.text.edits.DeleteEdit;
+import org.eclipse.text.edits.ReplaceEdit;
/**
* Context model corresponding to the XML resource model
@@ -110,6 +111,13 @@ public interface ClassRef
*/
Iterable<DeleteEdit> createDeleteTypeEdits(IType type);
+ /**
+ * Create ReplaceEdits for renaming the class element to the newName.
+ * The originalType has not yet been renamed, the newName is the new short name.
+ * If this ClassRef does not match the original type, then return an empty Iterable.
+ */
+ Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName);
+
// *************************************************************************
@@ -118,5 +126,5 @@ public interface ClassRef
* the given text offset
*/
boolean containsOffset(int textOffset);
-
+
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/MappingFileRef.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/MappingFileRef.java
index 44cf3ac8ce..8be104fb3e 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/MappingFileRef.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/MappingFileRef.java
@@ -136,6 +136,12 @@ public interface MappingFileRef
Iterable<DeleteEdit> createDeleteMappingFileEdits(IFile file);
/**
+ * Create ReplaceEdits for renaming any references to the originalType to the newName.
+ * The originalType has not yet been renamed, the newName is the new short name.
+ */
+ Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName);
+
+ /**
* If this {@link MappingFileRef#isFor(IFile)} the given IFile, create a text
* ReplaceEdit for renaming the mapping file element to the new name.
* Otherwise return an EmptyIterable.
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/PersistenceUnit.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/PersistenceUnit.java
index ab06f4d4db..3f17be91ce 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/PersistenceUnit.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/PersistenceUnit.java
@@ -429,6 +429,13 @@ public interface PersistenceUnit
Property getProperty(String propertyName);
/**
+ * Return all the properties in the persistence unit with the specified
+ * name. Return an empty Iterable if the persistence unit does not contain
+ * a property with the specified name.
+ */
+ Iterable<Property> getPropertiesNamed(String propertyName);
+
+ /**
* Return the persistence unit's properties with names beginning with the
* specified prefix.
*/
@@ -510,6 +517,13 @@ public interface PersistenceUnit
XmlProperty getXmlProperty();
void update();
+
+ /**
+ * Create ReplaceEdits for renaming the property value to the newName.
+ * The originalType has not yet been renamed, the newName is the new short name.
+ * If this value does not match the original type, then return an empty Iterable.
+ */
+ Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName);
}
// ********** ORM persistence unit defaults **********
@@ -727,6 +741,12 @@ public interface PersistenceUnit
Iterable<DeleteEdit> createDeleteMappingFileEdits(IFile file);
/**
+ * Create ReplaceEdits for renaming any references to the originalType to the newName.
+ * The originalType has not yet been renamed, the newName is the new short name.
+ */
+ Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName);
+
+ /**
* Create ReplaceEdits for renaming any references to the originalFile to the newName.
* Return an EmptyIterable if there are not any references.
* The originalFile has not yet been renamed, the newName is the new short name.
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/PersistenceUnitProperties.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/PersistenceUnitProperties.java
index ec987bc355..c53c1918af 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/PersistenceUnitProperties.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/PersistenceUnitProperties.java
@@ -9,8 +9,10 @@
*******************************************************************************/
package org.eclipse.jpt.core.context.persistence;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.JpaProject;
import org.eclipse.jpt.utility.model.Model;
+import org.eclipse.text.edits.ReplaceEdit;
/**
* Provisional API: This interface is part of an interim API that is still
@@ -19,7 +21,7 @@ import org.eclipse.jpt.utility.model.Model;
* pioneering adopters on the understanding that any code that uses this API
* will almost certainly be broken (repeatedly) as the API evolves.
*
- * @version 2.3
+ * @version 3.0
* @since 2.3
*/
public interface PersistenceUnitProperties extends Model
@@ -54,4 +56,13 @@ public interface PersistenceUnitProperties extends Model
*/
void propertyRemoved(String propertyName);
+
+ // ************ refactoring **************
+
+ /**
+ * Create ReplaceEdits for renaming any references to the originalType to the newName.
+ * The originalType has not yet been renamed, the newName is the new short name.
+ */
+ Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName);
+
} \ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/AbstractJavaPersistentType.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/AbstractJavaPersistentType.java
index c3be5d891e..bc32d52603 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/AbstractJavaPersistentType.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/AbstractJavaPersistentType.java
@@ -632,6 +632,11 @@ public abstract class AbstractJavaPersistentType
// ********** misc **********
+ public boolean isFor(String typeName) {
+ String className = this.getName();
+ return className != null && className.equals(typeName);
+ }
+
public boolean isMapped() {
return this.mapping.isMapped();
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractEntityMappings.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractEntityMappings.java
index efabd0ad54..95dc7f6498 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractEntityMappings.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractEntityMappings.java
@@ -55,6 +55,7 @@ import org.eclipse.jpt.utility.internal.iterables.TransformationIterable;
import org.eclipse.jpt.utility.internal.iterators.CloneIterator;
import org.eclipse.jpt.utility.internal.iterators.CloneListIterator;
import org.eclipse.text.edits.DeleteEdit;
+import org.eclipse.text.edits.ReplaceEdit;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
@@ -828,6 +829,16 @@ public abstract class AbstractEntityMappings
);
}
+ public Iterable<ReplaceEdit> createReplaceTypeEdits(final IType originalType, final String newName) {
+ return new CompositeIterable<ReplaceEdit>(
+ new TransformationIterable<OrmPersistentType, Iterable<ReplaceEdit>>(getPersistentTypes()) {
+ @Override
+ protected Iterable<ReplaceEdit> transform(OrmPersistentType persistentType) {
+ return persistentType.createReplaceTypeEdits(originalType, newName);
+ }
+ }
+ );
+ }
// ********** dispose **********
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmAttributeMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmAttributeMapping.java
index ed650203bb..ad10143e0b 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmAttributeMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmAttributeMapping.java
@@ -13,6 +13,7 @@ import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.context.AttributeMapping;
import org.eclipse.jpt.core.context.Column;
import org.eclipse.jpt.core.context.ColumnMapping;
@@ -50,8 +51,10 @@ import org.eclipse.jpt.core.resource.java.JavaResourcePersistentAttribute;
import org.eclipse.jpt.core.resource.orm.XmlAttributeMapping;
import org.eclipse.jpt.core.utility.TextRange;
import org.eclipse.jpt.utility.internal.StringTools;
+import org.eclipse.jpt.utility.internal.iterables.EmptyIterable;
import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
import org.eclipse.jpt.utility.internal.iterators.SingleElementIterator;
+import org.eclipse.text.edits.ReplaceEdit;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
@@ -345,6 +348,13 @@ public abstract class AbstractOrmAttributeMapping<T extends XmlAttributeMapping>
}
+ // ********** refactoring **********
+
+ public Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName) {
+ return EmptyIterable.instance();
+ }
+
+
// ********** validation **********
@Override
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmEntity.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmEntity.java
index e25a980363..725946ccda 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmEntity.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmEntity.java
@@ -15,6 +15,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import org.eclipse.emf.common.util.EList;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.MappingKeys;
import org.eclipse.jpt.core.JpaPlatformVariation.Supported;
import org.eclipse.jpt.core.context.AssociationOverride;
@@ -94,6 +95,7 @@ import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
import org.eclipse.jpt.utility.internal.iterators.EmptyListIterator;
import org.eclipse.jpt.utility.internal.iterators.FilteringIterator;
import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
+import org.eclipse.text.edits.ReplaceEdit;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
@@ -1560,8 +1562,23 @@ public abstract class AbstractOrmEntity
public void removeFromResourceModel(XmlEntityMappings entityMappings) {
entityMappings.getEntities().remove(this.resourceTypeMapping);
}
-
-
+
+
+ //************************* refactoring ************************
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName) {
+ return new CompositeIterable<ReplaceEdit>(
+ super.createReplaceTypeEdits(originalType, newName),
+ this.createIdClassReplaceTypeEdits(originalType, newName));
+ }
+
+ protected Iterable<ReplaceEdit> createIdClassReplaceTypeEdits(IType originalType, String newName) {
+ return this.idClassReference.createReplaceEdits(originalType, newName);
+ }
+
+
// **************** validation *********************************************
@Override
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmMappedSuperclass.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmMappedSuperclass.java
index bd30ea7c6b..cee2d7d566 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmMappedSuperclass.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmMappedSuperclass.java
@@ -11,6 +11,7 @@ package org.eclipse.jpt.core.internal.context.orm;
import java.util.Iterator;
import java.util.List;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.MappingKeys;
import org.eclipse.jpt.core.context.Table;
import org.eclipse.jpt.core.context.java.JavaIdClassReference;
@@ -24,7 +25,9 @@ import org.eclipse.jpt.core.internal.context.PrimaryKeyValidator;
import org.eclipse.jpt.core.internal.jpa1.context.GenericMappedSuperclassPrimaryKeyValidator;
import org.eclipse.jpt.core.resource.orm.XmlEntityMappings;
import org.eclipse.jpt.core.resource.orm.XmlMappedSuperclass;
+import org.eclipse.jpt.utility.internal.iterables.CompositeIterable;
import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
+import org.eclipse.text.edits.ReplaceEdit;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
@@ -126,7 +129,25 @@ public abstract class AbstractOrmMappedSuperclass extends AbstractOrmTypeMapping
super.update();
this.idClassReference.update(getJavaIdClassReferenceForDefaults());
}
-
+
+
+ //************************* refactoring ************************
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName) {
+ return new CompositeIterable<ReplaceEdit>(
+ super.createReplaceTypeEdits(originalType, newName),
+ this.createIdClassReplaceTypeEdits(originalType, newName));
+ }
+
+ protected Iterable<ReplaceEdit> createIdClassReplaceTypeEdits(IType originalType, String newName) {
+ return this.idClassReference.createReplaceEdits(originalType, newName);
+ }
+
+
+ // **************** validation *********************************************
+
@Override
public void validate(List<IMessage> messages, IReporter reporter) {
super.validate(messages, reporter);
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmMultiRelationshipMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmMultiRelationshipMapping.java
index e460f4a76a..0bcd8e0a63 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmMultiRelationshipMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmMultiRelationshipMapping.java
@@ -13,6 +13,7 @@ import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.emf.common.util.EList;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.context.AttributeMapping;
import org.eclipse.jpt.core.context.BaseColumn;
import org.eclipse.jpt.core.context.BaseOverride;
@@ -51,7 +52,11 @@ import org.eclipse.jpt.core.resource.orm.XmlColumn;
import org.eclipse.jpt.core.utility.TextRange;
import org.eclipse.jpt.db.Table;
import org.eclipse.jpt.utility.internal.StringTools;
+import org.eclipse.jpt.utility.internal.iterables.CompositeIterable;
+import org.eclipse.jpt.utility.internal.iterables.EmptyIterable;
+import org.eclipse.jpt.utility.internal.iterables.SingleElementIterable;
import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
+import org.eclipse.text.edits.ReplaceEdit;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
@@ -575,8 +580,33 @@ public abstract class AbstractOrmMultiRelationshipMapping<T extends AbstractXmlM
public String getMetamodelFieldMapKeyTypeName() {
return MappingTools.getMetamodelFieldMapKeyTypeName(this);
}
-
-
+
+
+ //************* refactoring *************
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName) {
+ return new CompositeIterable<ReplaceEdit>(
+ super.createReplaceTypeEdits(originalType, newName),
+ this.createMapKeyClassReplaceTypeEdits(originalType, newName));
+ }
+
+ protected Iterable<ReplaceEdit> createMapKeyClassReplaceTypeEdits(IType originalType, String newName) {
+ if (this.specifiedMapKeyClass != null) {
+ String originalName = originalType.getFullyQualifiedName('.');
+ if (this.resolvedMapKeyType != null && this.resolvedMapKeyType.isFor(originalName)) {
+ return new SingleElementIterable<ReplaceEdit>(this.createReplaceMapKeyClassEdit(originalType, newName));
+ }
+ }
+ return EmptyIterable.instance();
+ }
+
+ protected ReplaceEdit createReplaceMapKeyClassEdit(IType originalType, String newName) {
+ return this.resourceAttributeMapping.createReplaceMapKeyClassEdit(originalType, newName);
+ }
+
+
// ********** validation **********
@Override
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmPersistentAttribute.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmPersistentAttribute.java
index fb0eab8ee7..5a5e0a982b 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmPersistentAttribute.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmPersistentAttribute.java
@@ -10,6 +10,7 @@
package org.eclipse.jpt.core.internal.context.orm;
import java.util.List;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.JpaStructureNode;
import org.eclipse.jpt.core.MappingKeys;
import org.eclipse.jpt.core.context.AccessType;
@@ -27,6 +28,7 @@ import org.eclipse.jpt.core.jpa2.context.java.JavaPersistentAttribute2_0;
import org.eclipse.jpt.core.jpa2.context.orm.OrmPersistentAttribute2_0;
import org.eclipse.jpt.core.resource.orm.XmlAttributeMapping;
import org.eclipse.jpt.core.utility.TextRange;
+import org.eclipse.text.edits.ReplaceEdit;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
@@ -230,6 +232,13 @@ public abstract class AbstractOrmPersistentAttribute
}
+ // ********** refactoring **********
+
+ public Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName) {
+ return this.attributeMapping.createReplaceTypeEdits(originalType, newName);
+ }
+
+
// ********** validation **********
@Override
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmRelationshipMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmRelationshipMapping.java
index 975ffef534..7405344df8 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmRelationshipMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmRelationshipMapping.java
@@ -11,6 +11,7 @@ package org.eclipse.jpt.core.internal.context.orm;
import java.util.Iterator;
import java.util.List;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.context.AttributeMapping;
import org.eclipse.jpt.core.context.Entity;
import org.eclipse.jpt.core.context.FetchType;
@@ -29,9 +30,13 @@ import org.eclipse.jpt.core.jpa2.context.orm.OrmCascade2_0;
import org.eclipse.jpt.core.resource.orm.AbstractXmlRelationshipMapping;
import org.eclipse.jpt.core.utility.TextRange;
import org.eclipse.jpt.utility.internal.CollectionTools;
+import org.eclipse.jpt.utility.internal.iterables.CompositeIterable;
+import org.eclipse.jpt.utility.internal.iterables.EmptyIterable;
+import org.eclipse.jpt.utility.internal.iterables.SingleElementIterable;
import org.eclipse.jpt.utility.internal.iterators.CompositeIterator;
import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
+import org.eclipse.text.edits.ReplaceEdit;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
@@ -275,6 +280,34 @@ public abstract class AbstractOrmRelationshipMapping<T extends AbstractXmlRelati
return (this.resolvedTargetEntity == null) ? null : this.resolvedTargetEntity.getIdAttribute();
}
+
+ //************ refactoring ************
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName) {
+ return new CompositeIterable<ReplaceEdit>(
+ super.createReplaceTypeEdits(originalType, newName),
+ this.createTargetEntityReplaceTypeEdits(originalType, newName));
+ }
+
+ protected Iterable<ReplaceEdit> createTargetEntityReplaceTypeEdits(IType originalType, String newName) {
+ if (this.specifiedTargetEntity != null) {
+ String originalName = originalType.getFullyQualifiedName('.');
+ if (this.resolvedTargetType != null && this.resolvedTargetType.isFor(originalName)) {
+ return new SingleElementIterable<ReplaceEdit>(this.createReplaceTargetEntityEdit(originalType, newName));
+ }
+ }
+ return EmptyIterable.instance();
+ }
+
+ protected ReplaceEdit createReplaceTargetEntityEdit(IType originalType, String newName) {
+ return this.resourceAttributeMapping.createReplaceTargetEntityEdit(originalType, newName);
+ }
+
+
+ //*********** validation ***********
+
@Override
public void validate(List<IMessage> messages, IReporter reporter) {
super.validate(messages, reporter);
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmTypeMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmTypeMapping.java
index c90b95eb1b..9583beda58 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmTypeMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmTypeMapping.java
@@ -11,6 +11,7 @@ package org.eclipse.jpt.core.internal.context.orm;
import java.util.Iterator;
import java.util.List;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.JpaStructureNode;
import org.eclipse.jpt.core.context.AttributeMapping;
import org.eclipse.jpt.core.context.Column;
@@ -30,10 +31,13 @@ import org.eclipse.jpt.db.Schema;
import org.eclipse.jpt.db.Table;
import org.eclipse.jpt.utility.internal.CollectionTools;
import org.eclipse.jpt.utility.internal.StringTools;
+import org.eclipse.jpt.utility.internal.iterables.EmptyIterable;
import org.eclipse.jpt.utility.internal.iterables.FilteringIterable;
+import org.eclipse.jpt.utility.internal.iterables.SingleElementIterable;
import org.eclipse.jpt.utility.internal.iterators.CompositeIterator;
import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
import org.eclipse.text.edits.DeleteEdit;
+import org.eclipse.text.edits.ReplaceEdit;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
@@ -359,11 +363,22 @@ public abstract class AbstractOrmTypeMapping<T extends XmlTypeMapping>
//************************* refactoring ************************
-
+
public DeleteEdit createDeleteEdit() {
return this.resourceTypeMapping.createDeleteEdit();
}
+ public Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName) {
+ if (getPersistentType().isFor(originalType.getFullyQualifiedName('.'))) {
+ return new SingleElementIterable<ReplaceEdit>(this.createReplaceTypeEdit(originalType, newName));
+ }
+ return EmptyIterable.instance();
+ }
+
+ protected ReplaceEdit createReplaceTypeEdit(IType originalType, String newName) {
+ return this.resourceTypeMapping.createReplaceTypeEdit(originalType, newName);
+ }
+
// ********** misc **********
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmIdClassReference.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmIdClassReference.java
index 5b9a999399..a963f4c851 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmIdClassReference.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmIdClassReference.java
@@ -11,6 +11,7 @@
package org.eclipse.jpt.core.internal.context.orm;
import java.util.List;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.context.AccessType;
import org.eclipse.jpt.core.context.java.JavaIdClassReference;
import org.eclipse.jpt.core.context.java.JavaPersistentType;
@@ -25,6 +26,9 @@ import org.eclipse.jpt.core.resource.orm.XmlClassReference;
import org.eclipse.jpt.core.resource.orm.XmlIdClassContainer;
import org.eclipse.jpt.core.resource.orm.XmlTypeMapping;
import org.eclipse.jpt.core.utility.TextRange;
+import org.eclipse.jpt.utility.internal.iterables.EmptyIterable;
+import org.eclipse.jpt.utility.internal.iterables.SingleElementIterable;
+import org.eclipse.text.edits.ReplaceEdit;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
@@ -207,8 +211,29 @@ public class GenericOrmIdClassReference
}
}
}
-
-
+
+
+ //************************* refactoring ************************
+
+ public Iterable<ReplaceEdit> createReplaceEdits(IType originalType, String newName) {
+ if (this.isFor(originalType.getFullyQualifiedName('.'))) {
+ return new SingleElementIterable<ReplaceEdit>(this.createReplaceEdit(originalType, newName));
+ }
+ return EmptyIterable.instance();
+ }
+
+ protected ReplaceEdit createReplaceEdit(IType originalType, String newName) {
+ return getIdXmlClassRef().createReplaceEdit(originalType, newName);
+ }
+
+ protected boolean isFor(String typeName) {
+ if (this.idClass != null && this.idClass.isFor(typeName)) {
+ return true;
+ }
+ return false;
+ }
+
+
// **************** validation ********************************************
public TextRange getValidationTextRange() {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/AbstractMappingFileRef.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/AbstractMappingFileRef.java
index 2d4c57ef2d..f2f7fb1598 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/AbstractMappingFileRef.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/AbstractMappingFileRef.java
@@ -293,6 +293,13 @@ public abstract class AbstractMappingFileRef
return EmptyIterable.instance();
}
+ public Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName) {
+ if (this.mappingFile != null) {
+ return this.mappingFile.createReplaceTypeEdits(originalType, newName);
+ }
+ return EmptyIterable.instance();
+ }
+
public Iterable<ReplaceEdit> createReplaceMappingFileEdits(IFile originalFile, String newName) {
if (this.isFor(originalFile)) {
return new SingleElementIterable<ReplaceEdit>(this.createReplaceEdit(originalFile, newName));
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/AbstractPersistenceUnit.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/AbstractPersistenceUnit.java
index 06bade806f..701d717c28 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/AbstractPersistenceUnit.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/AbstractPersistenceUnit.java
@@ -137,8 +137,8 @@ public abstract class AbstractPersistenceUnit
protected boolean defaultDelimitedIdentifiers;
//****** PersistenceUnit2_0 features
- private PersistenceUnitProperties connection;
- private PersistenceUnitProperties options;
+ protected PersistenceUnitProperties connection;
+ protected PersistenceUnitProperties options;
protected SharedCacheMode specifiedSharedCacheMode;
protected SharedCacheMode defaultSharedCacheMode;
@@ -967,6 +967,19 @@ public abstract class AbstractPersistenceUnit
return null;
}
+ public Iterable<Property> getPropertiesNamed(final String propertyName) {
+ if (propertyName == null) {
+ throw new NullPointerException();
+ }
+ return new FilteringIterable<Property>(CollectionTools.iterable(this.properties())) {
+ @Override
+ protected boolean accept(Property property) {
+ String pName = property.getName();
+ return (pName != null) && pName.equals(propertyName);
+ }
+ };
+ }
+
public Iterator<Property> propertiesWithNamePrefix(final String propertyNamePrefix) {
if (propertyNamePrefix == null) {
throw new NullPointerException();
@@ -1629,6 +1642,28 @@ public abstract class AbstractPersistenceUnit
);
}
+ @SuppressWarnings("unchecked")
+ public Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName) {
+ return new CompositeIterable<ReplaceEdit>(
+ createSpecifiedClassRefReplaceTypeEdits(originalType, newName),
+ createPersistenceUnitPropertiesReplaceTypeEdits(originalType, newName));
+ }
+
+ protected Iterable<ReplaceEdit> createSpecifiedClassRefReplaceTypeEdits(final IType originalType, final String newName) {
+ return new CompositeIterable<ReplaceEdit>(
+ new TransformationIterable<ClassRef, Iterable<ReplaceEdit>>(getSpecifiedClassRefs()) {
+ @Override
+ protected Iterable<ReplaceEdit> transform(ClassRef classRef) {
+ return classRef.createReplaceTypeEdits(originalType, newName);
+ }
+ }
+ );
+ }
+
+ protected Iterable<ReplaceEdit> createPersistenceUnitPropertiesReplaceTypeEdits(IType originalType, String newName) {
+ return this.options.createReplaceTypeEdits(originalType, newName);
+ }
+
public Iterable<ReplaceEdit> createReplaceMappingFileEdits(final IFile originalFile, final String newName) {
return new CompositeIterable<ReplaceEdit>(
new TransformationIterable<MappingFileRef, Iterable<ReplaceEdit>>(getMappingFileRefs()) {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/AbstractPersistenceUnitProperties.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/AbstractPersistenceUnitProperties.java
index 0fe0ea4cd0..55b72fc134 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/AbstractPersistenceUnitProperties.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/AbstractPersistenceUnitProperties.java
@@ -14,13 +14,15 @@ import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
-
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.JpaProject;
import org.eclipse.jpt.core.context.persistence.PersistenceUnit;
import org.eclipse.jpt.core.context.persistence.PersistenceUnitProperties;
import org.eclipse.jpt.utility.internal.ReflectionTools;
import org.eclipse.jpt.utility.internal.StringTools;
+import org.eclipse.jpt.utility.internal.iterables.EmptyIterable;
import org.eclipse.jpt.utility.internal.model.AbstractModel;
+import org.eclipse.text.edits.ReplaceEdit;
/**
* AbstractPersistenceUnitProperties
@@ -508,5 +510,11 @@ public abstract class AbstractPersistenceUnitProperties extends AbstractModel
sb.deleteCharAt(sb.length() - 1); // remove the last delimiter
return sb.toString();
}
-
+
+
+ // ********** refactoring ************
+
+ public Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName) {
+ return EmptyIterable.instance();
+ }
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/orm/GenericOrmPersistentType.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/orm/GenericOrmPersistentType.java
index 298a00ef07..3b031288b6 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/orm/GenericOrmPersistentType.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/orm/GenericOrmPersistentType.java
@@ -61,6 +61,7 @@ import org.eclipse.jpt.utility.internal.iterables.CompositeIterable;
import org.eclipse.jpt.utility.internal.iterables.EmptyIterable;
import org.eclipse.jpt.utility.internal.iterables.LiveCloneIterable;
import org.eclipse.jpt.utility.internal.iterables.SingleElementIterable;
+import org.eclipse.jpt.utility.internal.iterables.TransformationIterable;
import org.eclipse.jpt.utility.internal.iterators.ChainIterator;
import org.eclipse.jpt.utility.internal.iterators.CloneListIterator;
import org.eclipse.jpt.utility.internal.iterators.CompositeIterator;
@@ -69,6 +70,7 @@ import org.eclipse.jpt.utility.internal.iterators.EmptyListIterator;
import org.eclipse.jpt.utility.internal.iterators.FilteringIterator;
import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
import org.eclipse.text.edits.DeleteEdit;
+import org.eclipse.text.edits.ReplaceEdit;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
@@ -946,6 +948,24 @@ public class GenericOrmPersistentType
return EmptyIterable.instance();
}
+ @SuppressWarnings("unchecked")
+ public Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName) {
+ return new CompositeIterable<ReplaceEdit>(
+ this.mapping.createReplaceTypeEdits(originalType, newName),
+ this.createSpecifiedAttributesReplaceTypeEdits(originalType, newName));
+ }
+
+ protected Iterable<ReplaceEdit> createSpecifiedAttributesReplaceTypeEdits(final IType originalType, final String newName) {
+ return new CompositeIterable<ReplaceEdit>(
+ new TransformationIterable<OrmPersistentAttribute, Iterable<ReplaceEdit>>(getSpecifiedAttributes()) {
+ @Override
+ protected Iterable<ReplaceEdit> transform(OrmPersistentAttribute persistentAttribute) {
+ return persistentAttribute.createReplaceTypeEdits(originalType, newName);
+ }
+ }
+ );
+ }
+
// ********** misc **********
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/orm/GenericOrmXml.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/orm/GenericOrmXml.java
index 44877ab1d6..e498c9a100 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/orm/GenericOrmXml.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/orm/GenericOrmXml.java
@@ -27,6 +27,7 @@ import org.eclipse.jpt.core.resource.xml.JpaXmlResource;
import org.eclipse.jpt.core.utility.TextRange;
import org.eclipse.jpt.utility.internal.iterables.EmptyIterable;
import org.eclipse.text.edits.DeleteEdit;
+import org.eclipse.text.edits.ReplaceEdit;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
@@ -231,4 +232,11 @@ public class GenericOrmXml
}
return EmptyIterable.instance();
}
+
+ public Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName) {
+ if (this.entityMappings != null) {
+ return this.entityMappings.createReplaceTypeEdits(originalType, newName);
+ }
+ return EmptyIterable.instance();
+ }
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/persistence/GenericClassRef.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/persistence/GenericClassRef.java
index 6098fbfe47..320c37be47 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/persistence/GenericClassRef.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/persistence/GenericClassRef.java
@@ -31,6 +31,7 @@ import org.eclipse.jpt.utility.internal.Tools;
import org.eclipse.jpt.utility.internal.iterables.EmptyIterable;
import org.eclipse.jpt.utility.internal.iterables.SingleElementIterable;
import org.eclipse.text.edits.DeleteEdit;
+import org.eclipse.text.edits.ReplaceEdit;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
@@ -320,6 +321,20 @@ public class GenericClassRef
return this.xmlJavaClassRef.createDeleteEdit();
}
+ public Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName) {
+ if (isVirtual()) {
+ throw new IllegalStateException();
+ }
+ if (this.isFor(originalType)) {
+ return new SingleElementIterable<ReplaceEdit>(this.createReplaceEdit(originalType, newName));
+ }
+ return EmptyIterable.instance();
+ }
+
+ protected ReplaceEdit createReplaceEdit(IType originalType, String newName) {
+ return this.xmlJavaClassRef.createReplaceEdit(originalType, newName);
+ }
+
// ********** misc **********
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/persistence/GenericPersistenceUnitProperty.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/persistence/GenericPersistenceUnitProperty.java
index b5f4aa822c..2c99c33281 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/persistence/GenericPersistenceUnitProperty.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/persistence/GenericPersistenceUnitProperty.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. All rights reserved.
+ * Copyright (c) 2007, 2010 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.
@@ -9,10 +9,14 @@
*******************************************************************************/
package org.eclipse.jpt.core.internal.jpa1.context.persistence;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.context.persistence.PersistenceUnit;
import org.eclipse.jpt.core.internal.context.persistence.AbstractPersistenceXmlContextNode;
import org.eclipse.jpt.core.resource.persistence.XmlProperty;
import org.eclipse.jpt.core.utility.TextRange;
+import org.eclipse.jpt.utility.internal.iterables.EmptyIterable;
+import org.eclipse.jpt.utility.internal.iterables.SingleElementIterable;
+import org.eclipse.text.edits.ReplaceEdit;
/**
* Straightforward implementation of the persistence unit property.
@@ -92,6 +96,20 @@ public class GenericPersistenceUnitProperty
}
+ // ********** refactoring **********
+
+ public Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName) {
+ if (this.getValue() != null && this.getValue().equals(originalType.getFullyQualifiedName('.'))) {
+ return new SingleElementIterable<ReplaceEdit>(this.createReplaceTypeEdit(originalType, newName));
+ }
+ return EmptyIterable.instance();
+ }
+
+ protected ReplaceEdit createReplaceTypeEdit(IType originalType, String newName) {
+ return this.xmlProperty.createReplaceTypeEdit(originalType, newName);
+ }
+
+
// ********** misc **********
@Override
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/AbstractOrmElementCollectionMapping2_0.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/AbstractOrmElementCollectionMapping2_0.java
index 00b1d5be03..5de731c1a7 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/AbstractOrmElementCollectionMapping2_0.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/AbstractOrmElementCollectionMapping2_0.java
@@ -13,6 +13,7 @@ import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.emf.common.util.EList;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.MappingKeys;
import org.eclipse.jpt.core.context.AssociationOverride;
import org.eclipse.jpt.core.context.AttributeMapping;
@@ -69,9 +70,13 @@ import org.eclipse.jpt.db.Table;
import org.eclipse.jpt.utility.internal.CollectionTools;
import org.eclipse.jpt.utility.internal.StringTools;
import org.eclipse.jpt.utility.internal.Transformer;
+import org.eclipse.jpt.utility.internal.iterables.CompositeIterable;
+import org.eclipse.jpt.utility.internal.iterables.EmptyIterable;
+import org.eclipse.jpt.utility.internal.iterables.SingleElementIterable;
import org.eclipse.jpt.utility.internal.iterators.CompositeIterator;
import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
+import org.eclipse.text.edits.ReplaceEdit;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
@@ -1027,7 +1032,43 @@ public abstract class AbstractOrmElementCollectionMapping2_0<T extends XmlElemen
public String getMetamodelFieldMapKeyTypeName() {
return MappingTools.getMetamodelFieldMapKeyTypeName(this);
}
-
+
+
+ //*********** refactoring ***********
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName) {
+ return new CompositeIterable<ReplaceEdit>(
+ super.createReplaceTypeEdits(originalType, newName),
+ this.createMapKeyClassReplaceTypeEdits(originalType, newName),
+ this.createTargetClassReplaceTypeEdits(originalType, newName));
+ }
+
+ protected Iterable<ReplaceEdit> createMapKeyClassReplaceTypeEdits(IType originalType, String newName) {
+ if (this.specifiedMapKeyClass != null) {
+ String originalName = originalType.getFullyQualifiedName('.');
+ if (this.resolvedMapKeyType != null && this.resolvedMapKeyType.isFor(originalName)) {
+ return new SingleElementIterable<ReplaceEdit>(this.createReplaceMapKeyClassEdit(originalType, newName));
+ }
+ }
+ return EmptyIterable.instance();
+ }
+
+ protected ReplaceEdit createReplaceMapKeyClassEdit(IType originalType, String newName) {
+ return this.resourceAttributeMapping.createReplaceMapKeyClassEdit(originalType, newName);
+ }
+
+ protected Iterable<ReplaceEdit> createTargetClassReplaceTypeEdits(IType originalType, String newName) {
+ if (this.specifiedTargetClass != null) {
+ String originalName = originalType.getFullyQualifiedName('.');
+ if (this.resolvedTargetType != null && this.resolvedTargetType.isFor(originalName)) {
+ return new SingleElementIterable<ReplaceEdit>(this.resourceAttributeMapping.createReplaceTargetClassEdit(originalType, newName));
+ }
+ }
+ return EmptyIterable.instance();
+ }
+
// ********** validation **********
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/refactoring/JpaCoreRefactoringMessages.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/refactoring/JpaCoreRefactoringMessages.java
index 0df873e22c..409b259542 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/refactoring/JpaCoreRefactoringMessages.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/refactoring/JpaCoreRefactoringMessages.java
@@ -30,6 +30,13 @@ public class JpaCoreRefactoringMessages {
public static String JPA_REFACORING_PARTICIPANT_LOADING_JPA_PROJECTS_SUB_TASK_NAME;
+ public static String JPA_RENAME_TYPE_REFACTORING_PARTICIPANT_NAME;
+ public static String JPA_RENAME_PACKAGE_REFACTORING_PARTICIPANT_NAME;
+ public static String JPA_RENAME_TYPE_REFACTORING_CHANGE_NAME;
+ public static String JPA_RENAME_TYPE_REFACTORING_CHANGE_PERSISTENCE_XML_NAME;
+ public static String JPA_RENAME_TYPE_REFACTORING_CHANGE_MAPPING_FILE_NAME;
+ public static String JPA_RENAME_TYPE_REFACTORING_SUB_TASK_NAME;
+
public static String JPA_RENAME_MAPPING_FILE_REFACTORING_PARTICIPANT_NAME;
public static String JPA_RENAME_MAPPING_FILE_REFACTORING_SUB_TASK_NAME;
public static String JPA_RENAME_MAPPING_FILE_REFACTORING_CHANGE_NAME;
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/refactoring/JpaRenameTypeParticipant.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/refactoring/JpaRenameTypeParticipant.java
new file mode 100644
index 0000000000..fd70cc5ee6
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/refactoring/JpaRenameTypeParticipant.java
@@ -0,0 +1,333 @@
+/*******************************************************************************
+ * Copyright (c) 2010 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.refactoring;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.mapping.IResourceChangeDescriptionFactory;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jpt.core.JpaProject;
+import org.eclipse.jpt.core.JpaProjectManager;
+import org.eclipse.jpt.core.JptCorePlugin;
+import org.eclipse.jpt.core.context.persistence.MappingFileRef;
+import org.eclipse.jpt.core.context.persistence.Persistence;
+import org.eclipse.jpt.core.context.persistence.PersistenceUnit;
+import org.eclipse.jpt.core.context.persistence.PersistenceXml;
+import org.eclipse.jpt.utility.internal.CollectionTools;
+import org.eclipse.jpt.utility.internal.iterables.CompositeIterable;
+import org.eclipse.jpt.utility.internal.iterables.EmptyIterable;
+import org.eclipse.jpt.utility.internal.iterables.TransformationIterable;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.CompositeChange;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.TextChange;
+import org.eclipse.ltk.core.refactoring.TextFileChange;
+import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
+import org.eclipse.ltk.core.refactoring.participants.RenameParticipant;
+import org.eclipse.ltk.core.refactoring.participants.ResourceChangeChecker;
+import org.eclipse.text.edits.MalformedTreeException;
+import org.eclipse.text.edits.MultiTextEdit;
+import org.eclipse.text.edits.ReplaceEdit;
+import org.eclipse.text.edits.TextEdit;
+
+//TODO RenameTypeArguments.updateSimilarDeclarations() - http://www.eclipse.org/jdt/ui/r3_2/RenameType.html
+public class JpaRenameTypeParticipant
+ extends RenameParticipant {
+
+ protected IType originalType;
+
+ protected final Collection<IType> nestedTypes;
+
+ /**
+ * Store the persistence.xml ReplaceEdits in the checkConditions() call
+ * to avoid duplicated effort in createChange().
+ */
+ protected final Map<IFile, Iterable<ReplaceEdit>> persistenceXmlClassRefReplaceEdits;
+
+ /**
+ * Store the mapping file ReplaceEdits in the checkConditions() call
+ * to avoid duplicated effort in createChange().
+ */
+ protected final Map<IFile, Iterable<ReplaceEdit>> mappingFilePersistentTypeReplaceEdits;
+
+ public JpaRenameTypeParticipant() {
+ super();
+ this.nestedTypes = new ArrayList<IType>();
+ this.persistenceXmlClassRefReplaceEdits = new HashMap<IFile, Iterable<ReplaceEdit>>();
+ this.mappingFilePersistentTypeReplaceEdits = new HashMap<IFile, Iterable<ReplaceEdit>>();
+ }
+
+ @Override
+ public String getName() {
+ return JpaCoreRefactoringMessages.JPA_RENAME_TYPE_REFACTORING_PARTICIPANT_NAME;
+ }
+
+ @Override
+ protected boolean initialize(Object element) {
+ if (!getArguments().getUpdateReferences()) {
+ //we do not want to do any refactoring if the user chooses not to update references
+ return false;
+ }
+ this.originalType = (IType) element;
+ this.addNestedTypes(this.originalType);
+ return true;
+ }
+
+ protected void addNestedType(IType renamedType) {
+ this.nestedTypes.add(renamedType);
+ this.addNestedTypes(renamedType);
+ }
+
+ private void addNestedTypes(IType renamedType) {
+ IType[] nestedTypes;
+ try {
+ nestedTypes = renamedType.getTypes();
+ }
+ catch (JavaModelException ex) {
+ JptCorePlugin.log(ex);
+ return;
+ }
+
+ for (IType nestedType : nestedTypes) {
+ this.addNestedType(nestedType);
+ }
+ }
+
+
+ //**************** RefactoringParticipant implementation *****************
+
+ /**
+ * Inform the refactoring processor of any files that are going to change. In the process of determining
+ * this go ahead and build up the appropriate ReplaceEdits to be used in the createChange()
+ */
+ @Override
+ public RefactoringStatus checkConditions(IProgressMonitor monitor, CheckConditionsContext context) throws OperationCanceledException {
+ monitor.subTask(JpaCoreRefactoringMessages.JPA_REFACORING_PARTICIPANT_LOADING_JPA_PROJECTS_SUB_TASK_NAME);
+ JpaProjectManager jpaProjectManager = JptCorePlugin.getJpaProjectManager();
+ if (jpaProjectManager.getJpaProjectsSize() == 0) {
+ return null;
+ }
+ SubMonitor sm = SubMonitor.convert(monitor, jpaProjectManager.getJpaProjectsSize()*10 + 2);
+ sm.subTask(this.getCheckConditionsSubTaskName());
+ ResourceChangeChecker checker = (ResourceChangeChecker) context.getChecker(ResourceChangeChecker.class);
+ IResourceChangeDescriptionFactory deltaFactory = checker.getDeltaFactory();
+
+ for (JpaProject jpaProject : jpaProjectManager.getJpaProjects()) {
+ this.createReplaceEdits(sm.newChild(10), jpaProject);
+ }
+ if (sm.isCanceled()) {
+ throw new OperationCanceledException();
+ }
+ for (IFile file : this.persistenceXmlClassRefReplaceEdits.keySet()) {
+ deltaFactory.change(file);
+ }
+ sm.worked(1);
+ for (IFile file : this.mappingFilePersistentTypeReplaceEdits.keySet()) {
+ deltaFactory.change(file);
+ }
+ sm.worked(1);
+
+ return null;
+ }
+
+ /**
+ * This will be appended to the main refactoring task named : 'Checking preconditions...'
+ */
+ protected String getCheckConditionsSubTaskName() {
+ return JpaCoreRefactoringMessages.JPA_RENAME_TYPE_REFACTORING_SUB_TASK_NAME;
+ }
+
+ @Override
+ public Change createChange(IProgressMonitor monitor) throws CoreException, OperationCanceledException {
+ if (this.persistenceXmlClassRefReplaceEdits.isEmpty() && this.mappingFilePersistentTypeReplaceEdits.isEmpty()) {
+ return null;
+ }
+ SubMonitor sm = SubMonitor.convert(monitor, this.persistenceXmlClassRefReplaceEdits.size() + this.mappingFilePersistentTypeReplaceEdits.size());
+ sm.subTask(this.getCreateChangeSubTaskName());
+ CompositeChange compositeChange = new CompositeChange(JpaCoreRefactoringMessages.JPA_RENAME_TYPE_REFACTORING_CHANGE_NAME);
+ for (IFile persistenceXmlFile : this.persistenceXmlClassRefReplaceEdits.keySet()) {
+ this.addPersistenceXmlRenameTypeChange(persistenceXmlFile, compositeChange);
+ sm.worked(1);
+ }
+ for (IFile mappingFile : this.mappingFilePersistentTypeReplaceEdits.keySet()) {
+ if (sm.isCanceled()) {
+ throw new OperationCanceledException();
+ }
+ this.addMappingFileRenameTypeChange(mappingFile, compositeChange);
+ sm.worked(1);
+ }
+ //must check for children in case all changes were made in other participant's TextChanges,
+ //want to return null so our node does not appear in the preview tree
+ return compositeChange.getChildren().length == 0 ? null : compositeChange;
+ }
+
+ /**
+ * This will be appended to the main refactoring task named : 'Creating workspace modifications...'
+ */
+ protected String getCreateChangeSubTaskName() {
+ return JpaCoreRefactoringMessages.JPA_RENAME_TYPE_REFACTORING_SUB_TASK_NAME;
+ }
+
+ protected void createReplaceEdits(IProgressMonitor monitor, JpaProject jpaProject) throws OperationCanceledException {
+ PersistenceUnit persistenceUnit = getPersistenceUnit(jpaProject);
+ if (persistenceUnit == null) {
+ return;
+ }
+ SubMonitor sm = SubMonitor.convert(monitor, 1 + persistenceUnit.mappingFileRefsSize());
+ Iterable<ReplaceEdit> classRefDeleteEdits = this.createPersistenceXmlReplaceTypeEdits(persistenceUnit);
+ sm.worked(1);
+ if (!CollectionTools.isEmpty(classRefDeleteEdits)) {
+ this.persistenceXmlClassRefReplaceEdits.put(jpaProject.getPersistenceXmlResource().getFile(), classRefDeleteEdits);
+ }
+ for (MappingFileRef mappingFileRef : CollectionTools.iterable(persistenceUnit.mappingFileRefs())) {
+ if (sm.isCanceled()) {
+ throw new OperationCanceledException();
+ }
+ Iterable<ReplaceEdit> mappingFileReplaceEdits = this.createMappingFileReplaceTypeEdits(mappingFileRef);
+ if (!CollectionTools.isEmpty(mappingFileReplaceEdits)) {
+ IFile file = (IFile) mappingFileRef.getMappingFile().getResource();
+ this.mappingFilePersistentTypeReplaceEdits.put(file, mappingFileReplaceEdits);
+ }
+ sm.worked(1);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private Iterable<ReplaceEdit> createPersistenceXmlReplaceTypeEdits(PersistenceUnit persistenceUnit) {
+ //check isOnClassPath since there could be types with the same name in different projects
+ if (persistenceUnit.getJpaProject().getJavaProject().isOnClasspath(this.originalType)) {
+ return new CompositeIterable<ReplaceEdit>(
+ this.createPersistenceXmlReplaceOriginalTypeEdits(persistenceUnit),
+ this.createPersistenceXmlReplaceNestedTypeEdits(persistenceUnit));
+ }
+ return EmptyIterable.instance();
+ }
+
+ private Iterable<ReplaceEdit> createPersistenceXmlReplaceOriginalTypeEdits(PersistenceUnit persistenceUnit) {
+ return persistenceUnit.createReplaceTypeEdits(this.originalType, this.getNewName());
+ }
+
+ private Iterable<ReplaceEdit> createPersistenceXmlReplaceNestedTypeEdits(final PersistenceUnit persistenceUnit) {
+ return new CompositeIterable<ReplaceEdit>(
+ new TransformationIterable<IType, Iterable<ReplaceEdit>>(this.nestedTypes) {
+ @Override
+ protected Iterable<ReplaceEdit> transform(IType nestedType) {
+ String newName = getNewNameForNestedType(nestedType);
+ return persistenceUnit.createReplaceTypeEdits(nestedType, newName);
+ }
+ }
+ );
+ }
+
+ protected String getNewName() {
+ String newName = getArguments().getNewName();
+ try {
+ if (this.originalType.isMember()) {
+ newName = this.originalType.getTypeQualifiedName().substring(0, this.originalType.getTypeQualifiedName().lastIndexOf('$')) + '$' + newName;
+ }
+ }
+ catch (JavaModelException e) {
+ JptCorePlugin.log(e);
+ }
+ return newName;
+ }
+
+ protected String getNewNameForNestedType(IType nestedType) {
+ return nestedType.getTypeQualifiedName('$').replaceFirst(this.originalType.getElementName(), getArguments().getNewName());
+ }
+
+ protected void addPersistenceXmlRenameTypeChange(IFile persistenceXmlFile, CompositeChange compositeChange) {
+ Iterable<ReplaceEdit> replaceTypeEdits = this.persistenceXmlClassRefReplaceEdits.get(persistenceXmlFile);
+
+ TextChange textChange = getTextChange(persistenceXmlFile);
+ if (textChange == null) {
+ textChange = new TextFileChange(JpaCoreRefactoringMessages.JPA_RENAME_TYPE_REFACTORING_CHANGE_PERSISTENCE_XML_NAME, persistenceXmlFile);
+ //TODO probably need to figure out TextEditGroups since these can be used to show check boxes under the file in the preview dialog
+ //also used to add edits to existing changes??
+ MultiTextEdit multiTextEdit = new MultiTextEdit();
+ textChange.setEdit(multiTextEdit);
+// textChange.addTextEditGroup(new TextEditGroup("edit persistence unit", multiTextEdit));???
+ compositeChange.add(textChange);
+ }
+ this.addEdits(textChange, replaceTypeEdits);
+ }
+
+ @SuppressWarnings("unchecked")
+ private Iterable<ReplaceEdit> createMappingFileReplaceTypeEdits(MappingFileRef mappingFileRef) {
+ //check isOnClassPath since there could be types with the same name in different projects
+ if (mappingFileRef.getJpaProject().getJavaProject().isOnClasspath(this.originalType)) {
+ return new CompositeIterable<ReplaceEdit>(
+ this.createMappingFileReplaceOriginalTypeEdits(mappingFileRef),
+ this.createMappingFileReplaceNestedTypeEdits(mappingFileRef));
+ }
+ return EmptyIterable.instance();
+ }
+
+ private Iterable<ReplaceEdit> createMappingFileReplaceOriginalTypeEdits(MappingFileRef mappingFileRef) {
+ return mappingFileRef.createReplaceTypeEdits(this.originalType, this.getNewName());
+ }
+
+ private Iterable<ReplaceEdit> createMappingFileReplaceNestedTypeEdits(final MappingFileRef mappingFileRef) {
+ return new CompositeIterable<ReplaceEdit>(
+ new TransformationIterable<IType, Iterable<ReplaceEdit>>(this.nestedTypes) {
+ @Override
+ protected Iterable<ReplaceEdit> transform(IType nestedType) {
+ String newName = getNewNameForNestedType(nestedType);
+ return mappingFileRef.createReplaceTypeEdits(nestedType, newName);
+ }
+ }
+ );
+ }
+
+ protected void addMappingFileRenameTypeChange(IFile mappingFile, CompositeChange compositeChange) {
+ Iterable<ReplaceEdit> replacedTypeEdits = this.mappingFilePersistentTypeReplaceEdits.get(mappingFile);
+
+ TextChange textChange = getTextChange(mappingFile);
+ if (textChange == null) {
+ textChange = new TextFileChange(JpaCoreRefactoringMessages.JPA_RENAME_TYPE_REFACTORING_CHANGE_MAPPING_FILE_NAME, mappingFile);
+ MultiTextEdit multiTextEdit = new MultiTextEdit();
+ textChange.setEdit(multiTextEdit);
+ compositeChange.add(textChange);
+ }
+ this.addEdits(textChange, replacedTypeEdits);
+ }
+
+ private PersistenceUnit getPersistenceUnit(JpaProject jpaProject) {
+ PersistenceXml persistenceXml = jpaProject.getRootContextNode().getPersistenceXml();
+ Persistence persistence = persistenceXml.getPersistence();
+ if (persistence == null) {
+ return null;
+ }
+ if (persistence.persistenceUnitsSize() != 1) {
+ return null; // the context model currently only supports 1 persistence unit
+ }
+ return persistence.persistenceUnits().next();
+ }
+
+ private void addEdits(TextChange textChange, Iterable<? extends TextEdit> textEdits) {
+ for (TextEdit textEdit : textEdits) {
+ try {
+ textChange.addEdit(textEdit);
+ }
+ catch (MalformedTreeException ex) {
+ //log exception and don't add this persistence.xml type deletion to the conflicting change object
+ JptCorePlugin.log(ex);
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/AbstractXmlMultiRelationshipMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/AbstractXmlMultiRelationshipMapping.java
index 5444fc9c44..2ab9a3427e 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/AbstractXmlMultiRelationshipMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/AbstractXmlMultiRelationshipMapping.java
@@ -18,12 +18,14 @@ import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.emf.ecore.util.EObjectContainmentEList;
import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.resource.orm.v2_0.JPA2_0;
import org.eclipse.jpt.core.resource.orm.v2_0.OrmV2_0Package;
import org.eclipse.jpt.core.resource.orm.v2_0.XmlMapKeyAttributeOverrideContainer_2_0;
import org.eclipse.jpt.core.resource.orm.v2_0.XmlMultiRelationshipMapping_2_0;
import org.eclipse.jpt.core.resource.orm.v2_0.XmlOrderable_2_0;
import org.eclipse.jpt.core.utility.TextRange;
+import org.eclipse.text.edits.ReplaceEdit;
import org.eclipse.wst.common.internal.emf.resource.Translator;
@@ -1083,4 +1085,12 @@ public abstract class AbstractXmlMultiRelationshipMapping extends AbstractXmlRel
protected static Translator buildOrderColumnTranslator() {
return XmlOrderColumn.buildTranslator(JPA2_0.ORDER_COLUMN, OrmV2_0Package.eINSTANCE.getXmlOrderable_2_0_OrderColumn());
}
+
+
+ // ********** refactoring **********
+
+ public ReplaceEdit createReplaceMapKeyClassEdit(IType originalType, String newName) {
+ return getMapKeyClass().createReplaceEdit(originalType, newName);
+ }
+
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/AbstractXmlRelationshipMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/AbstractXmlRelationshipMapping.java
index 2f590a2bf7..f23098cd78 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/AbstractXmlRelationshipMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/AbstractXmlRelationshipMapping.java
@@ -14,7 +14,9 @@ import org.eclipse.emf.common.notify.NotificationChain;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.utility.TextRange;
+import org.eclipse.text.edits.ReplaceEdit;
import org.eclipse.wst.common.internal.emf.resource.Translator;
@@ -378,5 +380,15 @@ public abstract class AbstractXmlRelationshipMapping extends AbstractXmlAttribut
protected static Translator buildCascadeTranslator() {
return CascadeType.buildTranslator(JPA.CASCADE, OrmPackage.eINSTANCE.getAbstractXmlRelationshipMapping_Cascade());
}
-
+
+
+ // ********** refactoring **********
+
+ public ReplaceEdit createReplaceTargetEntityEdit(IType originalType, String newName) {
+ String originalName = originalType.getElementName();
+ int nameIndex = this.targetEntity.lastIndexOf(originalName);
+ int offset = getAttributeNode(JPA.TARGET_ENTITY).getValueRegionStartOffset() + 1;
+ return new ReplaceEdit(offset + nameIndex, originalName.length(), newName);
+ }
+
} // RelationshipMapping
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/AbstractXmlTypeMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/AbstractXmlTypeMapping.java
index 322b3eab36..66e8fe17c5 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/AbstractXmlTypeMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/AbstractXmlTypeMapping.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2009 Oracle. All rights reserved.
+ * Copyright (c) 2007, 2010 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.
@@ -14,8 +14,10 @@ import org.eclipse.emf.common.notify.NotificationChain;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.resource.xml.AbstractJpaEObject;
import org.eclipse.jpt.core.utility.TextRange;
+import org.eclipse.text.edits.ReplaceEdit;
import org.eclipse.wst.common.internal.emf.resource.Translator;
/**
@@ -516,6 +518,16 @@ public abstract class AbstractXmlTypeMapping extends AbstractJpaEObject implemen
protected static Translator buildAttributesTranslator() {
return Attributes.buildTranslator();
- }
+ }
+
+
+ // ********** refactoring **********
+
+ public ReplaceEdit createReplaceTypeEdit(IType originalType, String newName) {
+ String originalName = originalType.getTypeQualifiedName();
+ int nameIndex = this.className.lastIndexOf(originalName);
+ int offset = getAttributeNode(JPA.CLASS).getValueRegionStartOffset() + 1; // +1 = opening double quote
+ return new ReplaceEdit(offset + nameIndex, originalName.length(), newName);
+ }
} // TypeMapping
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlClassReference.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlClassReference.java
index 26cad878dc..edde3bc7e0 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlClassReference.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlClassReference.java
@@ -15,10 +15,12 @@ import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.internal.utility.translators.SimpleTranslator;
import org.eclipse.jpt.core.resource.xml.AbstractJpaEObject;
import org.eclipse.jpt.core.resource.xml.JpaEObject;
import org.eclipse.jpt.core.utility.TextRange;
+import org.eclipse.text.edits.ReplaceEdit;
import org.eclipse.wst.common.internal.emf.resource.Translator;
/**
@@ -226,4 +228,12 @@ public class XmlClassReference extends AbstractJpaEObject implements JpaEObject
private static Translator buildClassTranslator() {
return new Translator(JPA.CLASS, OrmPackage.eINSTANCE.getXmlClassReference_ClassName(), Translator.DOM_ATTRIBUTE);
}
+
+ public ReplaceEdit createReplaceEdit(IType originalType, String newName) {
+ String originalName = originalType.getElementName();
+ int nameIndex = this.className.lastIndexOf(originalName);
+
+ int offset = getAttributeNode(JPA.CLASS).getValueRegionStartOffset() + 1;
+ return new ReplaceEdit(offset + nameIndex, originalName.length(), newName);
+ }
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlElementCollection.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlElementCollection.java
index 3103bc7640..9b4ef50ba3 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlElementCollection.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlElementCollection.java
@@ -21,7 +21,7 @@ import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.emf.ecore.util.EObjectContainmentEList;
import org.eclipse.emf.ecore.util.InternalEList;
-import org.eclipse.jpt.core.internal.utility.translators.BooleanTranslator;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.internal.utility.translators.EmptyTagBooleanTranslator;
import org.eclipse.jpt.core.internal.utility.translators.SimpleTranslator;
import org.eclipse.jpt.core.jpa2.MappingKeys2_0;
@@ -31,6 +31,7 @@ import org.eclipse.jpt.core.resource.orm.v2_0.XmlElementCollection_2_0;
import org.eclipse.jpt.core.resource.orm.v2_0.XmlMapKeyAttributeOverrideContainer_2_0;
import org.eclipse.jpt.core.resource.orm.v2_0.XmlOrderable_2_0;
import org.eclipse.jpt.core.utility.TextRange;
+import org.eclipse.text.edits.ReplaceEdit;
import org.eclipse.wst.common.internal.emf.resource.Translator;
/**
@@ -1631,4 +1632,19 @@ public class XmlElementCollection extends AbstractXmlAttributeMapping implements
protected static Translator buildMapKeyAttributeOverrideTranslator() {
return XmlAttributeOverride.buildTranslator(JPA2_0.MAP_KEY_ATTRIBUTE_OVERRIDE, OrmV2_0Package.eINSTANCE.getXmlMapKeyAttributeOverrideContainer_2_0_MapKeyAttributeOverrides());
}
+
+
+ // ********** refactoring **********
+
+ public ReplaceEdit createReplaceTargetClassEdit(IType originalType, String newName) {
+ String originalName = originalType.getElementName();
+ int nameIndex = this.targetClass.lastIndexOf(originalName);
+ int offset = getAttributeNode(JPA2_0.TARGET_CLASS).getValueRegionStartOffset() + 1;
+ return new ReplaceEdit(offset + nameIndex, originalName.length(), newName);
+ }
+
+ public ReplaceEdit createReplaceMapKeyClassEdit(IType originalType, String newName) {
+ return getMapKeyClass().createReplaceEdit(originalType, newName);
+ }
+
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlTypeMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlTypeMapping.java
index e8a71a6ccc..18a6dc13a1 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlTypeMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlTypeMapping.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009 Oracle. All rights reserved.
+ * Copyright (c) 2009, 2010 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.
@@ -9,7 +9,9 @@
******************************************************************************/
package org.eclipse.jpt.core.resource.orm;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.utility.TextRange;
+import org.eclipse.text.edits.ReplaceEdit;
/**
* <!-- begin-user-doc -->
@@ -149,4 +151,9 @@ public interface XmlTypeMapping extends XmlAccessHolder
//TODO not happy with this, or the corresponding one in XmlAttributeMapping
String getMappingKey();
+
+
+ // ********** refactoring **********
+
+ ReplaceEdit createReplaceTypeEdit(IType originalType, String newName);
} // XmlTypeMapping
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/persistence/XmlJavaClassRef.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/persistence/XmlJavaClassRef.java
index 807ed320c7..c9e02be73b 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/persistence/XmlJavaClassRef.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/persistence/XmlJavaClassRef.java
@@ -14,9 +14,10 @@ import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.internal.utility.translators.SimpleTranslator;
import org.eclipse.jpt.core.resource.xml.AbstractJpaEObject;
-import org.eclipse.jpt.core.resource.xml.JpaEObject;
+import org.eclipse.text.edits.ReplaceEdit;
import org.eclipse.wst.common.internal.emf.resource.Translator;
/**
@@ -42,7 +43,7 @@ import org.eclipse.wst.common.internal.emf.resource.Translator;
* @extends JpaEObject
* @generated
*/
-public class XmlJavaClassRef extends AbstractJpaEObject implements JpaEObject
+public class XmlJavaClassRef extends AbstractJpaEObject
{
/**
* The default value of the '{@link #getJavaClass() <em>Java Class</em>}' attribute.
@@ -228,4 +229,14 @@ public class XmlJavaClassRef extends AbstractJpaEObject implements JpaEObject
PersistencePackage.eINSTANCE.getXmlJavaClassRef_JavaClass()
);
}
+
+
+ // *********** refactoring ***********
+
+ public ReplaceEdit createReplaceEdit(IType originalType, String newName) {
+ String originalName = originalType.getTypeQualifiedName();
+ int nameIndex = this.javaClass.lastIndexOf(originalName);
+ int offset = getTextNode().getStartOffset();
+ return new ReplaceEdit(offset + nameIndex, originalName.length(), newName);
+ }
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/persistence/XmlProperty.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/persistence/XmlProperty.java
index 22e944c680..30d38b310b 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/persistence/XmlProperty.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/persistence/XmlProperty.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2006, 2009 Oracle. All rights reserved.
+ * Copyright (c) 2006, 2010 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.
@@ -14,10 +14,13 @@ import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.internal.utility.translators.SimpleTranslator;
import org.eclipse.jpt.core.resource.xml.AbstractJpaEObject;
import org.eclipse.jpt.core.resource.xml.JpaEObject;
+import org.eclipse.text.edits.ReplaceEdit;
import org.eclipse.wst.common.internal.emf.resource.Translator;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMAttr;
/**
* <!-- begin-user-doc -->
@@ -302,4 +305,16 @@ public class XmlProperty extends AbstractJpaEObject implements JpaEObject
);
}
+ public ReplaceEdit createReplaceTypeEdit(IType originalType, String newName) {
+ IDOMAttr domAttr = getAttributeNode(JPA.PROPERTY__VALUE);
+ if (domAttr == null) {
+ return null;
+ }
+ String originalName = originalType.getElementName();
+ int nameIndex = originalType.getFullyQualifiedName('.').lastIndexOf(originalName);
+
+ int offset = domAttr.getValueRegionStartOffset() + 1;
+ return new ReplaceEdit(offset + nameIndex, originalName.length(), newName);
+ }
+
}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core/META-INF/MANIFEST.MF b/jpa/plugins/org.eclipse.jpt.eclipselink.core/META-INF/MANIFEST.MF
index c943f1799b..043f10f2b0 100644
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core/META-INF/MANIFEST.MF
+++ b/jpa/plugins/org.eclipse.jpt.eclipselink.core/META-INF/MANIFEST.MF
@@ -26,7 +26,8 @@ Require-Bundle: org.eclipse.core.commands;bundle-version="[3.4.0,4.0.0)",
org.eclipse.wst.common.emfworkbench.integration;bundle-version="[1.1.200,2.0.0)",
org.eclipse.wst.common.frameworks;bundle-version="[1.1.200,2.0.0)",
org.eclipse.wst.common.modulecore;bundle-version="[1.1.200,2.0.0)",
- org.eclipse.wst.validation;bundle-version="[1.2.0,2.0.0)"
+ org.eclipse.wst.validation;bundle-version="[1.2.0,2.0.0)",
+ org.eclipse.wst.xml.core;bundle-version="[1.1.300,2.0.0)"
Export-Package: org.eclipse.jpt.eclipselink.core,
org.eclipse.jpt.eclipselink.core.context,
org.eclipse.jpt.eclipselink.core.context.java,
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/orm/OrmEclipseLinkCustomizer.java b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/orm/OrmEclipseLinkCustomizer.java
index 401c821822..d36642f217 100644
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/orm/OrmEclipseLinkCustomizer.java
+++ b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/orm/OrmEclipseLinkCustomizer.java
@@ -9,14 +9,20 @@
******************************************************************************/
package org.eclipse.jpt.eclipselink.core.internal.context.orm;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jpt.core.context.orm.EntityMappings;
import org.eclipse.jpt.core.context.orm.OrmTypeMapping;
import org.eclipse.jpt.core.internal.context.orm.AbstractOrmXmlContextNode;
+import org.eclipse.jpt.core.resource.java.JavaResourcePersistentType;
import org.eclipse.jpt.core.resource.orm.OrmFactory;
import org.eclipse.jpt.core.resource.orm.XmlClassReference;
import org.eclipse.jpt.core.utility.TextRange;
import org.eclipse.jpt.eclipselink.core.context.EclipseLinkCustomizer;
import org.eclipse.jpt.eclipselink.core.internal.context.java.JavaEclipseLinkCustomizer;
import org.eclipse.jpt.eclipselink.core.resource.orm.XmlCustomizerHolder;
+import org.eclipse.jpt.utility.internal.iterables.EmptyIterable;
+import org.eclipse.jpt.utility.internal.iterables.SingleElementIterable;
+import org.eclipse.text.edits.ReplaceEdit;
public class OrmEclipseLinkCustomizer extends AbstractOrmXmlContextNode
implements EclipseLinkCustomizer
@@ -27,13 +33,19 @@ public class OrmEclipseLinkCustomizer extends AbstractOrmXmlContextNode
protected String defaultCustomizerClass;
+ protected JavaResourcePersistentType customizerPersistentType;
+
public OrmEclipseLinkCustomizer(OrmTypeMapping parent, XmlCustomizerHolder resource, JavaEclipseLinkCustomizer javaCustomizer) {
super(parent);
this.resource = resource;
this.defaultCustomizerClass = getJavaCustomizerClass(javaCustomizer);
this.specifiedCustomizerClass = getResourceCustomizerClass();
+ this.customizerPersistentType = getResourceCustomizerPersistentType();
}
+
+ // **************** EclipseLinkCustomizer impl *********************************
+
public char getCustomizerClassEnclosingTypeSeparator() {
return '$';
}
@@ -79,6 +91,24 @@ public class OrmEclipseLinkCustomizer extends AbstractOrmXmlContextNode
this.specifiedCustomizerClass = newCustomizerClass;
firePropertyChanged(SPECIFIED_CUSTOMIZER_CLASS_PROPERTY, oldCustomizerClass, newCustomizerClass);
}
+
+ protected JavaResourcePersistentType getResourceCustomizerPersistentType() {
+ XmlClassReference customizerClassRef = this.getResourceCustomizer();
+ if (customizerClassRef == null) {
+ return null;
+ }
+
+ String className = customizerClassRef.getClassName();
+ if (className == null) {
+ return null;
+ }
+
+ return this.getEntityMappings().resolveJavaResourcePersistentType(className);
+ }
+
+ protected EntityMappings getEntityMappings() {
+ return (EntityMappings) getMappingFileRoot();
+ }
protected XmlClassReference getResourceCustomizer() {
return this.resource.getCustomizer();
@@ -98,6 +128,7 @@ public class OrmEclipseLinkCustomizer extends AbstractOrmXmlContextNode
protected void update(JavaEclipseLinkCustomizer javaCustomizer) {
setDefaultCustomizerClass(getJavaCustomizerClass(javaCustomizer));
setSpecifiedCustomizerClass_(getResourceCustomizerClass());
+ updateCustomizerPersistentType();
}
protected String getJavaCustomizerClass(JavaEclipseLinkCustomizer javaCustomizer) {
@@ -109,7 +140,32 @@ public class OrmEclipseLinkCustomizer extends AbstractOrmXmlContextNode
return (resource == null) ? null : resource.getClassName();
}
-
+ protected void updateCustomizerPersistentType() {
+ this.customizerPersistentType = this.getResourceCustomizerPersistentType();
+ }
+
+
+ //************************* refactoring ************************
+
+ public Iterable<ReplaceEdit> createReplaceEdits(IType originalType, String newName) {
+ if (this.isFor(originalType.getFullyQualifiedName('.'))) {
+ return new SingleElementIterable<ReplaceEdit>(this.createReplaceEdit(originalType, newName));
+ }
+ return EmptyIterable.instance();
+ }
+
+ protected ReplaceEdit createReplaceEdit(IType originalType, String newName) {
+ return getResourceCustomizer().createReplaceEdit(originalType, newName);
+ }
+
+ protected boolean isFor(String typeName) {
+ if (this.customizerPersistentType != null && this.customizerPersistentType.getQualifiedName().equals(typeName)) {
+ return true;
+ }
+ return false;
+ }
+
+
// **************** validation **************************************
public TextRange getValidationTextRange() {
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/orm/OrmEclipseLinkEmbeddableImpl.java b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/orm/OrmEclipseLinkEmbeddableImpl.java
index 9abd0ce78d..2c35e4d7a1 100644
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/orm/OrmEclipseLinkEmbeddableImpl.java
+++ b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/orm/OrmEclipseLinkEmbeddableImpl.java
@@ -10,6 +10,7 @@
package org.eclipse.jpt.eclipselink.core.internal.context.orm;
import java.util.List;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.context.orm.OrmPersistentType;
import org.eclipse.jpt.core.internal.context.orm.AbstractOrmEmbeddable;
import org.eclipse.jpt.eclipselink.core.context.EclipseLinkChangeTracking;
@@ -22,6 +23,8 @@ import org.eclipse.jpt.eclipselink.core.resource.orm.XmlChangeTrackingHolder;
import org.eclipse.jpt.eclipselink.core.resource.orm.XmlConvertersHolder;
import org.eclipse.jpt.eclipselink.core.resource.orm.XmlCustomizerHolder;
import org.eclipse.jpt.eclipselink.core.resource.orm.XmlEmbeddable;
+import org.eclipse.jpt.utility.internal.iterables.CompositeIterable;
+import org.eclipse.text.edits.ReplaceEdit;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
@@ -92,8 +95,23 @@ public class OrmEclipseLinkEmbeddableImpl
JavaEclipseLinkEmbeddable javaEmbeddable = getJavaEmbeddableForDefaults();
return (javaEmbeddable == null) ? null : javaEmbeddable.getChangeTracking();
}
-
-
+
+
+ //************************* refactoring ************************
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName) {
+ return new CompositeIterable<ReplaceEdit>(
+ super.createReplaceTypeEdits(originalType, newName),
+ this.createCustomizerReplaceTypeEdits(originalType, newName));
+ }
+
+ protected Iterable<ReplaceEdit> createCustomizerReplaceTypeEdits(IType originalType, String newName) {
+ return this.customizer.createReplaceEdits(originalType, newName);
+ }
+
+
// **************** validation **************************************
@Override
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/orm/OrmEclipseLinkEntityImpl.java b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/orm/OrmEclipseLinkEntityImpl.java
index 84a911a1ee..cbd35cc5e3 100644
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/orm/OrmEclipseLinkEntityImpl.java
+++ b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/orm/OrmEclipseLinkEntityImpl.java
@@ -10,6 +10,8 @@
package org.eclipse.jpt.eclipselink.core.internal.context.orm;
import java.util.List;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jpt.core.context.orm.EntityMappings;
import org.eclipse.jpt.core.context.orm.OrmPersistentType;
import org.eclipse.jpt.core.internal.context.PrimaryKeyValidator;
import org.eclipse.jpt.core.internal.context.orm.AbstractOrmEntity;
@@ -36,6 +38,10 @@ import org.eclipse.jpt.eclipselink.core.resource.orm.XmlCustomizerHolder;
import org.eclipse.jpt.eclipselink.core.resource.orm.XmlEntity;
import org.eclipse.jpt.eclipselink.core.resource.orm.XmlReadOnly;
import org.eclipse.jpt.eclipselink.core.v2_0.resource.java.EclipseLinkClassExtractorAnnotation2_1;
+import org.eclipse.jpt.utility.internal.iterables.CompositeIterable;
+import org.eclipse.jpt.utility.internal.iterables.EmptyIterable;
+import org.eclipse.jpt.utility.internal.iterables.SingleElementIterable;
+import org.eclipse.text.edits.ReplaceEdit;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
@@ -53,6 +59,7 @@ public class OrmEclipseLinkEntityImpl
protected final OrmEclipseLinkConverterHolder converterHolder;
+ protected JavaResourcePersistentType classExtractorPersistentType;
public OrmEclipseLinkEntityImpl(OrmPersistentType parent, XmlEntity resourceMapping) {
super(parent, resourceMapping);
@@ -61,6 +68,7 @@ public class OrmEclipseLinkEntityImpl
this.changeTracking = new OrmEclipseLinkChangeTracking(this, (XmlChangeTrackingHolder) this.resourceTypeMapping, getJavaChangeTracking());
this.caching = new OrmEclipseLinkCachingImpl(this, (XmlCacheHolder) this.resourceTypeMapping, (XmlCacheable_2_0) this.resourceTypeMapping, getJavaCaching());
this.converterHolder = new OrmEclipseLinkConverterHolder(this, (XmlConvertersHolder) this.resourceTypeMapping);
+ this.classExtractorPersistentType = getResourceClassExtractorPersistentType();
}
@@ -124,6 +132,25 @@ public class OrmEclipseLinkEntityImpl
return null;
}
+ protected JavaResourcePersistentType getResourceClassExtractorPersistentType() {
+ XmlClassReference classExtractorClassRef = this.getResourceClassExtractor();
+ if (classExtractorClassRef == null) {
+ return null;
+ }
+
+ String className = classExtractorClassRef.getClassName();
+ if (className == null) {
+ return null;
+ }
+
+ return this.getEntityMappings().resolveJavaResourcePersistentType(className);
+ }
+
+ protected EntityMappings getEntityMappings() {
+ return (EntityMappings) getMappingFileRoot();
+ }
+
+
// **************** resource-context interaction ***************************
@Override
@@ -134,6 +161,7 @@ public class OrmEclipseLinkEntityImpl
this.changeTracking.update(getJavaChangeTracking());
this.caching.update(getJavaCaching());
this.converterHolder.update();
+ this.updateClassExtractorPersistentType();
}
@Override
@@ -166,7 +194,41 @@ public class OrmEclipseLinkEntityImpl
return (javaEntity == null) ? false : javaEntity.usesPrimaryKeyColumns();
}
-
+ protected void updateClassExtractorPersistentType() {
+ this.classExtractorPersistentType = this.getResourceClassExtractorPersistentType();
+ }
+
+
+ //************************* refactoring ************************
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName) {
+ return new CompositeIterable<ReplaceEdit>(
+ super.createReplaceTypeEdits(originalType, newName),
+ this.createCustomizerReplaceTypeEdits(originalType, newName),
+ this.createClassExtractorReplaceTypeEdits(originalType, newName));
+ }
+
+ protected Iterable<ReplaceEdit> createCustomizerReplaceTypeEdits(IType originalType, String newName) {
+ return this.customizer.createReplaceEdits(originalType, newName);
+ }
+
+ protected Iterable<ReplaceEdit> createClassExtractorReplaceTypeEdits(IType originalType, String newName) {
+ if (this.classExtractorIsFor(originalType.getFullyQualifiedName('.'))) {
+ return new SingleElementIterable<ReplaceEdit>(this.getResourceClassExtractor().createReplaceEdit(originalType, newName));
+ }
+ return EmptyIterable.instance();
+ }
+
+ protected boolean classExtractorIsFor(String typeName) {
+ if (this.classExtractorPersistentType != null && this.classExtractorPersistentType.getQualifiedName().equals(typeName)) {
+ return true;
+ }
+ return false;
+ }
+
+
// **************** validation **************************************
@Override
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/orm/OrmEclipseLinkMappedSuperclassImpl.java b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/orm/OrmEclipseLinkMappedSuperclassImpl.java
index d90b9b5976..6422c3b67a 100644
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/orm/OrmEclipseLinkMappedSuperclassImpl.java
+++ b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/orm/OrmEclipseLinkMappedSuperclassImpl.java
@@ -10,6 +10,7 @@
package org.eclipse.jpt.eclipselink.core.internal.context.orm;
import java.util.List;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.context.orm.OrmPersistentType;
import org.eclipse.jpt.core.internal.context.PrimaryKeyValidator;
import org.eclipse.jpt.core.internal.context.orm.AbstractOrmMappedSuperclass;
@@ -32,6 +33,8 @@ import org.eclipse.jpt.eclipselink.core.resource.orm.XmlConvertersHolder;
import org.eclipse.jpt.eclipselink.core.resource.orm.XmlCustomizerHolder;
import org.eclipse.jpt.eclipselink.core.resource.orm.XmlMappedSuperclass;
import org.eclipse.jpt.eclipselink.core.resource.orm.XmlReadOnly;
+import org.eclipse.jpt.utility.internal.iterables.CompositeIterable;
+import org.eclipse.text.edits.ReplaceEdit;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
@@ -140,8 +143,23 @@ public class OrmEclipseLinkMappedSuperclassImpl
return (javaMappedSuperclass == null) ? false : javaMappedSuperclass.usesPrimaryKeyColumns();
}
-
- // **************** validation **************************************
+
+ //************************* refactoring ************************
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName) {
+ return new CompositeIterable<ReplaceEdit>(
+ super.createReplaceTypeEdits(originalType, newName),
+ this.createCustomizerReplaceTypeEdits(originalType, newName));
+ }
+
+ protected Iterable<ReplaceEdit> createCustomizerReplaceTypeEdits(IType originalType, String newName) {
+ return this.customizer.createReplaceEdits(originalType, newName);
+ }
+
+
+ // *********** validation ************
@Override
public void validate(List<IMessage> messages, IReporter reporter) {
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/persistence/EclipseLinkPersistenceUnit.java b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/persistence/EclipseLinkPersistenceUnit.java
index bf467fc3fd..a6eafbbe53 100644
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/persistence/EclipseLinkPersistenceUnit.java
+++ b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/persistence/EclipseLinkPersistenceUnit.java
@@ -16,6 +16,7 @@ import java.util.List;
import java.util.ListIterator;
import java.util.Set;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.context.persistence.MappingFileRef;
import org.eclipse.jpt.core.context.persistence.Persistence;
import org.eclipse.jpt.core.internal.context.persistence.AbstractPersistenceUnit;
@@ -40,12 +41,14 @@ import org.eclipse.jpt.eclipselink.core.internal.context.persistence.customizati
import org.eclipse.jpt.eclipselink.core.internal.context.persistence.general.EclipseLinkGeneralProperties;
import org.eclipse.jpt.eclipselink.core.internal.context.persistence.schema.generation.EclipseLinkSchemaGeneration;
import org.eclipse.jpt.utility.internal.CollectionTools;
+import org.eclipse.jpt.utility.internal.iterables.CompositeIterable;
import org.eclipse.jpt.utility.internal.iterables.CompositeListIterable;
import org.eclipse.jpt.utility.internal.iterables.FilteringIterable;
import org.eclipse.jpt.utility.internal.iterables.ListIterable;
import org.eclipse.jpt.utility.internal.iterators.CloneListIterator;
import org.eclipse.jpt.utility.internal.iterators.FilteringIterator;
import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
+import org.eclipse.text.edits.ReplaceEdit;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
@@ -505,4 +508,16 @@ public class EclipseLinkPersistenceUnit
}
};
}
+
+
+ // ********** refactoring **********
+
+ @SuppressWarnings("unchecked")
+ @Override
+ protected Iterable<ReplaceEdit> createPersistenceUnitPropertiesReplaceTypeEdits(IType originalType, String newName) {
+ return new CompositeIterable<ReplaceEdit>(
+ super.createPersistenceUnitPropertiesReplaceTypeEdits(originalType, newName),
+ this.customization.createReplaceTypeEdits(originalType, newName),
+ this.logging.createReplaceTypeEdits(originalType, newName));
+ }
}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/persistence/customization/EclipseLinkCustomization.java b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/persistence/customization/EclipseLinkCustomization.java
index 1affa8f1af..1cafe1ce7b 100644
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/persistence/customization/EclipseLinkCustomization.java
+++ b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/persistence/customization/EclipseLinkCustomization.java
@@ -16,14 +16,19 @@ import java.util.ListIterator;
import java.util.Map;
import java.util.Set;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.context.persistence.PersistenceUnit;
import org.eclipse.jpt.eclipselink.core.context.persistence.customization.Customization;
import org.eclipse.jpt.eclipselink.core.context.persistence.customization.Profiler;
import org.eclipse.jpt.eclipselink.core.context.persistence.customization.Weaving;
import org.eclipse.jpt.eclipselink.core.internal.context.persistence.EclipseLinkPersistenceUnitProperties;
import org.eclipse.jpt.utility.internal.StringTools;
+import org.eclipse.jpt.utility.internal.iterables.CompositeIterable;
+import org.eclipse.jpt.utility.internal.iterables.EmptyIterable;
+import org.eclipse.jpt.utility.internal.iterables.TransformationIterable;
import org.eclipse.jpt.utility.internal.iterators.CloneListIterator;
import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
+import org.eclipse.text.edits.ReplaceEdit;
/**
* EclipseLinkCustomization
@@ -795,4 +800,34 @@ public class EclipseLinkCustomization extends EclipseLinkPersistenceUnitProperti
public int entitiesSize() {
return this.entities.size();
}
+
+
+ // ********** refactoring ************
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName) {
+ return new CompositeIterable<ReplaceEdit>(
+ this.createSessionCustomizerReplaceTypeEdits(originalType, newName),
+ this.createExceptionHandlerReplaceTypeEdits(originalType, newName));
+ }
+
+ protected Iterable<ReplaceEdit> createSessionCustomizerReplaceTypeEdits(final IType originalType, final String newName) {
+ return new CompositeIterable<ReplaceEdit>(
+ new TransformationIterable<PersistenceUnit.Property, Iterable<ReplaceEdit>>(getPersistenceUnit().getPropertiesNamed(ECLIPSELINK_SESSION_CUSTOMIZER)) {
+ @Override
+ protected Iterable<ReplaceEdit> transform(PersistenceUnit.Property property) {
+ return property.createReplaceTypeEdits(originalType, newName);
+ }
+ }
+ );
+ }
+
+ protected Iterable<ReplaceEdit> createExceptionHandlerReplaceTypeEdits(IType originalType, String newName) {
+ PersistenceUnit.Property property = getPersistenceUnit().getProperty(ECLIPSELINK_EXCEPTION_HANDLER);
+ if (property != null) {
+ return property.createReplaceTypeEdits(originalType, newName);
+ }
+ return EmptyIterable.instance();
+ }
}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/persistence/logging/EclipseLinkLogging.java b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/persistence/logging/EclipseLinkLogging.java
index 6b1f41d01d..f8b24d1d02 100644
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/persistence/logging/EclipseLinkLogging.java
+++ b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/persistence/logging/EclipseLinkLogging.java
@@ -10,12 +10,15 @@
package org.eclipse.jpt.eclipselink.core.internal.context.persistence.logging;
import java.util.Map;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.context.persistence.PersistenceUnit;
import org.eclipse.jpt.eclipselink.core.context.persistence.logging.Logger;
import org.eclipse.jpt.eclipselink.core.context.persistence.logging.Logging;
import org.eclipse.jpt.eclipselink.core.context.persistence.logging.LoggingLevel;
import org.eclipse.jpt.eclipselink.core.internal.context.persistence.EclipseLinkPersistenceUnitProperties;
import org.eclipse.jpt.utility.internal.StringTools;
+import org.eclipse.jpt.utility.internal.iterables.EmptyIterable;
+import org.eclipse.text.edits.ReplaceEdit;
/**
* EclipseLinkLogging
@@ -358,4 +361,21 @@ public class EclipseLinkLogging extends EclipseLinkPersistenceUnitProperties
return DEFAULT_LOGGER;
}
+
+ // ********** refactoring ************
+
+ @Override
+ public Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName) {
+ return this.createLoggerReplaceTypeEdits(originalType, newName);
+ }
+
+ protected Iterable<ReplaceEdit> createLoggerReplaceTypeEdits(IType originalType, String newName) {
+ //TODO seems like we should have the Property stored in a SessionCustomizer object instead of having to go
+ //find all of the Properties from the persistence unit.
+ PersistenceUnit.Property property = getPersistenceUnit().getProperty(ECLIPSELINK_LOGGER);
+ if (property != null) {
+ return property.createReplaceTypeEdits(originalType, newName);
+ }
+ return EmptyIterable.instance();
+ }
} \ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/persistence/options/EclipseLinkOptions.java b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/persistence/options/EclipseLinkOptions.java
index 95783f0f39..e91beab105 100644
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/persistence/options/EclipseLinkOptions.java
+++ b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/persistence/options/EclipseLinkOptions.java
@@ -1,5 +1,5 @@
/*******************************************************************************
-* Copyright (c) 2008, 2009 Oracle. All rights reserved.
+* Copyright (c) 2008, 2010 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.
@@ -10,11 +10,14 @@
package org.eclipse.jpt.eclipselink.core.internal.context.persistence.options;
import java.util.Map;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.context.persistence.PersistenceUnit;
import org.eclipse.jpt.eclipselink.core.context.persistence.options.Options;
import org.eclipse.jpt.eclipselink.core.context.persistence.options.TargetDatabase;
import org.eclipse.jpt.eclipselink.core.context.persistence.options.TargetServer;
import org.eclipse.jpt.eclipselink.core.internal.context.persistence.EclipseLinkPersistenceUnitProperties;
+import org.eclipse.jpt.utility.internal.iterables.EmptyIterable;
+import org.eclipse.text.edits.ReplaceEdit;
/**
* EclipseLinkOptions
@@ -396,4 +399,19 @@ public class EclipseLinkOptions extends EclipseLinkPersistenceUnitProperties
return DEFAULT_TEMPORAL_MUTABLE;
}
+
+ // ********** refactoring ************
+
+ @Override
+ public Iterable<ReplaceEdit> createReplaceTypeEdits(IType originalType, String newName) {
+ return this.createEventListenerReplaceTypeEdits(originalType, newName);
+ }
+
+ protected Iterable<ReplaceEdit> createEventListenerReplaceTypeEdits(IType originalType, String newName) {
+ PersistenceUnit.Property property = getPersistenceUnit().getProperty(ECLIPSELINK_SESSION_EVENT_LISTENER);
+ if (property != null) {
+ return property.createReplaceTypeEdits(originalType, newName);
+ }
+ return EmptyIterable.instance();
+ }
} \ No newline at end of file

Back to the top