You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@oodt.apache.org by ma...@apache.org on 2011/11/17 08:04:52 UTC

svn commit: r1203082 - in /oodt/trunk: pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/ pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/pedigree/ webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/

Author: mattmann
Date: Thu Nov 17 07:04:52 2011
New Revision: 1203082

URL: http://svn.apache.org/viewvc?rev=1203082&view=rev
Log:
- OODT-157: add PCS trace module to the OPSUI and expose the trace button 
on the product browser: awww yea

Added:
    oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/pedigree/
    oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/pedigree/TraceableProductBrowser.html
    oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/pedigree/TraceableProductBrowser.java
    oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/
    oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/Trace.css   (with props)
    oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/Trace.html
    oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/Trace.java
    oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/Trace.js   (with props)
    oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/TraceNode.html
    oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/TraceNode.java
    oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/closed.gif   (with props)
    oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/doc.gif   (with props)
    oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/open.gif   (with props)
Modified:
    oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/ProductBrowserPage.java

Modified: oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/ProductBrowserPage.java
URL: http://svn.apache.org/viewvc/oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/ProductBrowserPage.java?rev=1203082&r1=1203081&r2=1203082&view=diff
==============================================================================
--- oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/ProductBrowserPage.java (original)
+++ oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/ProductBrowserPage.java Thu Nov 17 07:04:52 2011
@@ -19,7 +19,7 @@
 package org.apache.oodt.pcs.opsui;
 
 //OODT imports
-import org.apache.oodt.cas.webcomponents.filemgr.browser.product.ProductBrowser;
+import org.apache.oodt.pcs.opsui.pedigree.TraceableProductBrowser;
 
 //Wicket imports
 import org.apache.wicket.PageParameters;
