Skip to Content.
Sympa Menu

perfsonar-dev - perfsonar: r3086 - branches/perfsonarui/src/org/perfsonar/perfsonarui

Subject: perfsonar development work

List archive

perfsonar: r3086 - branches/perfsonarui/src/org/perfsonar/perfsonarui


Chronological Thread 
  • From:
  • To:
  • Subject: perfsonar: r3086 - branches/perfsonarui/src/org/perfsonar/perfsonarui
  • Date: Wed, 5 Dec 2007 08:13:01 -0500

Author: nina
Date: 2007-12-05 08:12:59 -0500 (Wed, 05 Dec 2007)
New Revision: 3086

Modified:
branches/perfsonarui/src/org/perfsonar/perfsonarui/NMWGHelper.java
Log:
faster implementation of chaining

Modified: branches/perfsonarui/src/org/perfsonar/perfsonarui/NMWGHelper.java
===================================================================
--- branches/perfsonarui/src/org/perfsonar/perfsonarui/NMWGHelper.java
2007-12-05 09:21:31 UTC (rev 3085)
+++ branches/perfsonarui/src/org/perfsonar/perfsonarui/NMWGHelper.java
2007-12-05 13:12:59 UTC (rev 3086)
@@ -21,16 +21,18 @@
package org.perfsonar.perfsonarui;

import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Hashtable;

+import org.perfsonar.perfsonarui.plugins.IPerfsonarRequest;
import org.perfsonar.perfsonarui.plugins.IUserData;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
-import org.w3c.dom.traversal.DocumentTraversal;
import org.w3c.dom.traversal.NodeFilter;
-import org.w3c.dom.traversal.NodeIterator;

