Package org.fusesource.ide.camel.editor.commands

Source Code of org.fusesource.ide.camel.editor.commands.DiagramOperations

/*******************************************************************************
* Copyright (c) 2013 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
*     Red Hat, Inc. - initial API and implementation
******************************************************************************/

package org.fusesource.ide.camel.editor.commands;

import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.transaction.RecordingCommand;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.emf.transaction.util.TransactionUtil;
import org.eclipse.graphiti.mm.pictograms.Diagram;
import org.eclipse.graphiti.platform.IDiagramBehavior;
import org.eclipse.graphiti.ui.services.GraphitiUi;
import org.eclipse.swt.widgets.Display;
import org.fusesource.ide.camel.editor.editor.RiderDesignEditor;
import org.fusesource.ide.camel.model.AbstractNode;
import org.fusesource.ide.camel.model.RouteSupport;


public class DiagramOperations {

  public static LayoutCommand layoutDiagram(RiderDesignEditor designEditor) {
    TransactionalEditingDomain editingDomain = createEditingDomain(designEditor);
    LayoutCommand operation = new LayoutCommand(designEditor, editingDomain);
    execute(editingDomain, operation, false);
    return operation;
  }

  public static UpdateCommand updateSelectedNode(RiderDesignEditor designEditor) {
    TransactionalEditingDomain editingDomain = createEditingDomain(designEditor);
    UpdateCommand operation = new UpdateCommand(designEditor, editingDomain, designEditor.getSelectedNode());
    execute(editingDomain, operation, true);

    return operation;
  }

  public static UpdateCommand updateDiagram(RiderDesignEditor designEditor) {
    TransactionalEditingDomain editingDomain = createEditingDomain(designEditor);
    UpdateCommand operation = new UpdateCommand(designEditor, editingDomain, designEditor.getSelectedRoute());
    execute(editingDomain, operation, true);

    return operation;
  }

  public static AddNodeCommand addNode(RiderDesignEditor designEditor, Class<? extends AbstractNode> aClass, AbstractNode selectedNode) {
    TransactionalEditingDomain editingDomain = createEditingDomain(designEditor);
    AddNodeCommand operation = new AddNodeCommand(designEditor, editingDomain, aClass, selectedNode);
    execute(editingDomain, operation, true);
    return operation;
  }

  public static AddNewRouteCommand addNewRoute(RiderDesignEditor designEditor) {
    TransactionalEditingDomain editingDomain = createEditingDomain(designEditor);
    AddNewRouteCommand operation = new AddNewRouteCommand(designEditor, editingDomain);
    execute(editingDomain, operation, true);
    return operation;
  }

  public static DeleteRouteCommand deleteRoute(RiderDesignEditor designEditor, RouteSupport selectedRoute) {
    TransactionalEditingDomain editingDomain = createEditingDomain(designEditor);
    DeleteRouteCommand operation = new DeleteRouteCommand(designEditor, editingDomain, selectedRoute);
    execute(editingDomain, operation, true);
    return operation;
  }
 
  public static DeleteNodeCommand deleteNode(RiderDesignEditor designEditor, AbstractNode selectedNode) {
    TransactionalEditingDomain editingDomain = createEditingDomain(designEditor);
    DeleteNodeCommand operation = new DeleteNodeCommand(designEditor, editingDomain, selectedNode);
    execute(editingDomain, operation, true);
    return operation;
  }

  public static void execute(TransactionalEditingDomain editingDomain, RecordingCommand operation, boolean modelChanged) {
    editingDomain.getCommandStack().execute(operation);
    if (!modelChanged) {
      // if the model isn't changed we just reset the dirty marker which
      // is done by flushing the command stack
      editingDomain.getCommandStack().flush();
    }
  }

  protected static synchronized TransactionalEditingDomain createEditingDomain(RiderDesignEditor designEditor) {
    TransactionalEditingDomain editingDomain = designEditor.getEditingDomain();
    Diagram diagram = designEditor.getDiagram();
    if (diagram == null) {
      return null;
    }
    if (editingDomain == null) {
      IDiagramBehavior diagramBehavior = designEditor.getDiagramTypeProvider().getDiagramBehavior();
      if (diagramBehavior != null) {
        editingDomain = diagramBehavior.getEditingDomain();
      }
    }
    if (editingDomain == null) {
      ResourceSet resourceSet = null;
      Resource eResource = diagram.eResource();
      if (eResource != null) {
        resourceSet = eResource.getResourceSet();
      }
      if (resourceSet == null) {
        resourceSet = new ResourceSetImpl();
      }

      editingDomain = TransactionUtil.getEditingDomain(resourceSet);
      if (editingDomain == null) {
        editingDomain = GraphitiUi.getEmfService().createResourceSetAndEditingDomain();
      }
    }
   
    if (designEditor.getEditingDomain() == null) {
      designEditor.setEditingDomain(editingDomain);
    }
   
    return editingDomain;
  }

  public static ChangeGridColorCommand updateGridColor(RiderDesignEditor designEditor) {
    TransactionalEditingDomain editingDomain = createEditingDomain(designEditor);
    ChangeGridColorCommand operation = new ChangeGridColorCommand(designEditor, editingDomain);
    execute(editingDomain, operation, false);

    return operation;
  }
 
  public static void highlightNode(final RiderDesignEditor designEditor, final AbstractNode node,  final boolean highlight) {
    Display.getDefault().asyncExec(new Runnable() {
      @Override
      public void run() {
        TransactionalEditingDomain editingDomain = createEditingDomain(designEditor);
        if (editingDomain != null) {
          HighlightNodeCommand operation = new HighlightNodeCommand(designEditor, editingDomain, node, highlight);
          execute(editingDomain, operation, false);
        }
      }
    });
  }
}
TOP

Related Classes of org.fusesource.ide.camel.editor.commands.DiagramOperations

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.