@@ -37,7 +37,7 @@ public class ProductBrowserPage extends 
 
   public ProductBrowserPage(PageParameters parameters){
     super(parameters);
-    add(new ProductBrowser("prod_browser_component", 
+    add(new TraceableProductBrowser("prod_browser_component", 
         app.getFmUrlStr(),
         parameters.getString("id")));
   }

Added: oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/pedigree/TraceableProductBrowser.html
URL: http://svn.apache.org/viewvc/oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/pedigree/TraceableProductBrowser.html?rev=1203082&view=auto
==============================================================================
--- oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/pedigree/TraceableProductBrowser.html (added)
+++ oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/pedigree/TraceableProductBrowser.html Thu Nov 17 07:04:52 2011
@@ -0,0 +1,48 @@
+<wicket:panel>
+<wicket:remove>
+  <link rel="stylesheet" type="text/css" href="ProductBrowser.css"/>
+</wicket:remove>
+
+<h3>Product: <span wicket:id="product_name">foo.txt</span></h3>
+<p><form wicket:id="trace_form"><input type="submit" value="Trace" wicket:id="trace_button" id="trace_button"/></form></p>
+<p>Percent Transferred: <span wicket:id="product_pct_transfer">100%</span></p>
+<a href="#References">Jump to References</a>
+                
+<h3>Metadata</h3>
+  <table id="met_table">
+    <tr wicket:id="met_elem">
+      <td wicket:id="met_elem_name" id="met_elem_name">CAS.ProductName</td>
+      <td>
+         <table id="met_values_table">
+          <tr wicket:id="met_values_list">
+             <td wicket:id="met_value">foo.txt</td>
+          </tr>
+         </table>
+      </td>
+     </tr>
+   </table>
+   
+   <h3 wicket:id="no_prod_met_display" class="nada">No Product Metadata!</h3>
+   <p>&nbsp;</p>
+   <p>&nbsp;</p>
+   <a name="References"></a>
+
+<h3>References</h3>
+  <table id="ref_table">
+    <tr id="ref_table_hdr">
+      <td>File Location</td>
+      <td>File Size</td>
+      <td>Percent Transferred</td>
+    </tr>
+    <tr wicket:id="ref_list">
+      <td wicket:id="ref_file_path">/home/files/foo.txt/foo.txt</td>
+      <td wicket:id="ref_file_size">4028</td>
+      <td wicket:id="ref_pct_transferred">100%</td>
+    </tr>
+  </table>
+
+  <h3 wicket:id="no_prod_ref_display" class="nada">No Product References!</h3>
+  
+
+<span wicket:id="pedigree"/>
+</wicket:panel>

Added: oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/pedigree/TraceableProductBrowser.java
URL: http://svn.apache.org/viewvc/oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/pedigree/TraceableProductBrowser.java?rev=1203082&view=auto
==============================================================================
--- oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/pedigree/TraceableProductBrowser.java (added)
+++ oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/pedigree/TraceableProductBrowser.java Thu Nov 17 07:04:52 2011
@@ -0,0 +1,80 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.oodt.pcs.opsui.pedigree;
+
+//JDK imports
+import java.util.Collections;
+
+//OODT imports
+import org.apache.oodt.cas.filemgr.structs.Product;
+import org.apache.oodt.cas.webcomponents.filemgr.FileManagerConn;
+import org.apache.oodt.cas.webcomponents.filemgr.browser.product.ProductBrowser;
+import org.apache.oodt.pcs.webcomponents.trace.Trace;
+
+//Wicket imports
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.Button;
+import org.apache.wicket.markup.html.form.Form;
+
+/**
+ * 
+ * Extends the existing {@link ProductBrowser} and adds a Web form and
+ * associated pedigree tree container to expose the {@link Trace} component.
+ * 
+ * @author mattmann
+ * @version $Revision$
+ * 
+ */
+public class TraceableProductBrowser extends ProductBrowser {
+
+  private static final long serialVersionUID = 5512878676145737818L;
+
+  /**
+   * @param componentId
+   * @param fmUrlStr
+   * @param productId
+   */
+  public TraceableProductBrowser(String componentId, final String fmUrlStr,
+      String productId) {
+    super(componentId, fmUrlStr, productId);
+    FileManagerConn fm = new FileManagerConn(fmUrlStr);
+    final Product product = fm.safeGetProductById(productId);
+
+    Form traceForm = new Form("trace_form");
+    traceForm.add(new Button("trace_button") {
+      /*
+       * (non-Javadoc)
+       * 
+       * @see org.apache.wicket.markup.html.form.Button#onSubmit()
+       */
+      @Override
+      public void onSubmit() {
+        Trace tracer = new Trace("pedigree", fmUrlStr, true,
+            Collections.EMPTY_LIST, product);
+        tracer.setVisible(true);
+        getParent().getParent().replace(tracer);
+        setVisible(false);
+      }
+
+    });
+    add(traceForm);
+    add(new WebMarkupContainer("pedigree").setVisible(false));
+
+  }
+
+}

Added: oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/Trace.css
URL: http://svn.apache.org/viewvc/oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/Trace.css?rev=1203082&view=auto
==============================================================================
--- oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/Trace.css (added)
+++ oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/Trace.css Thu Nov 17 07:04:52 2011
@@ -0,0 +1,21 @@
+.trigger {
+	cursor: pointer;
+	cursor: hand;
+}
+
+.branch {
+	display: none;
+	margin-left: 16px;
+}
+
+#upstream_pedigree_heading{
+}
+
+#upstream_pedigree_tree{
+}
+
+#downstream_pedigree_heading{
+}
+
+#downstream_pedigree_tree{
+}
\ No newline at end of file

Propchange: oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/Trace.css
------------------------------------------------------------------------------
    svn:executable = *