+
/**
* This is a helper class to extract metadata and corresponding data
elements from
{@link
org.w3c.dom.Document}.
* Process the document and calls
{@link
#public abstract void process(Element data, ArrayList<Element>
metadataChain)} for each data item, where metadataChain contains all chained
metadata entries for this data.
@@ -47,10 +49,13 @@
*
*/
public abstract class NMWGHelper {
+
+ private static final Runtime s_runtime = Runtime.getRuntime ();
protected String namespace_select;
protected String namespace_nmwg;
protected String metadataIdRef="metadataIdRef";
protected String id="id";
+ protected static final String nsSubject = "subject";
public NMWGHelper() {
setNamespace_select("http://ggf.org/ns/nmwg/ops/select/2.0/";);
setNamespace_nmwg("http://ggf.org/ns/nmwg/base/2.0/";);
@@ -71,7 +76,11 @@
* @param doc
{@link
Document}
* @throws Exception
*/
- public void process(Document doc) throws Exception {
+ /* bad performance
+ * public void process(Document doc) throws Exception {
+ long now = System.currentTimeMillis();
+ long usedmem = s_runtime.totalMemory() -
s_runtime.freeMemory();
+ PSLogger.threadlog(getClass().getName(), "\tprocess start");
NodeList data =
doc.getElementsByTagNameNS(getNamespace_nmwg(), "data");
for (int i=0; i < data.getLength(); i++)
if (data.item(i) instanceof Element) {
@@ -92,30 +101,87 @@
process(data_element,metadataChain);

}
+ usedmem = (s_runtime.totalMemory() - s_runtime.freeMemory()) -
usedmem;
+ PSLogger.threadlog(getClass().getName(),"\tprocess
end\t",System.currentTimeMillis()-now,usedmem);
+ }
+ */
+ public void process(Document doc) throws Exception {
+ //long now = System.currentTimeMillis();
+ //long usedmem = s_runtime.totalMemory() -
s_runtime.freeMemory();
+ //PSLogger.threadlog(getClass().getName(), "\tprocess start");
+
+ Hashtable<String,Element> dataElements = new
Hashtable<String,Element>();
+ Hashtable<String,Element> metadataElements = new
Hashtable<String,Element>();
+ Element root = doc.getDocumentElement();
+ NodeList nodes = root.getChildNodes();
+ for (int i=0; i < nodes.getLength(); i++) {
+ Node n = nodes.item(i);
+ if (n.getNodeType() == Node.ELEMENT_NODE) {
+ if
(IPerfsonarRequest.E_METADATA.equals(n.getLocalName()))
+
metadataElements.put(((Element)n).getAttribute(IPerfsonarRequest.E_ID),
(Element) n);
+ else if
(IPerfsonarRequest.E_DATA.equals(n.getLocalName()))
+
dataElements.put(((Element)n).getAttribute(IPerfsonarRequest.E_ID), (Element)
n);
+ }
+ }
+ nodes = null;
+ Enumeration<String> data = dataElements.keys();
+ while (data.hasMoreElements()) {
+ String dataid = data.nextElement();
+
+ ArrayList<Element> metadataChain = new
ArrayList<Element>();
+ Element data_element = dataElements.get(dataid);
+ Element metadata_element =
metadataElements.get(data_element.getAttribute(IPerfsonarRequest.E_METADATAIDREF));
+ while (metadata_element != null) {
+ metadataChain.add(metadata_element);
+ String idref =
metadata_element.getAttribute(IPerfsonarRequest.E_METADATAIDREF);
+ metadata_element =
metadataElements.get(idref);
+ metadataElements.remove(idref);
+ }
+ process(data_element,metadataChain);
+
+ //just in case - to help garbage collector ...
+ for (int i=metadataChain.size()-1; i >= 0;i--)
+ metadataChain.remove(i);
+ metadataChain.clear();
+ metadataChain = null;
+ }
+ dataElements.clear();
+ metadataElements.clear();
+ //usedmem = (s_runtime.totalMemory() - s_runtime.freeMemory()) -
usedmem;
+ //PSLogger.threadlog(getClass().getName(),"\tprocess
end\t",System.currentTimeMillis()-now,usedmem);

}
public abstract void process(Element data, ArrayList<Element>
metadataChain) throws Exception;

+ /*
public void processChain(Document doc, Element metadata,
ArrayList<Element> metadataChain) throws Exception {
- //Logger.debug("Processing chain\t"+'\t' +
metadata.getAttribute("id"));
metadataChain.add(metadata);
- NodeList select = metadata.getElementsByTagNameNS(namespace_select,
"subject");
- if (select.getLength() ==0) return; //no chaining
-
- for (int i=0; i < select.getLength(); i++)
- if (select.item(i) instanceof Element) {
- String metadataIDRef = ((Element)
select.item(i)).getAttribute(metadataIdRef);
- NodeIterator iterator = ((DocumentTraversal)
doc).createNodeIterator(
- doc.getDocumentElement(),
- NodeFilter.SHOW_ELEMENT,
- new MetadataFilter(metadataIDRef),
- true);
- Node chainedMetadata;
- while ((chainedMetadata = iterator.nextNode()) != null) {
-
processChain(doc,((Element)chainedMetadata),metadataChain);
- }
- }
+ NodeList select = metadata.getElementsByTagNameNS(namespace_select,
nsSubject);
+ if (select.getLength() > 0) {
+ long now = System.currentTimeMillis();
+ long usedmem = s_runtime.totalMemory() -
s_runtime.freeMemory();
+ PSLogger.threadlog(getClass().getName(), "\tprocess chain
start\t" + metadata.getAttribute("id"));
+ for (int i=0; i < select.getLength(); i++)
+ if (select.item(i) instanceof Element) {
+ String metadataIDRef = ((Element)
select.item(i)).getAttribute(metadataIdRef);
+ NodeIterator iterator = ((DocumentTraversal)
doc).createNodeIterator(
+ doc.getDocumentElement(),
+ NodeFilter.SHOW_ELEMENT,
+ new MetadataFilter(metadataIDRef),
+ true);
+ Node chainedMetadata;
+ while ((chainedMetadata = iterator.nextNode()) !=
null) {
+
processChain(doc,((Element)chainedMetadata),metadataChain);
+ }
+ }
+ usedmem = (s_runtime.totalMemory() - s_runtime.freeMemory())
- usedmem;
+ PSLogger.threadlog(getClass().getName() , "\tprocess chain
end\t"+metadata.getAttribute("id"),
+ System.currentTimeMillis()-now,usedmem);

+
+ }
+ //else no chaining
}
+ */
/**
* Override this method to process metadata and data element
* @param data
{@link
org.w3c.dom.Node} Data element from NMWG schema, corresponding to metadata
element below
@@ -175,7 +241,7 @@
if (node instanceof Element) {
Element candidate = (Element) node;
String name = candidate.getLocalName();
- if (name.equals("metadata")
+ if (name.equals(IPerfsonarRequest.E_METADATA)
&& candidate.getAttribute("id").equals(id)) return
FILTER_ACCEPT;
}
return FILTER_SKIP;



  • perfsonar: r3086 - branches/perfsonarui/src/org/perfsonar/perfsonarui, svnlog, 12/05/2007

Archive powered by MHonArc 2.6.16.

Top of Page