]> gerrit.simantics Code Review - simantics/interop.git/blob - org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/ParserElement.java
2ab58f773ae54d2d154b944bc3d0f89e8926ff17
[simantics/interop.git] / org.simantics.xml.sax.base / src / org / simantics / xml / sax / base / ParserElement.java
1 package org.simantics.xml.sax.base;\r
2 \r
3 import java.io.Serializable;\r
4 import java.util.ArrayList;\r
5 import java.util.Collection;\r
6 import java.util.HashMap;\r
7 import java.util.List;\r
8 import java.util.Map;\r
9 \r
10 import org.simantics.db.Resource;\r
11 import org.simantics.db.WriteGraph;\r
12 import org.simantics.db.common.utils.ListUtils;\r
13 import org.simantics.db.exception.DatabaseException;\r
14 import org.simantics.layer0.Layer0;\r
15 import org.simantics.utils.datastructures.MapList;\r
16 import org.xml.sax.Attributes;\r
17 \r
18 public class ParserElement implements Serializable {\r
19         private static final long serialVersionUID = -5207502156942818875L;\r
20         String uri;\r
21         String localName;\r
22         String qName;\r
23         Map<String, Attribute> attributes;\r
24         MapList<Resource, ParserElement> lists;\r
25 \r
26         XMLElementParser elementParser;\r
27         XMLParser xmlParser;\r
28 \r
29         public ParserElement(String uri, String localName, String qName, Attributes attributes) {\r
30                 this.uri = uri;\r
31                 this.localName = localName;\r
32                 this.qName = qName;\r
33                 int attrCount = attributes.getLength();\r
34                 this.attributes = new HashMap<>(attrCount);\r
35                 for (int i = 0; i < attrCount; i++) {\r
36                         this.attributes.put(attributes.getLocalName(i),new Attribute(attributes.getLocalName(i),attributes.getQName(i),attributes.getURI(i),attributes.getValue(i)));\r
37                 }\r
38         }\r
39         \r
40         public ParserElement(String uri, String localName, String qName, Collection<Attribute> attributes) {\r
41                 this.uri = uri;\r
42                 this.localName = localName;\r
43                 this.qName = qName;\r
44                 this.attributes = new HashMap<>(attributes.size());\r
45                 for (Attribute a : attributes) {\r
46                         this.attributes.put(a.localName,new Attribute(a.localName,a.qName,a.uri,a.value));\r
47                 }\r
48         }\r
49 \r
50         public String getUri() {\r
51                 return uri;\r
52         }\r
53 \r
54         public String getLocalName() {\r
55                 return localName;\r
56         }\r
57 \r
58         public String getQName() {\r
59                 return qName;\r
60         }\r
61 \r
62         public Collection<Attribute> getAttributes() {\r
63                 return attributes.values();\r
64         }\r
65         \r
66         public Attribute getAttribute(String name) {\r
67                 return attributes.get(name);\r
68         }\r
69 \r
70         private Resource data;\r
71         \r
72         public void setData(Resource data) {\r
73                 this.data = data;\r
74         }\r
75         \r
76         public Resource getData() {\r
77                 return data;\r
78         }\r
79         \r
80         public void setElementParser(XMLElementParser parser) {\r
81                 this.elementParser = parser;\r
82         }\r
83         \r
84         public XMLElementParser getElementParser() {\r
85                 return elementParser;\r
86         }\r
87         \r
88         public void setXMLParser(XMLParser parser) {\r
89                 this.xmlParser = parser;\r
90         }\r
91         \r
92         public XMLParser getXMLParser() {\r
93                 return xmlParser;\r
94         }\r
95 \r
96         public void registerListChild(Resource predicate, ParserElement child) {\r
97                 if (lists == null)\r
98                         lists = new MapList<>();\r
99                 lists.add(predicate, child);\r
100         }\r
101 \r
102         public void createLists(WriteGraph graph) throws DatabaseException {\r
103                 if (lists == null)\r
104                         return;\r
105                 Layer0 L0 = Layer0.getInstance(graph);\r
106                 for (Resource predicate : lists.getKeys()) {\r
107                         List<Resource> children = new ArrayList<>();\r
108                         for (ParserElement child : lists.getValues(predicate))\r
109                                 children.add(child.getData());\r
110                         Resource list = ListUtils.create(graph, L0.List, L0.List_Element, null, children);\r
111                         graph.claim(getData(), predicate, list);\r
112                 }\r
113         }\r
114 \r
115 }