View Javadoc

1   package org.lcsim.detector;
2   
3   import java.util.ArrayList;
4   
5   import org.lcsim.detector.identifier.IIdentifier;
6   
7   /**
8    * Implementation of {@link IDetectorElementContainer}.
9    */
10  public class DetectorElementContainer
11  extends ArrayList<IDetectorElement>
12  implements IDetectorElementContainer
13  {       
14      public IDetectorElementContainer find(String name)
15      {
16          IDetectorElementContainer matches = new DetectorElementContainer();
17          for ( IDetectorElement de : this )
18          {
19              if (de.getName().equals(name))
20              {
21                  matches.add(de);
22              }
23          }
24          return matches;
25      }   
26      
27      public IDetectorElementContainer find(IIdentifier id)
28      {
29          IDetectorElementContainer matches = new DetectorElementContainer();
30          if (id != null) 
31          {
32              for (IDetectorElement de : this)
33              {
34                  if (de.getIdentifier().isValid())
35                  {
36                      if (de.getIdentifier().equals(id))
37                      {
38                          matches.add(de);
39                      }
40                  }
41              }
42          }
43          return matches;
44      }
45                  
46      public IDetectorElementContainer find(Class<? extends IDetectorElement> klass)
47      {
48          DetectorElementContainer matches = new DetectorElementContainer();
49          for (IDetectorElement de : this)
50          {
51              for (Class checkClass : de.getClass().getClasses() )
52              {
53                  if (checkClass.equals(klass))
54                  {
55                      matches.add(de);
56                  }
57              }
58          }
59          return matches;
60      }   
61      
62      /**
63       * Current implementation does not allow duplicate name, id, or object.
64       */
65      // FIXME: Good checks but very slow!!!
66      /*
67      public boolean add(IDetectorElement de)
68      {                          
69          if (de == null)
70          {
71              throw new IllegalArgumentException("The DetectorElement argument points to null!");
72          }
73  
74          if (contains(de))
75          {
76              throw new IllegalArgumentException("The DetectorElement called <"+de.getName()+"> has already been registered.");            
77          }        
78  
79          if (find(de.getName()).size() > 0)
80          {
81              throw new IllegalArgumentException("Duplicate DetectorElement name <"+de.getName()+">.");
82          }
83          
84          return super.add(de);
85      }
86      */
87      
88      public String toString()
89      {
90      	StringBuffer buff = new StringBuffer();
91      	for (IDetectorElement de : this)
92      	{
93      		buff.append(de.getName()+'\n');    		
94      	}
95      	return buff.toString();
96      }
97  }