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<PageShapeIDKey, mxCell> vertexMap = new HashMap();
|
private static HashMap<PageShapeIDKey, mxVdxShape> edgeShapeMap = new HashMap();
|
private static HashMap<PageShapeIDKey, mxVdxShape> vertexShapeMap = new HashMap();
|
private static HashMap<PageShapeIDKey, Object> parentsMap = new HashMap();
|
private static HashMap<String, Element> backgroundsMap = new HashMap();
|
private static HashMap<PageShapeIDKey, Object> cellsMap = new HashMap();
|
private static ArrayList<PageShapeIDKey> 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<Node> 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
|
*/
|