5.28 xml


最上层的父类:
public interface IXmlModel {
public void initModel(); 初始化
public void doSaveXML(); 保存为xml文件
public void rebuildFromXml(Element e,List<Object> err); 反过程
}

AbstractModel继承IXmlModel。
ElementModel继承AbstractModel。


ElementModel的部分程序:
其中重写了initmodel()方法,set了四个东西:modelID(应该是模型本身的ID)、modelLable(应该是用户可以修改的名字)、XMLhead(是在xml文档中的标签么<name>这种?)、XMLmodel(暂时不知)
public abstract class ElementModel extends AbstractModel implements IDirectEditModel,IConstraint{
protected String xmlHead;
protected Element xmlModel;

public String getXMLHead() {
return xmlHead;
}

public void setXMLHead(String xmlHead) {
this.xmlHead = xmlHead;
}

public Element getXMLModel() {
return xmlModel;
}

public void setXMLModel(Element xmlModel) {
this.xmlModel = xmlModel;
}

public void addXMLElementAttribute(String name,String value){
if(xmlModel==null){
return;
}
xmlModel.addAttribute(name, value);
}

public void removeXMLElementAttribute(String name){
if(xmlModel==null){
return;
}

Attribute atr = xmlModel.attribute(name);
if( atr != null){
xmlModel.remove(atr);
}

}

public void doSaveXML(){
this.addXMLElementAttribute(ModelType.ATR_NAME, modelName);
this.addXMLElementAttribute(ModelType.ATR_ID, ID.toString());
}

public void rebuildFromXml(Element e,List<Object> err) {
// TODO Auto-generated method stub
}

public void initModel(){
setID(ModelIDFactory.getNewModelID());
setModelName(getLabel());
setXMLHead(ModelType.getModelXMLHead(this));
setXMLModel(DocumentHelper.createElement(getXMLHead()));
}

}


根据我的理解,这个modeltype类应该目的是要通过elementmodel的类型来返回对应的xmlhead。
曾经在partfactory中用过这种 ,通过model的类型,来返回对应的editpart。
所以我需要考虑的问题是:
我有哪些elementmodel,需要定义哪些xmlhead。

public class ModelType {
public static final String HEAD_DIAGRAMHEAD = "DiagramHead";
//container model XML head
//container model separator XML head
 //figure model XML head
//literal model XML head

//connection model XML head
public final static String HEAD_CONNECTION="Connect";
public final static String HEAD_FOUND=HEAD_CONNECTION+"FoundModel";
public final static String HEAD_CONMSGFROM=HEAD_CONNECTION+"MessageFrom";
public final static String HEAD_CONMSGTO=HEAD_CONNECTION+"MessageTo";

//port model XML head

//XML attribute Name
public final static String ATR_NAME="ModelName";
public final static String ATR_ID="ModelID";
//XML Element Name
public final static String ELE_ROOT="Root";
public final static String ELE_VALUE="Value";
public final static String ELE_NAME="Name";
public final static String ELE_TYPE="Type";

public static String getModelXMLHead(ElementModel model){
if(model instanceof ContainerElementModel)
return getContainerModelXMLHead(model);
else if(model instanceof FigureElementModel)
return getFigureModelXMLHead(model);
else if(model instanceof LiteralElementModel)
return getLiteralModelXMLHead(model);
else if(model instanceof ConnectionElementModel)
return getConnectioModelXMLHead(model);
else if(model instanceof PortElementModel)
return getPortModelXMLHead(model);
else if(model instanceof ContainerSeperatorModel)
return getSeparatorXMLHead(model);
else if(model instanceof DiagramHeadingModel)
return HEAD_DIAGRAMHEAD;

return HEAD_ERROR;
}
}
上述的每一个getxxxModelXmlHead方法中,又分别根据子model的不同,返回对应的XmlHead。

继承elementModel的类有:


public abstract class ContainerElementModel extends ElementModel implements IContainer


public abstract class PortElementModel extends ElementModel


public abstract class LiteralElementModel extends ElementModel


public abstract class ConnectionElementModel extends ElementModel  implements IShowHideLabel,IConnectMessage


public class DiagramHeadingModel extends ElementModel


public abstract class FigureElementModel extends ElementModel


1.首先看DiagramHeadingModel

