package org.eclipse.uml2.diagram.sequence.internal.layout.model; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import org.eclipse.emf.ecore.EObject; import org.eclipse.gmf.runtime.notation.View; import org.eclipse.uml2.diagram.sequence.internal.layout.abstractgde.AbsNode; import org.eclipse.uml2.diagram.sequence.internal.missed.MissedMethods; /** * */ class SdLayoutUtil { static void assertCorrectSubList(List list, List subList) { Iterator it = list.iterator(); Iterator subIt = subList.iterator(); mainCycle: while (subIt.hasNext()) { Object o1 = subIt.next(); while (it.hasNext()) { Object o2 = it.next(); if (o2 == o1) { continue mainCycle; } } throw new RuntimeException("Cannot find element "+o1+" from subList "+subList+" in list "+list); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } } /** * @return "oldIndexList" */ static List<Integer> getReorderAgainstModel(List<LMBracketContainer> elements, View containerView) { LinkedHashMap<EObject,Integer> entity2bracketIndex = new LinkedHashMap<EObject,Integer>(); int index = 0; for (Iterator<LMBracketContainer> it=elements.iterator(); it.hasNext(); ) { LMBracketContainer bracket1 = it.next(); AbsNode node1 = bracket1.getGdeNode(); EObject nodeEntity1 = node1.getModelEntity(); Integer anotherBracketIndex = entity2bracketIndex.put(nodeEntity1, index); if (anotherBracketIndex != null) { throw new RuntimeException("In container 2 brackets are associated with one entity"); //$NON-NLS-1$ } index ++; } List<Integer> oldIndexList = new ArrayList<Integer>(elements.size()); for (EObject nextEntity : MissedMethods._arcasMetamodelSpecific().getArcasMetamodelChildren(containerView)) { Integer oldIndex = entity2bracketIndex.remove(nextEntity); if (oldIndex != null) { oldIndexList.add(oldIndex); } } oldIndexList.addAll(entity2bracketIndex.values()); return oldIndexList; } static <T> void reorderList(List<Integer> oldIndexList, List<T> myList) { if (myList.size() != oldIndexList.size()) { throw new RuntimeException("Wrong number of elements to replace"); //$NON-NLS-1$ } List<T> newBracketsList = new ArrayList<T>(myList.size()); for (Iterator<Integer> it = oldIndexList.iterator(); it.hasNext(); ) { Integer oldIndex = it.next(); int index = oldIndex.intValue(); newBracketsList.add(myList.get(index)); } myList.clear(); myList.addAll(newBracketsList); } }