import java.io.*;
import java.util.*;
import org.exolab.castor.xml.*;
import org.exolab.castor.xml.util.*;
public class ListModules {
    public static void main(String[] args) {
        try {
            System.out.println("Unmarshaling tracker");
            Tracker trackerDocument = (Tracker)Tracker.unmarshal(new FileReader(args[0]));
            trackerDocument.validate();
            printTracker(trackerDocument);
        } catch (ValidationException ve) {
            System.out.println(ve.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    static void printTracker(Tracker trackerDocument) {
            Detector detector = trackerDocument.getDetector();
            Moduletypes mtypes = trackerDocument.getModuletypes();
            Moduletype[] mtypeArray = mtypes.getModuletype();
            System.out.println("Printing modules...");
            Subdetector[] subdetectorArray = detector.getSubdetector();
        Subdetector currentSubdetector;
        for (int j=0;j<subdetectorArray.length;j++) {
            currentSubdetector=subdetectorArray[j];
            DetectorPart[] detectorPartArray = currentSubdetector.getDetectorPart();
            DetectorPart currentDetectorPart;
             for (int k=0;k<detectorPartArray.length;k++) {
                 currentDetectorPart=detectorPartArray[k];
                 Layer[] layerArray = currentDetectorPart.getLayer();
                 Layer  currentLayer;
                 for (int l=0;l<layerArray.length;l++) { 
                    currentLayer = layerArray[l];
                    Ring[] ringArray = currentLayer.getRing();
                    Ring currentRing;  
                    for (int m=0;m<ringArray.length;m++) {
                       currentRing = ringArray[m];
                       Module[] moduleArray = currentRing.getModule();
                       Module currentModule;
                       for (int n=0;n<moduleArray.length;n++) {  
                           currentModule = moduleArray[n];
                           System.out.println("module " + j +" "+k+" "+l+" "+m+" "+currentModule.getId()+" "+currentModule.getXcenter()+" "+currentModule.getYcenter()+" "+currentModule.getZcenter()+" "+mtypeArray[currentModule.getType()].getLength()+" "+mtypeArray[currentModule.getType()].getWidth()+" "+mtypeArray[currentModule.getType()].getThickness()+" "+mtypeArray[currentModule.getType()].getWidthAtHalfLength());
                           }
                       }
                   }
        }
        }
    }
}


