/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.diagram.ui.util;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.eclipse.draw2d.geometry.Point;
import org.teiid.core.designer.util.CoreArgCheck;
import org.teiid.designer.core.ModelerCore;
import org.teiid.designer.metamodels.diagram.DiagramLink;
import org.teiid.designer.metamodels.diagram.DiagramLinkType;
import org.teiid.designer.metamodels.diagram.DiagramPosition;
import org.teiid.designer.ui.viewsupport.ModelObjectUtilities;
/**
* @since 8.0
*/
public class DiagramLinkAdapter extends DiagramEntityAdapter {
public static List getBendpoints( DiagramLink diagramLink ) {
CoreArgCheck.isNotNull(diagramLink);
List positions = diagramLink.getRoutePoints();
if (positions != null && !positions.isEmpty()) {
List bendpoints = new ArrayList(positions.size());
Iterator iter = positions.iterator();
DiagramPosition position = null;
while (iter.hasNext()) {
position = (DiagramPosition)iter.next();
bendpoints.add(new Point(position.getXPosition(), position.getYPosition()));
}
return bendpoints;
}
return Collections.EMPTY_LIST;
}
public static void setBendpoints( DiagramLink diagramLink,
List bendpoints ) {
CoreArgCheck.isNotNull(diagramLink);
boolean requiredStart = ModelerCore.startTxn(false, false, "Set Link Bendpoints", diagramLink); //$NON-NLS-1$
boolean succeeded = false;
try {
// Remove all current point
List currentPoints = new ArrayList(diagramLink.getRoutePoints());
if (!currentPoints.isEmpty()) {
ModelObjectUtilities.delete(currentPoints, false, false, diagramLink);
}
DiagramUiUtilities.createDiagramPositions(diagramLink, bendpoints);
succeeded = true;
} finally {
if (requiredStart) {
if (succeeded) {
ModelerCore.commitTxn();
} else {
ModelerCore.rollbackTxn();
}
}
}
}
public static void addBendpoint( DiagramLink diagramLink,
int index,
Point newBendpoint ) {
CoreArgCheck.isNotNull(diagramLink);
boolean requiredStart = ModelerCore.startTxn(false, false, "Add Link Bendpoint", diagramLink); //$NON-NLS-1$
boolean succeeded = false;
try {
DiagramPosition newPos = DiagramUiUtilities.createDiagramPosition(diagramLink, newBendpoint);
diagramLink.getRoutePoints().move(index, newPos);
succeeded = true;
} finally {
if (requiredStart) {
if (succeeded) {
ModelerCore.commitTxn();
} else {
ModelerCore.rollbackTxn();
}
}
}
}
public static void removeBendpoint( DiagramLink diagramLink,
int index ) {
CoreArgCheck.isNotNull(diagramLink);
boolean requiredStart = ModelerCore.startTxn(false, false, "Remove Link Bendpoint", diagramLink); //$NON-NLS-1$
boolean succeeded = false;
try {
// Remove all current point
List currentPoints = diagramLink.getRoutePoints();
currentPoints.remove(index);
succeeded = true;
} finally {
if (requiredStart) {
if (succeeded) {
ModelerCore.commitTxn();
} else {
ModelerCore.rollbackTxn();
}
}
}
}
public static void clearBendpoints( DiagramLink diagramLink ) {
CoreArgCheck.isNotNull(diagramLink);
boolean requiredStart = ModelerCore.startTxn(false, false, "Remove Link Bendpoint", diagramLink); //$NON-NLS-1$
boolean succeeded = false;
try {
// Remove all current point
// List currentPoints = diagramLink.getRoutePoints();
int nPoints = diagramLink.getRoutePoints().size();
for (int i = nPoints - 1; i >= 0; i--) {
removeBendpoint(diagramLink, i);
}
// currentPoints.clear();
succeeded = true;
} finally {
if (requiredStart) {
if (succeeded) {
ModelerCore.commitTxn();
} else {
ModelerCore.rollbackTxn();
}
}
}
}
public static void setBendpoint( DiagramLink diagramLink,
int index,
Point newLocation ) {
CoreArgCheck.isNotNull(diagramLink);
boolean requiredStart = ModelerCore.startTxn(false, false, "Add Link Bendpoint", diagramLink); //$NON-NLS-1$
boolean succeeded = false;
try {
// Remove all current point
List currentPoints = diagramLink.getRoutePoints();
((DiagramPosition)currentPoints.get(index)).setXPosition(newLocation.x);
((DiagramPosition)currentPoints.get(index)).setYPosition(newLocation.y);
succeeded = true;
} finally {
if (requiredStart) {
if (succeeded) {
ModelerCore.commitTxn();
} else {
ModelerCore.rollbackTxn();
}
}
}
}
public static int getType( DiagramLink diagramLink ) {
int type = DiagramLinkType.ORTHOGONAL;
type = diagramLink.getType().getValue();
return type;
}
public static void setType( DiagramLink diagramLink,
int newType ) {
CoreArgCheck.isNotNull(diagramLink);
boolean requiredStart = ModelerCore.startTxn(false, false, "Set Link Type", diagramLink); //$NON-NLS-1$
boolean succeeded = false;
try {
// Remove all current point
DiagramLinkType theType = DiagramLinkType.get(newType);
diagramLink.setType(theType);
succeeded = true;
} finally {
if (requiredStart) {
if (succeeded) {
ModelerCore.commitTxn();
} else {
ModelerCore.rollbackTxn();
}
}
}
}
}