1 | package clarin.cmdi.componentregistry.editor.model { |
---|
2 | import clarin.cmdi.componentregistry.common.ComponentMD; |
---|
3 | |
---|
4 | import mx.collections.ArrayCollection; |
---|
5 | import mx.collections.XMLListCollection; |
---|
6 | |
---|
7 | public final class CMDModelFactory { |
---|
8 | public function CMDModelFactory() { |
---|
9 | } |
---|
10 | |
---|
11 | public static function createModel(xml:XML):CMDSpec { |
---|
12 | var result:CMDSpec = new CMDSpec(xml.@isProfile); |
---|
13 | result.headerName = xml.Header.Name; |
---|
14 | result.headerId = xml.Header.ID; |
---|
15 | result.headerDescription = xml.Header.Description; |
---|
16 | var components:XMLList = xml.elements(ComponentMD.CMD_COMPONENT); |
---|
17 | for each (var component:XML in components) { |
---|
18 | var cmdComp:CMDComponent = createComponent(component); |
---|
19 | result.cmdComponents.addItem(cmdComp); |
---|
20 | } |
---|
21 | return result; |
---|
22 | } |
---|
23 | |
---|
24 | public static function createComponent(xml:XML):CMDComponent { |
---|
25 | var result:CMDComponent = new CMDComponent(); |
---|
26 | result.name = xml.@name; |
---|
27 | result.componentId = xml.@ComponentId; |
---|
28 | result.conceptLink = xml.@ConceptLink; |
---|
29 | result.filename = xml.@filename; |
---|
30 | result.cardinalityMin = xml.@CardinalityMin; |
---|
31 | result.cardinalityMax = xml.@CardinalityMax; |
---|
32 | result.attributeList = createAttributeList(xml); |
---|
33 | var elements:XMLList = xml.elements(ComponentMD.CMD_ELEMENT); |
---|
34 | for each (var element:XML in elements) { |
---|
35 | var cmdElement:CMDComponentElement = createComponentElement(element); |
---|
36 | result.cmdElements.addItem(cmdElement); |
---|
37 | } |
---|
38 | var components:XMLList = xml.elements(ComponentMD.CMD_COMPONENT); |
---|
39 | for each (var component:XML in components) { |
---|
40 | var cmdComponent:CMDComponent = createComponent(component); |
---|
41 | result.cmdComponents.addItem(cmdComponent); |
---|
42 | } |
---|
43 | return result; |
---|
44 | } |
---|
45 | |
---|
46 | public static function createComponentElement(xml:XML):CMDComponentElement { |
---|
47 | var result:CMDComponentElement = new CMDComponentElement(); |
---|
48 | result.name = xml.@name; |
---|
49 | result.conceptLink = xml.@ConceptLink; |
---|
50 | result.valueSchemeSimple = xml.@ValueScheme; |
---|
51 | result.cardinalityMin = xml.@CardinalityMin; |
---|
52 | result.cardinalityMax = xml.@CardinalityMax; |
---|
53 | result.attributeList = createAttributeList(xml); |
---|
54 | if (xml.hasOwnProperty(ComponentMD.VALUE_SCHEME)) { |
---|
55 | if (xml.ValueScheme.hasOwnProperty(ComponentMD.PATTERN)) { |
---|
56 | result.valueSchemeSimple = xml.ValueScheme.pattern; |
---|
57 | } else if (xml.ValueScheme.hasOwnProperty(ComponentMD.ENUMERATION)) { |
---|
58 | result.valueSchemeComplex = new XMLListCollection(xml.ValueScheme.enumeration.*); |
---|
59 | } |
---|
60 | } |
---|
61 | return result; |
---|
62 | } |
---|
63 | |
---|
64 | public static function createAttributeList(xml:XML):ArrayCollection { |
---|
65 | var result:ArrayCollection = new ArrayCollection(); |
---|
66 | if (xml.hasOwnProperty(ComponentMD.ATTRIBUTE_LIST)) { |
---|
67 | var attributes:XMLList = xml.AttributeList.descendants(ComponentMD.ATTRIBUTE); |
---|
68 | for each (var attribute:XML in attributes) { |
---|
69 | var cmdAttribute:CMDAttribute = createAttribute(attribute); |
---|
70 | result.addItem(cmdAttribute); |
---|
71 | } |
---|
72 | } |
---|
73 | return result; |
---|
74 | } |
---|
75 | |
---|
76 | public static function createAttribute(xml:XML):CMDAttribute { |
---|
77 | var result:CMDAttribute = new CMDAttribute(); |
---|
78 | result.name = xml.Name; |
---|
79 | if (xml.hasOwnProperty(ComponentMD.TYPE)) { |
---|
80 | result.type = xml.Type; |
---|
81 | } else { |
---|
82 | if (xml.ValueScheme.hasOwnProperty(ComponentMD.PATTERN)) { |
---|
83 | result.valueSchemeSimple = xml.ValueScheme.pattern; |
---|
84 | } else if (xml.ValueScheme.hasOwnProperty(ComponentMD.ENUMERATION)) { |
---|
85 | result.valueSchemeComplex = new XMLListCollection(xml.ValueScheme.enumeration.*); |
---|
86 | } |
---|
87 | } |
---|
88 | return result; |
---|
89 | } |
---|
90 | |
---|
91 | } |
---|
92 | } |
---|