Package es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.providers

Source Code of es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.providers.JadexAgentsViewProvider

/*******************************************************************************
* Copyright (c) 2011 Grupo de Sistemas Inteligentes (GSI) - DIT UPM
*
* 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
*******************************************************************************/
package es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.providers;

import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.emf.ecore.EAnnotation;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EcoreFactory;
import org.eclipse.emf.transaction.util.TransactionUtil;
import org.eclipse.gmf.runtime.common.core.service.AbstractProvider;
import org.eclipse.gmf.runtime.common.core.service.IOperation;
import org.eclipse.gmf.runtime.diagram.core.preferences.PreferencesHint;
import org.eclipse.gmf.runtime.diagram.core.providers.IViewProvider;
import org.eclipse.gmf.runtime.diagram.core.services.view.CreateDiagramViewOperation;
import org.eclipse.gmf.runtime.diagram.core.services.view.CreateEdgeViewOperation;
import org.eclipse.gmf.runtime.diagram.core.services.view.CreateNodeViewOperation;
import org.eclipse.gmf.runtime.diagram.core.services.view.CreateViewForKindOperation;
import org.eclipse.gmf.runtime.diagram.core.services.view.CreateViewOperation;
import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil;
import org.eclipse.gmf.runtime.diagram.ui.preferences.IPreferenceConstants;
import org.eclipse.gmf.runtime.draw2d.ui.figures.FigureUtilities;
import org.eclipse.gmf.runtime.emf.core.util.EMFCoreUtil;
import org.eclipse.gmf.runtime.emf.type.core.IElementType;
import org.eclipse.gmf.runtime.emf.type.core.IHintedType;
import org.eclipse.gmf.runtime.notation.DecorationNode;
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.gmf.runtime.notation.Edge;
import org.eclipse.gmf.runtime.notation.FontStyle;
import org.eclipse.gmf.runtime.notation.MeasurementUnit;
import org.eclipse.gmf.runtime.notation.Node;
import org.eclipse.gmf.runtime.notation.NotationFactory;
import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.Shape;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.FontData;

