/**
* <copyright>
* Copyright (c) 2010-2014 Henshin developers. 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
* </copyright>
*/
package org.eclipse.emf.henshin.model.actions;
import org.eclipse.emf.henshin.model.Edge;
import org.eclipse.emf.henshin.model.Graph;
import org.eclipse.emf.henshin.model.HenshinFactory;
import org.eclipse.emf.henshin.model.MappingList;
import org.eclipse.emf.henshin.model.Node;
public class EdgeMapEditor extends AbstractMapEditor<Edge> {
// Node map editor:
private NodeMapEditor nodeMapEditor;
/**
* Default constructor.
*/
public EdgeMapEditor(Graph source, Graph target, MappingList mappings) {
super(source, target, mappings);
nodeMapEditor = new NodeMapEditor(this);
}
/**
* Alternative constructor.
*/
public EdgeMapEditor(Graph target) {
super(target);
nodeMapEditor = new NodeMapEditor(this);
}
/**
* Alternative constructor.
*/
public EdgeMapEditor(NodeMapEditor nodeMapEditor) {
super(nodeMapEditor);
this.nodeMapEditor = nodeMapEditor;
}
/*
* (non-Javadoc)
* @see org.eclipse.emf.henshin.diagram.edit.maps.AbstractMapEditor#doCopy(java.lang.Object)
*/
@Override
protected Edge doCopy(Edge edge) {
Edge opposite = getOpposite(edge);
if (opposite==null) {
opposite = HenshinFactory.eINSTANCE.createEdge();
opposite.setType( edge.getType() );
opposite.setSource( nodeMapEditor.performCopy(edge.getSource()) );
opposite.setTarget( nodeMapEditor.performCopy(edge.getTarget()) );
opposite.setGraph( getOpposite(edge.getGraph()) );
}
return opposite;
}
/*
* (non-Javadoc)
* @see org.eclipse.emf.henshin.diagram.edit.maps.AbstractMapEditor#doMove(java.lang.Object)
*/
@Override
protected void doMove(Edge edge) {
Node newSource = nodeMapEditor.performCopy(edge.getSource());
Node newTarget = nodeMapEditor.performCopy(edge.getTarget());
if (newSource!=null && newTarget!=null) {
edge.setSource(newSource);
edge.setTarget(newTarget);
edge.setGraph(getOpposite(edge.getGraph()));
}
}
/*
* (non-Javadoc)
* @see org.eclipse.emf.henshin.diagram.edit.maps.AbstractMapEditor#doRemove(java.lang.Object)
*/
@Override
protected void doRemove(Edge edge) {
edge.setSource(null);
edge.setTarget(null);
edge.setGraph(null);
}
/*
* (non-Javadoc)
* @see org.eclipse.emf.henshin.model.actions.impl.AbstractMapEditor#doReplace(org.eclipse.emf.henshin.model.GraphElement)
*/
@Override
protected Edge doReplace(Edge edge) {
Edge opposite = getOpposite(edge);
opposite.setSource(edge.getSource());
opposite.setTarget(edge.getTarget());
opposite.setGraph(edge.getGraph());
edge.getGraph().removeEdge(edge);
return opposite;
}
}