Added: oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/Trace.html
URL: http://svn.apache.org/viewvc/oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/Trace.html?rev=1203082&view=auto
==============================================================================
--- oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/Trace.html (added)
+++ oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/Trace.html Thu Nov 17 07:04:52 2011
@@ -0,0 +1,66 @@
+<wicket:panel>
+<wicket:link>
+  <script type="text/javascript" src="Trace.js" language="Javascript"></script>
+  <link rel="stylesheet" type="text/css" href="Trace.css"/>
+</wicket:link>
+
+<wicket:remove>
+  <script type="text/javascript" language="Javascript">
+  <!--
+  var openImg = new Image();
+  openImg.src = "open.gif";
+  var closedImg = new Image();
+  closedImg.src = "closed.gif";
+
+  function showBranch(branch) {
+  	var objBranch = document.getElementById(branch).style;
+  	if (objBranch.display == "block")
+  		objBranch.display = "none";
+  	else
+  		objBranch.display = "block";
+  }
+
+  function swapFolder(img) {
+  	objImg = document.getElementById(img);
+  	if (objImg.src.indexOf('closed.gif') > -1)
+  		objImg.src = openImg.src;
+  	else
+  		objImg.src = closedImg.src;
+  }  
+  //-->  
+  </script>
+</wicket:remove>
+
+
+<h3 id="upstream_pedigree_heading">Upstream Pedigree</h3>
+<span id="upstream_pedigree_tree" wicket:id="upstream_pedigree_tree">
+</span>
+
+<h3 id="downstream_pedigree_heading">Downstream Pedigree</h3>
+<span wicket:id="downstream_pedigree_tree" id="downstream_pedigree_tree">
+</span>
+</wicket:panel>
+
+<wicket:remove>
+<div class="trigger"
+	onClick="javascript:showBranch('branch1.1');swapFolder('folder1.1');">
+		<img src="closed.gif" border="0" id="folder1.1" />
+	testfile.txt
+</div>
+<span class="branch" id="branch1.1">
+	<div class="trigger"
+		onClick="javascript:showBranch('branch2.1');swapFolder('folder2.1');">
+			<img src="closed.gif" border="0" id="folder2.1" />
+		testfile2.txt
+    </div>
+	<span class="branch" id="branch2.1">
+			<img src="doc.gif" />
+		testfile3.txt<br />
+
+				<img src="doc.gif" />
+			testfile4.txt<br />
+   </span>   
+</span>
+
+</wicket:remove>
+

Added: oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/Trace.java
URL: http://svn.apache.org/viewvc/oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/Trace.java?rev=1203082&view=auto
==============================================================================
--- oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/Trace.java (added)
+++ oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/Trace.java Thu Nov 17 07:04:52 2011
@@ -0,0 +1,61 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.oodt.pcs.webcomponents.trace;
+
+//JDK imports
+import java.util.List;
+
+//OODT imports
+import org.apache.oodt.cas.filemgr.structs.Product;
+import org.apache.oodt.pcs.pedigree.Pedigree;
+import org.apache.oodt.pcs.pedigree.PedigreeTree;
+import org.apache.oodt.pcs.util.FileManagerUtils;
+
+//Wicket imports
+import org.apache.wicket.markup.html.panel.Panel;
+
+/**
+ * 
+ * A Trace web widget to expose the underlying PCS {@link Pedigree}
+ * functionality.
+ * 
+ * @author mattmann
+ * @version $Revision$
+ * 
+ */
+public class Trace extends Panel {
+
+  private static final long serialVersionUID = 5965790268202443144L;
+
+  /**
+   * @param id
+   * @param model
+   */
+  public Trace(String id, String fmUrlStr, boolean listNotCat,
+      List<String> excludeList, Product product) {
+    super(id);
+    Pedigree pedigree = new Pedigree(new FileManagerUtils(fmUrlStr),
+        listNotCat, excludeList);
+    PedigreeTree upstream = pedigree.doPedigree(product, true);
+    PedigreeTree downstream = pedigree.doPedigree(product, false);
+
+    add(new TraceNode("upstream_pedigree_tree", "up", upstream.getRoot(), 0, 0));
+    add(new TraceNode("downstream_pedigree_tree", "down", downstream.getRoot(), 0, 0));
+  }
+
+}

