Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkmoore2011-09-02 21:01:29 +0000
committerkmoore2011-09-02 21:01:29 +0000
commit27a2da79ca464936e0ea474ba0cbf958bc8589a9 (patch)
tree7cd24f6946906b499e9eab14c2ef5c66b2445e21
parente747829bc1eca1ca10ce9ede2cdf59d1acc59b79 (diff)
downloadwebtools.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
-rw-r--r--jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_3/resource/java/binary/BinaryEclipseLinkMultitenantAnnotation.java27
-rw-r--r--jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_3/resource/java/source/SourceEclipseLinkMultitenantAnnotation.java47
-rw-r--r--jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/v2_3/resource/java/EclipseLink2_3.java2
-rw-r--r--jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/v2_3/resource/java/EclipseLinkMultitenantAnnotation.java22
-rw-r--r--jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/v2_4/resource/java/EclipseLink2_4.java37
-rw-r--r--jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_3/resource/java/EclipselinkMultitenantAnnotationTests.java50
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);
+ }
}

Back to the top