package org.eclipse.uml2.diagram.sequence.internal.layout.alien; //package com.borland.tg.uml20.interaction.internal.layout.alien; // //import com.borland.diagram.layout.LayoutAccess; //import com.borland.diagram.layout.graph.Edge; //import com.borland.diagram.layout.graph.Graph; //import com.borland.diagram.layout.graph.GraphElement; //import com.borland.diagram.layout.graph.GraphElementFactory; //import com.borland.diagram.layout.graph.InfoStore; //import com.borland.diagram.layout.graph.Vertex; //import com.borland.diagram.layout.identification.GraphElementId; //import com.borland.diagram.layout.identification.IdGenerator; //import com.borland.tg.uml20.interaction.internal.layout.abstractgde.AbsDiagram; //import com.borland.tg.uml20.interaction.internal.layout.abstractgde.AbsLink; //import com.borland.tg.uml20.interaction.internal.layout.abstractgde.AbsLayoutAccess; //import com.borland.tg.uml20.interaction.internal.layout.abstractgde.AbsNode; //import com.borland.tg.uml20.interaction.internal.layout.abstractgde.AbsNodeEnumeration; //import com.borland.tg.uml20.interaction.internal.layout.model.LmAlienElement; //import com.borland.tg.uml20.interaction.internal.layout.model.LmObjectsResolver; //import java.awt.Dimension; //import java.awt.Rectangle; //import java.util.HashMap; //import java.util.Iterator; //import java.util.LinkedHashSet; //import java.util.List; //import java.util.Map; // ///** // * We assume that at least one of link ends is a node. // * // * // */ //public class AlienElementsFullLayout { // AlienElementsFullLayout (AbsLayoutAccess layoutAccess, LmObjectsResolver lmObjectsResolver) { // myLayoutAccess = layoutAccess; // myLmObjectResolver = lmObjectsResolver; // // myGeFactory = LayoutAccess.getFactoryStorage().getGraphElementFactory(); // IdGenerator idg = myLayoutAccess.getLayoutManager().getIdGenerator(); // myGraph = myGeFactory.createGraph(idg); // } // // void readElements(AbsDiagram absDiagram, List alienLinksOrderedList) { // collectNodes(absDiagram.getInteractionAbsNode().subnodes()); // collectLinks(alienLinksOrderedList); // } // // Dimension layout(int startX, int startY) { // InfoStore layoutResult = layoutGraph(startX, startY); // convertToGde(layoutResult); // // Rectangle area = new Rectangle(); // LayoutAccess.getUtilManager().getGraphUtil().calculateGraphBounds(myGraph, area); // return area.getSize(); // } // // private InfoStore layoutGraph(int startX, int startY) { // return LayoutAccess.getUtilManager().getLayoutUtil().layoutGraph(myGraph, startX, startY); // } // // private void convertToGde(InfoStore layoutResult) { // if(layoutResult == null){ // return; // } // convertNodesToGde(layoutResult); // convertLinksToGde(layoutResult); // } // // private void convertNodesToGde(InfoStore layoutResult) { // Iterator graphNodes = layoutResult.vertexInfos(); // while (graphNodes.hasNext()) { // Vertex.Info vertexInfo = (Vertex.Info) graphNodes.next(); // // AbsNode absNode = (AbsNode)myIdToAbsElement.get(vertexInfo.getId()); // myLayoutAccess.convertToGde(vertexInfo, absNode); // } // } // // private void convertLinksToGde(InfoStore layoutResult) { // convertAlienToAlienLinksToGde(layoutResult); // convertAlienToNativeLinksToGde(); // } // // private void convertAlienToAlienLinksToGde(InfoStore layoutResult) { // Iterator graphLinks = layoutResult.edgeInfos(); // while (graphLinks.hasNext()) { // Edge.Info edgeInfo = (Edge.Info) graphLinks.next(); // // AbsLink absLink = (AbsLink)myIdToAbsElement.get(edgeInfo.getId()); // assert ! myAlienToNativeAbsLinks.contains(absLink); // myLayoutAccess.convertToGde(edgeInfo, absLink); // } // } // // private void convertAlienToNativeLinksToGde() { // for (Iterator it = myAlienToNativeAbsLinks.iterator(); it.hasNext(); ) { // AbsLink next = (AbsLink)it.next(); // myLayoutAccess.layoutLink(next); // } // } // // private void collectLinks(List orderedAlienLinks) { // myAlienToNativeAbsLinks = new LinkedHashSet(orderedAlienLinks.size()); // // for (Iterator links = orderedAlienLinks.iterator(); links.hasNext(); ) { // AbsLink absLink = (AbsLink)links.next(); // // myLayoutAccess.totalDiscardLinkPositions(absLink);// discard current link positions to perform full layout // // Edge.Info edgeInfo = myLayoutAccess.convertToInfo(absLink); // // GraphElementId edgeId = edgeInfo.getId(); // // GraphElement start = myGraph.getElement(edgeInfo.getStartElementId()); // GraphElement end = myGraph.getElement(edgeInfo.getEndElementId()); // // if (start == null ^ end == null) { // myAlienToNativeAbsLinks.add(absLink); // } // // if (start == null || end == null) { // assert !(start == null && end == null) : "Native link found while alien is expected"; //$NON-NLS-1$ // continue; // } // // Edge edge = myGeFactory.createEdge(edgeId, start, end); // edge.getDescriptor().readFrom(edgeInfo); // // myGraph.addEdge(edge); // myIdToAbsElement.put(edgeId, absLink); // } // } // // private void collectNodes(AbsNodeEnumeration nodes) { // while (nodes.hasMoreElements()) { // AbsNode absNode = nodes.nextGdeNode(); // if (! isAlienElement(absNode)) { // continue; // } // // Vertex.Info vertexInfo = myLayoutAccess.convertToInfo(absNode); // // GraphElementId originalId = vertexInfo.getId();// store EditPart in this id // // Vertex vertex = myGeFactory.createVertex(originalId); // vertex.getDescriptor().readFrom(vertexInfo); // // myGraph.addVertex(vertex); // myIdToAbsElement.put(originalId, absNode); // // collectNodes(absNode.subnodes()); // } // } // // private boolean isAlienElement(AbsNode absNode) { // Object lmObject = myLmObjectResolver.getLmObject(absNode); // return (lmObject instanceof LmAlienElement); // } // // private final AbsLayoutAccess myLayoutAccess; // private final LmObjectsResolver myLmObjectResolver; // // private final Graph myGraph; // private final GraphElementFactory myGeFactory; // private final Map myIdToAbsElement = new HashMap(); // // private LinkedHashSet myAlienToNativeAbsLinks;//This links should be layouted after all alien to alien links have been layouted //}