package br.puc.molic.diagram.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 br.puc.molic.diagram.edit.parts.BRTUtteranceEditPart; import br.puc.molic.diagram.edit.parts.BRTUtteranceLabelEditPart; import br.puc.molic.diagram.edit.parts.ClosingPointEditPart; import br.puc.molic.diagram.edit.parts.DiagramEditPart; import br.puc.molic.diagram.edit.parts.MonologueEditPart; import br.puc.molic.diagram.edit.parts.MonologueLabelEditPart; import br.puc.molic.diagram.edit.parts.OpeningPointEditPart; import br.puc.molic.diagram.edit.parts.SceneDialogueEditPart; import br.puc.molic.diagram.edit.parts.SceneEditPart; import br.puc.molic.diagram.edit.parts.SceneNameEditPart; import br.puc.molic.diagram.edit.parts.SystemProcessEditPart; import br.puc.molic.diagram.edit.parts.UbiquitousAccessEditPart; import br.puc.molic.diagram.edit.parts.UtteranceEditPart; import br.puc.molic.diagram.edit.parts.UtteranceLabelEditPart; import br.puc.molic.diagram.part.MolicVisualIDRegistry; import br.puc.molic.diagram.view.factories.BRTUtteranceLabelViewFactory; import br.puc.molic.diagram.view.factories.BRTUtteranceViewFactory; import br.puc.molic.diagram.view.factories.ClosingPointViewFactory; import br.puc.molic.diagram.view.factories.DiagramViewFactory; import br.puc.molic.diagram.view.factories.MonologueLabelViewFactory; import br.puc.molic.diagram.view.factories.MonologueViewFactory; import br.puc.molic.diagram.view.factories.OpeningPointViewFactory; import br.puc.molic.diagram.view.factories.SceneDialogueViewFactory; import br.puc.molic.diagram.view.factories.SceneNameViewFactory; import br.puc.molic.diagram.view.factories.SceneViewFactory; import br.puc.molic.diagram.view.factories.SystemProcessViewFactory; import br.puc.molic.diagram.view.factories.UbiquitousAccessViewFactory; import br.puc.molic.diagram.view.factories.UtteranceLabelViewFactory; import br.puc.molic.diagram.view.factories.UtteranceViewFactory; /** * @generated */ public class MolicViewProvider extends AbstractViewProvider { /** * @generated */ protected Class getDiagramViewClass(IAdaptable semanticAdapter, String diagramKind) { EObject semanticElement = getSemanticElement(semanticAdapter); if (DiagramEditPart.MODEL_ID.equals(diagramKind) && MolicVisualIDRegistry.getDiagramVisualID(semanticElement) != -1) { return DiagramViewFactory.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 = MolicVisualIDRegistry.getNodeVisualID(containerView, domainElement); } else { visualID = MolicVisualIDRegistry.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 (!MolicElementTypes.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 != MolicVisualIDRegistry.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 (!DiagramEditPart.MODEL_ID.equals(MolicVisualIDRegistry .getModelID(containerView))) { return null; // foreign diagram } switch (visualID) { case SceneEditPart.VISUAL_ID: case SystemProcessEditPart.VISUAL_ID: case MonologueEditPart.VISUAL_ID: case UbiquitousAccessEditPart.VISUAL_ID: case OpeningPointEditPart.VISUAL_ID: case ClosingPointEditPart.VISUAL_ID: if (domainElement == null || visualID != MolicVisualIDRegistry .getNodeVisualID(containerView, domainElement)) { return null; // visual id in semantic hint should match visual id for domain element } break; case SceneNameEditPart.VISUAL_ID: case SceneDialogueEditPart.VISUAL_ID: if (SceneEditPart.VISUAL_ID != MolicVisualIDRegistry .getVisualID(containerView) || containerView.getElement() != domainElement) { return null; // wrong container } break; case MonologueLabelEditPart.VISUAL_ID: if (MonologueEditPart.VISUAL_ID != MolicVisualIDRegistry .getVisualID(containerView) || containerView.getElement() != domainElement) { return null; // wrong container } break; case UtteranceLabelEditPart.VISUAL_ID: if (UtteranceEditPart.VISUAL_ID != MolicVisualIDRegistry .getVisualID(containerView) || containerView.getElement() != domainElement) { return null; // wrong container } break; case BRTUtteranceLabelEditPart.VISUAL_ID: if (BRTUtteranceEditPart.VISUAL_ID != MolicVisualIDRegistry .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 || !MolicVisualIDRegistry .canCreateNode(containerView, visualID)) { return null; } switch (visualID) { case SceneEditPart.VISUAL_ID: return SceneViewFactory.class; case SceneNameEditPart.VISUAL_ID: return SceneNameViewFactory.class; case SceneDialogueEditPart.VISUAL_ID: return SceneDialogueViewFactory.class; case SystemProcessEditPart.VISUAL_ID: return SystemProcessViewFactory.class; case MonologueEditPart.VISUAL_ID: return MonologueViewFactory.class; case MonologueLabelEditPart.VISUAL_ID: return MonologueLabelViewFactory.class; case UbiquitousAccessEditPart.VISUAL_ID: return UbiquitousAccessViewFactory.class; case OpeningPointEditPart.VISUAL_ID: return OpeningPointViewFactory.class; case ClosingPointEditPart.VISUAL_ID: return ClosingPointViewFactory.class; case UtteranceLabelEditPart.VISUAL_ID: return UtteranceLabelViewFactory.class; case BRTUtteranceLabelEditPart.VISUAL_ID: return BRTUtteranceLabelViewFactory.class; } return null; } /** * @generated */ protected Class getEdgeViewClass(IAdaptable semanticAdapter, View containerView, String semanticHint) { IElementType elementType = getSemanticElementType(semanticAdapter); if (!MolicElementTypes.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 = MolicVisualIDRegistry.getVisualID(elementTypeHint); EObject domainElement = getSemanticElement(semanticAdapter); if (domainElement != null && visualID != MolicVisualIDRegistry .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 UtteranceEditPart.VISUAL_ID: return UtteranceViewFactory.class; case BRTUtteranceEditPart.VISUAL_ID: return BRTUtteranceViewFactory.class; } return null; } /** * @generated */ private IElementType getSemanticElementType(IAdaptable semanticAdapter) { if (semanticAdapter == null) { return null; } return (IElementType) semanticAdapter.getAdapter(IElementType.class); } }