Added: oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/Trace.js
URL: http://svn.apache.org/viewvc/oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/Trace.js?rev=1203082&view=auto
==============================================================================
--- oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/Trace.js (added)
+++ oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/Trace.js Thu Nov 17 07:04:52 2011
@@ -0,0 +1,20 @@
+var openImg = new Image();
+openImg.src = "./images/open.gif";
+var closedImg = new Image();
+closedImg.src = "./images/closed.gif";
+
+function showBranch(branch) {
+	var objBranch = document.getElementById(branch).style;
+	if (objBranch.display == "block")
+		objBranch.display = "none";
+	else
+		objBranch.display = "block";
+}
+
+function swapFolder(img) {
+	objImg = document.getElementById(img);
+	if (objImg.src.indexOf('closed') > -1)
+		objImg.src = openImg.src;
+	else
+		objImg.src = closedImg.src;
+}
\ No newline at end of file

Propchange: oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/Trace.js
------------------------------------------------------------------------------
    svn:executable = *

Added: oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/TraceNode.html
URL: http://svn.apache.org/viewvc/oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/TraceNode.html?rev=1203082&view=auto
==============================================================================
--- oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/TraceNode.html (added)
+++ oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/TraceNode.html Thu Nov 17 07:04:52 2011
@@ -0,0 +1,26 @@
+<wicket:panel>
+ 
+<wicket:container wicket:id="has_children">
+ <div class="trigger"
+	wicket:id="parent_trigger" onclick="javascript:showBranch('branch1.1');swapFolder('folder1.1');">
+	<wicket:link>
+		<img src="closed.gif" border="0" wicket:id="parent_folder" id="folder1.1" />
+	</wicket:link>
+	<span wicket:id="parent_product_name">testfile.txt</span>
+</div>
+
+<span wicket:id="children_container">
+<span wicket:id="children">
+  <span wicket:id="child"/>
+</span>
+</span>
+</wicket:container>
+
+<wicket:container wicket:id="no_children">
+<wicket:link>
+	<img src="doc.gif" />
+</wicket:link>
+<span wicket:id="product_name">testfile3.txt</span> <br />
+</wicket:container>
+
+</wicket:panel>

