Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/java/ManyToManyImpl.java')
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/java/ManyToManyImpl.java156
1 files changed, 156 insertions, 0 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/java/ManyToManyImpl.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/java/ManyToManyImpl.java
new file mode 100644
index 0000000000..435764caff
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/java/ManyToManyImpl.java
@@ -0,0 +1,156 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0, which accompanies this distribution
+ * and is available at http://www.eclipse.org/legal/epl-v10.html.
+ *
+ * Contributors:
+ * Oracle - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.jpt.core.internal.resource.java;
+
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jpt.core.internal.ITextRange;
+import org.eclipse.jpt.core.internal.jdtutility.AnnotationElementAdapter;
+import org.eclipse.jpt.core.internal.jdtutility.Attribute;
+import org.eclipse.jpt.core.internal.jdtutility.ConversionDeclarationAnnotationElementAdapter;
+import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter;
+import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationElementAdapter;
+import org.eclipse.jpt.core.internal.jdtutility.Member;
+import org.eclipse.jpt.core.internal.jdtutility.SimpleDeclarationAnnotationAdapter;
+
+
+public class ManyToManyImpl extends AbstractRelationshipMappingAnnotation implements ManyToMany
+{
+ private static final DeclarationAnnotationAdapter DECLARATION_ANNOTATION_ADAPTER = new SimpleDeclarationAnnotationAdapter(ANNOTATION_NAME);
+
+ private static final DeclarationAnnotationElementAdapter<String> TARGET_ENTITY_ADAPTER = buildTargetEntityAdapter();
+
+ private static final DeclarationAnnotationElementAdapter<String[]> CASCADE_ADAPTER = buildCascadeAdapter();
+
+ private static final DeclarationAnnotationElementAdapter<String> FETCH_ADAPTER = buildFetchAdapter();
+
+ private static final DeclarationAnnotationElementAdapter<String> MAPPED_BY_ADAPTER = buildMappedByAdapter();
+
+ private final AnnotationElementAdapter<String> mappedByAdapter;
+
+ private String mappedBy;
+
+ protected ManyToManyImpl(JavaPersistentAttributeResource parent, Attribute attribute) {
+ super(parent, attribute, DECLARATION_ANNOTATION_ADAPTER);
+ this.mappedByAdapter = buildAnnotationElementAdapter(MAPPED_BY_ADAPTER);
+ }
+
+ @Override
+ public void initialize(CompilationUnit astRoot) {
+ super.initialize(astRoot);
+ this.mappedBy = this.mappedBy(astRoot);
+ }
+
+ //**************** AbstractRelationshipMappingAnnotation implementation **************
+
+ @Override
+ protected DeclarationAnnotationElementAdapter<String> targetEntityAdapter() {
+ return TARGET_ENTITY_ADAPTER;
+ }
+
+ @Override
+ protected DeclarationAnnotationElementAdapter<String[]> cascadeAdapter() {
+ return CASCADE_ADAPTER;
+ }
+
+ @Override
+ protected DeclarationAnnotationElementAdapter<String> fetchAdapter() {
+ return FETCH_ADAPTER;
+ }
+
+
+ //**************** Annotation implementation **************
+
+ public String getAnnotationName() {
+ return ANNOTATION_NAME;
+ }
+
+
+ public String getMappedBy() {
+ return this.mappedBy;
+ }
+
+ public void setMappedBy(String newMappedBy) {
+ String oldMappedBy = this.mappedBy;
+ this.mappedBy = newMappedBy;
+ this.mappedByAdapter.setValue(newMappedBy);
+ firePropertyChanged(MAPPED_BY_PROPERTY, oldMappedBy, newMappedBy);
+ }
+
+ @Override
+ public void updateFromJava(CompilationUnit astRoot) {
+ super.updateFromJava(astRoot);
+ this.setMappedBy(this.mappedBy(astRoot));
+ }
+
+ protected String mappedBy(CompilationUnit astRoot) {
+ return this.mappedByAdapter.getValue(astRoot);
+ }
+
+ public ITextRange mappedByTextRange(CompilationUnit astRoot) {
+ return elementTextRange(MAPPED_BY_ADAPTER, astRoot);
+ }
+
+ public boolean mappedByTouches(int pos, CompilationUnit astRoot) {
+ return this.elementTouches(MAPPED_BY_ADAPTER, pos, astRoot);
+ }
+
+ // ********** static methods **********
+
+ private static DeclarationAnnotationElementAdapter<String> buildTargetEntityAdapter() {
+ return buildTargetEntityAdapter(DECLARATION_ANNOTATION_ADAPTER, JPA.MANY_TO_MANY__TARGET_ENTITY);
+ }
+
+ private static DeclarationAnnotationElementAdapter<String[]> buildCascadeAdapter() {
+ return buildEnumArrayAnnotationElementAdapter(DECLARATION_ANNOTATION_ADAPTER, JPA.MANY_TO_MANY__CASCADE);
+ }
+
+ private static DeclarationAnnotationElementAdapter<String> buildFetchAdapter() {
+ return buildFetchAdapter(DECLARATION_ANNOTATION_ADAPTER, JPA.MANY_TO_MANY__FETCH);
+ }
+
+
+ private static DeclarationAnnotationElementAdapter<String> buildMappedByAdapter() {
+ return ConversionDeclarationAnnotationElementAdapter.forStrings(DECLARATION_ANNOTATION_ADAPTER, JPA.MANY_TO_MANY__MAPPED_BY, false); // false = do not remove annotation when empty
+ }
+
+
+ public static class ManyToManyAnnotationDefinition implements AnnotationDefinition
+ {
+ // singleton
+ private static final ManyToManyAnnotationDefinition INSTANCE = new ManyToManyAnnotationDefinition();
+
+ /**
+ * Return the singleton.
+ */
+ public static ManyToManyAnnotationDefinition instance() {
+ return INSTANCE;
+ }
+
+ /**
+ * Ensure non-instantiability.
+ */
+ private ManyToManyAnnotationDefinition() {
+ super();
+ }
+
+ public Annotation buildAnnotation(JavaResource parent, Member member) {
+ return new ManyToManyImpl((JavaPersistentAttributeResource) parent, (Attribute) member);
+ }
+
+ public Annotation buildNullAnnotation(JavaResource parent, Member member) {
+ return null;
+ }
+
+ public String getAnnotationName() {
+ return ANNOTATION_NAME;
+ }
+ }
+
+}

Back to the top