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>&lt;edge&gt;</tt> element for the specified <tt>Edge</tt>,         * with the addition of an <tt>&lt;att&gt;</tt> element as a child node         * of the <tt>&lt;edge&gt;</tt> element to identify the name of the         * class implementing the <tt>Edge</tt> interface. The created         * <tt>&lt;edge&gt;</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>&lt;graph&gt;</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>&ltgraph&gt;</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>&ltgraph&gt;</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 + -
显示快捷键?