1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package com.ontotext.wsmo4j.parser.xml;
19
20
21
22
23
24
25
26
27
28
29
30 import java.util.*;
31
32 import org.omwg.ontology.*;
33 import org.w3c.dom.*;
34 import org.wsmo.common.*;
35 import org.wsmo.common.exception.*;
36
37 import com.ontotext.wsmo4j.serializer.xml.*;
38
39
40
41
42
43
44 class NodeRelationInstance {
45 static RelationInstance deserialize(Node xmlNode, WsmlXmlParser parser)
46 throws InvalidModelException {
47 if (xmlNode == null || parser == null || xmlNode.getNodeName() != "relationInstance"
48 || xmlNode.getNodeType() != Node.ELEMENT_NODE) {
49 throw new IllegalArgumentException();
50 }
51
52 Identifier relInstanceId = null;
53 RelationInstance relInstance = null;
54 if (xmlNode.getAttributes().getNamedItem("name") == null)
55 relInstanceId = parser.getFactory().createAnonymousID();
56 else {
57 relInstanceId = parser.getFactory().createIRI(
58 WsmlXmlHelper.getAttrValue(xmlNode, "name"));
59 }
60
61 NodeList nodes = xmlNode.getChildNodes();
62 byte paramArity = 0;
63 for (int i = 0; i < nodes.getLength(); i++) {
64 Node node = nodes.item(i);
65 if (node.getNodeName() == "memberOf" && node.getNodeType() == Node.ELEMENT_NODE) {
66 Identifier relationId = null;
67 if (WsmlXmlHelper.getElementText(node).equals("_#"))
68 relationId = parser.getFactory().createAnonymousID();
69 else
70 relationId = parser.getFactory().createIRI(WsmlXmlHelper.getElementText(node));
71 relInstance = parser.getFactory().createRelationInstance(relInstanceId,
72 parser.getFactory().getRelation(relationId));
73 }
74 else if (node.getNodeName() == "nonFunctionalProperties"
75 && node.getNodeType() == Node.ELEMENT_NODE) {
76 NodeNFP.deserialize(relInstance, node, parser);
77 }
78 else if (node.getNodeName() == "parameterValue"
79 && node.getNodeType() == Node.ELEMENT_NODE) {
80 NodeList childNodes = node.getChildNodes();
81 for (int j = 0; j < childNodes.getLength(); j++) {
82 Node childNode = childNodes.item(j);
83 if (childNode.getNodeName() == "value") {
84 relInstance.setParameterValue(paramArity,
85 NodeValue.deserialize(childNode, parser));
86 }
87 }
88 }
89 }
90
91 return relInstance;
92 }
93
94 static Element serialize(RelationInstance relInstance, WsmlXmlSerializer serializer) {
95 Element relInstanceElement = serializer.createElement("relationInstance");
96
97 if (!relInstance.listNFPValues().isEmpty()) {
98 NodeNFP.serialize(relInstanceElement, relInstance, serializer);
99 }
100
101 if (relInstance.getRelation() != null) {
102 Element memberOfElement = serializer.createElement("memberOf");
103 memberOfElement.appendChild(serializer.createTextNode(
104 relInstance.getIdentifier().toString()));
105 relInstanceElement.appendChild(memberOfElement);
106 }
107
108 if (!relInstance.listParameterValues().isEmpty()) {
109 Element parameterElement = serializer.createElement("parameterValue");
110 for (Iterator i = relInstance.listParameterValues().iterator(); i.hasNext();) {
111 parameterElement.appendChild(NodeValue.serialize(i.next(), serializer));
112 }
113 }
114
115 return relInstanceElement;
116 }
117 }
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137