diff options
author | kmoore | 2011-08-12 20:55:44 +0000 |
---|---|---|
committer | kmoore | 2011-08-12 20:55:44 +0000 |
commit | 53bbc7bc023cf939d2e08cbb0e8dba503d77cd09 (patch) | |
tree | a2e9cbce2bec93e56aa1c3b6b4952b603ef422c8 | |
parent | d811a2748bc301b118e58d5b9a2d222fab637db5 (diff) | |
download | webtools.dali-53bbc7bc023cf939d2e08cbb0e8dba503d77cd09.tar.gz webtools.dali-53bbc7bc023cf939d2e08cbb0e8dba503d77cd09.tar.xz webtools.dali-53bbc7bc023cf939d2e08cbb0e8dba503d77cd09.zip |
bug 354055 - EclipseLink MapKeyConvert annotation support
16 files changed, 633 insertions, 116 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/META-INF/MANIFEST.MF b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/META-INF/MANIFEST.MF index f11737654a..f81776f79f 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/META-INF/MANIFEST.MF +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/META-INF/MANIFEST.MF @@ -75,6 +75,9 @@ Export-Package: org.eclipse.jpt.jpa.eclipselink.core, org.eclipse.jpt.jpa.eclipselink.core.internal.v2_0.context.persistence.logging;x-internal:=true, org.eclipse.jpt.jpa.eclipselink.core.internal.v2_0.context.persistence.options;x-internal:=true, org.eclipse.jpt.jpa.eclipselink.core.internal.v2_0.ddlgen;x-internal:=true, + org.eclipse.jpt.jpa.eclipselink.core.internal.v2_0.resource.java;x-internal:=true, + org.eclipse.jpt.jpa.eclipselink.core.internal.v2_0.resource.java.binary;x-internal:=true, + org.eclipse.jpt.jpa.eclipselink.core.internal.v2_0.resource.java.source;x-internal:=true, org.eclipse.jpt.jpa.eclipselink.core.internal.v2_1;x-internal:=true, org.eclipse.jpt.jpa.eclipselink.core.internal.v2_1.context.orm;x-internal:=true, org.eclipse.jpt.jpa.eclipselink.core.internal.v2_1.resource.java;x-internal:=true, @@ -83,6 +86,7 @@ Export-Package: org.eclipse.jpt.jpa.eclipselink.core, org.eclipse.jpt.jpa.eclipselink.core.internal.v2_2;x-internal:=true, org.eclipse.jpt.jpa.eclipselink.core.internal.v2_2.context.orm;x-internal:=true, org.eclipse.jpt.jpa.eclipselink.core.internal.v2_3;x-internal:=true, + org.eclipse.jpt.jpa.eclipselink.core.internal.v2_3.context.java;x-internal:=true, org.eclipse.jpt.jpa.eclipselink.core.internal.v2_3.context.orm;x-internal:=true, org.eclipse.jpt.jpa.eclipselink.core.internal.v2_3.resource.java;x-internal:=true, org.eclipse.jpt.jpa.eclipselink.core.internal.v2_3.resource.java.binary;x-internal:=true, @@ -103,5 +107,6 @@ Export-Package: org.eclipse.jpt.jpa.eclipselink.core, org.eclipse.jpt.jpa.eclipselink.core.v2_0.context.persistence.logging, org.eclipse.jpt.jpa.eclipselink.core.v2_0.context.persistence.options, org.eclipse.jpt.jpa.eclipselink.core.v2_0.resource.java, + org.eclipse.jpt.jpa.eclipselink.core.v2_1.resource.java, org.eclipse.jpt.jpa.eclipselink.core.v2_3, org.eclipse.jpt.jpa.eclipselink.core.v2_3.resource.java diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/resource/java/binary/BinaryBaseEclipseLinkConvertAnnotation.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/resource/java/binary/BinaryBaseEclipseLinkConvertAnnotation.java new file mode 100644 index 0000000000..1abb8bfd89 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/resource/java/binary/BinaryBaseEclipseLinkConvertAnnotation.java @@ -0,0 +1,72 @@ +/******************************************************************************* + * Copyright (c) 2009, 2011 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.jpa.eclipselink.core.internal.resource.java.binary; + +import org.eclipse.jdt.core.IAnnotation; +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.eclipse.jpt.common.core.internal.resource.java.binary.BinaryAnnotation; +import org.eclipse.jpt.common.core.resource.java.JavaResourceAnnotatedElement; +import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.jpa.eclipselink.core.resource.java.EclipseLinkConvertAnnotation; + +/** + * org.eclipse.persistence.annotations.Convert + * org.eclipse.persistence.annotations.MapKeyConvert + */ +public abstract class BinaryBaseEclipseLinkConvertAnnotation + extends BinaryAnnotation + implements EclipseLinkConvertAnnotation +{ + private String value; + + protected BinaryBaseEclipseLinkConvertAnnotation(JavaResourceAnnotatedElement parent, IAnnotation jdtAnnotation) { + super(parent, jdtAnnotation); + this.value = this.buildValue(); + } + + @Override + public void update() { + super.update(); + this.setValue_(this.buildValue()); + } + + + // ********** ConvertAnnotation implementation ********** + + // ***** value + public String getValue() { + return this.value; + } + + public void setValue(String value) { + throw new UnsupportedOperationException(); + } + + private void setValue_(String value) { + String old = this.value; + this.value = value; + this.firePropertyChanged(VALUE_PROPERTY, old, value); + } + + private String buildValue() { + return (String) this.getJdtMemberValue(this.getValueElementName()); + } + + protected abstract String getValueElementName(); + + public TextRange getValueTextRange(CompilationUnit astRoot) { + throw new UnsupportedOperationException(); + } + + public boolean valueTouches(int pos, CompilationUnit astRoot) { + throw new UnsupportedOperationException(); + } + +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/resource/java/binary/BinaryEclipseLinkConvertAnnotation.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/resource/java/binary/BinaryEclipseLinkConvertAnnotation.java index 447665a3d8..c78feb57ad 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/resource/java/binary/BinaryEclipseLinkConvertAnnotation.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/resource/java/binary/BinaryEclipseLinkConvertAnnotation.java @@ -10,25 +10,18 @@ package org.eclipse.jpt.jpa.eclipselink.core.internal.resource.java.binary; import org.eclipse.jdt.core.IAnnotation; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jpt.common.core.internal.resource.java.binary.BinaryAnnotation; import org.eclipse.jpt.common.core.resource.java.JavaResourceAnnotatedElement; -import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.jpa.eclipselink.core.resource.java.EclipseLink; -import org.eclipse.jpt.jpa.eclipselink.core.resource.java.EclipseLinkConvertAnnotation; /** * org.eclipse.persistence.annotations.Convert */ public final class BinaryEclipseLinkConvertAnnotation - extends BinaryAnnotation - implements EclipseLinkConvertAnnotation + extends BinaryBaseEclipseLinkConvertAnnotation { - private String value; public BinaryEclipseLinkConvertAnnotation(JavaResourceAnnotatedElement parent, IAnnotation jdtAnnotation) { super(parent, jdtAnnotation); - this.value = this.buildValue(); } public String getAnnotationName() { @@ -36,39 +29,7 @@ public final class BinaryEclipseLinkConvertAnnotation } @Override - public void update() { - super.update(); - this.setValue_(this.buildValue()); + protected String getValueElementName() { + return EclipseLink.CONVERT__VALUE; } - - - // ********** ConvertAnnotation implementation ********** - - // ***** value - public String getValue() { - return this.value; - } - - public void setValue(String value) { - throw new UnsupportedOperationException(); - } - - private void setValue_(String value) { - String old = this.value; - this.value = value; - this.firePropertyChanged(VALUE_PROPERTY, old, value); - } - - private String buildValue() { - return (String) this.getJdtMemberValue(EclipseLink.CONVERT__VALUE); - } - - public TextRange getValueTextRange(CompilationUnit astRoot) { - throw new UnsupportedOperationException(); - } - - public boolean valueTouches(int pos, CompilationUnit astRoot) { - throw new UnsupportedOperationException(); - } - } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/resource/java/source/SourceBaseEclipseLinkConvertAnnotation.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/resource/java/source/SourceBaseEclipseLinkConvertAnnotation.java new file mode 100644 index 0000000000..57d1b934f7 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/resource/java/source/SourceBaseEclipseLinkConvertAnnotation.java @@ -0,0 +1,102 @@ +/******************************************************************************* + * Copyright (c) 2008, 2011 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.jpa.eclipselink.core.internal.resource.java.source; + +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.eclipse.jpt.common.core.internal.resource.java.source.SourceAnnotation; +import org.eclipse.jpt.common.core.internal.utility.jdt.AnnotatedElementAnnotationElementAdapter; +import org.eclipse.jpt.common.core.internal.utility.jdt.ConversionDeclarationAnnotationElementAdapter; +import org.eclipse.jpt.common.core.internal.utility.jdt.StringExpressionConverter; +import org.eclipse.jpt.common.core.resource.java.JavaResourceAnnotatedElement; +import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.common.core.utility.jdt.AnnotatedElement; +import org.eclipse.jpt.common.core.utility.jdt.AnnotationElementAdapter; +import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationAdapter; +import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationElementAdapter; +import org.eclipse.jpt.jpa.eclipselink.core.resource.java.EclipseLinkConvertAnnotation; + +/** + * org.eclipse.persistence.annotations.Convert + * org.eclipse.persistence.annotations.MapKeyConvert + */ +public abstract class SourceBaseEclipseLinkConvertAnnotation + extends SourceAnnotation + implements EclipseLinkConvertAnnotation +{ + private final DeclarationAnnotationElementAdapter<String> valueDeclarationAdapter; + private final AnnotationElementAdapter<String> valueAdapter; + private String value; + + + protected SourceBaseEclipseLinkConvertAnnotation(JavaResourceAnnotatedElement parent, AnnotatedElement element, DeclarationAnnotationAdapter daa) { + super(parent, element, daa); + this.valueDeclarationAdapter = this.buildValueDeclarationAdapter(); + this.valueAdapter = new AnnotatedElementAnnotationElementAdapter<String>(element, this.valueDeclarationAdapter); + } + + public void initialize(CompilationUnit astRoot) { + this.value = this.buildValue(astRoot); + } + + public void synchronizeWith(CompilationUnit astRoot) { + this.syncValue(this.buildValue(astRoot)); + } + + @Override + public boolean isUnset() { + return super.isUnset() && + (this.value == null); + } + + @Override + public void toString(StringBuilder sb) { + sb.append(this.value); + } + + + // ********** ConvertAnnotation implementation ********** + + // ***** value + + public String getValue() { + return this.value; + } + + public void setValue(String value) { + if (this.attributeValueHasChanged(this.value, value)) { + this.value = value; + this.valueAdapter.setValue(value); + } + } + + private void syncValue(String astValue) { + String old = this.value; + this.value = astValue; + this.firePropertyChanged(VALUE_PROPERTY, old, astValue); + } + + private String buildValue(CompilationUnit astRoot) { + return this.valueAdapter.getValue(astRoot); + } + + public TextRange getValueTextRange(CompilationUnit astRoot) { + return this.getElementTextRange(this.valueDeclarationAdapter, astRoot); + } + + public boolean valueTouches(int pos, CompilationUnit astRoot) { + return this.elementTouches(this.valueDeclarationAdapter, pos, astRoot); + } + + private DeclarationAnnotationElementAdapter<String> buildValueDeclarationAdapter() { + return new ConversionDeclarationAnnotationElementAdapter<String>(this.daa, this.getValueElementName(), StringExpressionConverter.instance()); + } + + protected abstract String getValueElementName(); +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/resource/java/source/SourceEclipseLinkConvertAnnotation.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/resource/java/source/SourceEclipseLinkConvertAnnotation.java index 878991e3d9..ad16b145d4 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/resource/java/source/SourceEclipseLinkConvertAnnotation.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/resource/java/source/SourceEclipseLinkConvertAnnotation.java @@ -9,18 +9,10 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.eclipselink.core.internal.resource.java.source; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jpt.common.core.internal.resource.java.source.SourceAnnotation; -import org.eclipse.jpt.common.core.internal.utility.jdt.AnnotatedElementAnnotationElementAdapter; -import org.eclipse.jpt.common.core.internal.utility.jdt.ConversionDeclarationAnnotationElementAdapter; import org.eclipse.jpt.common.core.internal.utility.jdt.SimpleDeclarationAnnotationAdapter; -import org.eclipse.jpt.common.core.internal.utility.jdt.StringExpressionConverter; import org.eclipse.jpt.common.core.resource.java.JavaResourceAnnotatedElement; -import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.common.core.utility.jdt.AnnotatedElement; -import org.eclipse.jpt.common.core.utility.jdt.AnnotationElementAdapter; import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationAdapter; -import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationElementAdapter; import org.eclipse.jpt.jpa.eclipselink.core.resource.java.EclipseLink; import org.eclipse.jpt.jpa.eclipselink.core.resource.java.EclipseLinkConvertAnnotation; @@ -28,82 +20,22 @@ import org.eclipse.jpt.jpa.eclipselink.core.resource.java.EclipseLinkConvertAnno * org.eclipse.persistence.annotations.Convert */ public final class SourceEclipseLinkConvertAnnotation - extends SourceAnnotation + extends SourceBaseEclipseLinkConvertAnnotation implements EclipseLinkConvertAnnotation { private static final DeclarationAnnotationAdapter DECLARATION_ANNOTATION_ADAPTER = new SimpleDeclarationAnnotationAdapter(ANNOTATION_NAME); - private static final DeclarationAnnotationElementAdapter<String> VALUE_ADAPTER = buildValueAdapter(); - private final AnnotationElementAdapter<String> valueAdapter; - private String value; - public SourceEclipseLinkConvertAnnotation(JavaResourceAnnotatedElement parent, AnnotatedElement element) { super(parent, element, DECLARATION_ANNOTATION_ADAPTER); - this.valueAdapter = new AnnotatedElementAnnotationElementAdapter<String>(element, VALUE_ADAPTER); } public String getAnnotationName() { return ANNOTATION_NAME; } - public void initialize(CompilationUnit astRoot) { - this.value = this.buildValue(astRoot); - } - - public void synchronizeWith(CompilationUnit astRoot) { - this.syncValue(this.buildValue(astRoot)); - } - - @Override - public boolean isUnset() { - return super.isUnset() && - (this.value == null); - } - @Override - public void toString(StringBuilder sb) { - sb.append(this.value); - } - - - // ********** ConvertAnnotation implementation ********** - - // ***** value - public String getValue() { - return this.value; - } - - public void setValue(String value) { - if (this.attributeValueHasChanged(this.value, value)) { - this.value = value; - this.valueAdapter.setValue(value); - } + protected String getValueElementName() { + return EclipseLink.CONVERT__VALUE; } - - private void syncValue(String astValue) { - String old = this.value; - this.value = astValue; - this.firePropertyChanged(VALUE_PROPERTY, old, astValue); - } - - private String buildValue(CompilationUnit astRoot) { - return this.valueAdapter.getValue(astRoot); - } - - public TextRange getValueTextRange(CompilationUnit astRoot) { - return this.getElementTextRange(VALUE_ADAPTER, astRoot); - } - - public boolean valueTouches(int pos, CompilationUnit astRoot) { - return this.elementTouches(VALUE_ADAPTER, pos, astRoot); - } - - - // ********** static methods ********** - - private static DeclarationAnnotationElementAdapter<String> buildValueAdapter() { - return new ConversionDeclarationAnnotationElementAdapter<String>(DECLARATION_ANNOTATION_ADAPTER, EclipseLink.CONVERT__VALUE, StringExpressionConverter.instance()); - } - } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_0/EclipseLink2_0JpaAnnotationDefinitionProvider.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_0/EclipseLink2_0JpaAnnotationDefinitionProvider.java new file mode 100644 index 0000000000..fec4838668 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_0/EclipseLink2_0JpaAnnotationDefinitionProvider.java @@ -0,0 +1,96 @@ +/******************************************************************************* + * Copyright (c) 2011 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.jpa.eclipselink.core.internal.v2_0; + +import java.util.ArrayList; +import org.eclipse.jpt.common.core.resource.java.AnnotationDefinition; +import org.eclipse.jpt.common.core.resource.java.NestableAnnotationDefinition; +import org.eclipse.jpt.common.utility.internal.CollectionTools; +import org.eclipse.jpt.jpa.core.JpaAnnotationDefinitionProvider; +import org.eclipse.jpt.jpa.core.internal.AbstractJpaAnnotationDefinitionProvider; +import org.eclipse.jpt.jpa.eclipselink.core.internal.resource.java.EclipseLinkBasicCollectionAnnotationDefinition; +import org.eclipse.jpt.jpa.eclipselink.core.internal.resource.java.EclipseLinkBasicMapAnnotationDefinition; +import org.eclipse.jpt.jpa.eclipselink.core.internal.resource.java.EclipseLinkCacheAnnotationDefinition; +import org.eclipse.jpt.jpa.eclipselink.core.internal.resource.java.EclipseLinkChangeTrackingAnnotationDefinition; +import org.eclipse.jpt.jpa.eclipselink.core.internal.resource.java.EclipseLinkConvertAnnotationDefinition; +import org.eclipse.jpt.jpa.eclipselink.core.internal.resource.java.EclipseLinkConverterAnnotationDefinition; +import org.eclipse.jpt.jpa.eclipselink.core.internal.resource.java.EclipseLinkCustomizerAnnotationDefinition; +import org.eclipse.jpt.jpa.eclipselink.core.internal.resource.java.EclipseLinkExistenceCheckingAnnotationDefinition; +import org.eclipse.jpt.jpa.eclipselink.core.internal.resource.java.EclipseLinkJoinFetchAnnotationDefinition; +import org.eclipse.jpt.jpa.eclipselink.core.internal.resource.java.EclipseLinkMutableAnnotationDefinition; +import org.eclipse.jpt.jpa.eclipselink.core.internal.resource.java.EclipseLinkObjectTypeConverterAnnotationDefinition; +import org.eclipse.jpt.jpa.eclipselink.core.internal.resource.java.EclipseLinkPrimaryKeyAnnotationDefinition; +import org.eclipse.jpt.jpa.eclipselink.core.internal.resource.java.EclipseLinkPrivateOwnedAnnotationDefinition; +import org.eclipse.jpt.jpa.eclipselink.core.internal.resource.java.EclipseLinkReadOnlyAnnotationDefinition; +import org.eclipse.jpt.jpa.eclipselink.core.internal.resource.java.EclipseLinkReadTransformerAnnotationDefinition; +import org.eclipse.jpt.jpa.eclipselink.core.internal.resource.java.EclipseLinkStructConverterAnnotationDefinition; +import org.eclipse.jpt.jpa.eclipselink.core.internal.resource.java.EclipseLinkTransformationAnnotationDefinition; +import org.eclipse.jpt.jpa.eclipselink.core.internal.resource.java.EclipseLinkTypeConverterAnnotationDefinition; +import org.eclipse.jpt.jpa.eclipselink.core.internal.resource.java.EclipseLinkVariableOneToOneAnnotationDefinition; +import org.eclipse.jpt.jpa.eclipselink.core.internal.resource.java.EclipseLinkWriteTransformerAnnotationDefinition; +import org.eclipse.jpt.jpa.eclipselink.core.internal.v2_0.resource.java.EclipseLinkMapKeyConvert2_0AnnotationDefinition; + +/** + * Provides annotations for 2.0 EclipseLink platform + */ +public class EclipseLink2_0JpaAnnotationDefinitionProvider + extends AbstractJpaAnnotationDefinitionProvider +{ + // singleton + private static final JpaAnnotationDefinitionProvider INSTANCE = new EclipseLink2_0JpaAnnotationDefinitionProvider(); + + /** + * Return the singleton + */ + public static JpaAnnotationDefinitionProvider instance() { + return INSTANCE; + } + + /** + * Enforce singleton usage + */ + private EclipseLink2_0JpaAnnotationDefinitionProvider() { + super(); + } + + @Override + protected void addAnnotationDefinitionsTo(ArrayList<AnnotationDefinition> definitions) { + CollectionTools.addAll(definitions, ANNOTATION_DEFINITIONS); + } + + protected static final AnnotationDefinition[] ANNOTATION_DEFINITIONS = new AnnotationDefinition[] { + EclipseLinkBasicCollectionAnnotationDefinition.instance(), + EclipseLinkBasicMapAnnotationDefinition.instance(), + EclipseLinkCacheAnnotationDefinition.instance(), + EclipseLinkChangeTrackingAnnotationDefinition.instance(), + EclipseLinkConvertAnnotationDefinition.instance(), + EclipseLinkConverterAnnotationDefinition.instance(), + EclipseLinkCustomizerAnnotationDefinition.instance(), + EclipseLinkExistenceCheckingAnnotationDefinition.instance(), + EclipseLinkJoinFetchAnnotationDefinition.instance(), + EclipseLinkMapKeyConvert2_0AnnotationDefinition.instance(), + EclipseLinkMutableAnnotationDefinition.instance(), + EclipseLinkObjectTypeConverterAnnotationDefinition.instance(), + EclipseLinkPrimaryKeyAnnotationDefinition.instance(), + EclipseLinkPrivateOwnedAnnotationDefinition.instance(), + EclipseLinkReadOnlyAnnotationDefinition.instance(), + EclipseLinkReadTransformerAnnotationDefinition.instance(), + EclipseLinkStructConverterAnnotationDefinition.instance(), + EclipseLinkTransformationAnnotationDefinition.instance(), + EclipseLinkTypeConverterAnnotationDefinition.instance(), + EclipseLinkVariableOneToOneAnnotationDefinition.instance(), + EclipseLinkWriteTransformerAnnotationDefinition.instance() + }; + + @Override + protected void addNestableAnnotationDefinitionsTo(ArrayList<NestableAnnotationDefinition> definitions) { + // nothing new for EclipseLink 2.0 + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_0/EclipseLink2_0JpaPlatformFactory.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_0/EclipseLink2_0JpaPlatformFactory.java index 36b0e4626c..021e0c7e4f 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_0/EclipseLink2_0JpaPlatformFactory.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_0/EclipseLink2_0JpaPlatformFactory.java @@ -18,7 +18,6 @@ import org.eclipse.jpt.jpa.core.internal.JpaAnnotationProvider; import org.eclipse.jpt.jpa.core.internal.GenericJpaPlatform; import org.eclipse.jpt.jpa.core.internal.jpa2.Generic2_0JpaAnnotationDefinitionProvider; import org.eclipse.jpt.jpa.eclipselink.core.JptJpaEclipseLinkCorePlugin; -import org.eclipse.jpt.jpa.eclipselink.core.internal.EclipseLinkJpaAnnotationDefinitionProvider; import org.eclipse.jpt.jpa.eclipselink.core.internal.EclipseLinkJpaPlatformFactory.EclipseLinkVersion; /** @@ -54,7 +53,7 @@ public class EclipseLink2_0JpaPlatformFactory protected AnnotationProvider buildAnnotationProvider() { return new JpaAnnotationProvider( Generic2_0JpaAnnotationDefinitionProvider.instance(), - EclipseLinkJpaAnnotationDefinitionProvider.instance()); + EclipseLink2_0JpaAnnotationDefinitionProvider.instance()); } protected JpaPlatformVariation buildJpaVariation() { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_0/resource/java/EclipseLinkMapKeyConvert2_0AnnotationDefinition.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_0/resource/java/EclipseLinkMapKeyConvert2_0AnnotationDefinition.java new file mode 100644 index 0000000000..ac28ef8cc8 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_0/resource/java/EclipseLinkMapKeyConvert2_0AnnotationDefinition.java @@ -0,0 +1,59 @@ +/******************************************************************************* + * Copyright (c) 2011 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.jpa.eclipselink.core.internal.v2_0.resource.java; + +import org.eclipse.jdt.core.IAnnotation; +import org.eclipse.jpt.common.core.resource.java.Annotation; +import org.eclipse.jpt.common.core.resource.java.AnnotationDefinition; +import org.eclipse.jpt.common.core.resource.java.JavaResourceAnnotatedElement; +import org.eclipse.jpt.common.core.utility.jdt.AnnotatedElement; +import org.eclipse.jpt.jpa.eclipselink.core.internal.v2_0.resource.java.binary.BinaryEclipseLinkMapKeyConvertAnnotation2_0; +import org.eclipse.jpt.jpa.eclipselink.core.internal.v2_0.resource.java.source.SourceEclipseLinkMapKeyConvertAnnotation2_0; +import org.eclipse.jpt.jpa.eclipselink.core.v2_0.resource.java.EclipseLinkMapKeyConvertAnnotation2_0; + +/** + * org.eclipse.persistence.annotations.MapKeyConvert + */ +public class EclipseLinkMapKeyConvert2_0AnnotationDefinition + implements AnnotationDefinition +{ + // singleton + private static final AnnotationDefinition INSTANCE = new EclipseLinkMapKeyConvert2_0AnnotationDefinition(); + + /** + * Return the singleton. + */ + public static AnnotationDefinition instance() { + return INSTANCE; + } + + /** + * Ensure single instance. + */ + private EclipseLinkMapKeyConvert2_0AnnotationDefinition() { + super(); + } + + public Annotation buildAnnotation(JavaResourceAnnotatedElement parent, AnnotatedElement annotatedElement) { + return new SourceEclipseLinkMapKeyConvertAnnotation2_0(parent, annotatedElement); + } + + public Annotation buildNullAnnotation(JavaResourceAnnotatedElement parent) { + throw new UnsupportedOperationException(); + } + + public Annotation buildAnnotation(JavaResourceAnnotatedElement parent, IAnnotation jdtAnnotation) { + return new BinaryEclipseLinkMapKeyConvertAnnotation2_0(parent, jdtAnnotation); + } + + public String getAnnotationName() { + return EclipseLinkMapKeyConvertAnnotation2_0.ANNOTATION_NAME; + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_0/resource/java/binary/BinaryEclipseLinkMapKeyConvertAnnotation2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_0/resource/java/binary/BinaryEclipseLinkMapKeyConvertAnnotation2_0.java new file mode 100644 index 0000000000..7c4d4d6d65 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_0/resource/java/binary/BinaryEclipseLinkMapKeyConvertAnnotation2_0.java @@ -0,0 +1,38 @@ +/******************************************************************************* + * Copyright (c) 2011 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.jpa.eclipselink.core.internal.v2_0.resource.java.binary; + +import org.eclipse.jdt.core.IAnnotation; +import org.eclipse.jpt.common.core.resource.java.JavaResourceAnnotatedElement; +import org.eclipse.jpt.jpa.eclipselink.core.internal.resource.java.binary.BinaryBaseEclipseLinkConvertAnnotation; +import org.eclipse.jpt.jpa.eclipselink.core.v2_0.resource.java.EclipseLink2_0; +import org.eclipse.jpt.jpa.eclipselink.core.v2_0.resource.java.EclipseLinkMapKeyConvertAnnotation2_0; + +/** + * org.eclipse.persistence.annotations.MapKeyConvert + */ +public final class BinaryEclipseLinkMapKeyConvertAnnotation2_0 + extends BinaryBaseEclipseLinkConvertAnnotation + implements EclipseLinkMapKeyConvertAnnotation2_0 +{ + + public BinaryEclipseLinkMapKeyConvertAnnotation2_0(JavaResourceAnnotatedElement parent, IAnnotation jdtAnnotation) { + super(parent, jdtAnnotation); + } + + public String getAnnotationName() { + return EclipseLinkMapKeyConvertAnnotation2_0.ANNOTATION_NAME; + } + + @Override + protected String getValueElementName() { + return EclipseLink2_0.MAP_KEY_CONVERT__VALUE; + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_0/resource/java/source/SourceEclipseLinkMapKeyConvertAnnotation2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_0/resource/java/source/SourceEclipseLinkMapKeyConvertAnnotation2_0.java new file mode 100644 index 0000000000..bee7f0b9cb --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_0/resource/java/source/SourceEclipseLinkMapKeyConvertAnnotation2_0.java @@ -0,0 +1,43 @@ +/******************************************************************************* + * Copyright (c) 2011 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.jpa.eclipselink.core.internal.v2_0.resource.java.source; + +import org.eclipse.jpt.common.core.internal.utility.jdt.SimpleDeclarationAnnotationAdapter; +import org.eclipse.jpt.common.core.resource.java.JavaResourceAnnotatedElement; +import org.eclipse.jpt.common.core.utility.jdt.AnnotatedElement; +import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationAdapter; +import org.eclipse.jpt.jpa.eclipselink.core.internal.resource.java.source.SourceBaseEclipseLinkConvertAnnotation; +import org.eclipse.jpt.jpa.eclipselink.core.v2_0.resource.java.EclipseLink2_0; +import org.eclipse.jpt.jpa.eclipselink.core.v2_0.resource.java.EclipseLinkMapKeyConvertAnnotation2_0; + +/** + * org.eclipse.persistence.annotations.MapKeyConvert + */ +public final class SourceEclipseLinkMapKeyConvertAnnotation2_0 + extends SourceBaseEclipseLinkConvertAnnotation + implements EclipseLinkMapKeyConvertAnnotation2_0 +{ + private static final DeclarationAnnotationAdapter DECLARATION_ANNOTATION_ADAPTER = new SimpleDeclarationAnnotationAdapter(EclipseLinkMapKeyConvertAnnotation2_0.ANNOTATION_NAME); + + + public SourceEclipseLinkMapKeyConvertAnnotation2_0(JavaResourceAnnotatedElement parent, AnnotatedElement element) { + super(parent, element, DECLARATION_ANNOTATION_ADAPTER); + } + + public String getAnnotationName() { + return EclipseLinkMapKeyConvertAnnotation2_0.ANNOTATION_NAME; + } + + @Override + protected String getValueElementName() { + return EclipseLink2_0.MAP_KEY_CONVERT__VALUE; + } + +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/v2_0/resource/java/EclipseLink2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/v2_0/resource/java/EclipseLink2_0.java new file mode 100644 index 0000000000..76e47ecc81 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/v2_0/resource/java/EclipseLink2_0.java @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright (c) 2011 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.jpa.eclipselink.core.v2_0.resource.java; + +/** + * EclipseLink Java-related stuff (annotations etc.) + * + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + * + * @version 3.1 + * @since 3.1 + */ +@SuppressWarnings("nls") +public interface EclipseLink2_0 { + + // EclipseLink package + String PACKAGE = "org.eclipse.persistence.annotations"; //$NON-NLS-1$ + String PACKAGE_ = PACKAGE + "."; + + + // ********** API ********** + + // EclispeLink 2.0 annotations + String MAP_KEY_CONVERT = PACKAGE_ + "MapKeyConvert"; + String MAP_KEY_CONVERT__VALUE = "value"; +} diff --git a/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/META-INF/MANIFEST.MF b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/META-INF/MANIFEST.MF index 4ca6e6cbae..1c222cc02c 100644 --- a/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/META-INF/MANIFEST.MF +++ b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/META-INF/MANIFEST.MF @@ -44,4 +44,5 @@ Export-Package: org.eclipse.jpt.jpa.eclipselink.core.tests.internal;x-internal:= org.eclipse.jpt.jpa.eclipselink.core.tests.internal.v2_0.context.java;x-internal:=true, org.eclipse.jpt.jpa.eclipselink.core.tests.internal.v2_0.context.orm;x-internal:=true, org.eclipse.jpt.jpa.eclipselink.core.tests.internal.v2_0.context.persistence;x-internal:=true, + org.eclipse.jpt.jpa.eclipselink.core.tests.internal.v2_0.resource.java;x-internal:=true, org.eclipse.jpt.jpa.eclipselink.core.tests.internal.v2_3.resource.java;x-internal:=true diff --git a/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/resource/JptJpaEclipselinkCoreResourceModelTests.java b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/resource/JptJpaEclipselinkCoreResourceModelTests.java index 1b088b426b..66e78d0830 100644 --- a/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/resource/JptJpaEclipselinkCoreResourceModelTests.java +++ b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/resource/JptJpaEclipselinkCoreResourceModelTests.java @@ -15,6 +15,8 @@ import junit.framework.TestCase; import junit.framework.TestSuite; import org.eclipse.jpt.jpa.eclipselink.core.tests.internal.JptJpaEclipseLinkCoreTests; import org.eclipse.jpt.jpa.eclipselink.core.tests.internal.resource.java.JptEclipseLinkCoreJavaResourceModelTests; +import org.eclipse.jpt.jpa.eclipselink.core.tests.internal.v2_0.resource.java.JptEclipseLink2_0CoreJavaResourceModelTests; +import org.eclipse.jpt.jpa.eclipselink.core.tests.internal.v2_3.resource.java.JptEclipseLink2_3CoreJavaResourceModelTests; /** * Required Java system property: @@ -27,7 +29,8 @@ public class JptJpaEclipselinkCoreResourceModelTests extends TestCase TestSuite suite = new TestSuite(JptJpaEclipselinkCoreResourceModelTests.class.getName()); if(JptJpaEclipseLinkCoreTests.requiredJarsExists()) { suite.addTest(JptEclipseLinkCoreJavaResourceModelTests.suite()); -// suite.addTest(JptEclipseLink2_3CoreJavaResourceModelTests.suite()); + suite.addTest(JptEclipseLink2_0CoreJavaResourceModelTests.suite()); + suite.addTest(JptEclipseLink2_3CoreJavaResourceModelTests.suite()); } else { suite.addTest(TestSuite.warning(JptJpaEclipseLinkCoreTests.buildMissingJarErrorMessage())); diff --git a/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_0/resource/java/EclipseLink2_0JavaResourceModelTestCase.java b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_0/resource/java/EclipseLink2_0JavaResourceModelTestCase.java new file mode 100644 index 0000000000..826e6b7bf0 --- /dev/null +++ b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_0/resource/java/EclipseLink2_0JavaResourceModelTestCase.java @@ -0,0 +1,34 @@ +/******************************************************************************* + * Copyright (c) 2011 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.jpa.eclipselink.core.tests.internal.v2_0.resource.java; + +import org.eclipse.jpt.common.core.AnnotationProvider; +import org.eclipse.jpt.jpa.core.internal.GenericJpaAnnotationDefinitionProvider; +import org.eclipse.jpt.jpa.core.internal.JpaAnnotationProvider; +import org.eclipse.jpt.jpa.core.tests.internal.resource.java.JpaJavaResourceModelTestCase; +import org.eclipse.jpt.jpa.eclipselink.core.internal.v2_0.EclipseLink2_0JpaAnnotationDefinitionProvider; + +public class EclipseLink2_0JavaResourceModelTestCase extends JpaJavaResourceModelTestCase +{ + + public static final String ECLIPSELINK_ANNOTATIONS_PACKAGE_NAME = "org.eclipse.persistence.annotations"; //$NON-NLS-1$ + + public EclipseLink2_0JavaResourceModelTestCase(String name) { + super(name); + } + + @Override + protected AnnotationProvider buildAnnotationProvider() { + return new JpaAnnotationProvider( + GenericJpaAnnotationDefinitionProvider.instance(), + EclipseLink2_0JpaAnnotationDefinitionProvider.instance()); + } + +} diff --git a/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_0/resource/java/JptEclipseLink2_0CoreJavaResourceModelTests.java b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_0/resource/java/JptEclipseLink2_0CoreJavaResourceModelTests.java new file mode 100644 index 0000000000..960128bc33 --- /dev/null +++ b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_0/resource/java/JptEclipseLink2_0CoreJavaResourceModelTests.java @@ -0,0 +1,29 @@ +/******************************************************************************* + * 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. + * + * Contributors: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.eclipselink.core.tests.internal.v2_0.resource.java; + +import junit.framework.Test; +import junit.framework.TestSuite; + +public class JptEclipseLink2_0CoreJavaResourceModelTests { + + public static Test suite() { + TestSuite suite = new TestSuite(JptEclipseLink2_0CoreJavaResourceModelTests.class.getName()); + suite.addTestSuite(MapKeyConvertAnnotationTests.class); + + return suite; + } + + private JptEclipseLink2_0CoreJavaResourceModelTests() { + super(); + throw new UnsupportedOperationException(); + } + +} diff --git a/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_0/resource/java/MapKeyConvertAnnotationTests.java b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_0/resource/java/MapKeyConvertAnnotationTests.java new file mode 100644 index 0000000000..555cde0a9b --- /dev/null +++ b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_0/resource/java/MapKeyConvertAnnotationTests.java @@ -0,0 +1,106 @@ +/******************************************************************************* + * Copyright (c) 2011 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.jpa.eclipselink.core.tests.internal.v2_0.resource.java; + +import java.util.Iterator; +import org.eclipse.jdt.core.ICompilationUnit; +import org.eclipse.jpt.common.core.resource.java.JavaResourceField; +import org.eclipse.jpt.common.core.resource.java.JavaResourceType; +import org.eclipse.jpt.common.utility.internal.CollectionTools; +import org.eclipse.jpt.common.utility.internal.iterators.ArrayIterator; +import org.eclipse.jpt.jpa.eclipselink.core.v2_0.resource.java.EclipseLink2_0; +import org.eclipse.jpt.jpa.eclipselink.core.v2_0.resource.java.EclipseLinkMapKeyConvertAnnotation2_0; + +@SuppressWarnings("nls") +public class MapKeyConvertAnnotationTests extends EclipseLink2_0JavaResourceModelTestCase { + + public MapKeyConvertAnnotationTests(String name) { + super(name); + } + + private ICompilationUnit createTestMapKeyConvert() throws Exception { + return this.createTestType(new DefaultAnnotationWriter() { + @Override + public Iterator<String> imports() { + return new ArrayIterator<String>(EclipseLink2_0.MAP_KEY_CONVERT); + } + @Override + public void appendIdFieldAnnotationTo(StringBuilder sb) { + sb.append("@MapKeyConvert"); + } + }); + } + + private ICompilationUnit createTestConverterWithValue() throws Exception { + return this.createTestType(new DefaultAnnotationWriter() { + @Override + public Iterator<String> imports() { + return new ArrayIterator<String>(EclipseLink2_0.MAP_KEY_CONVERT); + } + @Override + public void appendIdFieldAnnotationTo(StringBuilder sb) { + sb.append("@MapKeyConvert(value=\"myConverter\")"); + } + }); + } + + public void testMapKeyConvertAnnotation() throws Exception { + ICompilationUnit cu = this.createTestMapKeyConvert(); + JavaResourceType resourceType = buildJavaResourceType(cu); + JavaResourceField resourceField = CollectionTools.get(resourceType.getFields(), 0); + + assertNotNull(resourceField.getAnnotation(EclipseLink2_0.MAP_KEY_CONVERT)); + + resourceField.removeAnnotation(EclipseLink2_0.MAP_KEY_CONVERT); + assertNull(resourceField.getAnnotation(EclipseLink2_0.MAP_KEY_CONVERT)); + + resourceField.addAnnotation(EclipseLink2_0.MAP_KEY_CONVERT); + assertNotNull(resourceField.getAnnotation(EclipseLink2_0.MAP_KEY_CONVERT)); + } + + public void testGetValue() throws Exception { + ICompilationUnit cu = this.createTestConverterWithValue(); + JavaResourceType resourceType = buildJavaResourceType(cu); + JavaResourceField resourceField = CollectionTools.get(resourceType.getFields(), 0); + + EclipseLinkMapKeyConvertAnnotation2_0 convert = (EclipseLinkMapKeyConvertAnnotation2_0) resourceField.getAnnotation(EclipseLink2_0.MAP_KEY_CONVERT); + assertEquals("myConverter", convert.getValue()); + } + + public void testSetValue() throws Exception { + ICompilationUnit cu = this.createTestConverterWithValue(); + JavaResourceType resourceType = buildJavaResourceType(cu); + JavaResourceField resourceField = CollectionTools.get(resourceType.getFields(), 0); + + EclipseLinkMapKeyConvertAnnotation2_0 convert = (EclipseLinkMapKeyConvertAnnotation2_0) resourceField.getAnnotation(EclipseLink2_0.MAP_KEY_CONVERT); + assertEquals("myConverter", convert.getValue()); + + convert.setValue("Bar"); + assertEquals("Bar", convert.getValue()); + + assertSourceContains("@MapKeyConvert(value=\"Bar\")", cu); + } + + public void testSetValueNull() throws Exception { + ICompilationUnit cu = this.createTestConverterWithValue(); + JavaResourceType resourceType = buildJavaResourceType(cu); + JavaResourceField resourceField = CollectionTools.get(resourceType.getFields(), 0); + + EclipseLinkMapKeyConvertAnnotation2_0 convert = (EclipseLinkMapKeyConvertAnnotation2_0) resourceField.getAnnotation(EclipseLink2_0.MAP_KEY_CONVERT); + assertEquals("myConverter", convert.getValue()); + + convert.setValue(null); + assertNull(convert.getValue()); + + assertSourceContains("@MapKeyConvert", cu); + assertSourceDoesNotContain("value", cu); + } + +} |