ses数据以节点方式进行存储的问题

过年前琢磨了下,想以jgraphX来绘制ses节点图,但是ses的输入输出太过冗杂。先把原来的vb程序进行了一个简单的改写,改写为Java代码来进行ses输入文件的读入,然后转换为xml文档,但是在转换过程中发现可以读入,就是不能导出为xml文件,今天又仔细差了下原因。总结如下,jgraphx进行对象文件另存xml文件时,必须满足以下条件:

(1) Defines theuser objects, which are preferrably XML nodes that allow

                   storage of complex values as child nodes andstring, number or

                   boolean properties as attributes.

                 

                  (2)When using Java objects as user objects, make sure to add the

                   package name containg the class and register acodec for the user

                   object class as follows:

                 

                   mxCodecRegistry.addPackage("com.example");

                   mxCodecRegistry.register(new mxObjectCodec(

                           newcom.example.CustomUserObject()));

                 

                  (3)Note that the object must have an empty constructor and a setter and

                   getter for each property to be persisted. Theobject must not have

                   a property called ID as this property isreserved for resolving cell

                   references and will cause problems when usedinside the user object.

排查了所有模型的构造方法和setget函数后,没发现问题。

将所有模型类都实现了Serializable接口,防止对象导出时出现序列化问题。

都没发现问题,后来在对ses中的CVentCVshaft进行分析时发现,原来的VB的程序在这个地方有点简单问题复杂化,每一个VentSection对应一个Ventshaft,为了对应在Bean文件中就需要相互指向,结果就出现将模型数据转XML的时候死活导不出去。

思考了下,采用将所有数据的某一个数据加到graph模型中再测试导出,发现了这个问题,将两个模型何为一个即搞定。

 

测试用的程序代码如下:

package com.mxgraph.examples.swing;

import javax.swing.JFrame;

import com.mxgraph.io.mxCodec;
import com.mxgraph.io.mxCodecRegistry;
import com.mxgraph.io.mxObjectCodec;
import com.mxgraph.model.mxCell;
import com.mxgraph.swing.mxGraphComponent;
import com.mxgraph.util.mxUtils;
import com.mxgraph.util.mxXmlUtils;
import com.mxgraph.view.mxGraph;

import sesdataset.SESDataReadTool;
import sesdataset.CNode;
import sesdataset.CNodes;
import sesdataset.CRoutes;
import sesdataset.CSections;
import sesdataset.CTrain;
import sesdataset.CTrains;
import sesdataset.CVent;
import sesdataset.CVentSeg;
import sesdataset.CVents;
import sesdataset.DataSet;
import sesdataset.Form1AB;
import sesdataset.Form1C;
import sesdataset.Form1G;
import test.Person;

import javax.swing.JPanel;
import java.awt.BorderLayout;
import javax.swing.JButton;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;

public class SesFile2XML extends JFrame implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -2707712944901661771L;
	private Object v2;
	private Object v1;
	mxGraph graph;

	public void insertgraph() {
		graph = new mxGraph();
		Object parent = graph.getDefaultParent();

		Person p1 = new Person();
		p1.setName("Person1");
		p1.setAge("18");

		Person p2 = new Person();
		p2.setName("Person2");
		p2.setAge("28");

		graph.getModel().beginUpdate();
		try {
			v1 = graph.insertVertex(parent, null, p1, 20, 20, 80, 30);

			v2 = graph.insertVertex(parent, null, p2, 240, 150, 80, 30);

			graph.insertEdge(parent, null, "Edge", v1, v2);

			SESDataReadTool s = new SESDataReadTool();
			s.getData().initModel();
			s.readfile(new File("data/test.SES"));
			s.printfile();
			DataSet gd = s.getData();

			mxCell cell = (mxCell) graph.insertVertex(graph.getDefaultParent(), null, gd, 200, 200, 40, 40,
					"shape=ellipse;perimeter=ellipsePerimeter;");

			cell.setConnectable(true);
			cell.setEdge(false);
			//System.out.println("size is "+s.getData().getVents().getColVents().get(0).getUVShaft().getColVSegs().size());

		} finally {
			graph.getModel().endUpdate();
		}

		JPanel panel = new JPanel();
		getContentPane().add(panel, BorderLayout.CENTER);
		panel.setLayout(new BorderLayout(0, 0));

		mxGraphComponent graphComponent = new mxGraphComponent(graph);
		panel.add(graphComponent, BorderLayout.CENTER);

		JPanel panel_1 = new JPanel();
		panel.add(panel_1, BorderLayout.SOUTH);

		JButton btnNewButton = new JButton("New button");
		btnNewButton.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {

				mxCodecRegistry.addPackage("sesdataset");
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.DataSet()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CECZone()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.Form1AB()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.Form1C()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.Form1D()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.Form1E()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.Form1G()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CECZones()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CFan()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CFans()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CFire()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CFires()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CFlyWheel()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CIFan()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CInitTrain()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CInitTrain()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CMotor()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CNode()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CNodes()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CPGroup()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CRoute()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CRoutes()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CRtGroup()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.cRtStop()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CRtTPerf()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CRtTrack()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CSection()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CSections()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CSegment()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CSSHS()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CSubSegment()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CTrain()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CTrains()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CVent()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CVents()));
				mxCodecRegistry.register(new mxObjectCodec(new sesdataset.CVentSeg()));

				mxCodec codec = new mxCodec();

				String xml = mxXmlUtils.getXml(codec.encode(graph.getModel()));

				try {
					mxUtils.writeFile(xml, "F:\\mycode\\testio\\1.mxe");
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				System.out.println("export ok");

			}
		});
		panel_1.add(btnNewButton);
	}

	
	public static void main(String[] args) {
		SesFile2XML frame = new SesFile2XML();
		frame.insertgraph();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(400, 320);
		frame.setVisible(true);
	}

}




发布了34 篇原创文章 · 获赞 9 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/tianyatest/article/details/79433676