Commit in GeomConverter/src/org/lcsim/geometry/compact on MAIN
Detector.java+141.25 -> 1.26
converter/lcdd/LCDDDetector.java+71.18 -> 1.19
converter/lcdd/util/LCDD.java+49-21.23 -> 1.24
+70-2
3 modified files
JM: WIP on gdml merge

GeomConverter/src/org/lcsim/geometry/compact
Detector.java 1.25 -> 1.26
diff -u -r1.25 -r1.26
--- Detector.java	11 May 2007 00:21:09 -0000	1.25
+++ Detector.java	14 Dec 2007 21:57:51 -0000	1.26
@@ -1,6 +1,9 @@
 
 package org.lcsim.geometry.compact;
+import java.net.URL;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -28,6 +31,7 @@
     private Map<String,Region> regions = new HashMap<String,Region>();
     private Map<String,VisAttributes> display = new HashMap<String,VisAttributes>();
     private XMLMaterialManager materialMgr;
+    private List<URL> gdmlReferences = new ArrayList<URL>();
     
     private SystemIDMap idmap = new SystemIDMap();
     
@@ -261,4 +265,14 @@
     {
     	this.de = de;
     }
+    
+    public void addGDMLReference(URL url)
+    {
+        gdmlReferences.add(url);
+    }
+    
+    public List<URL> getGDMLReferences()
+    {
+        return gdmlReferences;
+    }
 }
\ No newline at end of file

GeomConverter/src/org/lcsim/geometry/compact/converter/lcdd
LCDDDetector.java 1.18 -> 1.19
diff -u -r1.18 -r1.19
--- LCDDDetector.java	11 Oct 2006 00:58:05 -0000	1.18
+++ LCDDDetector.java	14 Dec 2007 21:57:51 -0000	1.19
@@ -2,6 +2,7 @@
 
 import java.io.IOException;
 import java.io.OutputStream;
+import java.net.URL;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
@@ -208,6 +209,12 @@
             ((LCDDField) field).addToLCDD(lcdd);
         }
         
+        // Merge in referenced GDML files from includes block.
+        for (URL gdmlFile : getGDMLReferences())
+        {
+            lcdd.mergeGDML(gdmlFile.openStream());
+        }
+                
         lcdd.cleanUp();
         
         Document doc = new Document();

GeomConverter/src/org/lcsim/geometry/compact/converter/lcdd/util
LCDD.java 1.23 -> 1.24
diff -u -r1.23 -r1.24
--- LCDD.java	29 Sep 2006 23:42:10 -0000	1.23
+++ LCDD.java	14 Dec 2007 21:57:51 -0000	1.24
@@ -1,14 +1,19 @@
 package org.lcsim.geometry.compact.converter.lcdd.util;
 
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
+
+import org.jdom.Attribute;
+import org.jdom.Document;
 import org.jdom.Element;
 import org.jdom.JDOMException;
 import org.jdom.Namespace;
-import org.jdom.Attribute;
-import org.lcsim.material.XMLMaterialManager;
+import org.jdom.input.SAXBuilder;
 import org.lcsim.geometry.compact.converter.lcdd.LCDDSubdetector;
+import org.lcsim.material.XMLMaterialManager;
 
 /**
  *
@@ -446,4 +451,46 @@
     	}
     	return null;
     }
+ 
+    /**
+     * Merge in an existing GDML file into this LCDD document.
+     * @param in InputStream from a GDML data source.
+     */
+    public void mergeGDML(InputStream in)
+    {
+        SAXBuilder builder = new SAXBuilder();
+        Document doc = null;
+        try {
+             doc = builder.build(in);
+        }
+        catch (Exception x)
+        {
+            throw new RuntimeException(x);
+        }
+        
+        Element root = doc.getRootElement();
+        
+        if (!root.getName().equals("gdml"))
+        {
+            throw new RuntimeException("Document is not a valid GDML file.");
+        }
+        
+        Element gdml = getChild("gdml");
+                                       
+        for (Object o1 : root.getChildren())
+        {
+            Element section = (Element)o1;       
+            
+            if (!section.getName().equals("setup"))
+            {
+                Element target = gdml.getChild(section.getName());
+                                    
+                for (Object o2 : section.getChildren())
+                {
+                    Element element = (Element)o2;
+                    target.addContent(element);
+                }
+            }
+        }
+    }    
 }
\ No newline at end of file
CVSspam 0.2.8