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