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