Skip to Content.
Sympa Menu

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.

Top of Page