diff options
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.java | 156 |
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; + } + } + +} |