1 |
3189
|
berkley
|
package org.kepler.web.service;
|
2 |
|
|
|
3 |
|
|
import com.google.gwt.user.client.rpc.*;
|
4 |
|
|
import com.google.gwt.user.server.rpc.*;
|
5 |
|
|
|
6 |
|
|
import org.kepler.web.client.*;
|
7 |
|
|
|
8 |
|
|
import edu.ucsb.nceas.metacat.client.*;
|
9 |
|
|
|
10 |
|
|
import org.w3c.dom.Document;
|
11 |
|
|
import org.w3c.dom.Node;
|
12 |
|
|
import org.w3c.dom.NodeList;
|
13 |
|
|
import org.apache.xpath.XPathAPI;
|
14 |
|
|
import javax.xml.parsers.DocumentBuilder;
|
15 |
|
|
import javax.xml.parsers.DocumentBuilderFactory;
|
16 |
|
|
import org.xml.sax.InputSource;
|
17 |
|
|
|
18 |
|
|
import java.io.*;
|
19 |
|
|
import java.util.*;
|
20 |
|
|
|
21 |
|
|
public class KeplerServiceServlet extends RemoteServiceServlet implements KeplerService
|
22 |
|
|
{
|
23 |
3195
|
berkley
|
private String url = "http://library.kepler-project.org/kepler/metacat";
|
24 |
3189
|
berkley
|
|
25 |
|
|
/**
|
26 |
|
|
* takes in a query string and a sessionid and returns a resultset
|
27 |
|
|
*/
|
28 |
|
|
public MetacatQueryResult[] query(String query, String sessionid)
|
29 |
|
|
{
|
30 |
|
|
try
|
31 |
|
|
{ //query metacat
|
32 |
|
|
MetacatClient client = (MetacatClient)MetacatFactory.createMetacatConnection(url);
|
33 |
|
|
String queryDoc = createQueryDocument(query);
|
34 |
|
|
Reader queryResultReader = client.query(new StringReader(queryDoc));
|
35 |
|
|
//now we have the result document, parse it and return it as MQR[]
|
36 |
|
|
InputSource is = new InputSource(queryResultReader);
|
37 |
|
|
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
38 |
|
|
DocumentBuilder builder = factory.newDocumentBuilder();
|
39 |
|
|
Document doc = builder.parse(is);
|
40 |
|
|
NodeList docs = XPathAPI.selectNodeList(doc, "/resultset/document");
|
41 |
|
|
MetacatQueryResult[] mqr = new MetacatQueryResult[docs.getLength()];
|
42 |
|
|
for(int i=0; i<docs.getLength(); i++)
|
43 |
|
|
{
|
44 |
|
|
Node docNode = docs.item(i);
|
45 |
|
|
//parse each document result into an MQR
|
46 |
|
|
mqr[i] = new MetacatQueryResult();
|
47 |
|
|
String docid = XPathAPI.selectSingleNode(docNode, "docid").getFirstChild().getNodeValue();
|
48 |
|
|
String name = XPathAPI.selectSingleNode(docNode, "param[@name='/entity/@name']").getFirstChild().getNodeValue();
|
49 |
|
|
|
50 |
|
|
mqr[i].setDocid(docid);
|
51 |
|
|
mqr[i].setName(name);
|
52 |
|
|
mqr[i].setDescription("");
|
53 |
|
|
}
|
54 |
|
|
|
55 |
|
|
return mqr;
|
56 |
|
|
}
|
57 |
|
|
catch(Exception e)
|
58 |
|
|
{
|
59 |
|
|
return null;
|
60 |
|
|
}
|
61 |
|
|
}
|
62 |
|
|
|
63 |
|
|
/**
|
64 |
|
|
* takes in credentials and returns a sessionid
|
65 |
|
|
*/
|
66 |
|
|
public String login(String user, String pass)
|
67 |
|
|
{
|
68 |
|
|
try
|
69 |
|
|
{
|
70 |
|
|
MetacatClient client = (MetacatClient)MetacatFactory.createMetacatConnection(url);
|
71 |
|
|
return client.login("uid=kepler,o=unaffiliated,dc=ecoinformatics,dc=org", "kepler");
|
72 |
|
|
}
|
73 |
|
|
catch(Exception e)
|
74 |
|
|
{
|
75 |
|
|
return "error: " + e.getMessage();
|
76 |
|
|
}
|
77 |
|
|
}
|
78 |
|
|
|
79 |
|
|
public String logout()
|
80 |
|
|
{
|
81 |
|
|
return "logout";
|
82 |
|
|
}
|
83 |
|
|
|
84 |
|
|
/**
|
85 |
|
|
* takes in a docid and a sessionid and returns a document
|
86 |
|
|
*/
|
87 |
|
|
public String read(String docid, String sessionid)
|
88 |
|
|
{
|
89 |
|
|
return "read";
|
90 |
|
|
}
|
91 |
|
|
|
92 |
|
|
private String createQueryDocument(String queryString)
|
93 |
|
|
{
|
94 |
|
|
String query = "<?xml version=\"1.0\"?>" +
|
95 |
|
|
"<pathquery version=\"1.2\">" +
|
96 |
|
|
"<querytitle>Untitled-Search-1</querytitle>" +
|
97 |
|
|
"<returndoctype>entity</returndoctype>" +
|
98 |
|
|
"<returndoctype>eml://ecoinformatics.org//eml-2.0.0</returndoctype>" +
|
99 |
|
|
"<returndoctype>-//ecoinformatics.org//eml-dataset-2.0.0beta4//EN</returndoctype>" +
|
100 |
|
|
"<returndoctype>-//ecoinformatics.org//eml-dataset-2.0.0beta6//EN</returndoctype>" +
|
101 |
|
|
"<returndoctype>-//NCEAS//eml-dataset-2.0//EN</returndoctype>" +
|
102 |
|
|
"<returndoctype>-//NCEAS//resource//EN</returndoctype>" +
|
103 |
|
|
"<returnfield>/entity/@name</returnfield>" +
|
104 |
|
|
"<querygroup operator=\"INTERSECT\">" +
|
105 |
|
|
"<querygroup operator=\"UNION\">" +
|
106 |
|
|
"<queryterm searchmode=\"contains\" casesensitive=\"false\">" +
|
107 |
|
|
"<value>" + queryString + "</value>" +
|
108 |
|
|
"</queryterm>" +
|
109 |
|
|
"</querygroup>" +
|
110 |
|
|
"</querygroup>" +
|
111 |
|
|
"</pathquery>";
|
112 |
|
|
return query;
|
113 |
|
|
}
|
114 |
|
|
}
|