1 package org.lcsim.geometry.compact.converter.lcdd;
2
3 import java.io.BufferedInputStream;
4 import java.io.BufferedOutputStream;
5 import java.io.ByteArrayInputStream;
6 import java.io.ByteArrayOutputStream;
7 import java.io.FileInputStream;
8 import java.io.FileOutputStream;
9 import java.io.InputStream;
10 import java.io.OutputStream;
11 import java.util.logging.Logger;
12
13 import javax.swing.filechooser.FileFilter;
14
15 import org.jdom.Document;
16 import org.jdom.input.SAXBuilder;
17 import org.jdom.output.Format;
18 import org.jdom.output.XMLOutputter;
19 import org.lcsim.geometry.compact.CompactReader;
20 import org.lcsim.geometry.compact.Detector;
21 import org.lcsim.geometry.compact.converter.Converter;
22 import org.lcsim.util.xml.ClasspathEntityResolver;
23 import org.lcsim.util.xml.ElementFactory;
24
25
26
27
28
29
30
31
32 public class Main implements Converter {
33
34 private boolean validate = true;
35
36
37
38
39 public static void main(String[] args) throws Exception {
40 if (args.length < 1 || args.length > 2)
41 usage();
42 InputStream in = new BufferedInputStream(new FileInputStream(args[0]));
43 OutputStream out = args.length == 1 ? System.out : new BufferedOutputStream(new FileOutputStream(args[1]));
44 new Main().convert(args[0], in, out);
45 }
46
47 public Main() throws Exception {
48 setValidationFromSystemProperty();
49 }
50
51 private void setValidationFromSystemProperty() {
52 boolean validateProp = Boolean.parseBoolean(System.getProperty("org.lcsim.geometry.compact.converter.lcdd.validate", "true"));
53 this.validate = validateProp;
54 if (validateProp == false) {
55 Logger.getLogger(Main.class.getName()).warning("XML output validation is turned OFF.");
56 }
57 }
58
59 public void convert(String inputFileName, InputStream in, OutputStream out) throws Exception {
60 ElementFactory factory = new LCDDElementFactory();
61 CompactReader reader = new CompactReader(factory);
62 Detector det = reader.read(in);
63 Document doc = ((LCDDDetector) det).writeLCDD(inputFileName);
64
65 XMLOutputter outputter = new XMLOutputter();
66
67 if (validate) {
68 ByteArrayOutputStream stream = new ByteArrayOutputStream();
69 outputter.output(doc, stream);
70 stream.close();
71
72 SAXBuilder builder = new SAXBuilder();
73 builder.setEntityResolver(new ClasspathEntityResolver());
74 builder.setValidation(true);
75 builder.setFeature("http://apache.org/xml/features/validation/schema", true);
76
77 builder.build(new ByteArrayInputStream(stream.toByteArray()));
78 }
79
80 if (out != null) {
81 outputter.setFormat(Format.getPrettyFormat());
82 outputter.output(doc, out);
83 out.close();
84 }
85 }
86
87 private static void usage() {
88 System.out.println("java " + Main.class.getName() + " <compact> [<lcdd>]");
89 System.exit(0);
90 }
91
92 public String getOutputFormat() {
93 return "lcdd";
94 }
95
96 public FileFilter getFileFilter() {
97 return new LCDDFileFilter();
98 }
99
100 private static class LCDDFileFilter extends FileFilter {
101
102 public boolean accept(java.io.File file) {
103 return file.isDirectory() || file.getName().endsWith(".lcdd");
104 }
105
106 public String getDescription() {
107 return "LCDD file (*.lcdd)";
108 }
109 }
110 }