perfsonar-dev - perfsonar: r5280 - in branches/new-structure-with-base2/ps-mdm-base2/src/main/java/org/perfsonar/base2: service/scheduler service/storage/xml/exist xml
Subject: perfsonar development work
List archive
perfsonar: r5280 - in branches/new-structure-with-base2/ps-mdm-base2/src/main/java/org/perfsonar/base2: service/scheduler service/storage/xml/exist xml
Chronological Thread
- From:
- To:
- Subject: perfsonar: r5280 - in branches/new-structure-with-base2/ps-mdm-base2/src/main/java/org/perfsonar/base2: service/scheduler service/storage/xml/exist xml
- Date: Mon, 7 Sep 2009 06:08:33 -0400
Author: trzaszcz
Date: 2009-09-07 06:08:32 -0400 (Mon, 07 Sep 2009)
New Revision: 5280
Added:
branches/new-structure-with-base2/ps-mdm-base2/src/main/java/org/perfsonar/base2/xml/TextElement.java
Modified:
branches/new-structure-with-base2/ps-mdm-base2/src/main/java/org/perfsonar/base2/service/scheduler/SimpleScheduler.java
branches/new-structure-with-base2/ps-mdm-base2/src/main/java/org/perfsonar/base2/service/storage/xml/exist/ExistHTTPDataStorage.java
branches/new-structure-with-base2/ps-mdm-base2/src/main/java/org/perfsonar/base2/xml/StaxParser.java
Log:
TextElement support implementation, HTTPRequest method synchronization
Modified:
branches/new-structure-with-base2/ps-mdm-base2/src/main/java/org/perfsonar/base2/service/scheduler/SimpleScheduler.java
===================================================================
---
branches/new-structure-with-base2/ps-mdm-base2/src/main/java/org/perfsonar/base2/service/scheduler/SimpleScheduler.java
2009-09-07 09:55:49 UTC (rev 5279)
+++
branches/new-structure-with-base2/ps-mdm-base2/src/main/java/org/perfsonar/base2/service/scheduler/SimpleScheduler.java
2009-09-07 10:08:32 UTC (rev 5280)
@@ -73,7 +73,6 @@
while (working) { //infinite loop until stopScheduler()
try {
-
//if paused - not schedule any tasks
if (!paused) {
@@ -95,9 +94,7 @@
}
//logger.debug("Scheduler waits ["+interval+"] ms");
-
Thread.sleep(interval * 1000); //wait seconds
-
iteration++; //increase iteration counter
} catch (InterruptedException e) {
Modified:
branches/new-structure-with-base2/ps-mdm-base2/src/main/java/org/perfsonar/base2/service/storage/xml/exist/ExistHTTPDataStorage.java
===================================================================
---
branches/new-structure-with-base2/ps-mdm-base2/src/main/java/org/perfsonar/base2/service/storage/xml/exist/ExistHTTPDataStorage.java
2009-09-07 09:55:49 UTC (rev 5279)
+++
branches/new-structure-with-base2/ps-mdm-base2/src/main/java/org/perfsonar/base2/service/storage/xml/exist/ExistHTTPDataStorage.java
2009-09-07 10:08:32 UTC (rev 5280)
@@ -2,8 +2,8 @@
import org.perfsonar.base2.service.exceptions.PerfSONARException;
import org.perfsonar.base2.service.storage.xml.DataCredential;
+import org.perfsonar.base2.service.storage.xml.XMLDBResult;
import org.perfsonar.base2.service.storage.xml.XMLDataStorage;
-import org.perfsonar.base2.service.storage.xml.XMLDBResult;
public class ExistHTTPDataStorage implements XMLDataStorage {
@@ -57,7 +57,7 @@
}
- public XMLDBResult performXQuery(String xquery, String collection,
+ public synchronized XMLDBResult performXQuery(String xquery, String
collection,
DataCredential credential) throws PerfSONARException {
XMLDBResult results = null;
@@ -66,6 +66,7 @@
results =
httpAccess.sendExistXQueryRequest(collection, xquery,
credential.getUsername(),
credential.getPassword(),
ExistDbHTTPAccess.FIRST,
ExistDbHTTPAccess.ALL_RESULTS);
+
} catch (ExistDbErrorException ex) {
if (ex.getHttpCode() == 202) {
// incorrect xquery
@@ -78,11 +79,13 @@
+ " : " +
ex.getMessage());
}
} catch (Exception ex) {
+
throw new
PerfSONARException("error.common.storage.xmldb.open",
"XQuery by HTTP failed. "
+ "Could not connect
to eXist via pure http, "
+ " nested exception
was: " + ex.getClass() + " : "
+ ex.getMessage());
+
}
return results;
Modified:
branches/new-structure-with-base2/ps-mdm-base2/src/main/java/org/perfsonar/base2/xml/StaxParser.java
===================================================================
---
branches/new-structure-with-base2/ps-mdm-base2/src/main/java/org/perfsonar/base2/xml/StaxParser.java
2009-09-07 09:55:49 UTC (rev 5279)
+++
branches/new-structure-with-base2/ps-mdm-base2/src/main/java/org/perfsonar/base2/xml/StaxParser.java
2009-09-07 10:08:32 UTC (rev 5280)
@@ -12,191 +12,225 @@
/**
* Parser for parsing XML to Element hierarchy with using Stax.
- *
+ *
* @author Maciej Glowiak
- *
+ *
*/
public class StaxParser {
- private static final String DEFAULT_ELEMENT_CLASSNAME =
-
"org.perfsonar.base2.xml.Element";
- private static final String ANY_ELEMENT = "*";
+ private static final String DEFAULT_ELEMENT_CLASSNAME =
"org.perfsonar.base2.xml.Element";
+ private static final String ANY_ELEMENT = "*";
- HashMap<String, String> objectMappings = new HashMap<String, String>();
+ HashMap<String, String> objectMappings = new HashMap<String,
String>();
+ // -----------------------------------------------------------
constructor
- // -----------------------------------------------------------
constructor
+ public StaxParser() {
- public StaxParser() {
+ objectMappings.put(ANY_ELEMENT, DEFAULT_ELEMENT_CLASSNAME);
// default
+ // one
- objectMappings.put(ANY_ELEMENT, DEFAULT_ELEMENT_CLASSNAME);
//default one
+ }
- }
+ public StaxParser(HashMap<String, String> objectMapping) {
+ setObjectMappings(objectMapping);
- public StaxParser(HashMap<String, String> objectMapping) {
+ }
- setObjectMappings(objectMapping);
+ // -------------------------------------------------------- public
methods
- }
+ /**
+ * StAX Parser for InputStream, creates XMLStreamReader and runs
parser
+ *
+ * @param fis
+ * @return
+ * @throws XMLStreamException
+ */
+ public Element parse(InputStream istream) throws XMLStreamException {
- // -------------------------------------------------------- public
methods
+ // create STAX reader from inputstream
+ XMLInputFactory factory = (XMLInputFactory) XMLInputFactory
+ .newInstance();
+ XMLStreamReader staxXmlReader = (XMLStreamReader) factory
+ .createXMLStreamReader(istream);
+ return parse(staxXmlReader);
+ }
- /**
- * StAX Parser for InputStream, creates XMLStreamReader and runs parser
- *
- * @param fis
- * @return
- * @throws XMLStreamException
- */
- public Element parse(InputStream istream) throws XMLStreamException {
+ /**
+ * StAX Parser for XMLStreamReader
+ *
+ * @param fis
+ * @return
+ * @throws XMLStreamException
+ */
+ public Element parse(XMLStreamReader staxXmlReader)
+ throws XMLStreamException {
- // create STAX reader from inputstream
- XMLInputFactory factory = (XMLInputFactory) XMLInputFactory
- .newInstance();
- XMLStreamReader staxXmlReader = (XMLStreamReader) factory
- .createXMLStreamReader(istream);
- return parse(staxXmlReader);
+ Element topElement = null;
+ Stack<Element> parents = new Stack<Element>();
- }
+ // current element reference
+ Element currentElement = null;
+ String textNodeName=null;
+ boolean textNodeFound = false;
+ StringBuffer sb = new StringBuffer();
+ String localName;
- /**
- * StAX Parser for XMLStreamReader
- *
- * @param fis
- * @return
- * @throws XMLStreamException
- */
- public Element parse(XMLStreamReader staxXmlReader)
- throws XMLStreamException {
+ // Parse for all STAX events
+ for (int event = staxXmlReader.next(); event !=
XMLStreamConstants.END_DOCUMENT; event = staxXmlReader
+ .next()) {
- Element topElement = null;
- Stack<Element> parents = new Stack<Element>();
+ if (textNodeFound) {
+ if (event ==
XMLStreamConstants.START_ELEMENT) {
+ localName =
staxXmlReader.getLocalName();
+ sb.append("<");
+ sb.append(localName);
+ sb.append(">");
- // current element reference
- Element currentElement = null;
+ } else if (event ==
XMLStreamConstants.END_ELEMENT) {
+ localName =
staxXmlReader.getLocalName();
+ if (localName.equals(textNodeName)) {
+ textNodeFound = false;
+
currentElement.setText(sb.toString().trim());
+ if (parents.size() > 1)
+ currentElement =
parents.pop();
+ } else {
+ sb.append("</");
+ sb.append(localName);
+ sb.append(">");
+ }
- // Parse for all STAX events
- for (int event = staxXmlReader.next(); event !=
XMLStreamConstants.END_DOCUMENT; event = staxXmlReader
- .next()) {
+ } else if (event ==
XMLStreamConstants.CHARACTERS) {
+ sb.append(staxXmlReader.getText());
+ }
+ } else {
+ if (event ==
XMLStreamConstants.START_ELEMENT) {
- if (event == XMLStreamConstants.START_ELEMENT) {
+ // log("== BEGIN:
"+staxXmlReader.getLocalName());
- // log("== BEGIN: "+staxXmlReader.getLocalName());
+ localName =
staxXmlReader.getLocalName();
+ String namespaceUri =
staxXmlReader.getNamespaceURI();
- String localName = staxXmlReader.getLocalName();
- String namespaceUri = staxXmlReader.getNamespaceURI();
+ // get mapping for element
{namespace}name
+ String key = "{" + namespaceUri + "}"
+ localName;
+ String classname =
getMappingForElement(key);
- // get mapping for element {namespace}name
+ // if there is no mapping for
specific {namespace}element
+ // try general mapping for such
elements {*}element
+ if (classname == null)
+ classname =
getMappingForElement("{*}" + localName);
- String key = "{" + namespaceUri + "}" + localName;
- String classname = getMappingForElement(key);
-
- //if there is no mapping for specific {namespace}element
- //try general mapping for such elements {*}element
- if (classname == null)
- classname = getMappingForElement("{*}" + localName);
+ // if there is no general mapping get
defualt class
+ if (classname == null)
+ classname =
getMappingForElement(ANY_ELEMENT);
- //if there is no general mapping get defualt class
- if (classname == null)
- classname = getMappingForElement(ANY_ELEMENT);
+ // create element class basing on
mapping
+ Element e = createElement(classname);
- // create element class basing on mapping
- Element e = createElement(classname);
- if (e == null)
- e = new Element();
+ // if current node is TextElement
then in next iteration
+ // concatanate content of this node
+ if (e instanceof TextElement) {
+ textNodeFound = true;
+ textNodeName = localName;
+ }
- // set name and namespace of element
- e.setName(localName);
+ if (e == null)
+ e = new Element();
- //if there is a namespace,set it
- if (namespaceUri != null) {
-
e.setNamespaceContext(staxXmlReader.getNamespaceContext());
-
e.setNamespacePrefix(staxXmlReader.getNamespaceContext().getPrefix(namespaceUri));
- e.setNamespaceUri(namespaceUri);
- }
+ // set name and namespace of element
+ e.setName(localName);
- // set current element
+ // if there is a namespace,set it
+ if (namespaceUri != null) {
+
e.setNamespaceContext(staxXmlReader
+
.getNamespaceContext());
+
e.setNamespacePrefix(staxXmlReader
+
.getNamespaceContext().getPrefix(namespaceUri));
+
e.setNamespaceUri(namespaceUri);
+ }
- currentElement = e;
+ // set current element
- // set attributes
- for (int i = 0, n = staxXmlReader.getAttributeCount(); i <
n; ++i) {
- // no namespace handling
- QName qname = staxXmlReader.getAttributeName(i);
- String value = staxXmlReader.getAttributeValue(i);
- e.addAttribute(qname.getLocalPart(), value);
- }
+ currentElement = e;
- // if Node - add to stack, set top element
+ // set attributes
+ for (int i = 0, n =
staxXmlReader.getAttributeCount(); i < n; ++i) {
+ // no namespace handling
+ QName qname =
staxXmlReader.getAttributeName(i);
+ String value =
staxXmlReader.getAttributeValue(i);
+
e.addAttribute(qname.getLocalPart(), value);
+ }
- if (topElement != null) {
+ // if Node - add to stack, set top
element
- Element parent = parents.lastElement();
- parent.addChild(e);
- parents.push(e);
+ if (topElement != null) {
- } else {
- topElement = e;
- parents.push(e);
- }
+ Element parent =
parents.lastElement();
+ parent.addChild(e);
+ parents.push(e);
- } // end START_ELEMENT
+ } else {
+ topElement = e;
+ parents.push(e);
+ }
- else if (event == XMLStreamConstants.END_ELEMENT) {
+ } // end START_ELEMENT
- // pop next parent from stack
- if (parents.size() > 1)
- currentElement = parents.pop();
+ else if (event ==
XMLStreamConstants.END_ELEMENT) {
+ localName =
staxXmlReader.getLocalName();
- } // end END_ELEMENT
+ // pop next parent from stack
+ if (parents.size() > 1)
+ currentElement =
parents.pop();
- else if (event == XMLStreamConstants.CHARACTERS) {
+ } // end END_ELEMENT
- //set text
- String textContent = staxXmlReader.getText().trim();
- if ("".equals(currentElement.getText()))
- currentElement.setText(textContent);
+ else if (event ==
XMLStreamConstants.CHARACTERS) {
- } // end CHARACTERS
+ // set text
+ String textContent =
staxXmlReader.getText().trim();
+ if
("".equals(currentElement.getText()))
+
currentElement.setText(textContent);
- } // end for
+ } // end CHARACTERS
- return topElement;
- }
+ }
+ } // end for
- /**
- * Creates new element object upon classname
- */
- private Element createElement(String classname) {
- try {
- Element e = (Element) Class.forName(classname).newInstance();
- return e;
- } catch (Exception e) {
- return null;
- }
- }
+ return topElement;
+ }
+ /**
+ * Creates new element object upon classname
+ */
+ private Element createElement(String classname) {
+ try {
+ Element e = (Element)
Class.forName(classname).newInstance();
+ return e;
+ } catch (Exception e) {
+ return null;
+ }
+ }
- public HashMap<String, String> getObjectMappings() {
- return objectMappings;
- }
+ public HashMap<String, String> getObjectMappings() {
+ return objectMappings;
+ }
- public void setObjectMappings(HashMap<String, String> objectMapping) {
- this.objectMappings = objectMapping;
- }
+ public void setObjectMappings(HashMap<String, String> objectMapping) {
+ this.objectMappings = objectMapping;
+ }
- public void addMapping(String element, String classname) {
- objectMappings.put(element, classname);
- }
+ public void addMapping(String element, String classname) {
+ objectMappings.put(element, classname);
+ }
- public String getMappingForElement(String element) {
- return objectMappings.get(element);
- }
+ public String getMappingForElement(String element) {
+ return objectMappings.get(element);
+ }
-
-} //StaxParser
+} // StaxParser
Added:
branches/new-structure-with-base2/ps-mdm-base2/src/main/java/org/perfsonar/base2/xml/TextElement.java
- perfsonar: r5280 - in branches/new-structure-with-base2/ps-mdm-base2/src/main/java/org/perfsonar/base2: service/scheduler service/storage/xml/exist xml, svnlog, 09/07/2009
Archive powered by MHonArc 2.6.16.