diff options
author | kmoore | 2008-02-25 16:20:08 +0000 |
---|---|---|
committer | kmoore | 2008-02-25 16:20:08 +0000 |
commit | 799475ec15f7f5d8838fef3d8397d38fde082111 (patch) | |
tree | 45e8be97e6d1f3db423baf767a669e8955790b84 /jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmAssociationOverride.java | |
parent | b7f9a0cb92fdf23807be30cb6ca97b579f7a7a8b (diff) | |
download | webtools.dali-799475ec15f7f5d8838fef3d8397d38fde082111.tar.gz webtools.dali-799475ec15f7f5d8838fef3d8397d38fde082111.tar.xz webtools.dali-799475ec15f7f5d8838fef3d8397d38fde082111.zip |
Refactored packages into public API, renamed interfaces
Diffstat (limited to 'jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmAssociationOverride.java')
-rw-r--r-- | jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmAssociationOverride.java | 251 |
1 files changed, 251 insertions, 0 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmAssociationOverride.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmAssociationOverride.java new file mode 100644 index 0000000000..9f13ef56b8 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmAssociationOverride.java @@ -0,0 +1,251 @@ +/******************************************************************************* + * Copyright (c) 2008 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.context.orm; + +import java.util.ArrayList; +import java.util.List; +import java.util.ListIterator; +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.eclipse.jpt.core.TextRange; +import org.eclipse.jpt.core.context.AbstractJoinColumn; +import org.eclipse.jpt.core.context.AssociationOverride; +import org.eclipse.jpt.core.context.Entity; +import org.eclipse.jpt.core.context.JoinColumn; +import org.eclipse.jpt.core.context.JpaContextNode; +import org.eclipse.jpt.core.context.BaseOverride; +import org.eclipse.jpt.core.context.RelationshipMapping; +import org.eclipse.jpt.core.context.TypeMapping; +import org.eclipse.jpt.core.internal.context.AbstractJpaContextNode; +import org.eclipse.jpt.core.resource.orm.XmlAssociationOverride; +import org.eclipse.jpt.core.resource.orm.XmlJoinColumn; +import org.eclipse.jpt.core.resource.orm.OrmFactory; +import org.eclipse.jpt.db.internal.Table; +import org.eclipse.jpt.utility.internal.iterators.CloneListIterator; + +public class GenericOrmAssociationOverride extends AbstractJpaContextNode + implements AssociationOverride +{ + + protected String name; + + protected final List<GenericOrmJoinColumn> specifiedJoinColumns; + + protected final List<GenericOrmJoinColumn> defaultJoinColumns; + + private final AssociationOverride.Owner owner; + + protected XmlAssociationOverride associationOverride; + + + protected GenericOrmAssociationOverride(JpaContextNode parent, AssociationOverride.Owner owner) { + super(parent); + this.owner = owner; + this.specifiedJoinColumns = new ArrayList<GenericOrmJoinColumn>(); + this.defaultJoinColumns = new ArrayList<GenericOrmJoinColumn>(); + } + + public Owner owner() { + return this.owner; + } + + // ********** IAssociationOverride implementation ********** + + public String getName() { + return this.name; + } + + public void setName(String newName) { + String oldName = this.name; + this.name = newName; + this.associationOverride.setName(newName); + firePropertyChanged(BaseOverride.NAME_PROPERTY, oldName, newName); + } + + @SuppressWarnings("unchecked") + public ListIterator<GenericOrmJoinColumn> joinColumns() { + return this.specifiedJoinColumns.isEmpty() ? this.defaultJoinColumns() : this.specifiedJoinColumns(); + } + + public int joinColumnsSize() { + return this.specifiedJoinColumns.isEmpty() ? this.defaultJoinColumnsSize() : this.specifiedJoinColumnsSize(); + } + + @SuppressWarnings("unchecked") + public ListIterator<GenericOrmJoinColumn> defaultJoinColumns() { + return new CloneListIterator<GenericOrmJoinColumn>(this.defaultJoinColumns); + } + + public int defaultJoinColumnsSize() { + return this.defaultJoinColumns.size(); + } + + @SuppressWarnings("unchecked") + public ListIterator<GenericOrmJoinColumn> specifiedJoinColumns() { + return new CloneListIterator<GenericOrmJoinColumn>(this.specifiedJoinColumns); + } + + public int specifiedJoinColumnsSize() { + return this.specifiedJoinColumns.size(); + } + + public GenericOrmJoinColumn addSpecifiedJoinColumn(int index) { + GenericOrmJoinColumn joinColumn = new GenericOrmJoinColumn(this, createJoinColumnOwner()); + this.specifiedJoinColumns.add(index, joinColumn); + this.associationOverride.getJoinColumns().add(index, OrmFactory.eINSTANCE.createJoinColumnImpl()); + this.fireItemAdded(AssociationOverride.SPECIFIED_JOIN_COLUMNS_LIST, index, joinColumn); + return joinColumn; + } + + protected JoinColumn.Owner createJoinColumnOwner() { + return new JoinColumnOwner(); + } + + protected void addSpecifiedJoinColumn(int index, GenericOrmJoinColumn joinColumn) { + addItemToList(index, joinColumn, this.specifiedJoinColumns, AssociationOverride.SPECIFIED_JOIN_COLUMNS_LIST); + } + + public void removeSpecifiedJoinColumn(int index) { + GenericOrmJoinColumn removedJoinColumn = this.specifiedJoinColumns.remove(index); + this.associationOverride.getJoinColumns().remove(index); + fireItemRemoved(Entity.SPECIFIED_PRIMARY_KEY_JOIN_COLUMNS_LIST, index, removedJoinColumn); + } + + protected void removeSpecifiedJoinColumn(GenericOrmJoinColumn joinColumn) { + removeItemFromList(joinColumn, this.specifiedJoinColumns, AssociationOverride.SPECIFIED_JOIN_COLUMNS_LIST); + } + + public void moveSpecifiedJoinColumn(int targetIndex, int sourceIndex) { + this.associationOverride.getJoinColumns().move(targetIndex, sourceIndex); + moveItemInList(targetIndex, sourceIndex, this.specifiedJoinColumns, AssociationOverride.SPECIFIED_JOIN_COLUMNS_LIST); + } + + public boolean containsSpecifiedJoinColumns() { + return !this.specifiedJoinColumns.isEmpty(); + } + + public boolean isVirtual() { + return owner().isVirtual(this); + } + + + public void initialize(XmlAssociationOverride associationOverride) { + this.associationOverride = associationOverride; + this.name = associationOverride.getName(); + initializeSpecifiedJoinColumns(associationOverride); + } + + protected void initializeSpecifiedJoinColumns(XmlAssociationOverride associationOverride) { + for (XmlJoinColumn joinColumn : associationOverride.getJoinColumns()) { + this.specifiedJoinColumns.add(createJoinColumn(joinColumn)); + } + } + + public void update(XmlAssociationOverride associationOverride) { + this.associationOverride = associationOverride; + this.setName(associationOverride.getName()); + updateSpecifiedJoinColumns(associationOverride); + } + + protected void updateSpecifiedJoinColumns(XmlAssociationOverride associationOverride) { + ListIterator<GenericOrmJoinColumn> joinColumns = specifiedJoinColumns(); + ListIterator<XmlJoinColumn> resourceJoinColumns = associationOverride.getJoinColumns().listIterator(); + + while (joinColumns.hasNext()) { + GenericOrmJoinColumn joinColumn = joinColumns.next(); + if (resourceJoinColumns.hasNext()) { + joinColumn.update(resourceJoinColumns.next()); + } + else { + removeSpecifiedJoinColumn(joinColumn); + } + } + + while (resourceJoinColumns.hasNext()) { + addSpecifiedJoinColumn(specifiedJoinColumnsSize(), createJoinColumn(resourceJoinColumns.next())); + } + } + + protected GenericOrmJoinColumn createJoinColumn(XmlJoinColumn joinColumn) { + GenericOrmJoinColumn xmlJoinColumn = new GenericOrmJoinColumn(this, new JoinColumnOwner()); + xmlJoinColumn.initialize(joinColumn); + return xmlJoinColumn; + } + + public class JoinColumnOwner implements JoinColumn.Owner + { + + public JoinColumnOwner() { + super(); + } + + /** + * by default, the join column is in the type mapping's primary table + */ + public String defaultTableName() { + return GenericOrmAssociationOverride.this.owner.typeMapping().tableName(); + } + + public String defaultColumnName() { + return null; + } + + public Entity targetEntity() { + RelationshipMapping relationshipMapping = relationshipMapping(); + return relationshipMapping == null ? null : relationshipMapping.getResolvedTargetEntity(); + } + + public String attributeName() { + return GenericOrmAssociationOverride.this.getName(); + } + + public RelationshipMapping relationshipMapping() { + return GenericOrmAssociationOverride.this.owner.relationshipMapping(GenericOrmAssociationOverride.this.getName()); + } + + public boolean tableNameIsInvalid(String tableName) { + return typeMapping().tableNameIsInvalid(tableName); + } + + /** + * the join column can be on a secondary table + */ + public boolean tableIsAllowed() { + return true; + } + + public TextRange validationTextRange(CompilationUnit astRoot) { + // TODO Auto-generated method stub + return null; + } + + public TypeMapping typeMapping() { + return GenericOrmAssociationOverride.this.owner.typeMapping(); + } + + public Table dbTable(String tableName) { + return typeMapping().dbTable(tableName); + } + + public Table dbReferencedColumnTable() { + Entity targetEntity = targetEntity(); + return (targetEntity == null) ? null : targetEntity.primaryDbTable(); + } + + public boolean isVirtual(AbstractJoinColumn joinColumn) { + return GenericOrmAssociationOverride.this.defaultJoinColumns.contains(joinColumn); + } + + public int joinColumnsSize() { + return GenericOrmAssociationOverride.this.joinColumnsSize(); + } + + } + +} |