61 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package models
 | |
| 
 | |
| import (
 | |
| 	"encoding/xml"
 | |
| 	"strconv"
 | |
| )
 | |
| 
 | |
| type MxGraphModel struct {
 | |
| 	XMLName xml.Name `xml:"mxGraphModel"`
 | |
| 
 | |
| 	Root struct {
 | |
| 		XMLName xml.Name 	`xml:"root"`
 | |
| 		MxCell  []MxCell 	`xml:"mxCell"`
 | |
| 		MxObject	*[]MxObject	`xml:"object"`
 | |
| 	}
 | |
| }
 | |
| 
 | |
| type MxCell struct {
 | |
| 	XMLName xml.Name `xml:"mxCell"`
 | |
| 	ID      string   `xml:"id,attr"`
 | |
| 	Parent  *string  `xml:"parent,attr"`
 | |
| 	RID     *string  `xml:"rID,attr"`
 | |
| 	Source  *string  `xml:"source,attr"`
 | |
| 	Target  *string  `xml:"target,attr"`
 | |
| 	Rtype	*string  `xml:"rType,attr"`
 | |
| }
 | |
| 
 | |
| 
 | |
| type MxObject struct {
 | |
| 	XMLName xml.Name 	`xml:"object"`
 | |
| 	ID		string		`xml:"id,attr"`
 | |
| 	Settings []xml.Attr	`xml:",any,attr"`
 | |
| 	MxCell	MxCell		`xml:"mxCell"`	
 | |
| }
 | |
| 
 | |
| type mxissue struct {
 | |
| 	msg string
 | |
| }
 | |
| 
 | |
| func (m *mxissue) Error() string {
 | |
| 	return m.msg
 | |
| }
 | |
| 
 | |
| func newMxIssue(message string) error {
 | |
| 	return &mxissue{message}
 | |
| }
 | |
| 
 | |
| // mxCell inside object tags are create twice when unmarshalling
 | |
| // once as they appear in the xml inside the MxObject struct and once in the MxCell struct
 | |
| // so once retrieved from object we remove them from the root's MxCell list
 | |
| func (m *MxGraphModel) removeMxCell(id string){
 | |
| 	int_id,_ := strconv.Atoi(id)
 | |
| 	int_id = int_id + 1
 | |
| 	cell_id := strconv.Itoa(int_id)
 | |
| 
 | |
| 	for i, cell := range(m.Root.MxCell){
 | |
| 		if cell.ID == cell_id {
 | |
| 			m.Root.MxCell = append(m.Root.MxCell[:i],m.Root.MxCell[i+1:]...)
 | |
| 		}
 | |
| 	}
 | |
| } |