View Javadoc

1   /* This file is part of the project "Hilbert II" - http://www.qedeq.org" target="alexandria_uri">http://www.qedeq.org
2    *
3    * Copyright 2000-2014,  Michael Meyling <mime@qedeq.org>.
4    *
5    * "Hilbert II" is free software; you can redistribute
6    * it and/or modify it under the terms of the GNU General Public
7    * License as published by the Free Software Foundation; either
8    * version 2 of the License, or (at your option) any later version.
9    *
10   * This program is distributed in the hope that it will be useful,
11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13   * GNU General Public License for more details.
14   */
15  package org.qedeq.kernel.xml.tracker;
16  
17  import java.io.File;
18  import java.io.IOException;
19  import java.util.Locale;
20  
21  import javax.xml.parsers.ParserConfigurationException;
22  
23  import org.qedeq.base.io.SourceArea;
24  import org.qedeq.base.utility.StringUtility;
25  import org.qedeq.kernel.bo.KernelContext;
26  import org.xml.sax.SAXException;
27  
28  
29  /**
30   * Find position of simple XPath expressions within an XML file.
31   *
32   * @author  Michael Meyling
33   */
34  public final class XPathLocationFinder {
35  
36      /**
37       * Constructor.
38       */
39      private XPathLocationFinder() {
40          // nothing to do
41      }
42  
43      /**
44       * Main method.
45       *
46       * @param   args    Various parameters. See implementation of
47       *                  {@link #printProgramInformation()}.
48       * @throws  ParserConfigurationException    Severe parser configuration problem.
49       * @throws  SAXException                    XML problem.
50       * @throws  IOException                     IO problem.
51       */
52      public static final void main(final String[] args) throws ParserConfigurationException,
53              SAXException, IOException {
54          String from = null;
55          String xpath = null;
56  
57          if (args.length == 0) {
58              printProgramInformation();
59              return;
60          }
61  
62          for (int i = 0; i < args.length; i++) {
63              if (args[i].startsWith("-")) {  // option
64                  final String option = args[i].substring(1).toLowerCase(Locale.US);
65                  if (option.equals("help") || option.equals("h")
66                          || option.equals("?")) {
67                      printProgramInformation();
68                      return;
69                  }
70                  if (option.equals("xpath") || option.equals("xp")) {
71                      if (i + 1 >= args.length) {
72                          printProgramInformation();
73                          System.err.println("\"-xpath\" must be followed by a xpath.");
74                          return;
75                      }
76                      xpath = args[i + 1];
77                      i++;
78                  } else {                    // unknown option
79                      printProgramInformation();
80                      System.err.println("Unknown option: " + option);
81                      return;
82                  }
83              } else {                        // no option, must be file name
84                  from = args[i];
85              }
86          }
87          if (from == null) {
88              printProgramInformation();
89              System.err.println("XML file must be specified.");
90              return;
91          }
92          if (xpath == null) {
93              printProgramInformation();
94              System.err.println("XPath must be specified.");
95              return;
96          }
97          System.out.println(StringUtility.getClassName(XPathLocationFinder.class) + ", running on: "
98              + KernelContext.getInstance().getDescriptiveKernelVersion());
99          try {
100             final SimpleXPath sXPath = new SimpleXPath(xpath);
101             SourceArea result = XPathLocationParser.findSourceArea(new File(from), new SimpleXPath(xpath));
102             System.out.println(result);
103         } catch (RuntimeException e) {
104             System.err.println(e);
105         }
106     }
107 
108     /**
109      * Writes calling convention to <code>System.err</code>.
110      */
111     public static final void printProgramInformation() {
112         System.err.println("Name");
113         System.err.println("----");
114         System.err.println(StringUtility.getClassName(XPathLocationFinder.class)
115             + " - find simple XML paths");
116         System.err.println();
117         System.err.println("Synopsis");
118         System.err.println("-------------------");
119         System.err.println("[-h] -xp[ath] <simpleXPath> <xmlFile>");
120         System.err.println();
121         System.err.println("Description");
122         System.err.println("-----------");
123         System.err.println(
124             "This program finds the location of a given simple XPath in an XML file.");
125         System.err.println();
126         System.err.println("Options and Parameters");
127         System.err.println("---------------------");
128         System.err.println("-h             writes this text and returns");
129         System.err.println("-xpath         set the language filter (default: \"en\")");
130         System.err.println(
131             "<simpleXPath>  simple XML XPath, a subset of the abbreviation XPath notation");
132         System.err.println(
133             "                \"/element1/element2[3]@attribute\" is an example for such a");
134         System.err.println(
135             "                notation. This selects from the first occurrence of \"element1\"");
136         System.err.println(
137             "                and from the third occurrence of subnode \"element2\" the attribute");
138         System.err.println(
139             "                \"attribute\". The attribute is optional. It is always exactly one");
140         System.err.println("                node or the attribute of one node specified.");
141         System.err.println("                General syntax:");
142         System.err.println("                {<element>\"[\"<index>\"]}+[\"@\"<attribute>]");
143         System.err.println("<xmlFile>      XML file");
144         System.err.println();
145         System.err.println("Parameter Examples");
146         System.err.println("------------------");
147         System.err.println(
148             "-xp QEDEQ/CHAPTER/SECTION/NODE[2]/PRECEDING/AXIOM/FORMULA/FORALL/VAR@id");
149         System.err.println("sample/qedeq_basic_concept.xml");
150         System.err.println();
151         System.err.println("Further information");
152         System.err.println("-------------------");
153         System.err.println("For more information about *Hilbert II* look at:");
154         System.err.println("\thttp://www.qedeq.org/");
155         System.err.println();
156     }
157 
158 }