/*******************************************************************************
* Copyright (c) 2006-2012
* Software Technology Group, Dresden University of Technology
* DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026
*
* 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:
* Software Technology Group - TU Dresden, Germany;
* DevBoost GmbH - Berlin, Germany
* - initial API and implementation
******************************************************************************/
/*
* Copyright (c) 2006, 2007 Borland Software Corporation
*
* 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:
* Dmitry Stadnik (Borland) - initial API and implementation
*/
package org.reuseware.application.taipan.gmf.editor.providers;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gmf.runtime.diagram.core.providers.AbstractViewProvider;
import org.eclipse.gmf.runtime.emf.type.core.IElementType;
import org.eclipse.gmf.runtime.emf.type.core.IHintedType;
import org.eclipse.gmf.runtime.notation.View;
import org.reuseware.application.taipan.gmf.editor.edit.parts.AquatoryEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.BesiegePortOrderEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.CargoExtensionEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.EmptyBoxEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.EscortShipsOrderEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.ItemHookEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.LargeItemArticleEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.LargeItemEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.LargeItemWeightEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.PortEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.PortLocationEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.PortPortNameEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.PortRegisterEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.PortSlotEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.ReliableRouteDescEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.ReliableRouteEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.ReliableRouteRelbEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.RoutePortNameEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.RouteSlotEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.ShipDestinationEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.ShipDestinationMarkerEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.ShipEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.ShipLargeCargoEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.ShipNameEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.ShipRouteEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.ShipSmallCargoEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.SmallItemsEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.UnreliableRouteDescEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.UnreliableRouteEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.UnreliableRouteRelbEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.WarshipEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.WarshipLargeCargoEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.WarshipNameEditPart;
import org.reuseware.application.taipan.gmf.editor.edit.parts.WarshipSmallCargoEditPart;
import org.reuseware.application.taipan.gmf.editor.part.TaiPanVisualIDRegistry;
import org.reuseware.application.taipan.gmf.editor.view.factories.AquatoryViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.BesiegePortOrderViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.CargoExtensionViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.EmptyBoxViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.EscortShipsOrderViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.ItemHookViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.LargeItemArticleViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.LargeItemViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.LargeItemWeightViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.PortLocationViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.PortPortNameViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.PortRegisterViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.PortSlotViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.PortViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.ReliableRouteDescViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.ReliableRouteRelbViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.ReliableRouteViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.RoutePortNameViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.RouteSlotViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.ShipDestinationMarkerViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.ShipDestinationViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.ShipLargeCargoViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.ShipNameViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.ShipRouteViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.ShipSmallCargoViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.ShipViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.SmallItemsViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.UnreliableRouteDescViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.UnreliableRouteRelbViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.UnreliableRouteViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.WarshipLargeCargoViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.WarshipNameViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.WarshipSmallCargoViewFactory;
import org.reuseware.application.taipan.gmf.editor.view.factories.WarshipViewFactory;
/**
* @generated
*/
public class TaiPanViewProvider extends AbstractViewProvider {
/**
* @generated
*/
protected Class getDiagramViewClass(IAdaptable semanticAdapter,
String diagramKind) {
EObject semanticElement = getSemanticElement(semanticAdapter);
if (AquatoryEditPart.MODEL_ID.equals(diagramKind)
&& TaiPanVisualIDRegistry.getDiagramVisualID(semanticElement) != -1) {
return AquatoryViewFactory.class;
}
return null;
}
/**
* @generated
*/
protected Class getNodeViewClass(IAdaptable semanticAdapter,
View containerView, String semanticHint) {
if (containerView == null) {
return null;
}
IElementType elementType = getSemanticElementType(semanticAdapter);
EObject domainElement = getSemanticElement(semanticAdapter);
int visualID;
if (semanticHint == null) {
// Semantic hint is not specified. Can be a result of call from CanonicalEditPolicy.
// In this situation there should be NO elementType, visualID will be determined
// by VisualIDRegistry.getNodeVisualID() for domainElement.
if (elementType != null || domainElement == null) {
return null;
}
visualID = TaiPanVisualIDRegistry.getNodeVisualID(containerView,
domainElement);
} else {
visualID = TaiPanVisualIDRegistry.getVisualID(semanticHint);
if (elementType != null) {
// Semantic hint is specified together with element type.
// Both parameters should describe exactly the same diagram element.
// In addition we check that visualID returned by VisualIDRegistry.getNodeVisualID() for
// domainElement (if specified) is the same as in element type.
if (!TaiPanElementTypes.isKnownElementType(elementType)
|| (!(elementType instanceof IHintedType))) {
return null; // foreign element type
}
String elementTypeHint = ((IHintedType) elementType)
.getSemanticHint();
if (!semanticHint.equals(elementTypeHint)) {
return null; // if semantic hint is specified it should be the same as in element type
}
if (domainElement != null
&& visualID != TaiPanVisualIDRegistry.getNodeVisualID(
containerView, domainElement)) {
return null; // visual id for node EClass should match visual id from element type
}
} else {
// Element type is not specified. Domain element should be present (except pure design elements).
// This method is called with EObjectAdapter as parameter from:
// - ViewService.createNode(View container, EObject eObject, String type, PreferencesHint preferencesHint)
// - generated ViewFactory.decorateView() for parent element
if (!AquatoryEditPart.MODEL_ID.equals(TaiPanVisualIDRegistry
.getModelID(containerView))) {
return null; // foreign diagram
}
switch (visualID) {
case PortEditPart.VISUAL_ID:
case ShipEditPart.VISUAL_ID:
case WarshipEditPart.VISUAL_ID:
case PortSlotEditPart.VISUAL_ID:
case RouteSlotEditPart.VISUAL_ID:
case SmallItemsEditPart.VISUAL_ID:
case LargeItemEditPart.VISUAL_ID:
case EmptyBoxEditPart.VISUAL_ID:
case ItemHookEditPart.VISUAL_ID:
if (domainElement == null
|| visualID != TaiPanVisualIDRegistry
.getNodeVisualID(containerView,
domainElement)) {
return null; // visual id in semantic hint should match visual id for domain element
}
break;
case PortLocationEditPart.VISUAL_ID:
if (PortEditPart.VISUAL_ID != TaiPanVisualIDRegistry
.getVisualID(containerView)
|| containerView.getElement() != domainElement) {
return null; // wrong container
}
break;
case ShipNameEditPart.VISUAL_ID:
case ShipSmallCargoEditPart.VISUAL_ID:
case ShipLargeCargoEditPart.VISUAL_ID:
if (ShipEditPart.VISUAL_ID != TaiPanVisualIDRegistry
.getVisualID(containerView)
|| containerView.getElement() != domainElement) {
return null; // wrong container
}
break;
case WarshipNameEditPart.VISUAL_ID:
case WarshipSmallCargoEditPart.VISUAL_ID:
case WarshipLargeCargoEditPart.VISUAL_ID:
if (WarshipEditPart.VISUAL_ID != TaiPanVisualIDRegistry
.getVisualID(containerView)
|| containerView.getElement() != domainElement) {
return null; // wrong container
}
break;
case PortPortNameEditPart.VISUAL_ID:
if (PortSlotEditPart.VISUAL_ID != TaiPanVisualIDRegistry
.getVisualID(containerView)
|| containerView.getElement() != domainElement) {
return null; // wrong container
}
break;
case RoutePortNameEditPart.VISUAL_ID:
if (RouteSlotEditPart.VISUAL_ID != TaiPanVisualIDRegistry
.getVisualID(containerView)
|| containerView.getElement() != domainElement) {
return null; // wrong container
}
break;
case LargeItemArticleEditPart.VISUAL_ID:
case LargeItemWeightEditPart.VISUAL_ID:
if (LargeItemEditPart.VISUAL_ID != TaiPanVisualIDRegistry
.getVisualID(containerView)
|| containerView.getElement() != domainElement) {
return null; // wrong container
}
break;
case CargoExtensionEditPart.VISUAL_ID:
if (ItemHookEditPart.VISUAL_ID != TaiPanVisualIDRegistry
.getVisualID(containerView)
|| containerView.getElement() != domainElement) {
return null; // wrong container
}
break;
case ShipDestinationMarkerEditPart.VISUAL_ID:
if (ShipDestinationEditPart.VISUAL_ID != TaiPanVisualIDRegistry
.getVisualID(containerView)
|| containerView.getElement() != domainElement) {
return null; // wrong container
}
break;
case ReliableRouteDescEditPart.VISUAL_ID:
case ReliableRouteRelbEditPart.VISUAL_ID:
if (ReliableRouteEditPart.VISUAL_ID != TaiPanVisualIDRegistry
.getVisualID(containerView)
|| containerView.getElement() != domainElement) {
return null; // wrong container
}
break;
case UnreliableRouteDescEditPart.VISUAL_ID:
case UnreliableRouteRelbEditPart.VISUAL_ID:
if (UnreliableRouteEditPart.VISUAL_ID != TaiPanVisualIDRegistry
.getVisualID(containerView)
|| containerView.getElement() != domainElement) {
return null; // wrong container
}
break;
default:
return null;
}
}
}
return getNodeViewClass(containerView, visualID);
}
/**
* @generated
*/
protected Class getNodeViewClass(View containerView, int visualID) {
if (containerView == null
|| !TaiPanVisualIDRegistry.canCreateNode(containerView,
visualID)) {
return null;
}
switch (visualID) {
case PortEditPart.VISUAL_ID:
return PortViewFactory.class;
case PortLocationEditPart.VISUAL_ID:
return PortLocationViewFactory.class;
case ShipEditPart.VISUAL_ID:
return ShipViewFactory.class;
case ShipNameEditPart.VISUAL_ID:
return ShipNameViewFactory.class;
case WarshipEditPart.VISUAL_ID:
return WarshipViewFactory.class;
case WarshipNameEditPart.VISUAL_ID:
return WarshipNameViewFactory.class;
case PortSlotEditPart.VISUAL_ID:
return PortSlotViewFactory.class;
case PortPortNameEditPart.VISUAL_ID:
return PortPortNameViewFactory.class;
case RouteSlotEditPart.VISUAL_ID:
return RouteSlotViewFactory.class;
case RoutePortNameEditPart.VISUAL_ID:
return RoutePortNameViewFactory.class;
case SmallItemsEditPart.VISUAL_ID:
return SmallItemsViewFactory.class;
case LargeItemEditPart.VISUAL_ID:
return LargeItemViewFactory.class;
case LargeItemArticleEditPart.VISUAL_ID:
return LargeItemArticleViewFactory.class;
case LargeItemWeightEditPart.VISUAL_ID:
return LargeItemWeightViewFactory.class;
case EmptyBoxEditPart.VISUAL_ID:
return EmptyBoxViewFactory.class;
case ItemHookEditPart.VISUAL_ID:
return ItemHookViewFactory.class;
case CargoExtensionEditPart.VISUAL_ID:
return CargoExtensionViewFactory.class;
case ShipSmallCargoEditPart.VISUAL_ID:
return ShipSmallCargoViewFactory.class;
case ShipLargeCargoEditPart.VISUAL_ID:
return ShipLargeCargoViewFactory.class;
case WarshipSmallCargoEditPart.VISUAL_ID:
return WarshipSmallCargoViewFactory.class;
case WarshipLargeCargoEditPart.VISUAL_ID:
return WarshipLargeCargoViewFactory.class;
case ShipDestinationMarkerEditPart.VISUAL_ID:
return ShipDestinationMarkerViewFactory.class;
case ReliableRouteDescEditPart.VISUAL_ID:
return ReliableRouteDescViewFactory.class;
case ReliableRouteRelbEditPart.VISUAL_ID:
return ReliableRouteRelbViewFactory.class;
case UnreliableRouteDescEditPart.VISUAL_ID:
return UnreliableRouteDescViewFactory.class;
case UnreliableRouteRelbEditPart.VISUAL_ID:
return UnreliableRouteRelbViewFactory.class;
}
return null;
}
/**
* @generated
*/
protected Class getEdgeViewClass(IAdaptable semanticAdapter,
View containerView, String semanticHint) {
IElementType elementType = getSemanticElementType(semanticAdapter);
if (!TaiPanElementTypes.isKnownElementType(elementType)
|| (!(elementType instanceof IHintedType))) {
return null; // foreign element type
}
String elementTypeHint = ((IHintedType) elementType).getSemanticHint();
if (elementTypeHint == null) {
return null; // our hint is visual id and must be specified
}
if (semanticHint != null && !semanticHint.equals(elementTypeHint)) {
return null; // if semantic hint is specified it should be the same as in element type
}
int visualID = TaiPanVisualIDRegistry.getVisualID(elementTypeHint);
EObject domainElement = getSemanticElement(semanticAdapter);
if (domainElement != null
&& visualID != TaiPanVisualIDRegistry
.getLinkWithClassVisualID(domainElement)) {
return null; // visual id for link EClass should match visual id from element type
}
return getEdgeViewClass(visualID);
}
/**
* @generated
*/
protected Class getEdgeViewClass(int visualID) {
switch (visualID) {
case ShipDestinationEditPart.VISUAL_ID:
return ShipDestinationViewFactory.class;
case ReliableRouteEditPart.VISUAL_ID:
return ReliableRouteViewFactory.class;
case UnreliableRouteEditPart.VISUAL_ID:
return UnreliableRouteViewFactory.class;
case ShipRouteEditPart.VISUAL_ID:
return ShipRouteViewFactory.class;
case BesiegePortOrderEditPart.VISUAL_ID:
return BesiegePortOrderViewFactory.class;
case EscortShipsOrderEditPart.VISUAL_ID:
return EscortShipsOrderViewFactory.class;
case PortRegisterEditPart.VISUAL_ID:
return PortRegisterViewFactory.class;
}
return null;
}
/**
* @generated
*/
private IElementType getSemanticElementType(IAdaptable semanticAdapter) {
if (semanticAdapter == null) {
return null;
}
return (IElementType) semanticAdapter.getAdapter(IElementType.class);
}
}