public class DiagramHeadingModel extends ElementModel{
public void doSaveXML() {
// TODO Auto-generated method stub
super.doSaveXML(); 父类中是添加了ModelType.ATR_ID(属性名),和ModelType.ATR_NAME(属性显示名),这应该是所有的子elementmodel的公有属性。

this.addXMLElementAttribute(ModelType.ATR_DIAGRAM,diagramType); 前者是属性名,后者是属性值。
this.addXMLElementAttribute(ModelType.ATR_DEFINITION,definition);

后面这部分不知道做什么的。
if(isRunsOnShow()){
this.addXMLElementAttribute(ModelType.ATR_RUNSON,myCtype);
}
else{
this.removeXMLElementAttribute(ModelType.ATR_RUNSON);
}

if(isRetShow()){
this.addXMLElementAttribute(ModelType.ATR_RETURN,myReturn);
}
else{
this.removeXMLElementAttribute(ModelType.ATR_RETURN);
}

if(isSysShow()){
this.addXMLElementAttribute(ModelType.ATR_SYSTEM,mySystem);
}
else{
this.removeXMLElementAttribute(ModelType.ATR_SYSTEM);
}
}

@Override
public void rebuildFromXml(Element e,List<Object> err) {
// TODO Auto-generated method stub
super.rebuildFromXml(e,err);

if(e.attribute(ModelType.ATR_DIAGRAM) != null){
diagramType = e.attributeValue(ModelType.ATR_DIAGRAM);
}
else{
err.add(new CustomErrorInfo(
e,
CustomErrorInfo.NULL,
ModelType.ATR_DIAGRAM));
}

if(e.attribute(ModelType.ATR_DEFINITION) != null){
definition = e.attributeValue(ModelType.ATR_DEFINITION);
}
else{
err.add(new CustomErrorInfo(
e,
CustomErrorInfo.NULL,
ModelType.ATR_DEFINITION));
}

if(e.attribute(ModelType.ATR_RUNSON) != null){
myCtype = e.attributeValue(ModelType.ATR_RUNSON);
setRunsOnShow(true);
}
else{
setRunsOnShow(false);
}

if(e.attribute(ModelType.ATR_RETURN) != null){
myReturn = e.attributeValue(ModelType.ATR_RETURN);
setRetShow(true);
}
else{
setRetShow(false);
}

if(e.attribute(ModelType.ATR_SYSTEM) != null){
mySystem = e.attributeValue(ModelType.ATR_SYSTEM);
setSysShow(true);
}
else{
setSysShow(false);
}

}
}


2.portelementmodel
public abstract class PortElementModel extends ElementModel{
private static final
IPropertyDescriptor[] descriptorComp = new IPropertyDescriptor[]{
new PropertyDescriptor(SELECT_LABEL,"Model Label"),
new PropertyDescriptor(SELECT_NAME,"Component Name"),
new TextPropertyDescriptor(SELECT_TYPE,"Component Type"),
};

private static final
IPropertyDescriptor[] descriptorPort = new IPropertyDescriptor[]{
new PropertyDescriptor(SELECT_LABEL,"Model Label"),
new TextPropertyDescriptor(SELECT_NAME,"Port Name"),
new TextPropertyDescriptor(SELECT_TYPE,"Port Type"),
};
public IPropertyDescriptor[] getPropertyDescriptors() {
// TODO Auto-generated method stub
if(this instanceof ComponentInstanceModel){
return descriptorComp;
}
else if(this instanceof PortInstanceModel){
return descriptorPort;
}
return new IPropertyDescriptor[0];
}
public void doSaveXML() {
// TODO Auto-generated method stub
super.doSaveXML();
this.addXMLElementAttribute(ModelType.ELE_NAME, name);
this.addXMLElementAttribute(ModelType.ELE_TYPE, type);
}

@Override
public void rebuildFromXml(Element e,List<Object> err) {
// TODO Auto-generated method stub
super.rebuildFromXml(e,err);

if(e.attribute(ModelType.ELE_NAME) != null){
name = e.attributeValue(ModelType.ELE_NAME);
}
else{
err.add(new CustomErrorInfo(
e,
CustomErrorInfo.NULL,
ModelType.ELE_NAME));
}

if(e.attribute(ModelType.ELE_TYPE) != null){
type = e.attributeValue(ModelType.ELE_TYPE);
}
else{
err.add(new CustomErrorInfo(e,CustomErrorInfo.NULL,ModelType.ELE_TYPE));
}
}

}

