source: ComponentRegistry/trunk/ComponentBrowserGui/src/main/flex/clarin/cmdi/componentregistry/editor/model/CMDComponent.as @ 1954

Last change on this file since 1954 was 1954, checked in by twagoo, 12 years ago

Fixed a change update in CMDSpec and added change response for CollectionEventKind?.REPLACE
Refs #202

File size: 5.4 KB
Line 
1package clarin.cmdi.componentregistry.editor.model {
2        import clarin.cmdi.componentregistry.common.ChangeTrackingCMDElement;
3        import clarin.cmdi.componentregistry.common.XmlAble;
4       
5        import mx.collections.ArrayCollection;
6        import mx.events.CollectionEvent;
7        import mx.events.CollectionEventKind;
8
9        public class CMDComponent implements XmlAble, AttributeContainer, ChangeTrackingCMDElement {
10
11                //Attributes
12                public var name:String;
13                public var componentId:String;
14                public var conceptLink:String;
15                public var filename:String;
16                public var cardinalityMin:String = "1";
17                public var cardinalityMax:String = "1";
18
19                //elements
20                public var attributeList:ArrayCollection = new ArrayCollection();
21                public var cmdElements:ArrayCollection = new ArrayCollection();
22                public var cmdComponents:ArrayCollection = new ArrayCollection();
23
24                private var changed:Boolean = false;
25                private var _changeTracking:Boolean = false;
26
27                public function CMDComponent() {
28                        attributeList.addEventListener(CollectionEvent.COLLECTION_CHANGE, collectionChangedHandler);
29                        cmdElements.addEventListener(CollectionEvent.COLLECTION_CHANGE, collectionChangedHandler);
30                        cmdComponents.addEventListener(CollectionEvent.COLLECTION_CHANGE, collectionChangedHandler);
31                }
32
33                public static function createEmptyComponent():CMDComponent {
34                        var result:CMDComponent = new CMDComponent();
35                        return result;
36                }
37               
38                private function collectionChangedHandler(event:CollectionEvent):void {
39                        if(event.kind == CollectionEventKind.ADD ||event.kind == CollectionEventKind.MOVE || event.kind == CollectionEventKind.REMOVE || event.kind == CollectionEventKind.REPLACE){
40                                setChanged(true);
41                        }
42                        if(event.kind == CollectionEventKind.ADD){
43                                for each(var item:ChangeTrackingCMDElement in event.items){
44                                        item.changeTracking = _changeTracking;
45                                }
46                        }
47                }
48               
49                public function set changeTracking(value:Boolean):void {
50                        _changeTracking = value;
51                        for each (var component:CMDComponent in cmdComponents){
52                                component.changeTracking = value;
53                        }
54                        for each (var element:CMDComponentElement in cmdElements){
55                                element.changeTracking = value;
56                        }
57                        for each (var attribute:CMDAttribute in attributeList){
58                                attribute.changeTracking = value;
59                        }
60                }
61               
62                public function setChanged(value:Boolean):void {
63                        if(_changeTracking) {
64                                this.changed = value;
65                        }
66                }
67               
68                public function get hasChanged():Boolean{
69                        if(changed){
70                                return changed;
71                        } else {
72                                for each (var attriubte:CMDAttribute in attributeList){
73                                        if(attriubte.hasChanged){
74                                                return true;
75                                        }
76                                }
77                                for each (var element:CMDComponentElement in cmdElements){
78                                        if(element.hasChanged){
79                                                return true;
80                                        }
81                                }
82                                for each (var component:CMDComponent in cmdComponents){
83                                        if(component.hasChanged){
84                                                return true;
85                                        }
86                                }
87                        }
88                        return false;
89                }
90
91                public function removeComponent(component:CMDComponent):void {
92                        var index:int = cmdComponents.getItemIndex(component);
93                        if (index != -1) {
94                                cmdComponents.removeItemAt(index);
95                                setChanged(true);
96                        }
97                }
98
99                public function removeElement(element:CMDComponentElement):void {
100                        var index:int = cmdElements.getItemIndex(element);
101                        if (index != -1) {
102                                cmdElements.removeItemAt(index);
103                                setChanged(true);
104                        }
105                }
106
107                public function moveDownElement(element:CMDComponentElement):Boolean {
108                        var index:int = cmdElements.getItemIndex(element);
109                        if (index < cmdElements.length - 1) {
110                                cmdElements.removeItemAt(index);
111                        cmdElements.addItemAt(element, index + 1);
112                                setChanged(true);
113                        return true;
114                        }
115                        return false;
116                }
117               
118                public function moveUpElement(element:CMDComponentElement):Boolean {
119                        var index:int = cmdElements.getItemIndex(element);
120                        if (index > 0) {
121                                cmdElements.removeItemAt(index);
122                        cmdElements.addItemAt(element, index - 1);
123                                setChanged(true);
124                        return true;
125                        }
126                        return false;
127                }
128               
129                public function moveDownComponent(comp:CMDComponent):Boolean {
130                        var index:int = cmdComponents.getItemIndex(comp);
131                        if (index < cmdComponents.length - 1) {
132                                cmdComponents.removeItemAt(index);
133                        cmdComponents.addItemAt(comp, index + 1);
134                                setChanged(true);
135                        return true;
136                        }
137                        return false;
138                }
139               
140                public function moveUpComponent(comp:CMDComponent):Boolean {
141                        var index:int = cmdComponents.getItemIndex(comp);
142                        if (index > 0) {
143                                cmdComponents.removeItemAt(index);
144                        cmdComponents.addItemAt(comp, index - 1);
145                                setChanged(true);
146                        return true;
147                        }
148                        return false;
149                }
150
151                public function toXml():XML {
152                        var result:XML = <CMD_Component></CMD_Component>;
153                        if (name)
154                                result.@name = name;
155                        if (componentId)
156                                result.@ComponentId = componentId;
157                        if (conceptLink)
158                                result.@ConceptLink = conceptLink;
159                        if (filename)
160                                result.@filename = filename;
161                        if (cardinalityMin)
162                                result.@CardinalityMin = cardinalityMin;
163                        if (cardinalityMax)
164                                result.@CardinalityMax = cardinalityMax;
165                        if (attributeList.length > 0) {
166                                var attributeListTag:XML = <AttributeList></AttributeList>;
167                                for each (var attribute:CMDAttribute in attributeList) {
168                                        attributeListTag.appendChild(attribute.toXml());
169                                }
170                                result.appendChild(attributeListTag);
171                        }
172                        for each (var element:CMDComponentElement in cmdElements) {
173                                result.appendChild(element.toXml());
174                        }
175                        for each (var component:CMDComponent in cmdComponents) {
176                                result.appendChild(component.toXml());
177                        }
178                        return result;
179                }
180               
181                public function getAttributeList():ArrayCollection {
182                        return attributeList;
183                }
184        }
185}
Note: See TracBrowser for help on using the repository browser.