/* * Copyright (c) 2012-2016 Marsha Chechik, Alessio Di Sandro, Michalis Famelis, * Rick Salay. * 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: * Alessio Di Sandro - Implementation. */ package edu.toronto.cs.se.modelepedia.relationaldatabase.diagram.part; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.gmf.runtime.notation.View; import org.eclipse.gmf.tooling.runtime.update.DiagramUpdater; import edu.toronto.cs.se.modelepedia.relationaldatabase.Column; import edu.toronto.cs.se.modelepedia.relationaldatabase.ForeignKey; import edu.toronto.cs.se.modelepedia.relationaldatabase.RelationalDatabase; import edu.toronto.cs.se.modelepedia.relationaldatabase.RelationalDatabasePackage; import edu.toronto.cs.se.modelepedia.relationaldatabase.Table; import edu.toronto.cs.se.modelepedia.relationaldatabase.diagram.edit.parts.ColumnEditPart; import edu.toronto.cs.se.modelepedia.relationaldatabase.diagram.edit.parts.ForeignKeyEditPart; import edu.toronto.cs.se.modelepedia.relationaldatabase.diagram.edit.parts.ForeignKeyForeignColumnEditPart; import edu.toronto.cs.se.modelepedia.relationaldatabase.diagram.edit.parts.ForeignKeyTableColumnEditPart; import edu.toronto.cs.se.modelepedia.relationaldatabase.diagram.edit.parts.RelationalDatabaseEditPart; import edu.toronto.cs.se.modelepedia.relationaldatabase.diagram.edit.parts.TableEditPart; import edu.toronto.cs.se.modelepedia.relationaldatabase.diagram.edit.parts.TableTableColumnsCompartmentEditPart; import edu.toronto.cs.se.modelepedia.relationaldatabase.diagram.edit.parts.TableTableForeignKeysCompartmentEditPart; import edu.toronto.cs.se.modelepedia.relationaldatabase.diagram.providers.RelationalDatabaseElementTypes; /** * @generated */ public class RelationalDatabaseDiagramUpdater { /** * @generated */ public static boolean isShortcutOrphaned(View view) { return !view.isSetElement() || view.getElement() == null || view.getElement().eIsProxy(); } /** * @generated */ public static List<RelationalDatabaseNodeDescriptor> getSemanticChildren( View view) { switch (RelationalDatabaseVisualIDRegistry.getVisualID(view)) { case RelationalDatabaseEditPart.VISUAL_ID: return getRelationalDatabase_1000SemanticChildren(view); case TableTableColumnsCompartmentEditPart.VISUAL_ID: return getTableTableColumnsCompartment_7001SemanticChildren(view); case TableTableForeignKeysCompartmentEditPart.VISUAL_ID: return getTableTableForeignKeysCompartment_7002SemanticChildren(view); } return Collections.emptyList(); } /** * @generated */ public static List<RelationalDatabaseNodeDescriptor> getRelationalDatabase_1000SemanticChildren( View view) { if (!view.isSetElement()) { return Collections.emptyList(); } RelationalDatabase modelElement = (RelationalDatabase) view .getElement(); LinkedList<RelationalDatabaseNodeDescriptor> result = new LinkedList<RelationalDatabaseNodeDescriptor>(); for (Iterator<?> it = modelElement.getTables().iterator(); it.hasNext();) { Table childElement = (Table) it.next(); int visualID = RelationalDatabaseVisualIDRegistry.getNodeVisualID( view, childElement); if (visualID == TableEditPart.VISUAL_ID) { result.add(new RelationalDatabaseNodeDescriptor(childElement, visualID)); continue; } } return result; } /** * @generated */ public static List<RelationalDatabaseNodeDescriptor> getTableTableColumnsCompartment_7001SemanticChildren( View view) { if (false == view.eContainer() instanceof View) { return Collections.emptyList(); } View containerView = (View) view.eContainer(); if (!containerView.isSetElement()) { return Collections.emptyList(); } Table modelElement = (Table) containerView.getElement(); LinkedList<RelationalDatabaseNodeDescriptor> result = new LinkedList<RelationalDatabaseNodeDescriptor>(); for (Iterator<?> it = modelElement.getColumns().iterator(); it .hasNext();) { Column childElement = (Column) it.next(); int visualID = RelationalDatabaseVisualIDRegistry.getNodeVisualID( view, childElement); if (visualID == ColumnEditPart.VISUAL_ID) { result.add(new RelationalDatabaseNodeDescriptor(childElement, visualID)); continue; } } return result; } /** * @generated */ public static List<RelationalDatabaseNodeDescriptor> getTableTableForeignKeysCompartment_7002SemanticChildren( View view) { if (false == view.eContainer() instanceof View) { return Collections.emptyList(); } View containerView = (View) view.eContainer(); if (!containerView.isSetElement()) { return Collections.emptyList(); } Table modelElement = (Table) containerView.getElement(); LinkedList<RelationalDatabaseNodeDescriptor> result = new LinkedList<RelationalDatabaseNodeDescriptor>(); for (Iterator<?> it = modelElement.getForeignKeys().iterator(); it .hasNext();) { ForeignKey childElement = (ForeignKey) it.next(); int visualID = RelationalDatabaseVisualIDRegistry.getNodeVisualID( view, childElement); if (visualID == ForeignKeyEditPart.VISUAL_ID) { result.add(new RelationalDatabaseNodeDescriptor(childElement, visualID)); continue; } } return result; } /** * @generated */ public static List<RelationalDatabaseLinkDescriptor> getContainedLinks( View view) { switch (RelationalDatabaseVisualIDRegistry.getVisualID(view)) { case RelationalDatabaseEditPart.VISUAL_ID: return getRelationalDatabase_1000ContainedLinks(view); case TableEditPart.VISUAL_ID: return getTable_2001ContainedLinks(view); case ColumnEditPart.VISUAL_ID: return getColumn_3001ContainedLinks(view); case ForeignKeyEditPart.VISUAL_ID: return getForeignKey_3002ContainedLinks(view); } return Collections.emptyList(); } /** * @generated */ public static List<RelationalDatabaseLinkDescriptor> getIncomingLinks( View view) { switch (RelationalDatabaseVisualIDRegistry.getVisualID(view)) { case TableEditPart.VISUAL_ID: return getTable_2001IncomingLinks(view); case ColumnEditPart.VISUAL_ID: return getColumn_3001IncomingLinks(view); case ForeignKeyEditPart.VISUAL_ID: return getForeignKey_3002IncomingLinks(view); } return Collections.emptyList(); } /** * @generated */ public static List<RelationalDatabaseLinkDescriptor> getOutgoingLinks( View view) { switch (RelationalDatabaseVisualIDRegistry.getVisualID(view)) { case TableEditPart.VISUAL_ID: return getTable_2001OutgoingLinks(view); case ColumnEditPart.VISUAL_ID: return getColumn_3001OutgoingLinks(view); case ForeignKeyEditPart.VISUAL_ID: return getForeignKey_3002OutgoingLinks(view); } return Collections.emptyList(); } /** * @generated */ public static List<RelationalDatabaseLinkDescriptor> getRelationalDatabase_1000ContainedLinks( View view) { return Collections.emptyList(); } /** * @generated */ public static List<RelationalDatabaseLinkDescriptor> getTable_2001ContainedLinks( View view) { return Collections.emptyList(); } /** * @generated */ public static List<RelationalDatabaseLinkDescriptor> getColumn_3001ContainedLinks( View view) { return Collections.emptyList(); } /** * @generated */ public static List<RelationalDatabaseLinkDescriptor> getForeignKey_3002ContainedLinks( View view) { ForeignKey modelElement = (ForeignKey) view.getElement(); LinkedList<RelationalDatabaseLinkDescriptor> result = new LinkedList<RelationalDatabaseLinkDescriptor>(); result.addAll(getOutgoingFeatureModelFacetLinks_ForeignKey_TableColumn_4001(modelElement)); result.addAll(getOutgoingFeatureModelFacetLinks_ForeignKey_ForeignColumn_4002(modelElement)); return result; } /** * @generated */ public static List<RelationalDatabaseLinkDescriptor> getTable_2001IncomingLinks( View view) { return Collections.emptyList(); } /** * @generated */ public static List<RelationalDatabaseLinkDescriptor> getColumn_3001IncomingLinks( View view) { Column modelElement = (Column) view.getElement(); Map<EObject, Collection<EStructuralFeature.Setting>> crossReferences = EcoreUtil.CrossReferencer .find(view.eResource().getResourceSet().getResources()); LinkedList<RelationalDatabaseLinkDescriptor> result = new LinkedList<RelationalDatabaseLinkDescriptor>(); result.addAll(getIncomingFeatureModelFacetLinks_ForeignKey_TableColumn_4001( modelElement, crossReferences)); result.addAll(getIncomingFeatureModelFacetLinks_ForeignKey_ForeignColumn_4002( modelElement, crossReferences)); return result; } /** * @generated */ public static List<RelationalDatabaseLinkDescriptor> getForeignKey_3002IncomingLinks( View view) { return Collections.emptyList(); } /** * @generated */ public static List<RelationalDatabaseLinkDescriptor> getTable_2001OutgoingLinks( View view) { return Collections.emptyList(); } /** * @generated */ public static List<RelationalDatabaseLinkDescriptor> getColumn_3001OutgoingLinks( View view) { return Collections.emptyList(); } /** * @generated */ public static List<RelationalDatabaseLinkDescriptor> getForeignKey_3002OutgoingLinks( View view) { ForeignKey modelElement = (ForeignKey) view.getElement(); LinkedList<RelationalDatabaseLinkDescriptor> result = new LinkedList<RelationalDatabaseLinkDescriptor>(); result.addAll(getOutgoingFeatureModelFacetLinks_ForeignKey_TableColumn_4001(modelElement)); result.addAll(getOutgoingFeatureModelFacetLinks_ForeignKey_ForeignColumn_4002(modelElement)); return result; } /** * @generated */ private static Collection<RelationalDatabaseLinkDescriptor> getIncomingFeatureModelFacetLinks_ForeignKey_TableColumn_4001( Column target, Map<EObject, Collection<EStructuralFeature.Setting>> crossReferences) { LinkedList<RelationalDatabaseLinkDescriptor> result = new LinkedList<RelationalDatabaseLinkDescriptor>(); Collection<EStructuralFeature.Setting> settings = crossReferences .get(target); for (EStructuralFeature.Setting setting : settings) { if (setting.getEStructuralFeature() == RelationalDatabasePackage.eINSTANCE .getForeignKey_TableColumn()) { result.add(new RelationalDatabaseLinkDescriptor( setting.getEObject(), target, RelationalDatabaseElementTypes.ForeignKeyTableColumn_4001, ForeignKeyTableColumnEditPart.VISUAL_ID)); } } return result; } /** * @generated */ private static Collection<RelationalDatabaseLinkDescriptor> getIncomingFeatureModelFacetLinks_ForeignKey_ForeignColumn_4002( Column target, Map<EObject, Collection<EStructuralFeature.Setting>> crossReferences) { LinkedList<RelationalDatabaseLinkDescriptor> result = new LinkedList<RelationalDatabaseLinkDescriptor>(); Collection<EStructuralFeature.Setting> settings = crossReferences .get(target); for (EStructuralFeature.Setting setting : settings) { if (setting.getEStructuralFeature() == RelationalDatabasePackage.eINSTANCE .getForeignKey_ForeignColumn()) { result.add(new RelationalDatabaseLinkDescriptor( setting.getEObject(), target, RelationalDatabaseElementTypes.ForeignKeyForeignColumn_4002, ForeignKeyForeignColumnEditPart.VISUAL_ID)); } } return result; } /** * @generated */ private static Collection<RelationalDatabaseLinkDescriptor> getOutgoingFeatureModelFacetLinks_ForeignKey_TableColumn_4001( ForeignKey source) { LinkedList<RelationalDatabaseLinkDescriptor> result = new LinkedList<RelationalDatabaseLinkDescriptor>(); Column destination = source.getTableColumn(); if (destination == null) { return result; } result.add(new RelationalDatabaseLinkDescriptor(source, destination, RelationalDatabaseElementTypes.ForeignKeyTableColumn_4001, ForeignKeyTableColumnEditPart.VISUAL_ID)); return result; } /** * @generated */ private static Collection<RelationalDatabaseLinkDescriptor> getOutgoingFeatureModelFacetLinks_ForeignKey_ForeignColumn_4002( ForeignKey source) { LinkedList<RelationalDatabaseLinkDescriptor> result = new LinkedList<RelationalDatabaseLinkDescriptor>(); Column destination = source.getForeignColumn(); if (destination == null) { return result; } result.add(new RelationalDatabaseLinkDescriptor(source, destination, RelationalDatabaseElementTypes.ForeignKeyForeignColumn_4002, ForeignKeyForeignColumnEditPart.VISUAL_ID)); return result; } /** * @generated */ public static final DiagramUpdater TYPED_INSTANCE = new DiagramUpdater() { /** * @generated */ @Override public List<RelationalDatabaseNodeDescriptor> getSemanticChildren( View view) { return RelationalDatabaseDiagramUpdater.getSemanticChildren(view); } /** * @generated */ @Override public List<RelationalDatabaseLinkDescriptor> getContainedLinks( View view) { return RelationalDatabaseDiagramUpdater.getContainedLinks(view); } /** * @generated */ @Override public List<RelationalDatabaseLinkDescriptor> getIncomingLinks(View view) { return RelationalDatabaseDiagramUpdater.getIncomingLinks(view); } /** * @generated */ @Override public List<RelationalDatabaseLinkDescriptor> getOutgoingLinks(View view) { return RelationalDatabaseDiagramUpdater.getOutgoingLinks(view); } }; }