/**
* Copyright (c) 2010-2012 ISBAN S.L
*
* 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:
* Ruben De Dios (ISBAN S.L)
* Andrez Alvarez Mattos (ISBAN S.L)
*/
package org.eclipse.gmf.tooling.simplemap.model.triggers.link;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.gmf.gmfgraph.Connection;
import org.eclipse.gmf.gmfgraph.DiagramLabel;
import org.eclipse.gmf.gmfgraph.FigureDescriptor;
import org.eclipse.gmf.gmfgraph.Label;
import org.eclipse.gmf.gmfgraph.PolylineConnection;
import org.eclipse.gmf.gmfgraph.RealFigure;
import org.eclipse.gmf.tooldef.AbstractTool;
import org.eclipse.gmf.tooling.simplemap.model.triggers.AbstractTrigger;
import org.eclipse.gmf.tooling.simplemap.simplemappings.SimpleLinkMapping;
class SetLinkMappingNameTrigger extends AbstractTrigger {
private SimpleLinkMapping simpleLinkMapping;
private String newName;
public SetLinkMappingNameTrigger(TransactionalEditingDomain domain, SimpleLinkMapping linkMapping, String newName) {
super(domain);
this.simpleLinkMapping = linkMapping;
this.newName = newName;
}
@Override
public void executeTrigger() {
updateCanvas();
}
private void updateCanvas() {
Connection connectionToRename = simpleLinkMapping.getDiagramLink();
AbstractTool toolToRename = simpleLinkMapping.getTool();
DiagramLabel diagramLabelToRename = simpleLinkMapping.getDiagramLabel();
//Connection Name
if (connectionToRename != null && canRename(connectionToRename)) {
String newLinkName = getNewCanvasElementName(newName, connectionToRename);
connectionToRename.setName(newLinkName);
renameConnection(connectionToRename, newName);
}
//Label Mapping Name
String newDiagramLabelName = newName + "ConnectionName";
if (diagramLabelToRename != null && canRename(diagramLabelToRename)) {
String newLabelName = getNewCanvasElementName(newDiagramLabelName, diagramLabelToRename);
diagramLabelToRename.setName(newLabelName);
renameLabel(diagramLabelToRename, newName + "ConnectionLabel");
}
//Tool Name
if (toolToRename != null && canRename(toolToRename)) {
String newToolName = getNewToolName(newName, toolToRename);
toolToRename.setTitle(newToolName);
toolToRename.setDescription("Create new " + newName + "Connection");
}
}
private void renameConnection(Connection connectionToRename, String newElementName) {
String newFigureName = newElementName + "ConnectionFigure";
//Figure Descriptor Name
FigureDescriptor figDesc = connectionToRename.getFigure();
String newFigDescName = getNewCanvasElementName(newFigureName, figDesc);
figDesc.setName(newFigDescName);
//Figure Name
if (figDesc.getActualFigure() instanceof RealFigure)
((RealFigure) figDesc.getActualFigure()).setName(newFigDescName);
String newTargetDecorationName = newName + "TargetDecoration";
String newSourceDecorationName = newName + "SourceDecoration";
if (figDesc.getActualFigure() instanceof PolylineConnection) {
PolylineConnection polylineConnection = (PolylineConnection) figDesc.getActualFigure();
if (polylineConnection.getTargetDecoration() != null)
polylineConnection.getTargetDecoration().setName(newTargetDecorationName);
if (polylineConnection.getSourceDecoration() != null)
polylineConnection.getSourceDecoration().setName(newSourceDecorationName);
}
}
private void renameLabel(DiagramLabel labelToRename, String newElementName) {
String newFigureName = newElementName + "Figure";
//Figure Descriptor Name
FigureDescriptor figDesc = labelToRename.getFigure();
String newFigDescName = getNewCanvasElementName(newFigureName, figDesc);
figDesc.setName(newFigDescName);
//Figure Name
if (figDesc.getActualFigure() instanceof RealFigure)
((RealFigure) figDesc.getActualFigure()).setName(newFigDescName);
if (figDesc.getActualFigure() instanceof Label)
((Label) figDesc.getActualFigure()).setText(newName.toLowerCase());
}
}