graphtoxgmmldomhandler.java
来自「OpenJGraph是一个开源的Java库」· Java 代码 · 共 578 行 · 第 1/2 页
JAVA
578 行
public void serializeVertex( Vertex vertex ) { Document doc = this.commonHandler.getDocument(); Element rootElement = this.commonHandler.getRootElement(); TreeMap vertexIDMap = this.commonHandler.getVertexIDMap(); Element vertexElement = doc.createElement( XGMML.NODE_ELEMENT_LITERAL ); vertexElement.setAttribute( XGMML.LABEL_ATTRIBUTE_LITERAL, vertex.toString() ); vertexElement.setAttribute( XGMML.ID_ATTRIBUTE_LITERAL, Long.toString( this.commonHandler.getCurrentIDAttribute() ) ); Element attElement = doc.createElement( XGMML.ATT_ELEMENT_LITERAL ); attElement.setAttribute( XGMML.NAME_ATTRIBUTE_LITERAL, "className" ); attElement.setAttribute( XGMML.VALUE_ATTRIBUTE_LITERAL, vertex.getClass().getName() ); attElement.setAttribute( XGMML.TYPE_ATTRIBUTE_LITERAL, "string" ); vertexElement.appendChild( attElement ); rootElement.appendChild( vertexElement ); } /** * Calls <tt>CommonHandler.endSerializeVertex()</tt> */ public void endSerializeVertex( Vertex vertex ) { this.commonHandler.endSerializeVertex( vertex ); } /** * Create the <tt><edge></tt> element for the specified <tt>Edge</tt>, * with the addition of an <tt><att></tt> element as a child node * of the <tt><edge></tt> element to identify the name of the * class implementing the <tt>Edge</tt> interface. The created * <tt><edge></tt> element is then appended to the <tt>Document</tt>'s * root element. */ public void serializeEdge( Edge edge ) { Document doc = this.commonHandler.getDocument(); Element rootElement = this.commonHandler.getRootElement(); TreeMap vertexIDMap = this.commonHandler.getVertexIDMap(); Element edgeElement = doc.createElement( XGMML.EDGE_ELEMENT_LITERAL ); if( edge instanceof DirectedEdgeImpl ) { DirectedEdge dEdge = (DirectedEdge) edge; edgeElement.setAttribute( XGMML.SOURCE_ATTRIBUTE_LITERAL, ((Long) vertexIDMap.get( dEdge.getSource() )).toString() ); edgeElement.setAttribute( XGMML.TARGET_ATTRIBUTE_LITERAL, ((Long) vertexIDMap.get( dEdge.getSink() )).toString() ); } else { edgeElement.setAttribute( XGMML.SOURCE_ATTRIBUTE_LITERAL, ((Long) vertexIDMap.get( edge.getVertexA() )).toString() ); edgeElement.setAttribute( XGMML.TARGET_ATTRIBUTE_LITERAL, ((Long) vertexIDMap.get( edge.getVertexB() )).toString() ); } edgeElement.setAttribute( XGMML.LABEL_ATTRIBUTE_LITERAL, edge.toString() ); if( edge instanceof WeightedEdgeImpl ) { edgeElement.setAttribute( XGMML.WEIGHT_ATTRIBUTE_LITERAL, Double.toString( ((WeightedEdge) edge).getWeight()) ); } Element attElement = doc.createElement( XGMML.ATT_ELEMENT_LITERAL ); attElement.setAttribute( XGMML.NAME_ATTRIBUTE_LITERAL, "className" ); attElement.setAttribute( XGMML.VALUE_ATTRIBUTE_LITERAL, edge.getClass().getName() ); attElement.setAttribute( XGMML.TYPE_ATTRIBUTE_LITERAL, "string" ); edgeElement.appendChild( attElement ); rootElement.appendChild( edgeElement ); } /** * Calls <tt>CommonHandler.endSerializeEdge()</tt> */ public void endSerializeEdge( Edge edge ) { this.commonHandler.endSerializeEdge( edge ); } /** * Calls <tt>CommonHandler.endSerialize()</tt> */ public void endSerialize() throws IOException { this.commonHandler.endSerialize(); } } /** * Inner class delegate of <tt>GraphToXGMMLDOMHandler</tt> for * serializing <tt>VisualGraph</tt> objects. * * @author Jesus M. Salvo Jr. */ class VisualGraphHandler extends GraphToXGMMLDOMHandler { private VisualGraph vGraph; private GraphHandler graphHandler; private CommonHandler commonHandler; public VisualGraphHandler( GraphToXMLEventGenerator eventGenerator, XMLSerializer serializer, CommonHandler commonHandler ) { super( eventGenerator, serializer ); this.commonHandler = commonHandler; this.graphHandler = new GraphHandler( eventGenerator, serializer, this.commonHandler ); } /** * Calls <tt>CommonHandler.startSerialize()</tt>, but also sets * the <tt><graph></tt> element's <tt>Graphic</tt> attribute to <tt>1</tt> */ public void startSerialize( VisualGraph vGraph ) throws Exception { this.vGraph = vGraph; this.commonHandler.startSerialize( vGraph ); Element rootElement = this.commonHandler.getRootElement(); rootElement.setAttribute( XGMML.GRAPHIC_ATTRIBUTE_LITERAL, "1" ); if( vGraph.getVisualVertexPainterFactory() != null ) { Element attElement = this.commonHandler.getDocument().createElement( XGMML.ATT_ELEMENT_LITERAL ); attElement.setAttribute( XGMML.NAME_ATTRIBUTE_LITERAL, "vertexPainterFactory" ); attElement.setAttribute( XGMML.TYPE_ATTRIBUTE_LITERAL, "string" ); attElement.setAttribute( XGMML.VALUE_ATTRIBUTE_LITERAL, vGraph.getVisualVertexPainterFactory().getClass().getName() ); rootElement.appendChild( attElement ); } if( vGraph.getVisualEdgePainterFactory() != null ) { Element attElement = this.commonHandler.getDocument().createElement( XGMML.ATT_ELEMENT_LITERAL ); attElement.setAttribute( XGMML.NAME_ATTRIBUTE_LITERAL, "edgePainterFactory" ); attElement.setAttribute( XGMML.TYPE_ATTRIBUTE_LITERAL, "string" ); attElement.setAttribute( XGMML.VALUE_ATTRIBUTE_LITERAL, vGraph.getVisualEdgePainterFactory().getClass().getName() ); rootElement.appendChild( attElement ); } if( vGraph.getVisualGraphComponentEditorFactory() != null ) { Element attElement = this.commonHandler.getDocument().createElement( XGMML.ATT_ELEMENT_LITERAL ); attElement.setAttribute( XGMML.NAME_ATTRIBUTE_LITERAL, "componentEditorFactory" ); attElement.setAttribute( XGMML.TYPE_ATTRIBUTE_LITERAL, "string" ); attElement.setAttribute( XGMML.VALUE_ATTRIBUTE_LITERAL, vGraph.getVisualGraphComponentEditorFactory().getClass().getName() ); rootElement.appendChild( attElement ); } if( vGraph.getGraphLayoutManager() != null ) { Element attElement = this.commonHandler.getDocument().createElement( XGMML.ATT_ELEMENT_LITERAL ); attElement.setAttribute( XGMML.NAME_ATTRIBUTE_LITERAL, "layoutManager" ); attElement.setAttribute( XGMML.TYPE_ATTRIBUTE_LITERAL, "string" ); attElement.setAttribute( XGMML.VALUE_ATTRIBUTE_LITERAL, vGraph.getGraphLayoutManager().getClass().getName() ); rootElement.appendChild( attElement ); } } /** * Calls <tt>GraphHandler.serializeVertex()</tt>, then adds a * <tt><graph></tt> element describing the visual properties * of the <tt>VisualVertex</tt> as allowed by XGMML. * <p> * The corresponding <tt>VisualVertex</tt> of the specified <tt>Vertex</tt> * is obtained via tt>VisualGraph.getVisualVertex()</tt>. */ public void serializeVertex( Vertex vertex ) { Document doc = this.commonHandler.getDocument(); Element rootElement = this.commonHandler.getRootElement(); TreeMap vertexIDMap = this.commonHandler.getVertexIDMap(); this.graphHandler.serializeVertex( vertex ); VisualVertex vVertex = this.vGraph.getVisualVertex( vertex ); java.awt.geom.Rectangle2D bounds = vVertex.getBounds2D(); Element graphicElement = doc.createElement( XGMML.GRAPHICS_ELEMENT_LITERAL ); graphicElement.setAttribute( XGMML.WIDTH_ATTRIBUTE_LITERAL, Double.toString(bounds.getWidth()) ); graphicElement.setAttribute( XGMML.HEIGHT_ATTRIBUTE_LITERAL, Double.toString(bounds.getHeight()) ); graphicElement.setAttribute( XGMML.FONT_ATTRIBUTE_LITERAL, vVertex.getFont().getName() ); graphicElement.setAttribute( XGMML.VISIBLE_ATTRIBUTE_LITERAL, "true" ); graphicElement.setAttribute( XGMML.FILL_ATTRIBUTE_LITERAL, Integer.toHexString( vVertex.getFillcolor().getRGB()) ); graphicElement.setAttribute( XGMML.OUTLINE_ATTRIBUTE_LITERAL, Integer.toHexString( vVertex.getOutlinecolor().getRGB()) ); Element centerElement = doc.createElement( XGMML.CENTER_ELEMENT_LITERAL ); centerElement.setAttribute( XGMML.X_ATTRIBUTE_LITERAL, Double.toString(bounds.getCenterX()) ); centerElement.setAttribute( XGMML.Y_ATTRIBUTE_LITERAL, Double.toString(bounds.getCenterY()) ); graphicElement.appendChild( centerElement ); Element attElement = doc.createElement( XGMML.ATT_ELEMENT_LITERAL ); attElement.setAttribute( XGMML.NAME_ATTRIBUTE_LITERAL, "className" ); attElement.setAttribute( XGMML.TYPE_ATTRIBUTE_LITERAL, "string" ); attElement.setAttribute( XGMML.VALUE_ATTRIBUTE_LITERAL, vVertex.getClass().getName() ); graphicElement.appendChild( attElement ); attElement = doc.createElement( XGMML.ATT_ELEMENT_LITERAL ); attElement.setAttribute( XGMML.NAME_ATTRIBUTE_LITERAL, "painter" ); attElement.setAttribute( XGMML.TYPE_ATTRIBUTE_LITERAL, "string" ); attElement.setAttribute( XGMML.VALUE_ATTRIBUTE_LITERAL, vVertex.getPainter().getClass().getName() ); graphicElement.appendChild( attElement ); Node vertexNode = rootElement.getLastChild(); vertexNode.appendChild( graphicElement ); } public void endSerializeVertex( Vertex vertex ) { this.commonHandler.endSerializeVertex( vertex ); } /** * Calls <tt>GraphHandler.serializeEdge()</tt>, then adds a * <tt><graph></tt> element describing the visual properties * of the <tt>VisualEdge</tt> as allowed by XGMML. * <p> * The corresponding <tt>VisualEdge</tt> of the specified <tt>Edge</tt> * is obtained via tt>VisualGraph.getVisualEdge()</tt>. */ public void serializeEdge( Edge edge ) { Document doc = this.commonHandler.getDocument(); Element rootElement = this.commonHandler.getRootElement(); this.graphHandler.serializeEdge( edge ); VisualEdge vEdge = this.vGraph.getVisualEdge( edge ); Element graphicElement = doc.createElement( XGMML.GRAPHICS_ELEMENT_LITERAL ); graphicElement.setAttribute( XGMML.FONT_ATTRIBUTE_LITERAL, vEdge.getFont().getFontName() ); graphicElement.setAttribute( XGMML.VISIBLE_ATTRIBUTE_LITERAL, "true" ); graphicElement.setAttribute( XGMML.FILL_ATTRIBUTE_LITERAL, Integer.toHexString( vEdge.getFillcolor().getRGB()) ); graphicElement.setAttribute( XGMML.OUTLINE_ATTRIBUTE_LITERAL, Integer.toHexString( vEdge.getOutlinecolor().getRGB()) ); Element lineElement = doc.createElement( XGMML.LINE_ELEMENT_LITERAL ); Element pointElement; double edgeSegment[] = new double[6]; java.awt.geom.PathIterator pathIterator = vEdge.getGeneralPath().getPathIterator( null ); while( !pathIterator.isDone() ) { int segmentType = pathIterator.currentSegment( edgeSegment ); if( segmentType != java.awt.geom.PathIterator.SEG_CLOSE ) { pointElement = doc.createElement( XGMML.POINT_ELEMENT_LITERAL ); pointElement.setAttribute( XGMML.X_ATTRIBUTE_LITERAL, Double.toString( edgeSegment[0] )); pointElement.setAttribute( XGMML.Y_ATTRIBUTE_LITERAL, Double.toString( edgeSegment[1] )); lineElement.appendChild( pointElement ); } pathIterator.next(); } graphicElement.appendChild( lineElement ); Element attElement = doc.createElement( XGMML.ATT_ELEMENT_LITERAL ); attElement.setAttribute( XGMML.NAME_ATTRIBUTE_LITERAL, "className" ); attElement.setAttribute( XGMML.TYPE_ATTRIBUTE_LITERAL, "string" ); attElement.setAttribute( XGMML.VALUE_ATTRIBUTE_LITERAL, vEdge.getClass().getName() ); graphicElement.appendChild( attElement ); attElement = doc.createElement( XGMML.ATT_ELEMENT_LITERAL ); attElement.setAttribute( XGMML.NAME_ATTRIBUTE_LITERAL, "painter" ); attElement.setAttribute( XGMML.TYPE_ATTRIBUTE_LITERAL, "string" ); attElement.setAttribute( XGMML.VALUE_ATTRIBUTE_LITERAL, vEdge.getPainter().getClass().getName() ); graphicElement.appendChild( attElement ); Node edgeNode = rootElement.getLastChild(); edgeNode.appendChild( graphicElement ); } public void endSerializeEdge( Edge edge ) { this.commonHandler.endSerializeEdge( edge ); } public void endSerialize() throws IOException { this.commonHandler.endSerialize(); } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?