6.4 xml part4
1.DiagramModel
注意:是继承自AbstractModel(功能:监听)
public class DiagramModel extends AbstractModel {
public DiagramModel() { super(); name=""; initModel(); 见下面: }
public void initModel(){ setName("Diagram"); setDiagramDoc(DocumentHelper.createDocument()); 创建document setRootElement(getDiagramDoc().addElement(ModelType.ELE_ROOT)); setDiagramElement(getRootElement().addElement(ModelType.ELE_DIAGRAM)); setDiagramExElement(getRootElement().addElement(ModelType.ELE_DIAGRAMEX)); }
添加根元素root,并且添加root的子元素diagram和diagramex。??
1.1 doSaveXML()
public void doSaveXML() { // TODO Auto-generated method stub this.addDiagramAttribute(ModelType.ATR_NAME, name); 先添加属性NAME和属性值name。 getDiagramHead().doSaveXML(); getComponent().doSaveXML(); for(int i=0;i<getPorts().size();i++){ ((ElementModel)getPorts().get(i)).doSaveXML(); } for(int i=0;i<getTexts().size();i++){ ((ElementModel)getTexts().get(i)).doSaveXML(); } }
1.1.1 addDiagramAttribute(ModelType.ATR_NAME, name);
protected void addDiagramAttribute(String name,String value){ if(getDiagramElement()==null){ return; } getDiagramElement().addAttribute(name, value); } protected void removeDiagramAttribute(String name){ if(getDiagramElement()==null){ return; } Attribute atr = getDiagramElement().attribute(name); if(atr != null){ getDiagramElement().remove(atr); } }
1.1.2 getDiagramHead().doSaveXML();
public DiagramHeadingModel getDiagramHead() {
return diagramHead;
}
public class DiagramHeadingModel extends ElementModel {
先定义一些属性,并且定义一个结构体 private String definition,myCtype,myReturn,mySystem,diagramType; private boolean isRetShow,isSysShow,isRunsOnShow; public static final String SELECT_DEF = "select_def"; public static final String SELECT_CTYPE = "select_ctype"; public static final String SELECT_RETURN = "select_return"; public static final String SELECT_SYSTEM = "select_system"; public static final String SELECT_DIAGRAM = "select_diagram"; private IPropertyDescriptor[] descriptor; private List<IPropertyDescriptor> descriptorList = new ArrayList<IPropertyDescriptor>(); private static final TextPropertyDescriptor definitionDescriptor = new TextPropertyDescriptor(SELECT_DEF,"Definition"); private static final TextPropertyDescriptor ctypeDescriptor = new TextPropertyDescriptor(SELECT_CTYPE,"runs On"); private static final TextPropertyDescriptor returnDescriptor = new TextPropertyDescriptor(SELECT_RETURN,"return"); private static final TextPropertyDescriptor systemDescriptor = new TextPropertyDescriptor(SELECT_SYSTEM,"system"); private static final PropertyDescriptor diagramDescriptor = new PropertyDescriptor(SELECT_DIAGRAM,"Diagram Type"); public DiagramHeadingModel() { super(ConstantResourceFactory.LABEL_DIAGRAMHEAD_MODEL, ConstantResourceFactory.ID_DIAGRAMHEAD_MODEL, ConstantResourceFactory.SIZE_DIAGRAMHEAD); // TODO Auto-generated constructor stub definition=""; myCtype=""; myReturn=""; mySystem=""; diagramType=""; isRetShow=false; isSysShow=false; isRunsOnShow=false; }
public IPropertyDescriptor[] getPropertyDescriptors() { // TODO Auto-generated method stub if(descriptor == null){ descriptorList.add(definitionDescriptor); descriptorList.add(diagramDescriptor); if(isRunsOnShow()){ descriptorList.add(ctypeDescriptor); } if(isRetShow()){ descriptorList.add(returnDescriptor); } if(isSysShow()){ descriptorList.add(systemDescriptor); } descriptor = (IPropertyDescriptor[]) descriptorList .toArray(new IPropertyDescriptor[1]); } return descriptor; }
然后保存,过程就是两步:首先继承elementModel的dosaveXML,然后添加自己的属性。
public void doSaveXML() {
// TODO Auto-generated method stub
super.doSaveXML();
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);
}
}
1.1.3 getComponent().doSaveXML();
public ComponentInstanceModel getComponent() {
return component;
}
public void doSaveXML() {
// TODO Auto-generated method stub
super.doSaveXML();
for(int i=0;i<children.size();i++){
((ElementModel)children.get(i)).doSaveXML();
}
if(tail!=null)
tail.doSaveXML();
}
1.1.4 ((ElementModel)getPorts().get(i)).doSaveXML();
到了最重要的portelementmodel了。
public abstract class PortElementModel extends ElementModel {
定义一些属性:
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 PortElementModel(String label, String modelID, Dimension size) { super(label, modelID, size); // TODO Auto-generated constructor stub name=""; type=""; }
保存:
public void doSaveXML() { // TODO Auto-generated method stub super.doSaveXML(); this.addXMLElementAttribute(ModelType.ELE_NAME, name); this.addXMLElementAttribute(ModelType.ELE_TYPE, type); }
1.1.5 ((ElementModel)getTexts().get(i)).doSaveXML();
public abstract class LiteralElementModel extends ElementModel { public void doSaveXML() { // TODO Auto-generated method stub super.doSaveXML(); } }
1.2 DiagramModel中定义的变量
private List<Object> children = new ArrayList<Object>(); private List<Object> ports = new ArrayList<Object>(); doSaveXML() private List<Object> texts = new ArrayList<Object>(); doSaveXML() private List<Object> containers = new ArrayList<Object>(); private List<Object> portOps = new ArrayList<Object>(); private List<Object> refers = new ArrayList<Object>(); private ComponentInstanceModel component; doSaveXML()
public ComponentInstanceModel getComponent() { return component; } public void setComponent(ComponentInstanceModel component) { this.component = component; }
private DiagramHeadingModel diagramHead; doSaveXML()
public void setDiagramHead(DiagramHeadingModel diagramHead) { this.diagramHead = diagramHead; } public DiagramHeadingModel getDiagramHead() { return diagramHead; }
private String name;
public String getName() { return name; } public void setName(String name) { this.name = name; }
private Document diagramDoc;
public void setDiagramDoc(Document diagramDoc) { this.diagramDoc = diagramDoc; } public Document getDiagramDoc() { return diagramDoc; }
private Element rootElement,diagramElement,diagramExElement;
public void setDiagramElement(Element diagramElement) { this.diagramElement = diagramElement; } public Element getDiagramElement() { return diagramElement; }
public void setDiagramExElement(Element diagramExElement) { this.diagramExElement = diagramExElement; } public Element getDiagramExElement() { return diagramExElement; }
public void setRootElement(Element rootElement) { this.rootElement = rootElement; } public Element getRootElement() { return rootElement; }