source: MDService2/branches/MDService_simple3/src/eu/clarin/cmdi/mdservice/model/SearchClauses.java @ 1540

Last change on this file since 1540 was 1540, checked in by gaba, 13 years ago

Utils.java in place of Helpers and Admin
Diagnostics changes in GenericAction?
code arrangement, comments

File size: 6.8 KB
Line 
1package eu.clarin.cmdi.mdservice.model;
2
3import java.io.StringWriter;
4
5import javax.xml.transform.OutputKeys;
6import javax.xml.transform.Transformer;
7import javax.xml.transform.TransformerConfigurationException;
8import javax.xml.transform.TransformerException;
9import javax.xml.transform.TransformerFactory;
10import javax.xml.transform.dom.DOMSource;
11import javax.xml.transform.stream.StreamResult;
12
13import org.w3c.dom.Document;
14import org.w3c.dom.Element;
15import org.w3c.dom.Node;
16import org.w3c.dom.NodeList;
17
18import eu.clarin.cmdi.mdservice.internal.Utils;
19import eu.clarin.cmdi.mdservice.action.DCRProxyAction;
20
21
22public class SearchClauses{
23        private String xml_string;
24        private Document xml_document;
25        private SearchClause[][] list;
26       
27       
28        public SearchClauses(Document _doc){
29                list = new SearchClause[20][20];
30               
31                for(int i=0;i<20;i++){
32                        for(int j=0;j<20;j++){
33                                list[i][j]=null;
34                        }
35                }
36                xml_document=  _doc;
37                //log.debug("SCCCCC: constuctor");
38                deserialize();
39                // do processing
40        }
41       
42        // create array from xml_document
43        private int getLastAnd(){
44                for(int i=0; i< 20;i++){
45                        if (list[i][0] == null) return i;
46                }
47                return 0;
48        }
49        private int getLastOr(int i){
50                for(int j=0;j< 20;j++){
51                        if (list[i][j] == null) return j;
52                }
53                return 0;
54        }
55       
56        private void deserialize(Node node, int level){
57                NodeList nodeList;
58                String b;
59                SearchClause sc;
60                int or_last;
61               
62                if (node.getNodeName().equals("tripple")){
63                        nodeList = node.getChildNodes();
64                        b = nodeList.item(0).getFirstChild().getNodeValue();
65                        deserialize(b,nodeList.item(1), nodeList.item(2), level);
66                }else{
67                        if (node.getNodeName().equals("searchClause")){
68                                nodeList = node.getChildNodes();
69                                sc = new SearchClause(nodeList.item(0).getNodeValue(), nodeList.item(1).getFirstChild().getNodeValue(), nodeList.item(2).getNodeValue());
70                                or_last = getLastOr(level);
71                                list[level][or_last] = sc;
72                        }
73                }
74
75        }
76        private void deserialize(String rel, Node left, Node right, int and_level){
77                String b;
78                NodeList nodeList;
79                SearchClause sc;
80                int and_last;
81               
82                if (rel.equals("and")) {
83                        deserialize(left, and_level);
84                        and_last = getLastAnd();
85                        deserialize(right, and_last);                   
86                }
87                if (rel.equals("or")) {
88                        deserialize(left, and_level);
89                        deserialize(right, and_level);
90                }
91               
92        }
93        private void deserialize(){
94                Node node;
95                NodeList nodeList;
96                String b;
97                SearchClause sc;
98               
99                node = xml_document.getFirstChild();
100                if (node.getNodeName().equals("tripple")){
101                        nodeList = node.getChildNodes();
102                        b = nodeList.item(0).getFirstChild().getNodeValue();
103                        deserialize(b,nodeList.item(1), nodeList.item(2),0);
104                }else{
105                        //log.debug("SCCCCC: deserialize");
106                        if (node.getNodeName().equals("searchClause")){
107                       
108                                nodeList = node.getChildNodes();
109                                sc = new SearchClause(nodeList.item(1).getTextContent().trim(), nodeList.item(3).getTextContent().trim(), nodeList.item(5).getTextContent().trim());
110                                list[0][0] = sc;
111                        }
112                }
113                //log.debug("SCCCCC: list " + list[0][0].getIndex() + list[0][0].getValue());
114               
115               
116        }
117       
118        // create xml_document from array-list
119        // create xml-string from xml_document
120        private Element serialize(SearchClause sc){
121                Element e, root, e_rel;
122               
123                root = xml_document.createElement("searchClause");
124                e = xml_document.createElement("index");
125                e.setNodeValue(sc.getIndex());
126                root.appendChild(e);
127                e_rel = xml_document.createElement("relation");
128                //e.setNodeValue(list[0][0].getRelation());
129                root.appendChild(e_rel);
130                e = xml_document.createElement("term");
131                e.setNodeValue(sc.getValue());
132                root.appendChild(e);
133               
134                e = xml_document.createElement("value");
135                e.setNodeValue(sc.getValue());
136                e_rel.appendChild(e);
137               
138                return root;
139        }
140       
141        private Element serialize(Element e1, Element e2, String operand){
142                Element e, root, e_rel;
143               
144                root = xml_document.createElement("tripple");
145                e_rel = xml_document.createElement("boolean");
146                e = xml_document.createElement("value");
147                e.setNodeValue(operand);
148                e_rel.appendChild(e);
149                root.appendChild(e_rel);
150
151                e = xml_document.createElement("leftOperand");
152                e.appendChild(e1);
153                root.appendChild(e);
154               
155                e = xml_document.createElement("rightOperand");
156                e.appendChild(e2);
157                root.appendChild(e);
158               
159                return root;
160        }
161       
162        private void serialize(){
163                Node node;
164                Element root, e, e_rel, ej, ej_last = null;
165               
166                // remove old document
167                //log.debug("SCCCCC: serialize");
168                //log.debug("SCCCCC: " + xml_document.getChildNodes().getLength());
169                xml_document.removeChild(xml_document.getFirstChild());
170                //log.debug("SCCCCC: CLEARED " + xml_document.getChildNodes().getLength());
171               
172                if ((getLastAnd() == 1) && (getLastOr(0) == 1)){
173                        //log.debug("SCCCCC: searchClause ");
174                        root = xml_document.createElement("searchClause");
175                        e = xml_document.createElement("index");
176                        e.setTextContent(list[0][0].getIndex());
177                        root.appendChild(e);
178                        e_rel = xml_document.createElement("relation");
179                        root.appendChild(e_rel);
180                        e = xml_document.createElement("term");
181                        e.setTextContent(list[0][0].getValue());
182                        root.appendChild(e);
183                       
184                        e = xml_document.createElement("value");
185                        e.setTextContent(list[0][0].getRelation());
186                        e_rel.appendChild(e);
187                       
188                } else {
189                        root = xml_document.createElement("tripple");
190                       
191                        for(int i=0;i<20;i++){
192                                if (list[i][0] == null){
193                                        break;
194                                }
195                                ej = serialize(list[i][0]);
196                                for(int j=1;j<20;j++){
197                                        if (list[i][j] == null){
198                                                break;
199                                        }
200                                        e = serialize(list[i][j]);
201                                        ej = serialize(ej,e,"or");
202                                }
203                                if (ej_last != null){
204                                        ej_last = serialize(ej_last, ej, "and");
205                                }
206                                ej_last = ej;
207                        }
208                }
209        xml_document.appendChild(root);
210
211               
212                ////////////////// to XML-string
213               
214       
215      //set up a transformer
216        TransformerFactory transfac = TransformerFactory.newInstance();
217        Transformer trans;
218                try {
219                        trans = transfac.newTransformer();
220                        trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
221                trans.setOutputProperty(OutputKeys.INDENT, "yes");
222
223                //create string from xml tree
224                StringWriter sw = new StringWriter();
225                StreamResult result = new StreamResult(sw);
226                DOMSource source = new DOMSource(xml_document);
227                try {
228                                trans.transform(source, result);
229                        } catch (TransformerException e1) {
230                                // TODO Auto-generated catch block
231                                e1.printStackTrace();
232                        }
233                xml_string = sw.toString();
234                //log.debug("SERIALIZED-XML:  " + xml_string);
235                } catch (TransformerConfigurationException e1) {
236                        // TODO Auto-generated catch block
237                        e1.printStackTrace();
238                }
239       
240
241        }
242       
243        public String toXML(){
244                serialize();
245                return xml_string;
246        }
247       
248        //TODO processing
249        // replace ISOCAT - category by elements
250        // optimize
251        // remove duplicates
252       
253        public void process(){
254                DCRProxyAction a = new DCRProxyAction();
255                //TODO format, actionkey -
256               
257                try {
258                        //a.execute();
259                        //TODO update list structure according ELEMENTS
260                } catch (Exception e) {
261                        // TODO Auto-generated catch block
262                        e.printStackTrace();
263                }
264                //insert into a[i]
265               
266               
267        }
268       
269}
Note: See TracBrowser for help on using the repository browser.