diff options
author | kmoore | 2011-09-02 21:01:29 +0000 |
---|---|---|
committer | kmoore | 2011-09-02 21:01:29 +0000 |
commit | 27a2da79ca464936e0ea474ba0cbf958bc8589a9 (patch) | |
tree | 7cd24f6946906b499e9eab14c2ef5c66b2445e21 | |
parent | e747829bc1eca1ca10ce9ede2cdf59d1acc59b79 (diff) | |
download | webtools.dali-27a2da79ca464936e0ea474ba0cbf958bc8589a9.tar.gz webtools.dali-27a2da79ca464936e0ea474ba0cbf958bc8589a9.tar.xz webtools.dali-27a2da79ca464936e0ea474ba0cbf958bc8589a9.zip |
updated java multitenant resource model to support include-criteria for eclipselink 2.4
6 files changed, 181 insertions, 4 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_3/resource/java/binary/BinaryEclipseLinkMultitenantAnnotation.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_3/resource/java/binary/BinaryEclipseLinkMultitenantAnnotation.java index 3730953a1f..609d7fbaff 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_3/resource/java/binary/BinaryEclipseLinkMultitenantAnnotation.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_3/resource/java/binary/BinaryEclipseLinkMultitenantAnnotation.java @@ -18,6 +18,7 @@ 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.v2_3.resource.java.EclipseLinkMultitenantAnnotation; import org.eclipse.jpt.jpa.eclipselink.core.v2_3.resource.java.MultitenantType; +import org.eclipse.jpt.jpa.eclipselink.core.v2_4.resource.java.EclipseLink2_4; /** * org.eclipse.persistence.annotations.Multitenant @@ -27,11 +28,13 @@ public class BinaryEclipseLinkMultitenantAnnotation implements EclipseLinkMultitenantAnnotation { private MultitenantType value; + private Boolean includeCriteria; public BinaryEclipseLinkMultitenantAnnotation(JavaResourceAnnotatedElement parent, IAnnotation jdtAnnotation) { super(parent, jdtAnnotation); this.value = this.buildValue(); + this.includeCriteria = this.buildIncludeCriteria(); } public String getAnnotationName() { @@ -42,6 +45,7 @@ public class BinaryEclipseLinkMultitenantAnnotation public void update() { super.update(); this.setValue_(this.buildValue()); + this.setIncludeCriteria_(this.buildIncludeCriteria()); } @@ -70,4 +74,27 @@ public class BinaryEclipseLinkMultitenantAnnotation throw new UnsupportedOperationException(); } + // ***** include criteria + public Boolean getIncludeCriteria() { + return this.includeCriteria; + } + + public void setIncludeCriteria(Boolean includeCriteria) { + throw new UnsupportedOperationException(); + } + + private void setIncludeCriteria_(Boolean includeCriteria) { + Boolean old = this.includeCriteria; + this.includeCriteria = includeCriteria; + this.firePropertyChanged(INCLUDE_CRITERIA_PROPERTY, old, includeCriteria); + } + + private Boolean buildIncludeCriteria() { + return (Boolean) this.getJdtMemberValue(EclipseLink2_4.MULTITENANT__INCLUDE_CRITERIA); + } + + public TextRange getIncludeCriteriaTextRange(CompilationUnit astRoot) { + throw new UnsupportedOperationException(); + } + } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_3/resource/java/source/SourceEclipseLinkMultitenantAnnotation.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_3/resource/java/source/SourceEclipseLinkMultitenantAnnotation.java index 2f0751284f..55273b34c3 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_3/resource/java/source/SourceEclipseLinkMultitenantAnnotation.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_3/resource/java/source/SourceEclipseLinkMultitenantAnnotation.java @@ -13,6 +13,8 @@ package org.eclipse.jpt.jpa.eclipselink.core.internal.v2_3.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.BooleanExpressionConverter; +import org.eclipse.jpt.common.core.internal.utility.jdt.ConversionDeclarationAnnotationElementAdapter; import org.eclipse.jpt.common.core.internal.utility.jdt.EnumDeclarationAnnotationElementAdapter; import org.eclipse.jpt.common.core.internal.utility.jdt.SimpleDeclarationAnnotationAdapter; import org.eclipse.jpt.common.core.resource.java.JavaResourceAnnotatedElement; @@ -21,9 +23,10 @@ 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.v2_3.resource.java.EclipseLink2_3; import org.eclipse.jpt.jpa.eclipselink.core.v2_3.resource.java.EclipseLinkMultitenantAnnotation; import org.eclipse.jpt.jpa.eclipselink.core.v2_3.resource.java.MultitenantType; +import org.eclipse.jpt.jpa.eclipselink.core.v2_4.resource.java.EclipseLink2_4; /** * org.eclipse.persistence.annotations.Multitenant @@ -39,9 +42,14 @@ public class SourceEclipseLinkMultitenantAnnotation private final AnnotationElementAdapter<String> valueAdapter; private MultitenantType value; + private static final DeclarationAnnotationElementAdapter<Boolean> INCLUDE_CRITERIA_ADAPTER = buildIncludeCriteriaAdapter(); + private final AnnotationElementAdapter<Boolean> includeCriteriaAdapter; + private Boolean includeCriteria; + public SourceEclipseLinkMultitenantAnnotation(JavaResourceAnnotatedElement parent, AnnotatedElement element) { super(parent, element, DECLARATION_ANNOTATION_ADAPTER); this.valueAdapter = new AnnotatedElementAnnotationElementAdapter<String>(element, VALUE_ADAPTER); + this.includeCriteriaAdapter = new AnnotatedElementAnnotationElementAdapter<Boolean>(element, INCLUDE_CRITERIA_ADAPTER); } @@ -51,16 +59,19 @@ public class SourceEclipseLinkMultitenantAnnotation public void initialize(CompilationUnit astRoot) { this.value = this.buildValue(astRoot); + this.includeCriteria = this.buildIncludeCriteria(astRoot); } public void synchronizeWith(CompilationUnit astRoot) { this.syncValue(this.buildValue(astRoot)); + this.syncIncludeCriteria(this.buildIncludeCriteria(astRoot)); } @Override public boolean isUnset() { return super.isUnset() && - (this.value == null); + (this.value == null) && + (this.includeCriteria == null); } @Override @@ -96,11 +107,41 @@ public class SourceEclipseLinkMultitenantAnnotation return this.getElementTextRange(VALUE_ADAPTER, astRoot); } + // ***** include criteria + public Boolean getIncludeCriteria() { + return this.includeCriteria; + } + + public void setIncludeCriteria(Boolean includeCriteria) { + if (this.attributeValueHasChanged(this.includeCriteria, includeCriteria)) { + this.includeCriteria = includeCriteria; + this.includeCriteriaAdapter.setValue(includeCriteria); + } + } + + private void syncIncludeCriteria(Boolean astIncludeCriteria) { + Boolean old = this.includeCriteria; + this.includeCriteria = astIncludeCriteria; + this.firePropertyChanged(INCLUDE_CRITERIA_PROPERTY, old, astIncludeCriteria); + } + + private Boolean buildIncludeCriteria(CompilationUnit astRoot) { + return this.includeCriteriaAdapter.getValue(astRoot); + } + + public TextRange getIncludeCriteriaTextRange(CompilationUnit astRoot) { + return this.getElementTextRange(INCLUDE_CRITERIA_ADAPTER, astRoot); + } + // ********** static methods ********** private static DeclarationAnnotationElementAdapter<String> buildValueAdapter() { - return new EnumDeclarationAnnotationElementAdapter(DECLARATION_ANNOTATION_ADAPTER, EclipseLink.JOIN_FETCH__VALUE); + return new EnumDeclarationAnnotationElementAdapter(DECLARATION_ANNOTATION_ADAPTER, EclipseLink2_3.MULTITENANT__VALUE); + } + + private static DeclarationAnnotationElementAdapter<Boolean> buildIncludeCriteriaAdapter() { + return new ConversionDeclarationAnnotationElementAdapter<Boolean>(DECLARATION_ANNOTATION_ADAPTER, EclipseLink2_4.MULTITENANT__INCLUDE_CRITERIA, BooleanExpressionConverter.instance()); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/v2_3/resource/java/EclipseLink2_3.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/v2_3/resource/java/EclipseLink2_3.java index 0775da406f..bb9ca9332f 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/v2_3/resource/java/EclipseLink2_3.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/v2_3/resource/java/EclipseLink2_3.java @@ -33,7 +33,7 @@ public interface EclipseLink2_3 { // EclispeLink 2.3 annotations String MULTITENANT = PACKAGE_ + "Multitenant"; - String CLASS_EXTRACTOR__VALUE = "value"; + String MULTITENANT__VALUE = "value"; String MULTITENANT_TYPE = PACKAGE_ + "MultitenantType"; String MULTITENANT_TYPE_ = MULTITENANT_TYPE + "."; diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/v2_3/resource/java/EclipseLinkMultitenantAnnotation.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/v2_3/resource/java/EclipseLinkMultitenantAnnotation.java index dd12ffcdef..dd8fc04180 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/v2_3/resource/java/EclipseLinkMultitenantAnnotation.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/v2_3/resource/java/EclipseLinkMultitenantAnnotation.java @@ -51,4 +51,26 @@ public interface EclipseLinkMultitenantAnnotation */ TextRange getValueTextRange(CompilationUnit astRoot); + + //********* include criteria added in EclipseLink 2.4 ********** + /** + * Corresponds to the 'includeCriteria' element of the Multitenant annotation. + * Return null if the element does not exist in Java. + */ + Boolean getIncludeCriteria(); + String INCLUDE_CRITERIA_PROPERTY = "includeCriteria"; //$NON-NLS-1$ + + /** + * Corresponds to the 'includeCriteria' element of the Multitenant annotation. + * Set to null to remove the element. + */ + void setIncludeCriteria(Boolean includeCriteria); + + /** + * Return the {@link TextRange} for the 'includeCriteria' element. + * If the element does not exist return the {@link TextRange} + * for the Multitenant annotation. + */ + TextRange getIncludeCriteriaTextRange(CompilationUnit astRoot); + } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/v2_4/resource/java/EclipseLink2_4.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/v2_4/resource/java/EclipseLink2_4.java new file mode 100644 index 0000000000..cd6bc80b2b --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/v2_4/resource/java/EclipseLink2_4.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_4.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_4 { + + // EclipseLink package + String PACKAGE = "org.eclipse.persistence.annotations"; //$NON-NLS-1$ + String PACKAGE_ = PACKAGE + "."; + + + // ********** API ********** + + // EclispeLink 2.4 annotations + String MULTITENANT__INCLUDE_CRITERIA = "includeCriteria"; + +} diff --git a/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_3/resource/java/EclipselinkMultitenantAnnotationTests.java b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_3/resource/java/EclipselinkMultitenantAnnotationTests.java index a67b1cd97b..ec6746d61f 100644 --- a/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_3/resource/java/EclipselinkMultitenantAnnotationTests.java +++ b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_3/resource/java/EclipselinkMultitenantAnnotationTests.java @@ -50,6 +50,19 @@ public class EclipselinkMultitenantAnnotationTests extends EclipseLink2_3JavaRes }); } + private ICompilationUnit createTestCacheWithIncludeCriteria() throws Exception { + return this.createTestType(new DefaultAnnotationWriter() { + @Override + public Iterator<String> imports() { + return new ArrayIterator<String>(EclipseLink2_3.MULTITENANT); + } + @Override + public void appendTypeAnnotationTo(StringBuilder sb) { + sb.append("@Multitenant(includeCriteria=true)"); + } + }); + } + public void testMultitenant() throws Exception { ICompilationUnit cu = this.createTestMultitenant(); JavaResourceType resourceType = buildJavaResourceType(cu); @@ -85,4 +98,41 @@ public class EclipselinkMultitenantAnnotationTests extends EclipseLink2_3JavaRes assertSourceContains("@Multitenant", cu); assertSourceDoesNotContain("@Multitenant(", cu); } + + + public void testGetIncludeCriteria() throws Exception { + ICompilationUnit cu = this.createTestCacheWithIncludeCriteria(); + JavaResourceType resourceType = buildJavaResourceType(cu); + + EclipseLinkMultitenantAnnotation multitenant = (EclipseLinkMultitenantAnnotation) resourceType.getAnnotation(EclipseLink2_3.MULTITENANT); + assertEquals(Boolean.TRUE, multitenant.getIncludeCriteria()); + } + + public void testSetIncludeCriteria() throws Exception { + ICompilationUnit cu = this.createTestCacheWithIncludeCriteria(); + JavaResourceType resourceType = buildJavaResourceType(cu); + + EclipseLinkMultitenantAnnotation multitenant = (EclipseLinkMultitenantAnnotation) resourceType.getAnnotation(EclipseLink2_3.MULTITENANT); + assertEquals(Boolean.TRUE, multitenant.getIncludeCriteria()); + + multitenant.setIncludeCriteria(Boolean.FALSE); + assertEquals(Boolean.FALSE, multitenant.getIncludeCriteria()); + + assertSourceContains("@Multitenant(includeCriteria=false)", cu); + } + + public void testSetIncludeCriteriaNull() throws Exception { + ICompilationUnit cu = this.createTestCacheWithIncludeCriteria(); + JavaResourceType resourceType = buildJavaResourceType(cu); + + EclipseLinkMultitenantAnnotation multitenant = (EclipseLinkMultitenantAnnotation) resourceType.getAnnotation(EclipseLink2_3.MULTITENANT); + assertEquals(Boolean.TRUE, multitenant.getIncludeCriteria()); + + multitenant.setIncludeCriteria(null); + multitenant = (EclipseLinkMultitenantAnnotation) resourceType.getAnnotation(EclipseLink2_3.MULTITENANT); + assertNull(multitenant.getIncludeCriteria()); + + assertSourceContains("@Multitenant", cu); + assertSourceDoesNotContain("@Multitenant(", cu); + } } |