Added: oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/TraceNode.java
URL: http://svn.apache.org/viewvc/oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/TraceNode.java?rev=1203082&view=auto
==============================================================================
--- oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/TraceNode.java (added)
+++ oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/TraceNode.java Thu Nov 17 07:04:52 2011
@@ -0,0 +1,136 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.oodt.pcs.webcomponents.trace;
+
+//JDK imports
+import java.util.List;
+import java.util.Vector;
+
+//OODT imports
+import org.apache.oodt.pcs.pedigree.PedigreeTreeNode;
+
+//Wicket imports
+import org.apache.wicket.behavior.SimpleAttributeModifier;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.image.Image;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.markup.html.panel.Panel;
+
+/**
+ * 
+ * A node wrapper around a {@link PedigreeTreeNode} that exposes the node in a
+ * recursive way via Wicket and as a component of a {@link Trace} panel.
+ * 
+ * @author mattmann
+ * @version $Revision$
+ * 
+ */
+public class TraceNode extends Panel {
+
+  private static final long serialVersionUID = -6672032112136408625L;
+
+  /**
+   * @param id
+   */
+  public TraceNode(String id, String folderKey, PedigreeTreeNode parentNode, int branch, int level) {
+    super(id);
+    nodeAdd(this, folderKey, parentNode, branch, level);
+  }
+
+  public List<PedigreeTreeNode> getChildren(PedigreeTreeNode node) {
+    List<PedigreeTreeNode> children = new Vector<PedigreeTreeNode>(
+        node.getNumChildren());
+
+    for (int i = 0; i < node.getNumChildren(); i++) {
+      children.add(node.getChildAt(i));
+    }
+
+    return children;
+  }
+
+  public void nodeAdd(WebMarkupContainer container, final String folderKey, 
+      final PedigreeTreeNode node, final int branch, final int level) {
+
+    if (node.getNumChildren() > 0) {
+      final String folderId = folderKey+"_folder" + (level + 1) + "." + (branch + 1);
+      final String branchId = folderKey+"_branch" + (level + 1) + "." + (branch + 1);
+
+
+      // deactivate no_children
+      WebMarkupContainer noChildren = new WebMarkupContainer("no_children");
+      noChildren.setVisible(false);
+      container.add(noChildren);
+
+      // activate has_children
+      WebMarkupContainer hasChildren = new WebMarkupContainer("has_children");
+      WebMarkupContainer parentTrigger = new WebMarkupContainer(
+          "parent_trigger");
+      parentTrigger.add(new SimpleAttributeModifier("onclick",
+          "javascript:showBranch('" + branchId + "');swapFolder('" + folderId
+              + "');"));
+
+      Image folderImage = new Image("parent_folder");
+      folderImage.add(new SimpleAttributeModifier("id", folderId));
+      parentTrigger.add(folderImage);
+      parentTrigger.add(new Label("parent_product_name", node.getNodeProduct()
+          .getProductName()));
+      hasChildren.add(parentTrigger);
+
+      WebMarkupContainer childrenContainer = new WebMarkupContainer("children_container");
+      childrenContainer.add(new SimpleAttributeModifier("id", branchId));
+      childrenContainer.add(new SimpleAttributeModifier("class", "branch"));
+      
+      ListView<PedigreeTreeNode> children = new ListView<PedigreeTreeNode>(
+          "children", getChildren(node)) {
+        /*
+         * (non-Javadoc)
+         * 
+         * @see
+         * org.apache.wicket.markup.html.list.ListView#populateItem(org.apache
+         * .wicket.markup.html.list.ListItem)
+         */
+        @Override
+        protected void populateItem(ListItem<PedigreeTreeNode> item) {
+          TraceNode childContainer = new TraceNode("child", folderKey, 
+              item.getModelObject(), item.getIndex(), level + 1);
+          item.add(childContainer);
+        }
+      };
+
+      childrenContainer.add(children);
+      
+      hasChildren.add(childrenContainer);
+      container.add(hasChildren);
+
+    } else {
+      // active no_children
+      WebMarkupContainer noChildren = new WebMarkupContainer("no_children");
+      noChildren.add(new Label("product_name", node.getNodeProduct()
+          .getProductName()));
+      container.add(noChildren);
+
+      // de-activate has_children
+      WebMarkupContainer hasChildren = new WebMarkupContainer("has_children");
+      hasChildren.setVisible(false);
+      container.add(hasChildren);
+    }
+  }
+
+}

Added: oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/closed.gif
URL: http://svn.apache.org/viewvc/oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/closed.gif?rev=1203082&view=auto
==============================================================================
Binary file - no diff available.

Propchange: oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/closed.gif
------------------------------------------------------------------------------
    svn:executable = *

Propchange: oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/closed.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/doc.gif
URL: http://svn.apache.org/viewvc/oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/doc.gif?rev=1203082&view=auto
==============================================================================
Binary file - no diff available.

Propchange: oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/doc.gif
------------------------------------------------------------------------------
    svn:executable = *

Propchange: oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/doc.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/open.gif
URL: http://svn.apache.org/viewvc/oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/open.gif?rev=1203082&view=auto
==============================================================================
Binary file - no diff available.

Propchange: oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/open.gif
------------------------------------------------------------------------------
    svn:executable = *

Propchange: oodt/trunk/webapp/components/src/main/java/org/apache/oodt/pcs/webcomponents/trace/open.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream