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
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 ListdescriptorList = new ArrayList (); 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
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
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; }