package com.mxgraph.io; import com.mxgraph.io.vdx.PageShapeIDKey; import com.mxgraph.io.vdx.mxMastersManager; import com.mxgraph.io.vdx.mxPropertiesManager; import com.mxgraph.io.vdx.mxStyleSheetManager; import com.mxgraph.io.vdx.mxVdxConstants; import com.mxgraph.io.vdx.mxVdxShape; import com.mxgraph.io.vdx.mxVdxUtils; import com.mxgraph.model.mxCell; import com.mxgraph.model.mxGeometry; import com.mxgraph.model.mxICell; import com.mxgraph.model.mxIGraphModel; import com.mxgraph.util.mxPoint; import com.mxgraph.view.mxCellState; import com.mxgraph.view.mxConnectionConstraint; import com.mxgraph.view.mxGraph; import com.mxgraph.view.mxGraphView; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class mxVdxCodec { private static HashMap vertexMap = new HashMap(); private static HashMap edgeShapeMap = new HashMap(); private static HashMap vertexShapeMap = new HashMap(); private static HashMap parentsMap = new HashMap(); private static HashMap backgroundsMap = new HashMap(); private static HashMap cellsMap = new HashMap(); private static ArrayList shapeIDList = new ArrayList(); private static double pageHeight = 0.0D; private static double actualPageHeight = 0.0D; private static int pageNumber = 0; private static boolean htmlLabelsEnable = true; public static boolean isHtmlLabelsEnable() { return htmlLabelsEnable; } public static void setHtmlLabelsEnable(boolean paramBoolean) { htmlLabelsEnable = paramBoolean; } private static void cleanMaps() { vertexMap.clear(); edgeShapeMap.clear(); vertexShapeMap.clear(); parentsMap.clear(); backgroundsMap.clear(); pageHeight = 0.0D; actualPageHeight = 0.0D; } private static mxPoint getPageDimentions(Element paramElement) { Element localElement1 = (Element)paramElement.getElementsByTagName(mxVdxConstants.PAGE_HEIGHT).item(0); double d1 = Double.valueOf(localElement1.getTextContent()).doubleValue() * mxVdxUtils.conversionFactor(); Element localElement2 = (Element)paramElement.getElementsByTagName(mxVdxConstants.PAGE_WIDTH).item(0); double d2 = Double.valueOf(localElement2.getTextContent()).doubleValue() * mxVdxUtils.conversionFactor(); return new mxPoint(d2, d1); } private static mxPoint calculateAbsolutePoint(mxCell parammxCell, mxGraph parammxGraph, mxPoint parammxPoint) { if (parammxCell != null) { mxCellState localmxCellState = parammxGraph.getView().getState(parammxCell); if (localmxCellState != null) { parammxPoint.setX(parammxPoint.getX() + localmxCellState.getX()); parammxPoint.setY(parammxPoint.getY() + localmxCellState.getY()); } } return parammxPoint; } private static mxCell addShape(mxGraph parammxGraph, Object paramObject, Element paramElement, double paramDouble) { mxVdxShape localmxVdxShape = new mxVdxShape(paramElement); if ((paramElement.getAttribute(mxVdxConstants.TYPE).equals(mxVdxConstants.TYPE_SHAPE)) || (paramElement.getAttribute(mxVdxConstants.TYPE).equals(mxVdxConstants.TYPE_GROUP))) { String str = localmxVdxShape.getId(); shapeIDList.add(new PageShapeIDKey(pageNumber, str)); if (localmxVdxShape.isVertexShape()) { mxCell localmxCell = null; if (localmxVdxShape.isComplexShape()) localmxCell = localmxVdxShape.addComplexShapeToGraph(parammxGraph, paramObject, paramDouble); else localmxCell = localmxVdxShape.addSimpleShapeToGraph(parammxGraph, paramObject, paramDouble); vertexMap.put(new PageShapeIDKey(pageNumber, str), localmxCell); vertexShapeMap.put(new PageShapeIDKey(pageNumber, str), localmxVdxShape); cellsMap.put(new PageShapeIDKey(pageNumber, str), localmxCell); return localmxCell; } edgeShapeMap.put(new PageShapeIDKey(pageNumber, str), localmxVdxShape); } return null; } private static Object addConectedEdge(mxGraph parammxGraph, Element paramElement1, Element paramElement2) { mxCell localmxCell1 = null; String str1 = paramElement1.getAttribute(mxVdxConstants.FROM_SHEET); mxVdxShape localmxVdxShape1 = (mxVdxShape)edgeShapeMap.get(new PageShapeIDKey(pageNumber, str1)); edgeShapeMap.remove(new PageShapeIDKey(pageNumber, str1)); if (localmxVdxShape1 != null) { Object localObject1 = parentsMap.get(new PageShapeIDKey(pageNumber, localmxVdxShape1.getId())); double d1 = pageHeight; mxCell localmxCell2 = (mxCell)localObject1; if (localmxCell2 != null) { localObject2 = localmxCell2.getGeometry(); if (localObject2 != null) { d1 = ((mxGeometry)localObject2).getHeight(); d1 += pageHeight - actualPageHeight; } } Object localObject2 = localmxVdxShape1.getBeginXY(d1); localObject2 = calculateAbsolutePoint((mxCell)localObject1, parammxGraph, (mxPoint)localObject2); mxPoint localmxPoint1 = localmxVdxShape1.getEndXY(d1); localmxPoint1 = calculateAbsolutePoint((mxCell)localObject1, parammxGraph, localmxPoint1); mxCell localmxCell3 = null; mxCell localmxCell4 = null; mxPoint localmxPoint2 = null; mxPoint localmxPoint3 = null; String str2 = localmxVdxShape1.getTextLabel(); String str3 = paramElement1.getAttribute(mxVdxConstants.TO_SHEET); mxVdxShape localmxVdxShape2 = (mxVdxShape)vertexShapeMap.get(new PageShapeIDKey(pageNumber, str3)); if ((paramElement1.getAttribute(mxVdxConstants.FROM_CELL).equals(mxVdxConstants.END_X)) || (localmxVdxShape2 == null)) { localmxCell3 = (mxCell)parammxGraph.insertVertex(localObject1, null, null, ((mxPoint)localObject2).getX(), ((mxPoint)localObject2).getY(), 0.0D, 0.0D); localmxPoint2 = new mxPoint(0.0D, 0.0D); paramElement2 = paramElement1; } else { localmxCell3 = (mxCell)vertexMap.get(new PageShapeIDKey(pageNumber, str3)); localObject3 = localmxVdxShape2.getDimentions(); double d2 = pageHeight; if ((localmxCell3.getParent() != null) && (localmxCell3.getParent().getGeometry() != null)) { d2 = localmxCell3.getParent().getGeometry().getHeight(); d2 += pageHeight - actualPageHeight; } mxPoint localmxPoint4 = localmxVdxShape2.getOriginPoint(d2); mxPoint localmxPoint5 = calculateAbsolutePoint((mxCell)localmxCell3.getParent(), parammxGraph, localmxPoint4); localmxPoint2 = new mxPoint((((mxPoint)localObject2).getX() - localmxPoint5.getX()) / ((mxPoint)localObject3).getX(), (((mxPoint)localObject2).getY() - localmxPoint5.getY()) / ((mxPoint)localObject3).getY()); } if (paramElement2 != null) { localObject3 = paramElement2.getAttribute(mxVdxConstants.TO_SHEET); localObject4 = (mxVdxShape)vertexShapeMap.get(new PageShapeIDKey(pageNumber, (String)localObject3)); if (localObject4 != null) { localmxCell4 = (mxCell)vertexMap.get(new PageShapeIDKey(pageNumber, (String)localObject3)); localObject5 = ((mxVdxShape)localObject4).getDimentions(); double d3 = pageHeight; if ((localmxCell4.getParent() != null) && (localmxCell4.getParent().getGeometry() != null)) { d3 = localmxCell4.getParent().getGeometry().getHeight(); d3 += pageHeight - actualPageHeight; } mxPoint localmxPoint6 = ((mxVdxShape)localObject4).getOriginPoint(d3); mxPoint localmxPoint7 = calculateAbsolutePoint((mxCell)localmxCell4.getParent(), parammxGraph, localmxPoint6); localmxPoint3 = new mxPoint((localmxPoint1.getX() - localmxPoint7.getX()) / ((mxPoint)localObject5).getX(), (localmxPoint1.getY() - localmxPoint7.getY()) / ((mxPoint)localObject5).getY()); } else { localmxCell4 = (mxCell)parammxGraph.insertVertex(localObject1, null, null, localmxPoint1.getX(), localmxPoint1.getY(), 0.0D, 0.0D); localmxPoint3 = new mxPoint(0.0D, 0.0D); } } else { localmxCell4 = (mxCell)parammxGraph.insertVertex(localObject1, null, null, localmxPoint1.getX(), localmxPoint1.getY(), 0.0D, 0.0D); localmxPoint3 = new mxPoint(0.0D, 0.0D); } localmxPoint2 = mxVdxUtils.adjustConstraint(localmxPoint2); localmxPoint3 = mxVdxUtils.adjustConstraint(localmxPoint3); Object localObject3 = localmxVdxShape1.getStyleFromEdgeShape(d1); localmxCell1 = (mxCell)parammxGraph.insertEdge(localObject1, null, str2, localmxCell3, localmxCell4, (String)localObject3); parammxGraph.setConnectionConstraint(localmxCell1, localmxCell3, true, new mxConnectionConstraint(localmxPoint2, false)); parammxGraph.setConnectionConstraint(localmxCell1, localmxCell4, false, new mxConnectionConstraint(localmxPoint3, false)); Object localObject4 = localmxCell1.getGeometry(); Object localObject5 = localmxVdxShape1.getRoutingPoints(d1); ((mxGeometry)localObject4).setPoints((List)localObject5); cellsMap.put(new PageShapeIDKey(pageNumber, str1), localmxCell1); } return localmxCell1; } private static Object addNotConnectedEdge(mxGraph parammxGraph, Object paramObject, mxVdxShape parammxVdxShape) { mxCell localmxCell1 = null; String str1 = parammxVdxShape.getTextLabel(); double d = pageHeight; mxCell localmxCell2 = (mxCell)paramObject; if (localmxCell2 != null) { localObject = localmxCell2.getGeometry(); if (localObject != null) d = ((mxGeometry)localObject).getHeight(); } Object localObject = parammxVdxShape.getBeginXY(d); mxPoint localmxPoint1 = parammxVdxShape.getEndXY(d); mxCell localmxCell3 = (mxCell)parammxGraph.insertVertex(paramObject, null, null, localmxPoint1.getX(), localmxPoint1.getY(), 0.0D, 0.0D); mxCell localmxCell4 = (mxCell)parammxGraph.insertVertex(paramObject, null, null, ((mxPoint)localObject).getX(), ((mxPoint)localObject).getY(), 0.0D, 0.0D); String str2 = parammxVdxShape.getStyleFromEdgeShape(d); mxPoint localmxPoint2 = new mxPoint(0.0D, 0.0D); mxPoint localmxPoint3 = new mxPoint(0.0D, 0.0D); localmxCell1 = (mxCell)parammxGraph.insertEdge(localmxCell4.getParent(), null, str1, localmxCell4, localmxCell3, str2); parammxGraph.setConnectionConstraint(localmxCell1, localmxCell4, true, new mxConnectionConstraint(localmxPoint2, false)); parammxGraph.setConnectionConstraint(localmxCell1, localmxCell3, false, new mxConnectionConstraint(localmxPoint3, false)); mxGeometry localmxGeometry = localmxCell1.getGeometry(); List localList = parammxVdxShape.getRoutingPoints(d); localmxGeometry.setPoints(localList); cellsMap.put(new PageShapeIDKey(pageNumber, parammxVdxShape.getId()), localmxCell1); return localmxCell1; } private static Element findSigConnect(List paramList, Element paramElement, int paramInt) { int i = paramList.size(); String str1 = paramElement.getAttribute(mxVdxConstants.FROM_SHEET); Element localElement = null; int j = 0; for (int k = paramInt + 1; (k < i) && (j == 0); ++k) { localElement = (Element)paramList.get(k); String str2 = localElement.getAttribute(mxVdxConstants.FROM_SHEET); if (str1.equals(str2)) j = 1; else localElement = null; } return localElement; } private static void decodeShape(Element paramElement, mxGraph parammxGraph, Object paramObject) { mxVdxShape localmxVdxShape = new mxVdxShape(paramElement); if (localmxVdxShape.isComplexShape()) return; NodeList localNodeList1 = paramElement.getChildNodes(); if (!(mxVdxUtils.nodeListHasTag(localNodeList1, mxVdxConstants.SHAPES))) return; Element localElement1 = mxVdxUtils.nodeListTag(localNodeList1, mxVdxConstants.SHAPES); NodeList localNodeList2 = localElement1.getChildNodes(); List localList = mxVdxUtils.nodeListTags(localNodeList2, mxVdxConstants.SHAPE); int i = localList.size(); double d = localmxVdxShape.getDimentions().getY(); for (int j = 0; j < i; ++j) { Element localElement2 = (Element)localList.get(j); String str = localElement2.getAttribute(mxVdxConstants.ID); parentsMap.put(new PageShapeIDKey(pageNumber, str), paramObject); mxCell localmxCell = addShape(parammxGraph, paramObject, localElement2, d); if (localmxCell == null) continue; decodeShape(localElement2, parammxGraph, localmxCell); } } private static void importPage(Element paramElement, mxGraph parammxGraph, Object paramObject) { NodeList localNodeList1 = paramElement.getElementsByTagName(mxVdxConstants.SHAPES); pageNumber += 1; if (localNodeList1.getLength() <= 0) return; Element localElement1 = (Element)localNodeList1.item(0); NodeList localNodeList2 = localElement1.getChildNodes(); List localList1 = mxVdxUtils.nodeListTags(localNodeList2, mxVdxConstants.SHAPE); int i = localList1.size(); Object localObject2; for (int j = 0; j < i; ++j) { localObject1 = (Element)localList1.get(j); localObject2 = addShape(parammxGraph, paramObject, (Element)localObject1, pageHeight); decodeShape((Element)localObject1, parammxGraph, localObject2); } NodeList localNodeList3 = paramElement.getElementsByTagName(mxVdxConstants.CONNECTS); if (localNodeList3.getLength() > 0) { localObject1 = (Element)localNodeList3.item(0); localObject2 = ((Element)localObject1).getElementsByTagName(mxVdxConstants.CONNECT); List localList2 = mxVdxUtils.copyNodeList((NodeList)localObject2); for (int k = 0; k < localList2.size(); ++k) { Element localElement2 = (Element)localList2.get(k); Element localElement3 = findSigConnect(localList2, localElement2, k); localList2.remove(localElement3); addConectedEdge(parammxGraph, localElement2, localElement3); } } Object localObject1 = edgeShapeMap.values().iterator(); while (((Iterator)localObject1).hasNext()) { localObject2 = (mxVdxShape)((Iterator)localObject1).next(); addNotConnectedEdge(parammxGraph, parentsMap.get(new PageShapeIDKey(pageNumber, ((mxVdxShape)localObject2).getId())), (mxVdxShape)localObject2); } } public static void decode(Document paramDocument, mxGraph parammxGraph) { Object localObject1 = parammxGraph.getDefaultParent(); parammxGraph.getModel().beginUpdate(); parammxGraph.setHtmlLabels(true); Document localDocument = paramDocument; mxStyleSheetManager.getInstance().initialise(localDocument); mxMastersManager.getInstance().initialise(localDocument); mxPropertiesManager.getInstance().initialise(localDocument); NodeList localNodeList1 = localDocument.getElementsByTagName(mxVdxConstants.PAGES); if (localNodeList1.getLength() > 0) { localObject2 = (Element)localNodeList1.item(0); NodeList localNodeList2 = ((Element)localObject2).getElementsByTagName(mxVdxConstants.PAGE); if (localNodeList2.getLength() > 0) { Element localElement1; String str1; String str2; for (int i = 0; i < localNodeList2.getLength(); ++i) { localElement1 = (Element)localNodeList2.item(i); str1 = localElement1.getAttribute(mxVdxConstants.BACKGROUND); if ((str1 == null) || (!(str1.equals(mxVdxConstants.TRUE)))) continue; str2 = localElement1.getAttribute(mxVdxConstants.ID); backgroundsMap.put(str2, localElement1); } for (i = 0; i < localNodeList2.getLength(); ++i) { localElement1 = (Element)localNodeList2.item(i); str1 = localElement1.getAttribute(mxVdxConstants.BACKGROUND); if ((str1 != null) && (str1.equals(mxVdxConstants.TRUE))) continue; actualPageHeight = getPageDimentions(localElement1).getY(); pageHeight += actualPageHeight; str2 = localElement1.getAttribute(mxVdxConstants.BACK_PAGE); if ((str2 != null) && (!(str2.equals("")))) { Element localElement2 = (Element)backgroundsMap.get(str2); importPage(localElement2, parammxGraph, localObject1); } importPage(localElement1, parammxGraph, localObject1); } } } Object localObject2 = mxVdxUtils.getOrderArray(shapeIDList, cellsMap); parammxGraph.orderCells(false, localObject2); parammxGraph.getModel().endUpdate(); cleanMaps(); } } /* Location: C:\Users\platform-001\Desktop\新建文件夹 (2)\jgraphx.jar * Qualified Name: com.mxgraph.io.mxVdxCodec * JD-Core Version: 0.5.3 */