Skip to main content

This CGIT instance is deprecated, and repositories have been moved to Gitlab or Github. See the repository descriptions for specific locations.

summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkmoore2008-02-25 16:20:08 +0000
committerkmoore2008-02-25 16:20:08 +0000
commit799475ec15f7f5d8838fef3d8397d38fde082111 (patch)
tree45e8be97e6d1f3db423baf767a669e8955790b84 /jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmAssociationOverride.java
parentb7f9a0cb92fdf23807be30cb6ca97b579f7a7a8b (diff)
downloadwebtools.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.java251
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();
+ }
+
+ }
+
+}

Back to the top