package eu.clarin.cmdi.mdservice.action; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.io.UnsupportedEncodingException; import java.io.Writer; import java.net.MalformedURLException; import java.net.URL; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Enumeration; import java.io.StringReader; import java.io.StringWriter; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import net.sf.json.JSON; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import net.sf.json.JSONSerializer; import net.sf.json.xml.XMLSerializer; import java.security.AccessController; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; //import javax.servlet.ServletInputStream; import org.apache.struts2.interceptor.ServletRequestAware; import org.w3c.dom.Attr; import org.w3c.dom.DOMException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import com.opensymphony.xwork2.ActionSupport; /** * * @author * */ public class WorkspaceAction extends GenericProxyAction //implements ServletRequestAware { private static final long serialVersionUID = 1L; // workspaceprofiles public static String USER = "user"; public static String SERVER = "server"; // save element type public static String SE_WORKSPACE = "workspace"; public static String SE_QUERYSET = "queryset"; public static String SE_QUERY = "query"; public static String SE_BOOKMARKSET = "bookmarkset"; public static String SE_BOOKMARK = "bookmark"; // administration query identification public static String ADMIN = "admin"; public static String FILENAME = "filename"; public static String PROFILENAME_BASE = "WorkspaceProfile_"; public static String PROFILENAME_SERVER = "WorkspaceProfileServer.xml"; public static String PROFILENAME_DEFAULT = PROFILENAME_BASE + "default.xml"; public static String ADMINISTRATION_FILENAME = "Administration.xml"; public static String WORKSPACE_FILENAME = "WorkspaceProfile.xml"; /** * Properties to be filled by Struts with according request-parameters */ //private String actionkey; private String data; private String type; //workspacetype private String elementtype; private String qid; private String qsid; //private String format; //private String userMsg; private String base_path; private static WorkspaceAction singleton; private static String workspacefilename; private static Document workspace_doc; //private String workspaceindex_path; //private static Integer querycounter; private static final Integer start_query = 1; //private HttpServletRequest request; public String Workspace_filename(){ return WORKSPACE_FILENAME; } public void setWorkspace_filename(String workspace_filename) { this.WORKSPACE_FILENAME = workspace_filename; } public String getData(){ return data; } public void setData(String data) { this.data = data; } public String getEelemnttype(){ return elementtype; } public void setElementtype(String elementtype) { this.elementtype = elementtype; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getQid() { return qid; } public void setQid(String qid) { this.qid = qid; } public void setQsid(String qsid) { this.qsid = qsid; } public String getQsid() { return qsid; } public WorkspaceAction () { this.elementtype = WorkspaceAction.SE_WORKSPACE; workspacefilename = Admin.getConfig().getProperty("workspaceprofile.path") + Admin.getConfig().getProperty("workspace.file"); if (workspace_doc == null){ //workspacefilename = Admin.getConfig().getProperty("workspace.path") + Admin.getConfig().getProperty("workspace.file"); initDocument(); } } public static WorkspaceAction getWorkspaceAction() { if (singleton == null) { singleton = new WorkspaceAction(); } return singleton; } protected void finalize() throws Throwable { try { //updateQuerycounter(); //saveDocument(); } catch(Exception e) { } finally { super.finalize(); //more code can be written here as per need of application } } /** * primitive identification of the target-proxy * base for finding the right base_url in the props * subclass has to override with its specific proxykey * @return */ public String getProxyKey() { return "workspaceprofile"; } /* @Override public void setServletRequest(HttpServletRequest arg0) { request = arg0; } @Override public HttpServletRequest getServletRequest() { return request; } */ /* public String getUserMsg() { return userMsg; } public void setUserMsg(String userMsg) { this.userMsg = this.userMsg + "\n" + userMsg; } private InputStream resultStream; private InputStream sourceStream; */ /** * The stream holding the resulting data to be sent back to the user as response * @return */ /* public InputStream getResultStream() { return resultStream; } public void setResultStream(InputStream _resultStream){ resultStream = _resultStream; } public void setSourceStream(InputStream _sourceStream){ sourceStream = _sourceStream; } */ @Override public URL getBaseURL() { File file=new File(getPath()); URL url=null; try{ url=file.toURL(); Admin.notifyUser("DEBUG: WorkspaceAction.getBaseURL(): " + url); } catch (MalformedURLException e){ Admin.notifyUser("JSON exception has been caught" + e); } return url; } public String getBasePath() { if (base_path == null) { base_path = Admin.getConfig().getProperty(getProxyKey() + ".path"); } return base_path; } public String getWorkspaceProfile() { String profilename = null; if (type.toLowerCase().equals(USER)) { if (getServletRequest().getRemoteUser() != null) { profilename = PROFILENAME_BASE + getServletRequest().getRemoteUser() + ".xml"; } else { profilename = PROFILENAME_DEFAULT; } } else if (type.toLowerCase().equals(SERVER)) { profilename = PROFILENAME_SERVER; /* File f = new File(getBasePath() + profilename); if (! f.exists()){ //Admin.notifyUser(" not exists"); profilename = "WorkspaceProfile_default.xml"; } */ } else if (type.toLowerCase().equals(ADMIN)){ profilename = ADMINISTRATION_FILENAME; } else if (type.toLowerCase().equals(FILENAME)){ profilename = this.WORKSPACE_FILENAME; } if (profilename == null){ profilename = PROFILENAME_DEFAULT; Admin.notifyUser("WorkspaceProfilePath not specified (USER, SERVER)!"); } Admin.notifyUser("WorkspaceProfilename : " + profilename); return profilename; } @Override public String getFullFormat() { return "xml2json"; } public URL getURL() { File file=new File(getPath()); URL url=null; try{ url=file.toURL(); //Admin.notifyUser("url " + url); } catch (MalformedURLException e){ //Admin.notifyUser("" + e); } return url; } public String getPath() { String targetPath = getBasePath() + this.WORKSPACE_FILENAME;//getWorkspaceProfile(); Admin.notifyUser("WorkspaceAction TARGETPATH: " + targetPath); return targetPath; } @Override public InputStream getSourceStream() throws IOException { InputStream stream = new BufferedInputStream( new FileInputStream(getPath())); return stream; } // set the server - session data = repositories, termsets public void setSessionData(InputStream source) throws IOException { if (source == null) return; if (this.getWorkspaceProfile() != PROFILENAME_SERVER) return; } /* @Override public void prepare() throws Exception { //Admin.notifyUser("execute:"); InputStream in = getSourceStream(); this.setSourceStream(in); if (getFormat().equals("xml")) { setResultStream(in); }else { //JSON // set srcFile (for MDTransformer to pass to xsl-scripts) MDTransformer transformer = new MDTransformer(); transformer.setSrcFile(getURL()); transformer.setParams(MDTransformer.createParamsMap(getFullFormat())); setResultStream(transformer.transformXML(in));//, getFullFormat())); //setSessionData(getResultStream()); } Admin.notifyUser(getProxyKey() + " success:" + (getResultStream()!=null)); } public void changeNodeName(Document doc, Node node, String new_name){ // Create an element with the new name Node node2 = (Node ) doc.createElement(new_name); // Copy the attributes to the new element NamedNodeMap attrs = element.getAttributes(); for (int i=0; i 0){ ((Node)wsnodelist.item(0)).getParentNode().removeChild(wsnodelist.item(0)); } //String qidstring = ""; //if (qid.equals("0")) { // newid = createNewQid(); // changeQueryId(new_doc,qid,newid); //} Node node = new_doc.getFirstChild(); Node node2 = workspace_doc.adoptNode(node.cloneNode(true)); ((Element)node2).setAttribute("user", getUserName()); workspace_doc.getElementsByTagName("WorkspaceProfiles").item(0).appendChild(node2); } if (this.elementtype.equals(WorkspaceAction.SE_QUERY)){ // new query Node node = new_doc.getFirstChild(); if (this.qid.equals("0")){ newid = createNewId();//"maxqid"); new_doc.getElementsByTagName("id").item(0).setTextContent(newid); Element root = workspace_doc.getDocumentElement(); Node node2 = workspace_doc.adoptNode(node.cloneNode(true)); node2 = workspace_doc.renameNode(node2, "", "item"); // apend to specific queryset NodeList wsnodelist = (NodeList) getQueryParent(); Node anode = wsnodelist.item(0); if (anode.getTextContent().trim().toLowerCase().equals("null")){ anode.setTextContent(""); } anode.appendChild(node2); } else { // edit existing query NodeList wsnodelist = (NodeList) getQuery(); // remove //childeNode if (wsnodelist.getLength() > 0){ //Element root = workspace_doc.getDocumentElement(); Node node2 = workspace_doc.adoptNode(node.cloneNode(true)); node2 = workspace_doc.renameNode(node2, "", "item"); Node qnode = (Node)wsnodelist.item(0); //root.replaceChild(node2,(Node)wsnodelist.item(0)); Element parentElement = (Element)qnode.getParentNode(); parentElement.insertBefore(node2, qnode); qnode.getParentNode().removeChild(qnode); parentElement.normalize(); } } } if (this.elementtype.equals(WorkspaceAction.SE_BOOKMARK)){ // new bookmark Node node = new_doc.getFirstChild(); if (this.qid.equals("0")){ newid = createNewId();//"maxbid"); new_doc.getElementsByTagName("id").item(0).setTextContent(newid); Element root = workspace_doc.getDocumentElement(); Node node2 = workspace_doc.adoptNode(node.cloneNode(true)); node2 = workspace_doc.renameNode(node2, "", "item"); // apend to specific bookmarkset NodeList wsnodelist = (NodeList) getBookmarkParent(); Node anode = wsnodelist.item(0); if (anode.getTextContent().trim().toLowerCase().equals("null")){ anode.setTextContent(""); } anode.appendChild(node2); } else { // edit existing query NodeList wsnodelist = (NodeList) getQuery(); // remove //childeNode if (wsnodelist.getLength() > 0){ //Element root = workspace_doc.getDocumentElement(); Node node2 = workspace_doc.adoptNode(node.cloneNode(true)); node2 = workspace_doc.renameNode(node2, "", "item"); Node qnode = (Node)wsnodelist.item(0); //root.replaceChild(node2,(Node)wsnodelist.item(0)); Element parentElement = (Element)qnode.getParentNode(); parentElement.insertBefore(node2, qnode); qnode.getParentNode().removeChild(qnode); parentElement.normalize(); } } } //new queryset if (this.elementtype.equals(WorkspaceAction.SE_QUERYSET)){ // new queryset Node node = new_doc.getFirstChild(); if (this.qsid.equals("0")){ newid = createNewId();//"maxqsid"); new_doc.getElementsByTagName("id").item(0).setTextContent(newid); Element root = workspace_doc.getDocumentElement(); Node node2 = workspace_doc.adoptNode(node.cloneNode(true)); node2 = workspace_doc.renameNode(node2, "", "item"); // apend to specific querysets NodeList wsnodelist = (NodeList) this.getWorkspace(); Element welem = (Element)wsnodelist.item(0); Node anode = welem.getElementsByTagName("Querysets").item(0); if (anode.getTextContent().trim().toLowerCase().equals("null")){ anode.setTextContent(""); } anode.appendChild(node2); } else { // edit existing queryset NodeList wsnodelist = (NodeList) getQueryset(); // remove //childeNode if (wsnodelist.getLength() > 0){ //Element root = workspace_doc.getDocumentElement(); Node node2 = workspace_doc.adoptNode(node.cloneNode(true)); node2 = workspace_doc.renameNode(node2, "", "item"); Node qset = (Node)wsnodelist.item(0); Element parentElement = (Element)qset.getParentNode(); parentElement.insertBefore(node2, qset); qset.getParentNode().removeChild(qset); parentElement.normalize(); } } } //new bookmarkset if (this.elementtype.equals(WorkspaceAction.SE_BOOKMARKSET)){ // new queryset Node node = new_doc.getFirstChild(); if (this.qsid.equals("0")){ newid = createNewId();//"maxbsid"); new_doc.getElementsByTagName("id").item(0).setTextContent(newid); Element root = workspace_doc.getDocumentElement(); Node node2 = workspace_doc.adoptNode(node.cloneNode(true)); node2 = workspace_doc.renameNode(node2, "", "item"); // apend to specific querysets NodeList wsnodelist = (NodeList) this.getWorkspace(); Element welem = (Element)wsnodelist.item(0); Node anode = welem.getElementsByTagName("Bookmarksets").item(0); if (anode.getTextContent().trim().toLowerCase().equals("null")){ anode.setTextContent(""); } anode.appendChild(node2); } else { // edit existing bookmarkset NodeList wsnodelist = (NodeList) getBookmarkset(); // remove //childeNode if (wsnodelist.getLength() > 0){ //Element root = workspace_doc.getDocumentElement(); Node node2 = workspace_doc.adoptNode(node.cloneNode(true)); node2 = workspace_doc.renameNode(node2, "", "item"); Node qset = (Node)wsnodelist.item(0); Element parentElement = (Element)qset.getParentNode(); parentElement.insertBefore(node2, qset); qset.getParentNode().removeChild(qset); parentElement.normalize(); } } } return newid; } //todo .has("Queries") public void parseDataInit(JSONObject json){ // workspaceelement if (json.has("Querysets")) { this.setQid("0"); this.setElementtype(WorkspaceAction.SE_WORKSPACE); } else { // Querysetelement if (json.has("Queries")) { this.setElementtype(WorkspaceAction.SE_QUERYSET); this.setQsid(json.getString("id")); } else { if (json.has("Bookmarks")) { this.setElementtype(WorkspaceAction.SE_BOOKMARKSET); this.setQsid(json.getString("id")); } else { // Query-Bookmark-element if (json.getString("bookmark").equals("1")) { this.setElementtype(WorkspaceAction.SE_BOOKMARK); } else { // Queryelement this.setElementtype(WorkspaceAction.SE_QUERY); } this.setQid(json.getString("id")); } } } } public String save() throws ParserConfigurationException, SAXException, IOException, DOMException, XPathExpressionException, TransformerException, TransformerFactoryConfigurationError{ // user data String jsonData = getData(); XMLSerializer serializer = new XMLSerializer(); JSON json = JSONSerializer.toJSON( jsonData ); // init qid, elementtype parseDataInit((JSONObject)json); serializer.setRootName(getXMLRootName()); //"WorkspaceProfile"); serializer.setElementName("item"); serializer.setTypeHintsEnabled(false); String xml = serializer.write( json ); //Admin.notifyUser("XML:" + xml); InputStream is_xml = new ByteArrayInputStream( xml.getBytes( ) ); // add to document //Admin.writeToFile(getPath(), is_xml); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document new_doc = builder.parse( is_xml ); // set user //((Element)d.getFirstChild()).setAttribute("user", getServletRequest().getRemoteUser()); String newid = DocumentReplaceNewElement(new_doc); //TODO saveDocument(); // return new qid //String src = "" + qidstring + ""; //javax.xml.transform.stream.StreamSource s = new StreamSource(src); //InputStream in = s.getInputStream(); this.setResultStream(createStream(newid));//(InputStream)(new ByteArrayInputStream(qidstring.getBytes()))); return SUCCESS; } public InputStream DocumentToStream(Node node) throws TransformerConfigurationException, TransformerException, TransformerFactoryConfigurationError{ InputStream is = null; ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); Source xmlSource; if (node == null) { xmlSource = new DOMSource(workspace_doc); } else { xmlSource = new DOMSource(node); } Result outputTarget = new StreamResult(outputStream); TransformerFactory.newInstance().newTransformer().transform(xmlSource, outputTarget); is = new ByteArrayInputStream(outputStream.toByteArray()); return is; } public String DocumentToXMLString(){ Transformer transformer; String xmlString = ""; try { transformer = TransformerFactory.newInstance().newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //initialize StreamResult with File object to save to file StreamResult result = new StreamResult(new StringWriter()); DOMSource source = new DOMSource(workspace_doc); try { transformer.transform(source, result); } catch (TransformerException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } xmlString = result.getWriter().toString(); } catch (TransformerConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (TransformerFactoryConfigurationError e) { // TODO Auto-generated catch block e.printStackTrace(); } return xmlString; } public void addWorkspaceToDocument(){ //{'WorkspaceProfile':{'CustomTermsets':'null', // 'Termsets':'null', // 'Repositories':'null', // 'Querysets':'null','created':'null','lastchanged':'null','profilename':'null'}}; Element we = workspace_doc.createElement("WorkspaceProfile"); we.setAttribute("user", getType().toLowerCase()); workspace_doc.getFirstChild().appendChild(we); Element e = workspace_doc.createElement("CustomTermsets"); e.setNodeValue("null"); we.appendChild(e); e = workspace_doc.createElement("Termsets"); e.setNodeValue("null"); we.appendChild(e); e = workspace_doc.createElement("Repositories"); e.setNodeValue("null"); we.appendChild(e); e = workspace_doc.createElement("Querysets"); e.setNodeValue("null"); we.appendChild(e); DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String strdate = dateFormat.format(new Date()).toString(); e = workspace_doc.createElement("created"); e.setNodeValue(strdate); we.appendChild(e); e = workspace_doc.createElement("lastchanged"); e.setNodeValue(strdate); we.appendChild(e); e = workspace_doc.createElement("profilename"); e.setNodeValue(getType().toLowerCase()); we.appendChild(e); } public String getUserName(){ String userstring; if (getType().toLowerCase().equals(SERVER)){ userstring = SERVER; }else { userstring = getServletRequest().getRemoteUser(); if (userstring == null){ userstring = "default"; } } return userstring; } public String getWorkspaceXPathExpression(){ String xpath_expr = ""; xpath_expr = "//Profiles/WorkspaceProfiles/WorkspaceProfile[@user='" + getUserName() + "']"; return xpath_expr; } public Object getWorkspace() throws XPathExpressionException{ InputStream is = null; XPathFactory factory = XPathFactory.newInstance(); XPath xpath = factory.newXPath(); XPathExpression expr; expr = xpath.compile(getWorkspaceXPathExpression()); //expression is evaluated with respect to a certain context node which is doc. Object result = null; try{ result = expr.evaluate(workspace_doc, XPathConstants.NODESET); } catch(Exception e){ } return result; } public Object getQuery() throws XPathExpressionException{ XPathFactory factory = XPathFactory.newInstance(); XPath xpath = factory.newXPath(); XPathExpression expr; expr = xpath.compile("//Profiles/WorkspaceProfiles/WorkspaceProfile/Querysets/item/Queries/item[id='" + this.qid + "']"); //expr = xpath.compile("//Profiles/WorkspaceProfiles/WorkspaceProfile/Querysets/item/Queries/item[id='" +this.qid.toString()+"']"); //expr = xpath.compile("//item[@id='" + this.qid + "']"); //expression is evaluated with respect to a certain context node which is doc. Object result = null; try{ result = expr.evaluate(workspace_doc, XPathConstants.NODESET); } catch(Exception e){ } return result; } public Object getQueryParent() throws XPathExpressionException{ XPathFactory factory = XPathFactory.newInstance(); XPath xpath = factory.newXPath(); XPathExpression expr; expr = xpath.compile("//Profiles/WorkspaceProfiles/WorkspaceProfile/Querysets/item[id='" + this.qsid + "']/Queries"); //expression is evaluated with respect to a certain context node which is doc. Object result = null; try{ result = expr.evaluate(workspace_doc, XPathConstants.NODESET); } catch(Exception e){ } return result; } public Object getQueryVcrid() throws XPathExpressionException{ XPathFactory factory = XPathFactory.newInstance(); XPath xpath = factory.newXPath(); XPathExpression expr; // expr = xpath.compile("//Profiles/WorkspaceProfiles/WorkspaceProfile/Querysets/item[id='" + this.qsid + "']/vcrid"); expr = xpath.compile("//Profiles/WorkspaceProfiles/WorkspaceProfile/Querysets/item/Queries/item[id='" + this.qid + "']/vcrid"); //expression is evaluated with respect to a certain context node which is doc. Object result = null; try{ result = expr.evaluate(workspace_doc, XPathConstants.STRING); } catch(Exception e){ } return result; } public Object getVcrid() throws XPathExpressionException{ XPathFactory factory = XPathFactory.newInstance(); XPath xpath = factory.newXPath(); XPathExpression expr1, expr2; //expr = xpath.compile("item[id='" + this.qid + "']/vcrid"); expr1 = xpath.compile("//Profiles/WorkspaceProfiles/WorkspaceProfile/Querysets/item/Queries/item[id='" + this.qid + "']/vcrid"); expr2 = xpath.compile("//Profiles/WorkspaceProfiles/WorkspaceProfile/Bookmarksets/item[id='" + this.qid + "']/vcrid"); //expression is evaluated with respect to a certain context node which is doc. Object result = null; try{ result = expr1.evaluate(workspace_doc, XPathConstants.STRING); } catch(Exception e){ } if (result.equals("")){ try{ result = expr2.evaluate(workspace_doc, XPathConstants.STRING); } catch(Exception e){ } } return result; } public Object getQueryset() throws XPathExpressionException{ XPathFactory factory = XPathFactory.newInstance(); XPath xpath = factory.newXPath(); XPathExpression expr; expr = xpath.compile("//Profiles/WorkspaceProfiles/WorkspaceProfile/Querysets/item[id='" + this.qsid + "']"); //expression is evaluated with respect to a certain context node which is doc. Object result = null; try{ result = expr.evaluate(workspace_doc, XPathConstants.NODESET); } catch(Exception e){ } return result; } public Object getBookmarkParent() throws XPathExpressionException{ XPathFactory factory = XPathFactory.newInstance(); XPath xpath = factory.newXPath(); XPathExpression expr; expr = xpath.compile("//Profiles/WorkspaceProfiles/WorkspaceProfile/Bookmarksets/item[id='" + this.qsid + "']/Bookmarks"); //expression is evaluated with respect to a certain context node which is doc. Object result = null; try{ result = expr.evaluate(workspace_doc, XPathConstants.NODESET); } catch(Exception e){ } return result; } public Object getBookmarkset() throws XPathExpressionException{ XPathFactory factory = XPathFactory.newInstance(); XPath xpath = factory.newXPath(); XPathExpression expr; expr = xpath.compile("//Profiles/WorkspaceProfiles/WorkspaceProfile/Bookmarksets/item[id='" + this.qsid + "']"); //expression is evaluated with respect to a certain context node which is doc. Object result = null; try{ result = expr.evaluate(workspace_doc, XPathConstants.NODESET); } catch(Exception e){ } return result; } @Override public void prepare() throws Exception { NodeList list = (NodeList) getWorkspace();//result; if (list.getLength() < 1) { addWorkspaceToDocument(); list = (NodeList) getWorkspace(); } if (list.getLength() > 1){ // error } // nodelistto stream InputStream is = this.DocumentToStream(list.item(0)); this.setSourceStream(is); if (getFormat().equals("xml")) { setResultStream(is); }else { //JSON // set srcFile (for MDTransformer to pass to xsl-scripts) MDTransformer transformer = new MDTransformer(); transformer.setSrcFile(getURL()); transformer.setParams(MDTransformer.createParamsMap(getFullFormat())); setResultStream(transformer.transformXML(is));//, getFullFormat())); //setSessionData(getResultStream()); } Admin.notifyUser(getProxyKey() + " success:" + (getResultStream()!=null)); } public void initDocument() { boolean init=false; Integer counter = start_query; //String fname = getPath();//workspacefile; File f = new File (workspacefilename); if (!f.exists()) { // create new counter document DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder; try { docBuilder = docFactory.newDocumentBuilder(); workspace_doc = docBuilder.newDocument(); // append root tag Element root = (Element) workspace_doc.createElement("Profiles"); //root.setAttribute("idcounter", "1"); workspace_doc.appendChild(root); Element e = workspace_doc.createElement("Querycounter"); root.appendChild(e); e = workspace_doc.createElement("maxqid"); e.setNodeValue(counter.toString()); e = workspace_doc.createElement("WorkspaceProfiles"); root.appendChild(e); //updateQuerycounter(); this.saveDocument(); //Admin.notifyUser("new document"); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { try { DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder; try { docBuilder = docFactory.newDocumentBuilder(); try { workspace_doc = docBuilder.parse(workspacefilename); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } //read counter //counter = new Integer(workspace_doc.getFirstChild().getFirstChild().getFirstChild().getNodeValue()); init = true; } catch (IOException ex){ //Admin.notifyUser("initCacheCounter:" + ex.toString()); ex.printStackTrace(); } } //return counter; } /* public void updateQuerycounter () { workspace_doc.getFirstChild().getAttributes().getNamedItem("idcounter").setNodeValue(querycounter.toString()); saveDocument(); } */ public void saveDocument() { //public void writeQuerycounter (Integer i) { // first update //workspace_doc.getFirstChild().getAttributes().getNamedItem("idcounter").setNodeValue(i.toString()); //Admin.notifyUser("writeCacheCounter:" + i.toString()); // write xml Transformer transformer; try { transformer = TransformerFactory.newInstance().newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //initialize StreamResult with File object to save to file StreamResult result = new StreamResult(new StringWriter()); DOMSource source = new DOMSource(workspace_doc); try { transformer.transform(source, result); } catch (TransformerException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } String xmlString = result.getWriter().toString(); File f = new File (workspacefilename); FileWriter fw; try { fw = new FileWriter(f); try { fw.write(xmlString); fw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (TransformerConfigurationException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } catch (TransformerFactoryConfigurationError e2) { // TODO Auto-generated catch block e2.printStackTrace(); } } }