5.28 xml

时间: 2024-11-14 21:53:31

5.28 xml的相关文章

转载:用Ant操作XML文件

1.14 用XMLTask操作XML(1) 本节作者:Brian Agnew 对于简单的文本搜索和替换操作,Ant的<replace>任务就够用了,但在现代Java框架中,用户更可能需要强大的XML操作能力来修改servlet描述符.Spring配置等. XMLTask是Ant外部任务,它提供了强大的XML编辑工具,主要用于在构建/部署过程中创建和修改XML文件. 使用XMLTask的好处如下? 与Ant的<replace>任务不同,XMLTask使用XPath提供识别XML文档各

PHP读写XML文件的四种方法

PHP对XML文件进行读写操作的方法一共有四种,分别是:字符串方式直接读写.DOMDocument读写. XMLWrite写和XMLReader读.SimpleXML读写,本文将依次对这四种方法进行介绍. 介绍之前首先对本文例子使用的数据和文件进行说明.本文写XML文件的例子都是从MySQL中读取数据然后 写入到XML文件中,读XML文件的例子都是从XML文件中读取数据后组装成数组的格式,数组中每个元素对应数 据库中的一条记录. MySQL中的数据: XML文件: 1 2 3 4 5 6 7 8

PHP通过DOM操作XML

PHP XML操作类DOMDocument属性及方法注意大小写一定不能弄错.属性: Attributes 存储节点的属性列表(只读) childNodes 存储节点的子节点列表(只读) dataType 返回此节点的数据类型 Definition 以DTD或XML模式给出的节点的定义(只读) Doctype 指定文档类型节点(只读) documentElement 返回文档的根元素(可读写) firstChild 返回当前节点的第一个子节点(只读) Implementation 返回XMLDOM

PHP读取XML

PHP读取XML books.xml文件: 代码 <books> <book> <author>Jack Herrington</author> <title>PHP Hacks</title> <publisher>O'Reilly</publisher> </book> <book> <author>Jack Herrington</author> <t

web.xml配置详解(2)

1 定义头和根元素 部署描述符文件就像所有XML文件一样,必须以一个XML头开始.这个头声明可以使用的XML版本并给出文件的字符编码.DOCYTPE声明必须立即出现在此头之后.这个声明告诉服务器适用的servlet规范的版本(如2.2或2.3)并指定管理此文件其余部分内容的语法的DTD(Document Type Definition,文档类型定义).所有部署描述符文件的顶层(根)元素为web-app.请注意,XML元素不像HTML,他们是大小写敏感的.因此,web-App和WEB-APP都是不

XXE(XML外部实体注入)攻防整理

Fuzzing 1 <!ENTITY % xxe SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd" > 2 <?xml version="1.0" encoding="ISO-8859-1"?> 3 <!DOCTYPE xxe [<!ENTITY foo "aaaaaa">]> 4 <!DOCT

【转】flash的跨域访问策略文件配置详解

Every Flash or Flex developer who has had to access remote resources has come across a crossdomain.xml policy file at some point. This article takes a look at what these policy files are, how they work and how you can create one for yourself. Example

Java程序员之JS(一) 之 JQuery.ajax

背景:紧着现在项目的需要,先从JQuery.ajax出发,主要需求是通过 js 调用Java 代码,从而适应现在的项目. 先从几个概念开始讲解: 一. 什么是Deferred  Deferred 对象是由.Deferred构造的, .Deferred被实现为简单工厂模式.它是用来解决JS中的异步编程,遵循 Common Promise/A规范,实现此规范的还有when.js 和 dojo. Deferred 对象在 JQuery 1.5被引入,用来解决 Ajax 异步优化问题,正是由于 Defe

Windows7WithSP1/TeamFoundationServer2012update4/SQLServer2012

[Info   @09:03:33.737] ====================================================================[Info   @09:03:33.743] Team Foundation Server Administration Log[Info   @09:03:33.748] Version  : 11.0.61030.0[Info   @09:03:33.748] DateTime : 05/24/2014 17:0