/**
* @generated
*/
public class JadexAgentsViewProvider extends AbstractProvider implements
    IViewProvider {

  /**
   * @generated
   */
  public final boolean provides(IOperation operation) {
    if (operation instanceof CreateViewForKindOperation) {
      return provides((CreateViewForKindOperation) operation);
    }
    assert operation instanceof CreateViewOperation;
    if (operation instanceof CreateDiagramViewOperation) {
      return provides((CreateDiagramViewOperation) operation);
    } else if (operation instanceof CreateEdgeViewOperation) {
      return provides((CreateEdgeViewOperation) operation);
    } else if (operation instanceof CreateNodeViewOperation) {
      return provides((CreateNodeViewOperation) operation);
    }
    return false;
  }

  /**
   * @generated
   */
  protected boolean provides(CreateViewForKindOperation op) {
    /*
     if (op.getViewKind() == Node.class)
     return getNodeViewClass(op.getSemanticAdapter(), op.getContainerView(), op.getSemanticHint()) != null;
     if (op.getViewKind() == Edge.class)
     return getEdgeViewClass(op.getSemanticAdapter(), op.getContainerView(), op.getSemanticHint()) != null;
     */
    return true;
  }

  /**
   * @generated
   */
  protected boolean provides(CreateDiagramViewOperation op) {
    return es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.edit.parts.ProjectEditPart.MODEL_ID
        .equals(op.getSemanticHint())
        && es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.part.JadexAgentsVisualIDRegistry
            .getDiagramVisualID(getSemanticElement(op
                .getSemanticAdapter())) != -1;
  }

  /**
   * @generated
   */
  protected boolean provides(CreateNodeViewOperation op) {
    if (op.getContainerView() == null) {
      return false;
    }
    IElementType elementType = getSemanticElementType(op
        .getSemanticAdapter());
    EObject domainElement = getSemanticElement(op.getSemanticAdapter());
    int visualID;
    if (op.getSemanticHint() == 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 false;
      }
      visualID = es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.part.JadexAgentsVisualIDRegistry
          .getNodeVisualID(op.getContainerView(), domainElement);
    } else {
      visualID = es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.part.JadexAgentsVisualIDRegistry
          .getVisualID(op.getSemanticHint());
      if (elementType != null) {
        if (!es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.providers.JadexAgentsElementTypes
            .isKnownElementType(elementType)
            || (!(elementType instanceof IHintedType))) {
          return false; // foreign element type
        }
        String elementTypeHint = ((IHintedType) elementType)
            .getSemanticHint();
        if (!op.getSemanticHint().equals(elementTypeHint)) {
          return false; // if semantic hint is specified it should be the same as in element type
        }
        if (domainElement != null
            && visualID != es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.part.JadexAgentsVisualIDRegistry
                .getNodeVisualID(op.getContainerView(),
                    domainElement)) {
          return false; // visual id for node EClass should match visual id from element type
        }
      } else {
        if (!es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.edit.parts.ProjectEditPart.MODEL_ID
            .equals(es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.part.JadexAgentsVisualIDRegistry
                .getModelID(op.getContainerView()))) {
          return false; // foreign diagram
        }
        switch (visualID) {
        case es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.edit.parts.AgentEditPart.VISUAL_ID:
          if (domainElement == null
              || visualID != es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.part.JadexAgentsVisualIDRegistry
                  .getNodeVisualID(op.getContainerView(),
                      domainElement)) {
            return false; // visual id in semantic hint should match visual id for domain element
          }
          break;
        default:
          return false;
        }
      }
    }
    return es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.edit.parts.AgentEditPart.VISUAL_ID == visualID;
  }

  /**
   * @generated
   */
  protected boolean provides(CreateEdgeViewOperation op) {
    IElementType elementType = getSemanticElementType(op
        .getSemanticAdapter());
    if (!es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.providers.JadexAgentsElementTypes
        .isKnownElementType(elementType)
        || (!(elementType instanceof IHintedType))) {
      return false; // foreign element type
    }
    String elementTypeHint = ((IHintedType) elementType).getSemanticHint();
    if (elementTypeHint == null
        || (op.getSemanticHint() != null && !elementTypeHint.equals(op
            .getSemanticHint()))) {
      return false; // our hint is visual id and must be specified, and it should be the same as in element type
    }
    int visualID = es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.part.JadexAgentsVisualIDRegistry
        .getVisualID(elementTypeHint);
    EObject domainElement = getSemanticElement(op.getSemanticAdapter());
    if (domainElement != null
        && visualID != es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.part.JadexAgentsVisualIDRegistry
            .getLinkWithClassVisualID(domainElement)) {
      return false; // visual id for link EClass should match visual id from element type
    }
    return true;
  }

  /**
   * @generated
   */
  public Diagram createDiagram(IAdaptable semanticAdapter,
      String diagramKind, PreferencesHint preferencesHint) {
    Diagram diagram = NotationFactory.eINSTANCE.createDiagram();
    diagram.getStyles().add(NotationFactory.eINSTANCE.createDiagramStyle());
    diagram.setType(es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.edit.parts.ProjectEditPart.MODEL_ID);
    diagram.setElement(getSemanticElement(semanticAdapter));
    diagram.setMeasurementUnit(MeasurementUnit.PIXEL_LITERAL);
    return diagram;
  }

  /**
   * @generated
   */
  public Node createNode(IAdaptable semanticAdapter, View containerView,
      String semanticHint, int index, boolean persisted,
      PreferencesHint preferencesHint) {
    final EObject domainElement = getSemanticElement(semanticAdapter);
    final int visualID;
    if (semanticHint == null) {
      visualID = es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.part.JadexAgentsVisualIDRegistry
          .getNodeVisualID(containerView, domainElement);
    } else {
      visualID = es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.part.JadexAgentsVisualIDRegistry
          .getVisualID(semanticHint);
    }
    switch (visualID) {
    case es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.edit.parts.AgentEditPart.VISUAL_ID:
      return createAgent_2001(domainElement, containerView, index,
          persisted, preferencesHint);
    }
    // can't happen, provided #provides(CreateNodeViewOperation) is correct
    return null;
  }

  /**
   * @generated
   */
  public Edge createEdge(IAdaptable semanticAdapter, View containerView,
      String semanticHint, int index, boolean persisted,
      PreferencesHint preferencesHint) {
    IElementType elementType = getSemanticElementType(semanticAdapter);
    String elementTypeHint = ((IHintedType) elementType).getSemanticHint();
    switch (es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.part.JadexAgentsVisualIDRegistry
        .getVisualID(elementTypeHint)) {
    }
    // can never happen, provided #provides(CreateEdgeViewOperation) is correct
    return null;
  }

  /**
   * @generated
   */
  public Node createAgent_2001(EObject domainElement, View containerView,
      int index, boolean persisted, PreferencesHint preferencesHint) {
    Shape node = NotationFactory.eINSTANCE.createShape();
    node.setLayoutConstraint(NotationFactory.eINSTANCE.createBounds());
    node.setType(es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.part.JadexAgentsVisualIDRegistry
        .getType(es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.edit.parts.AgentEditPart.VISUAL_ID));
    ViewUtil.insertChildView(containerView, node, index, persisted);
    node.setElement(domainElement);
    stampShortcut(containerView, node);
    // initializeFromPreferences
    final IPreferenceStore prefStore = (IPreferenceStore) preferencesHint
        .getPreferenceStore();

    org.eclipse.swt.graphics.RGB lineRGB = PreferenceConverter.getColor(
        prefStore, IPreferenceConstants.PREF_LINE_COLOR);
    ViewUtil.setStructuralFeatureValue(node,
        NotationPackage.eINSTANCE.getLineStyle_LineColor(),
        FigureUtilities.RGBToInteger(lineRGB));
    FontStyle nodeFontStyle = (FontStyle) node
        .getStyle(NotationPackage.Literals.FONT_STYLE);
    if (nodeFontStyle != null) {
      FontData fontData = PreferenceConverter.getFontData(prefStore,
          IPreferenceConstants.PREF_DEFAULT_FONT);
      nodeFontStyle.setFontName(fontData.getName());
      nodeFontStyle.setFontHeight(fontData.getHeight());
      nodeFontStyle.setBold((fontData.getStyle() & SWT.BOLD) != 0);
      nodeFontStyle.setItalic((fontData.getStyle() & SWT.ITALIC) != 0);
      org.eclipse.swt.graphics.RGB fontRGB = PreferenceConverter
          .getColor(prefStore, IPreferenceConstants.PREF_FONT_COLOR);
      nodeFontStyle.setFontColor(FigureUtilities.RGBToInteger(fontRGB)
          .intValue());
    }
    org.eclipse.swt.graphics.RGB fillRGB = PreferenceConverter.getColor(
        prefStore, IPreferenceConstants.PREF_FILL_COLOR);
    ViewUtil.setStructuralFeatureValue(node,
        NotationPackage.eINSTANCE.getFillStyle_FillColor(),
        FigureUtilities.RGBToInteger(fillRGB));
    Node label5001 = createLabel(
        node,
        es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.part.JadexAgentsVisualIDRegistry
            .getType(es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.edit.parts.AgentNameEditPart.VISUAL_ID));
    return node;
  }

  /**
   * @generated
   */
  private void stampShortcut(View containerView, Node target) {
    if (!es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.edit.parts.ProjectEditPart.MODEL_ID
        .equals(es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.part.JadexAgentsVisualIDRegistry
            .getModelID(containerView))) {
      EAnnotation shortcutAnnotation = EcoreFactory.eINSTANCE
          .createEAnnotation();
      shortcutAnnotation.setSource("Shortcut"); //$NON-NLS-1$
      shortcutAnnotation
          .getDetails()
          .put("modelID", es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.edit.parts.ProjectEditPart.MODEL_ID); //$NON-NLS-1$
      target.getEAnnotations().add(shortcutAnnotation);
    }
  }

  /**
   * @generated
   */
  private Node createLabel(View owner, String hint) {
    DecorationNode rv = NotationFactory.eINSTANCE.createDecorationNode();
    rv.setType(hint);
    ViewUtil.insertChildView(owner, rv, ViewUtil.APPEND, true);
    return rv;
  }

  /**
   * @generated
   */
  private EObject getSemanticElement(IAdaptable semanticAdapter) {
    if (semanticAdapter == null) {
      return null;
    }
    EObject eObject = (EObject) semanticAdapter.getAdapter(EObject.class);
    if (eObject != null) {
      return EMFCoreUtil.resolve(
          TransactionUtil.getEditingDomain(eObject), eObject);
    }
    return null;
  }

  /**
   * @generated
   */
  private IElementType getSemanticElementType(IAdaptable semanticAdapter) {
    if (semanticAdapter == null) {
      return null;
    }
    return (IElementType) semanticAdapter.getAdapter(IElementType.class);
  }
}
TOP

Related Classes of es.upm.dit.gsi.eclipse.jadex.diagram.eclipseJadex.diagram.providers.JadexAgentsViewProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.