Commit in GeomConverter on MAIN
src/org/lcsim/detector/DetectorElement.java+45-31.35 -> 1.36
                      /IDetectorElement.java+15-11.20 -> 1.21
test/org/lcsim/detector/DetectorElementTest.java+29added 1.1
+89-4
1 added + 2 modified, total 3 files
JM: Add basic navigation capabilities to DetectorElement using path strings.

GeomConverter/src/org/lcsim/detector
DetectorElement.java 1.35 -> 1.36
diff -u -r1.35 -r1.36
--- DetectorElement.java	28 Aug 2007 22:26:33 -0000	1.35
+++ DetectorElement.java	21 Sep 2007 00:44:33 -0000	1.36
@@ -9,14 +9,13 @@
 import org.lcsim.detector.identifier.IIdentifier;
 import org.lcsim.detector.identifier.IIdentifierHelper;
 import org.lcsim.detector.identifier.Identifier;
-import org.lcsim.detector.identifier.IIdentifierDictionary.InvalidIndexException;
 import org.lcsim.detector.solids.Inside;
 
 /**
  * Implementation of {@link IDetectorElement}.
  * 
  * @author Jeremy McCormick
- * @version $Id: DetectorElement.java,v 1.35 2007/08/28 22:26:33 jeremy Exp $
+ * @version $Id: DetectorElement.java,v 1.36 2007/09/21 00:44:33 jeremy Exp $
  */
 public class DetectorElement 
 extends Named
@@ -171,6 +170,21 @@
             DetectorElementStore.getInstance().add(this);
         }
     }
+    
+    private void checkName(String name)
+    {
+    	if (name == null)
+    		throw new IllegalArgumentException("Name argument is null!");    
+    	
+    	if (name.length() == 0)
+    		throw new IllegalArgumentException("Name is zero length!");
+    	
+    	if (name.trim().length() == 0)
+    		throw new IllegalArgumentException("Name contains only white space!");
+    	
+    	if (name.contains("/"))
+    		throw new IllegalArgumentException("Name contains a '/', which is not a legal character!");
+    }
 
     private void setup(
             IDetectorElement parent,
@@ -178,6 +192,8 @@
             IIdentifier id
     )
     {	
+    	checkName(getName());    	    	
+    	
         if ( parent != null )
         {
             setParent(parent);
@@ -596,4 +612,30 @@
         }
         return search;
     }      
-}
+    
+    public IDetectorElement findDetectorElement(String pathString)
+    {
+    	return findDetectorElement(pathString.split("/"));
+    }
+    
+    public IDetectorElement findDetectorElement(String[] path)
+    {
+    	IDetectorElement de = this;
+    	for (int i=0; i<path.length; i++)
+    	{
+    		//System.out.println("looking up path component <" + path[i] + ">");
+    		    	    		
+    		if(!de.hasChildren() && i != path.length)
+    			throw new RuntimeException("Not enough child DetectorElements for path argument.");
+    		
+    		IDetectorElementContainer children = de.getChildren();
+    		
+    		IDetectorElementContainer matches = children.find(path[i]);
+    		if (matches.size() > 1)
+    			throw new RuntimeException("Found more than one match for path component <" + path[i] + ">.");
+    		
+    		de = matches.get(0);
+    	}
+    	return de;
+    }
+}
\ No newline at end of file

GeomConverter/src/org/lcsim/detector
IDetectorElement.java 1.20 -> 1.21
diff -u -r1.20 -r1.21
--- IDetectorElement.java	28 Aug 2007 03:21:54 -0000	1.20
+++ IDetectorElement.java	21 Sep 2007 00:44:33 -0000	1.21
@@ -27,7 +27,7 @@
  * 
  * @author jeremym
  * @author tknelson
- * @version $Id: IDetectorElement.java,v 1.20 2007/08/28 03:21:54 jeremy Exp $
+ * @version $Id: IDetectorElement.java,v 1.21 2007/09/21 00:44:33 jeremy Exp $
  */
 public interface IDetectorElement 
 extends IIdentifiable, INamed
@@ -128,6 +128,20 @@
     public IDetectorElementContainer findDetectorElement(IIdentifier id);
     
     /**
+     * Locate a child detector element given a slash-separated list of DetectorElement names.
+     * @param pathString
+     * @return
+     */
+    public IDetectorElement findDetectorElement(String pathString);
+    
+    /**
+     * Locate a child detector element given an ordered list of DetectorElement names.
+     * @param path
+     * @return
+     */
+    public IDetectorElement findDetectorElement(String[] path);    
+    
+    /**
      * Get the readout associated with this DetectorElement,
      * or <code>null</code> if the DetectorElement has no
      * associated readout.

GeomConverter/test/org/lcsim/detector
DetectorElementTest.java added at 1.1
diff -N DetectorElementTest.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ DetectorElementTest.java	21 Sep 2007 00:44:33 -0000	1.1
@@ -0,0 +1,29 @@
+package org.lcsim.detector;
+
+import junit.framework.TestCase;
+
+public class DetectorElementTest extends TestCase 
+{
+	IDetectorElement node1 = null;
+	IDetectorElement node2 = null;
+	IDetectorElement node3 = null;
+	
+	protected void setUp()
+	{
+		node1 = new DetectorElement("node1");
+		node2 = new DetectorElement("node2",node1);
+		node3 = new DetectorElement("node3",node2);
+	}
+	
+	public void test_findDetectorElement()
+	{
+		IDetectorElement de1 = node1.findDetectorElement("node2");
+		assertEquals(de1,node2);
+		
+		IDetectorElement de2 = de1.findDetectorElement("node3");
+		assertEquals(de2,node3);
+		
+		IDetectorElement de3 = node1.findDetectorElement("node2/node3");
+		assertEquals(de3,node3);
+	}
+}
\ No newline at end of file
CVSspam 0.2.8