[14982] | 1 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
|
---|
| 2 | <HTML>
|
---|
| 3 | <HEAD>
|
---|
| 4 | <LINK REL=STYLESHEET TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
|
---|
| 5 | <META NAME="GENERATOR" CONTENT="Java2HTML Version 1.4">
|
---|
| 6 | <TITLE>org.tp23.antinstaller.antmod.ProjectHelper3 (Java2HTML)</TITLE>
|
---|
| 7 | </HEAD>
|
---|
| 8 | <BODY><TABLE id="Header" border="0" cellpadding="0" cellspacing="0" width="100%">
|
---|
| 9 | <tr>
|
---|
| 10 | <td colspan="2" width="33%"> </td>
|
---|
| 11 | <td align="center" colspan="2" width="33%">
|
---|
| 12 | <font size="4" class="ClassName">ProjectHelper3.java</font>
|
---|
| 13 | </td>
|
---|
| 14 | <td align="right" colspan="2" width="33%"> </td>
|
---|
| 15 | </tr>
|
---|
| 16 | </TABLE>
|
---|
| 17 | <pre CLASS="Classes">
|
---|
| 18 | <FONT CLASS="LN">1 </FONT><A NAME="1"></A><FONT CLASS="MultiLineComment">/*
|
---|
| 19 | <FONT CLASS="LN">2 </FONT><A NAME="2"></A> * Copyright 2000-2004 The Apache Software Foundation
|
---|
| 20 | <FONT CLASS="LN">3 </FONT><A NAME="3"></A> *
|
---|
| 21 | <FONT CLASS="LN">4 </FONT><A NAME="4"></A> * Licensed under the Apache License, Version 2.0 (the "License");
|
---|
| 22 | <FONT CLASS="LN">5 </FONT><A NAME="5"></A> * you may not use this file except in compliance with the License.
|
---|
| 23 | <FONT CLASS="LN">6 </FONT><A NAME="6"></A> * You may obtain a copy of the License at
|
---|
| 24 | <FONT CLASS="LN">7 </FONT><A NAME="7"></A> *
|
---|
| 25 | <FONT CLASS="LN">8 </FONT><A NAME="8"></A> * http://www.apache.org/licenses/LICENSE-2.0
|
---|
| 26 | <FONT CLASS="LN">9 </FONT><A NAME="9"></A> *
|
---|
| 27 | <FONT CLASS="LN">10</FONT><A NAME="10"></A> * Unless required by applicable law or agreed to in writing, software
|
---|
| 28 | <FONT CLASS="LN">11</FONT><A NAME="11"></A> * distributed under the License is distributed on an "AS IS" BASIS,
|
---|
| 29 | <FONT CLASS="LN">12</FONT><A NAME="12"></A> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
---|
| 30 | <FONT CLASS="LN">13</FONT><A NAME="13"></A> * See the License for the specific language governing permissions and
|
---|
| 31 | <FONT CLASS="LN">14</FONT><A NAME="14"></A> * limitations under the License.
|
---|
| 32 | <FONT CLASS="LN">15</FONT><A NAME="15"></A> *
|
---|
| 33 | <FONT CLASS="LN">16</FONT><A NAME="16"></A> */</FONT>
|
---|
| 34 | <FONT CLASS="LN">17</FONT><A NAME="17"></A>
|
---|
| 35 | <FONT CLASS="LN">18</FONT><A NAME="18"></A><FONT CLASS="Package">package</FONT> <A HREF="../../../../org.tp23.antinstaller.antmod.index.html" target="packageFrame">org.tp23.antinstaller.antmod</A>;
|
---|
| 36 | <FONT CLASS="LN">19</FONT><A NAME="19"></A>
|
---|
| 37 | <FONT CLASS="LN">20</FONT><A NAME="20"></A><FONT CLASS="Import">import</FONT> java.io.File;
|
---|
| 38 | <FONT CLASS="LN">21</FONT><A NAME="21"></A><FONT CLASS="Import">import</FONT> java.io.FileInputStream;
|
---|
| 39 | <FONT CLASS="LN">22</FONT><A NAME="22"></A><FONT CLASS="Import">import</FONT> java.io.FileNotFoundException;
|
---|
| 40 | <FONT CLASS="LN">23</FONT><A NAME="23"></A><FONT CLASS="Import">import</FONT> java.io.IOException;
|
---|
| 41 | <FONT CLASS="LN">24</FONT><A NAME="24"></A><FONT CLASS="Import">import</FONT> java.io.InputStream;
|
---|
| 42 | <FONT CLASS="LN">25</FONT><A NAME="25"></A><FONT CLASS="Import">import</FONT> java.io.UnsupportedEncodingException;
|
---|
| 43 | <FONT CLASS="LN">26</FONT><A NAME="26"></A><FONT CLASS="Import">import</FONT> java.net.URL;
|
---|
| 44 | <FONT CLASS="LN">27</FONT><A NAME="27"></A><FONT CLASS="Import">import</FONT> java.util.Hashtable;
|
---|
| 45 | <FONT CLASS="LN">28</FONT><A NAME="28"></A><FONT CLASS="Import">import</FONT> java.util.Stack;
|
---|
| 46 | <FONT CLASS="LN">29</FONT><A NAME="29"></A>
|
---|
| 47 | <FONT CLASS="LN">30</FONT><A NAME="30"></A><FONT CLASS="Import">import</FONT> org.apache.tools.ant.BuildException;
|
---|
| 48 | <FONT CLASS="LN">31</FONT><A NAME="31"></A><FONT CLASS="Import">import</FONT> org.apache.tools.ant.Location;
|
---|
| 49 | <FONT CLASS="LN">32</FONT><A NAME="32"></A><FONT CLASS="Import">import</FONT> org.apache.tools.ant.Project;
|
---|
| 50 | <FONT CLASS="LN">33</FONT><A NAME="33"></A><FONT CLASS="Import">import</FONT> org.apache.tools.ant.ProjectHelper;
|
---|
| 51 | <FONT CLASS="LN">34</FONT><A NAME="34"></A><FONT CLASS="Import">import</FONT> org.apache.tools.ant.RuntimeConfigurable;
|
---|
| 52 | <FONT CLASS="LN">35</FONT><A NAME="35"></A><FONT CLASS="Import">import</FONT> org.apache.tools.ant.Target;
|
---|
| 53 | <FONT CLASS="LN">36</FONT><A NAME="36"></A><FONT CLASS="Import">import</FONT> org.apache.tools.ant.Task;
|
---|
| 54 | <FONT CLASS="LN">37</FONT><A NAME="37"></A><FONT CLASS="Import">import</FONT> org.apache.tools.ant.UnknownElement;
|
---|
| 55 | <FONT CLASS="LN">38</FONT><A NAME="38"></A><FONT CLASS="Import">import</FONT> org.apache.tools.ant.helper.AntXMLContext;
|
---|
| 56 | <FONT CLASS="LN">39</FONT><A NAME="39"></A><FONT CLASS="Import">import</FONT> org.apache.tools.ant.util.FileUtils;
|
---|
| 57 | <FONT CLASS="LN">40</FONT><A NAME="40"></A><FONT CLASS="Import">import</FONT> org.apache.tools.ant.util.JAXPUtils;
|
---|
| 58 | <FONT CLASS="LN">41</FONT><A NAME="41"></A><FONT CLASS="Import">import</FONT> org.xml.sax.Attributes;
|
---|
| 59 | <FONT CLASS="LN">42</FONT><A NAME="42"></A><FONT CLASS="Import">import</FONT> org.xml.sax.InputSource;
|
---|
| 60 | <FONT CLASS="LN">43</FONT><A NAME="43"></A><FONT CLASS="Import">import</FONT> org.xml.sax.Locator;
|
---|
| 61 | <FONT CLASS="LN">44</FONT><A NAME="44"></A><FONT CLASS="Import">import</FONT> org.xml.sax.SAXException;
|
---|
| 62 | <FONT CLASS="LN">45</FONT><A NAME="45"></A><FONT CLASS="Import">import</FONT> org.xml.sax.SAXParseException;
|
---|
| 63 | <FONT CLASS="LN">46</FONT><A NAME="46"></A><FONT CLASS="Import">import</FONT> org.xml.sax.XMLReader;
|
---|
| 64 | <FONT CLASS="LN">47</FONT><A NAME="47"></A><FONT CLASS="Import">import</FONT> org.xml.sax.helpers.DefaultHandler;
|
---|
| 65 | <FONT CLASS="LN">48</FONT><A NAME="48"></A>
|
---|
| 66 | <FONT CLASS="LN">49</FONT><A NAME="49"></A><FONT CLASS="FormalComment">/**
|
---|
| 67 | <FONT CLASS="LN">50</FONT><A NAME="50"></A> * Sax2 based project reader
|
---|
| 68 | <FONT CLASS="LN">51</FONT><A NAME="51"></A> *
|
---|
| 69 | <FONT CLASS="LN">52</FONT><A NAME="52"></A>* This file has been modified by Paul Hinds for Antinstaller and is not the same
|
---|
| 70 | <FONT CLASS="LN">53</FONT><A NAME="53"></A>* as the ProjectHelper2 delivered with Ant 1.6 although almost identical
|
---|
| 71 | <FONT CLASS="LN">54</FONT><A NAME="54"></A> */</FONT>
|
---|
| 72 | <FONT CLASS="LN">55</FONT><A NAME="55"></A><FONT CLASS="Public">public</FONT> <FONT CLASS="Class">class</FONT> ProjectHelper3 <FONT CLASS="Extends">extends</FONT> ProjectHelper {
|
---|
| 73 | <FONT CLASS="LN">56</FONT><A NAME="56"></A> <FONT CLASS="MultiLineComment">/* Stateless */</FONT>
|
---|
| 74 | <FONT CLASS="LN">57</FONT><A NAME="57"></A>
|
---|
| 75 | <FONT CLASS="LN">58</FONT><A NAME="58"></A> <FONT CLASS="SingleLineComment">// singletons - since all state is in the context
|
---|
| 76 | <FONT CLASS="LN">59</FONT><A NAME="59"></A></FONT> <FONT CLASS="Private">private</FONT> <FONT CLASS="Static">static</FONT> AntHandler elementHandler = <FONT CLASS="New">new</FONT> ElementHandler();
|
---|
| 77 | <FONT CLASS="LN">60</FONT><A NAME="60"></A> <FONT CLASS="Private">private</FONT> <FONT CLASS="Static">static</FONT> AntHandler targetHandler = <FONT CLASS="New">new</FONT> TargetHandler();
|
---|
| 78 | <FONT CLASS="LN">61</FONT><A NAME="61"></A> <FONT CLASS="Private">private</FONT> <FONT CLASS="Static">static</FONT> AntHandler mainHandler = <FONT CLASS="New">new</FONT> MainHandler();
|
---|
| 79 | <FONT CLASS="LN">62</FONT><A NAME="62"></A> <FONT CLASS="Private">private</FONT> <FONT CLASS="Static">static</FONT> AntHandler projectHandler = <FONT CLASS="New">new</FONT> ProjectHandler();
|
---|
| 80 | <FONT CLASS="LN">63</FONT><A NAME="63"></A>
|
---|
| 81 | <FONT CLASS="LN">64</FONT><A NAME="64"></A> <FONT CLASS="FormalComment">/**
|
---|
| 82 | <FONT CLASS="LN">65</FONT><A NAME="65"></A> * helper for path -> URI and URI -> path conversions.
|
---|
| 83 | <FONT CLASS="LN">66</FONT><A NAME="66"></A> */</FONT>
|
---|
| 84 | <FONT CLASS="LN">67</FONT><A NAME="67"></A> <FONT CLASS="Private">private</FONT> <FONT CLASS="Static">static</FONT> FileUtils fu = FileUtils.newFileUtils();
|
---|
| 85 | <FONT CLASS="LN">68</FONT><A NAME="68"></A>
|
---|
| 86 | <FONT CLASS="LN">69</FONT><A NAME="69"></A> <FONT CLASS="FormalComment">/**
|
---|
| 87 | <FONT CLASS="LN">70</FONT><A NAME="70"></A> * Parse an unknown element from a url
|
---|
| 88 | <FONT CLASS="LN">71</FONT><A NAME="71"></A> *
|
---|
| 89 | <FONT CLASS="LN">72</FONT><A NAME="72"></A> * @param project the current project
|
---|
| 90 | <FONT CLASS="LN">73</FONT><A NAME="73"></A> * @param source the url containing the task
|
---|
| 91 | <FONT CLASS="LN">74</FONT><A NAME="74"></A> * @return a configured task
|
---|
| 92 | <FONT CLASS="LN">75</FONT><A NAME="75"></A> * @exception BuildException if an error occurs
|
---|
| 93 | <FONT CLASS="LN">76</FONT><A NAME="76"></A> */</FONT>
|
---|
| 94 | <FONT CLASS="LN">77</FONT><A NAME="77"></A> <FONT CLASS="Public">public</FONT> UnknownElement parseUnknownElement(Project project, URL source)
|
---|
| 95 | <FONT CLASS="LN">78</FONT><A NAME="78"></A> <FONT CLASS="Throws">throws</FONT> BuildException {
|
---|
| 96 | <FONT CLASS="LN">79</FONT><A NAME="79"></A> Target dummyTarget = <FONT CLASS="New">new</FONT> Target();
|
---|
| 97 | <FONT CLASS="LN">80</FONT><A NAME="80"></A> dummyTarget.setProject(project);
|
---|
| 98 | <FONT CLASS="LN">81</FONT><A NAME="81"></A>
|
---|
| 99 | <FONT CLASS="LN">82</FONT><A NAME="82"></A> AntXMLContext context = <FONT CLASS="New">new</FONT> AntXMLContext(project);
|
---|
| 100 | <FONT CLASS="LN">83</FONT><A NAME="83"></A> context.addTarget(dummyTarget);
|
---|
| 101 | <FONT CLASS="LN">84</FONT><A NAME="84"></A> context.setImplicitTarget(dummyTarget);
|
---|
| 102 | <FONT CLASS="LN">85</FONT><A NAME="85"></A>
|
---|
| 103 | <FONT CLASS="LN">86</FONT><A NAME="86"></A> parse(context.getProject(), source,
|
---|
| 104 | <FONT CLASS="LN">87</FONT><A NAME="87"></A> <FONT CLASS="New">new</FONT> RootHandler(context, elementHandler));
|
---|
| 105 | <FONT CLASS="LN">88</FONT><A NAME="88"></A> Task[] tasks = dummyTarget.getTasks();
|
---|
| 106 | <FONT CLASS="LN">89</FONT><A NAME="89"></A> <FONT CLASS="If">if</FONT> (tasks.length != <FONT CLASS="IntegerLiteral">1</FONT>) {
|
---|
| 107 | <FONT CLASS="LN">90</FONT><A NAME="90"></A> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> BuildException(<FONT CLASS="StringLiteral">"No tasks defined"</FONT>);
|
---|
| 108 | <FONT CLASS="LN">91</FONT><A NAME="91"></A> }
|
---|
| 109 | <FONT CLASS="LN">92</FONT><A NAME="92"></A> <FONT CLASS="Return">return</FONT> (UnknownElement) tasks[<FONT CLASS="IntegerLiteral">0</FONT>];
|
---|
| 110 | <FONT CLASS="LN">93</FONT><A NAME="93"></A> }
|
---|
| 111 | <FONT CLASS="LN">94</FONT><A NAME="94"></A> <FONT CLASS="FormalComment">/**
|
---|
| 112 | <FONT CLASS="LN">95</FONT><A NAME="95"></A> * Parse a source xml input.
|
---|
| 113 | <FONT CLASS="LN">96</FONT><A NAME="96"></A> *
|
---|
| 114 | <FONT CLASS="LN">97</FONT><A NAME="97"></A> * @param project the current project
|
---|
| 115 | <FONT CLASS="LN">98</FONT><A NAME="98"></A> * @param source the xml source
|
---|
| 116 | <FONT CLASS="LN">99</FONT><A NAME="99"></A> * @exception BuildException if an error occurs
|
---|
| 117 | <FONT CLASS="LN">00</FONT><A NAME="100"></A> */</FONT>
|
---|
| 118 | <FONT CLASS="LN">01</FONT><A NAME="101"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> parse(Project project, Object source)
|
---|
| 119 | <FONT CLASS="LN">02</FONT><A NAME="102"></A> <FONT CLASS="Throws">throws</FONT> BuildException {
|
---|
| 120 | <FONT CLASS="LN">03</FONT><A NAME="103"></A> getImportStack().addElement(source);
|
---|
| 121 | <FONT CLASS="LN">04</FONT><A NAME="104"></A> <FONT CLASS="SingleLineComment">//System.out.println("Adding " + source);
|
---|
| 122 | <FONT CLASS="LN">05</FONT><A NAME="105"></A></FONT> AntXMLContext context = <FONT CLASS="Null">null</FONT>;
|
---|
| 123 | <FONT CLASS="LN">06</FONT><A NAME="106"></A> context = (AntXMLContext) project.getReference(<FONT CLASS="StringLiteral">"ant.parsing.context"</FONT>);
|
---|
| 124 | <FONT CLASS="LN">07</FONT><A NAME="107"></A><FONT CLASS="SingleLineComment">// System.out.println("Parsing " + getImportStack().size() + " " +
|
---|
| 125 | <FONT CLASS="LN">08</FONT><A NAME="108"></A></FONT><FONT CLASS="SingleLineComment">// context+ " " + getImportStack() );
|
---|
| 126 | <FONT CLASS="LN">09</FONT><A NAME="109"></A></FONT> <FONT CLASS="If">if</FONT> (context == <FONT CLASS="Null">null</FONT>) {
|
---|
| 127 | <FONT CLASS="LN">10</FONT><A NAME="110"></A> context = <FONT CLASS="New">new</FONT> AntXMLContext(project);
|
---|
| 128 | <FONT CLASS="LN">11</FONT><A NAME="111"></A> project.addReference(<FONT CLASS="StringLiteral">"ant.parsing.context"</FONT>, context);
|
---|
| 129 | <FONT CLASS="LN">12</FONT><A NAME="112"></A> project.addReference(<FONT CLASS="StringLiteral">"ant.targets"</FONT>, context.getTargets());
|
---|
| 130 | <FONT CLASS="LN">13</FONT><A NAME="113"></A> }
|
---|
| 131 | <FONT CLASS="LN">14</FONT><A NAME="114"></A>
|
---|
| 132 | <FONT CLASS="LN">15</FONT><A NAME="115"></A> <FONT CLASS="If">if</FONT> (getImportStack().size() > <FONT CLASS="IntegerLiteral">1</FONT>) {
|
---|
| 133 | <FONT CLASS="LN">16</FONT><A NAME="116"></A> <FONT CLASS="SingleLineComment">// we are in an imported file.
|
---|
| 134 | <FONT CLASS="LN">17</FONT><A NAME="117"></A></FONT> context.setIgnoreProjectTag(<FONT CLASS="True">true</FONT>);
|
---|
| 135 | <FONT CLASS="LN">18</FONT><A NAME="118"></A> Target currentTarget = context.getCurrentTarget();
|
---|
| 136 | <FONT CLASS="LN">19</FONT><A NAME="119"></A> <FONT CLASS="Try">try</FONT> {
|
---|
| 137 | <FONT CLASS="LN">20</FONT><A NAME="120"></A> Target newCurrent = <FONT CLASS="New">new</FONT> Target();
|
---|
| 138 | <FONT CLASS="LN">21</FONT><A NAME="121"></A> newCurrent.setProject(project);
|
---|
| 139 | <FONT CLASS="LN">22</FONT><A NAME="122"></A> newCurrent.setName(<FONT CLASS="StringLiteral">""</FONT>);
|
---|
| 140 | <FONT CLASS="LN">23</FONT><A NAME="123"></A> context.setCurrentTarget(newCurrent);
|
---|
| 141 | <FONT CLASS="LN">24</FONT><A NAME="124"></A> parse(project, source, <FONT CLASS="New">new</FONT> RootHandler(context, mainHandler));
|
---|
| 142 | <FONT CLASS="LN">25</FONT><A NAME="125"></A> newCurrent.execute();
|
---|
| 143 | <FONT CLASS="LN">26</FONT><A NAME="126"></A> } <FONT CLASS="Finally">finally</FONT> {
|
---|
| 144 | <FONT CLASS="LN">27</FONT><A NAME="127"></A> context.setCurrentTarget(currentTarget);
|
---|
| 145 | <FONT CLASS="LN">28</FONT><A NAME="128"></A> }
|
---|
| 146 | <FONT CLASS="LN">29</FONT><A NAME="129"></A> } <FONT CLASS="Else">else</FONT> {
|
---|
| 147 | <FONT CLASS="LN">30</FONT><A NAME="130"></A> <FONT CLASS="SingleLineComment">// top level file
|
---|
| 148 | <FONT CLASS="LN">31</FONT><A NAME="131"></A></FONT> parse(project, source, <FONT CLASS="New">new</FONT> RootHandler(context, mainHandler));
|
---|
| 149 | <FONT CLASS="LN">32</FONT><A NAME="132"></A> <FONT CLASS="SingleLineComment">// Execute the top-level target
|
---|
| 150 | <FONT CLASS="LN">33</FONT><A NAME="133"></A></FONT> context.getImplicitTarget().execute();
|
---|
| 151 | <FONT CLASS="LN">34</FONT><A NAME="134"></A> }
|
---|
| 152 | <FONT CLASS="LN">35</FONT><A NAME="135"></A> }
|
---|
| 153 | <FONT CLASS="LN">36</FONT><A NAME="136"></A>
|
---|
| 154 | <FONT CLASS="LN">37</FONT><A NAME="137"></A> <FONT CLASS="FormalComment">/**
|
---|
| 155 | <FONT CLASS="LN">38</FONT><A NAME="138"></A> * Parses the project file, configuring the project as it goes.
|
---|
| 156 | <FONT CLASS="LN">39</FONT><A NAME="139"></A> *
|
---|
| 157 | <FONT CLASS="LN">40</FONT><A NAME="140"></A> * @param project the current project
|
---|
| 158 | <FONT CLASS="LN">41</FONT><A NAME="141"></A> * @param source the xml source
|
---|
| 159 | <FONT CLASS="LN">42</FONT><A NAME="142"></A> * @param handler the root handler to use (contains the current context)
|
---|
| 160 | <FONT CLASS="LN">43</FONT><A NAME="143"></A> * @exception BuildException if the configuration is invalid or cannot
|
---|
| 161 | <FONT CLASS="LN">44</FONT><A NAME="144"></A> * be read
|
---|
| 162 | <FONT CLASS="LN">45</FONT><A NAME="145"></A> */</FONT>
|
---|
| 163 | <FONT CLASS="LN">46</FONT><A NAME="146"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> parse(Project project, Object source, RootHandler handler)
|
---|
| 164 | <FONT CLASS="LN">47</FONT><A NAME="147"></A> <FONT CLASS="Throws">throws</FONT> BuildException {
|
---|
| 165 | <FONT CLASS="LN">48</FONT><A NAME="148"></A>
|
---|
| 166 | <FONT CLASS="LN">49</FONT><A NAME="149"></A> AntXMLContext context = handler.context;
|
---|
| 167 | <FONT CLASS="LN">50</FONT><A NAME="150"></A>
|
---|
| 168 | <FONT CLASS="LN">51</FONT><A NAME="151"></A> File buildFile = <FONT CLASS="Null">null</FONT>;
|
---|
| 169 | <FONT CLASS="LN">52</FONT><A NAME="152"></A> URL url = <FONT CLASS="Null">null</FONT>;
|
---|
| 170 | <FONT CLASS="LN">53</FONT><A NAME="153"></A> String buildFileName = <FONT CLASS="Null">null</FONT>;
|
---|
| 171 | <FONT CLASS="LN">54</FONT><A NAME="154"></A>
|
---|
| 172 | <FONT CLASS="LN">55</FONT><A NAME="155"></A> <FONT CLASS="If">if</FONT> (source <FONT CLASS="InstanceOf">instanceof</FONT> File) {
|
---|
| 173 | <FONT CLASS="LN">56</FONT><A NAME="156"></A> buildFile = (File) source;
|
---|
| 174 | <FONT CLASS="LN">57</FONT><A NAME="157"></A> buildFile = fu.normalize(buildFile.getAbsolutePath());
|
---|
| 175 | <FONT CLASS="LN">58</FONT><A NAME="158"></A> context.setBuildFile(buildFile);
|
---|
| 176 | <FONT CLASS="LN">59</FONT><A NAME="159"></A> buildFileName = buildFile.toString();
|
---|
| 177 | <FONT CLASS="LN">60</FONT><A NAME="160"></A><FONT CLASS="SingleLineComment">// } else if (source instanceof InputStream ) {
|
---|
| 178 | <FONT CLASS="LN">61</FONT><A NAME="161"></A></FONT> } <FONT CLASS="Else">else</FONT> <FONT CLASS="If">if</FONT> (source <FONT CLASS="InstanceOf">instanceof</FONT> URL) {
|
---|
| 179 | <FONT CLASS="LN">62</FONT><A NAME="162"></A><FONT CLASS="SingleLineComment">// These commented out code is the only difference
|
---|
| 180 | <FONT CLASS="LN">63</FONT><A NAME="163"></A></FONT><FONT CLASS="SingleLineComment">// between this class and ProjectHelper2
|
---|
| 181 | <FONT CLASS="LN">64</FONT><A NAME="164"></A></FONT><FONT CLASS="SingleLineComment">// if (handler.getCurrentAntHandler() != elementHandler) {
|
---|
| 182 | <FONT CLASS="LN">65</FONT><A NAME="165"></A></FONT><FONT CLASS="SingleLineComment">// throw new BuildException(
|
---|
| 183 | <FONT CLASS="LN">66</FONT><A NAME="166"></A></FONT><FONT CLASS="SingleLineComment">// "Source " + source.getClass().getName()
|
---|
| 184 | <FONT CLASS="LN">67</FONT><A NAME="167"></A></FONT><FONT CLASS="SingleLineComment">// + " not supported by this plugin for "
|
---|
| 185 | <FONT CLASS="LN">68</FONT><A NAME="168"></A></FONT><FONT CLASS="SingleLineComment">// + " non task xml");
|
---|
| 186 | <FONT CLASS="LN">69</FONT><A NAME="169"></A></FONT><FONT CLASS="SingleLineComment">// }
|
---|
| 187 | <FONT CLASS="LN">70</FONT><A NAME="170"></A></FONT> url = (URL) source;
|
---|
| 188 | <FONT CLASS="LN">71</FONT><A NAME="171"></A> buildFileName = url.toString();
|
---|
| 189 | <FONT CLASS="LN">72</FONT><A NAME="172"></A><FONT CLASS="SingleLineComment">// } else if (source instanceof InputSource ) {
|
---|
| 190 | <FONT CLASS="LN">73</FONT><A NAME="173"></A></FONT> } <FONT CLASS="Else">else</FONT> {
|
---|
| 191 | <FONT CLASS="LN">74</FONT><A NAME="174"></A> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> BuildException(<FONT CLASS="StringLiteral">"Source "</FONT> + source.getClass().getName()
|
---|
| 192 | <FONT CLASS="LN">75</FONT><A NAME="175"></A> + <FONT CLASS="StringLiteral">" not supported by this plugin"</FONT>);
|
---|
| 193 | <FONT CLASS="LN">76</FONT><A NAME="176"></A> }
|
---|
| 194 | <FONT CLASS="LN">77</FONT><A NAME="177"></A>
|
---|
| 195 | <FONT CLASS="LN">78</FONT><A NAME="178"></A> InputStream inputStream = <FONT CLASS="Null">null</FONT>;
|
---|
| 196 | <FONT CLASS="LN">79</FONT><A NAME="179"></A> InputSource inputSource = <FONT CLASS="Null">null</FONT>;
|
---|
| 197 | <FONT CLASS="LN">80</FONT><A NAME="180"></A>
|
---|
| 198 | <FONT CLASS="LN">81</FONT><A NAME="181"></A>
|
---|
| 199 | <FONT CLASS="LN">82</FONT><A NAME="182"></A> <FONT CLASS="Try">try</FONT> {
|
---|
| 200 | <FONT CLASS="LN">83</FONT><A NAME="183"></A> <FONT CLASS="FormalComment">/**
|
---|
| 201 | <FONT CLASS="LN">84</FONT><A NAME="184"></A> * SAX 2 style parser used to parse the given file.
|
---|
| 202 | <FONT CLASS="LN">85</FONT><A NAME="185"></A> */</FONT>
|
---|
| 203 | <FONT CLASS="LN">86</FONT><A NAME="186"></A> XMLReader parser = JAXPUtils.getNamespaceXMLReader();
|
---|
| 204 | <FONT CLASS="LN">87</FONT><A NAME="187"></A>
|
---|
| 205 | <FONT CLASS="LN">88</FONT><A NAME="188"></A> String uri = <FONT CLASS="Null">null</FONT>;
|
---|
| 206 | <FONT CLASS="LN">89</FONT><A NAME="189"></A> <FONT CLASS="If">if</FONT> (buildFile != <FONT CLASS="Null">null</FONT>) {
|
---|
| 207 | <FONT CLASS="LN">90</FONT><A NAME="190"></A> uri = fu.toURI(buildFile.getAbsolutePath());
|
---|
| 208 | <FONT CLASS="LN">91</FONT><A NAME="191"></A> inputStream = <FONT CLASS="New">new</FONT> FileInputStream(buildFile);
|
---|
| 209 | <FONT CLASS="LN">92</FONT><A NAME="192"></A> } <FONT CLASS="Else">else</FONT> {
|
---|
| 210 | <FONT CLASS="LN">93</FONT><A NAME="193"></A> inputStream = url.openStream();
|
---|
| 211 | <FONT CLASS="LN">94</FONT><A NAME="194"></A> uri = url.toString(); <FONT CLASS="SingleLineComment">// ?? OK ??
|
---|
| 212 | <FONT CLASS="LN">95</FONT><A NAME="195"></A></FONT> }
|
---|
| 213 | <FONT CLASS="LN">96</FONT><A NAME="196"></A>
|
---|
| 214 | <FONT CLASS="LN">97</FONT><A NAME="197"></A> inputSource = <FONT CLASS="New">new</FONT> InputSource(inputStream);
|
---|
| 215 | <FONT CLASS="LN">98</FONT><A NAME="198"></A> <FONT CLASS="If">if</FONT> (uri != <FONT CLASS="Null">null</FONT>) {
|
---|
| 216 | <FONT CLASS="LN">99</FONT><A NAME="199"></A> inputSource.setSystemId(uri);
|
---|
| 217 | <FONT CLASS="LN">00</FONT><A NAME="200"></A> }
|
---|
| 218 | <FONT CLASS="LN">01</FONT><A NAME="201"></A> project.log(<FONT CLASS="StringLiteral">"parsing buildfile "</FONT> + buildFileName
|
---|
| 219 | <FONT CLASS="LN">02</FONT><A NAME="202"></A> + <FONT CLASS="StringLiteral">" with URI = "</FONT> + uri, Project.MSG_VERBOSE);
|
---|
| 220 | <FONT CLASS="LN">03</FONT><A NAME="203"></A>
|
---|
| 221 | <FONT CLASS="LN">04</FONT><A NAME="204"></A> DefaultHandler hb = handler;
|
---|
| 222 | <FONT CLASS="LN">05</FONT><A NAME="205"></A>
|
---|
| 223 | <FONT CLASS="LN">06</FONT><A NAME="206"></A> parser.setContentHandler(hb);
|
---|
| 224 | <FONT CLASS="LN">07</FONT><A NAME="207"></A> parser.setEntityResolver(hb);
|
---|
| 225 | <FONT CLASS="LN">08</FONT><A NAME="208"></A> parser.setErrorHandler(hb);
|
---|
| 226 | <FONT CLASS="LN">09</FONT><A NAME="209"></A> parser.setDTDHandler(hb);
|
---|
| 227 | <FONT CLASS="LN">10</FONT><A NAME="210"></A> parser.parse(inputSource);
|
---|
| 228 | <FONT CLASS="LN">11</FONT><A NAME="211"></A> } <FONT CLASS="Catch">catch</FONT> (SAXParseException exc) {
|
---|
| 229 | <FONT CLASS="LN">12</FONT><A NAME="212"></A> Location location = <FONT CLASS="New">new</FONT> Location(exc.getSystemId(),
|
---|
| 230 | <FONT CLASS="LN">13</FONT><A NAME="213"></A> exc.getLineNumber(), exc.getColumnNumber());
|
---|
| 231 | <FONT CLASS="LN">14</FONT><A NAME="214"></A>
|
---|
| 232 | <FONT CLASS="LN">15</FONT><A NAME="215"></A> Throwable t = exc.getException();
|
---|
| 233 | <FONT CLASS="LN">16</FONT><A NAME="216"></A> <FONT CLASS="If">if</FONT> (t <FONT CLASS="InstanceOf">instanceof</FONT> BuildException) {
|
---|
| 234 | <FONT CLASS="LN">17</FONT><A NAME="217"></A> BuildException be = (BuildException) t;
|
---|
| 235 | <FONT CLASS="LN">18</FONT><A NAME="218"></A> <FONT CLASS="If">if</FONT> (be.getLocation() == Location.UNKNOWN_LOCATION) {
|
---|
| 236 | <FONT CLASS="LN">19</FONT><A NAME="219"></A> be.setLocation(location);
|
---|
| 237 | <FONT CLASS="LN">20</FONT><A NAME="220"></A> }
|
---|
| 238 | <FONT CLASS="LN">21</FONT><A NAME="221"></A> <FONT CLASS="Throw">throw</FONT> be;
|
---|
| 239 | <FONT CLASS="LN">22</FONT><A NAME="222"></A> }
|
---|
| 240 | <FONT CLASS="LN">23</FONT><A NAME="223"></A>
|
---|
| 241 | <FONT CLASS="LN">24</FONT><A NAME="224"></A> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> BuildException(exc.getMessage(), t, location);
|
---|
| 242 | <FONT CLASS="LN">25</FONT><A NAME="225"></A> } <FONT CLASS="Catch">catch</FONT> (SAXException exc) {
|
---|
| 243 | <FONT CLASS="LN">26</FONT><A NAME="226"></A> Throwable t = exc.getException();
|
---|
| 244 | <FONT CLASS="LN">27</FONT><A NAME="227"></A> <FONT CLASS="If">if</FONT> (t <FONT CLASS="InstanceOf">instanceof</FONT> BuildException) {
|
---|
| 245 | <FONT CLASS="LN">28</FONT><A NAME="228"></A> <FONT CLASS="Throw">throw</FONT> (BuildException) t;
|
---|
| 246 | <FONT CLASS="LN">29</FONT><A NAME="229"></A> }
|
---|
| 247 | <FONT CLASS="LN">30</FONT><A NAME="230"></A> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> BuildException(exc.getMessage(), t);
|
---|
| 248 | <FONT CLASS="LN">31</FONT><A NAME="231"></A> } <FONT CLASS="Catch">catch</FONT> (FileNotFoundException exc) {
|
---|
| 249 | <FONT CLASS="LN">32</FONT><A NAME="232"></A> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> BuildException(exc);
|
---|
| 250 | <FONT CLASS="LN">33</FONT><A NAME="233"></A> } <FONT CLASS="Catch">catch</FONT> (UnsupportedEncodingException exc) {
|
---|
| 251 | <FONT CLASS="LN">34</FONT><A NAME="234"></A> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> BuildException(<FONT CLASS="StringLiteral">"Encoding of project file "</FONT>
|
---|
| 252 | <FONT CLASS="LN">35</FONT><A NAME="235"></A> + buildFileName + <FONT CLASS="StringLiteral">" is invalid."</FONT>,
|
---|
| 253 | <FONT CLASS="LN">36</FONT><A NAME="236"></A> exc);
|
---|
| 254 | <FONT CLASS="LN">37</FONT><A NAME="237"></A> } <FONT CLASS="Catch">catch</FONT> (IOException exc) {
|
---|
| 255 | <FONT CLASS="LN">38</FONT><A NAME="238"></A> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> BuildException(<FONT CLASS="StringLiteral">"Error reading project file "</FONT>
|
---|
| 256 | <FONT CLASS="LN">39</FONT><A NAME="239"></A> + buildFileName + <FONT CLASS="StringLiteral">": "</FONT> + exc.getMessage(),
|
---|
| 257 | <FONT CLASS="LN">40</FONT><A NAME="240"></A> exc);
|
---|
| 258 | <FONT CLASS="LN">41</FONT><A NAME="241"></A> } <FONT CLASS="Finally">finally</FONT> {
|
---|
| 259 | <FONT CLASS="LN">42</FONT><A NAME="242"></A> <FONT CLASS="If">if</FONT> (inputStream != <FONT CLASS="Null">null</FONT>) {
|
---|
| 260 | <FONT CLASS="LN">43</FONT><A NAME="243"></A> <FONT CLASS="Try">try</FONT> {
|
---|
| 261 | <FONT CLASS="LN">44</FONT><A NAME="244"></A> inputStream.close();
|
---|
| 262 | <FONT CLASS="LN">45</FONT><A NAME="245"></A> } <FONT CLASS="Catch">catch</FONT> (IOException ioe) {
|
---|
| 263 | <FONT CLASS="LN">46</FONT><A NAME="246"></A> <FONT CLASS="SingleLineComment">// ignore this
|
---|
| 264 | <FONT CLASS="LN">47</FONT><A NAME="247"></A></FONT> }
|
---|
| 265 | <FONT CLASS="LN">48</FONT><A NAME="248"></A> }
|
---|
| 266 | <FONT CLASS="LN">49</FONT><A NAME="249"></A> }
|
---|
| 267 | <FONT CLASS="LN">50</FONT><A NAME="250"></A> }
|
---|
| 268 | <FONT CLASS="LN">51</FONT><A NAME="251"></A>
|
---|
| 269 | <FONT CLASS="LN">52</FONT><A NAME="252"></A> <FONT CLASS="FormalComment">/**
|
---|
| 270 | <FONT CLASS="LN">53</FONT><A NAME="253"></A> * The common superclass for all SAX event handlers used to parse
|
---|
| 271 | <FONT CLASS="LN">54</FONT><A NAME="254"></A> * the configuration file.
|
---|
| 272 | <FONT CLASS="LN">55</FONT><A NAME="255"></A> *
|
---|
| 273 | <FONT CLASS="LN">56</FONT><A NAME="256"></A> * The context will hold all state information. At each time
|
---|
| 274 | <FONT CLASS="LN">57</FONT><A NAME="257"></A> * there is one active handler for the current element. It can
|
---|
| 275 | <FONT CLASS="LN">58</FONT><A NAME="258"></A> * use onStartChild() to set an alternate handler for the child.
|
---|
| 276 | <FONT CLASS="LN">59</FONT><A NAME="259"></A> */</FONT>
|
---|
| 277 | <FONT CLASS="LN">60</FONT><A NAME="260"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Static">static</FONT> <FONT CLASS="Class">class</FONT> AntHandler {
|
---|
| 278 | <FONT CLASS="LN">61</FONT><A NAME="261"></A> <FONT CLASS="FormalComment">/**
|
---|
| 279 | <FONT CLASS="LN">62</FONT><A NAME="262"></A> * Handles the start of an element. This base implementation does
|
---|
| 280 | <FONT CLASS="LN">63</FONT><A NAME="263"></A> * nothing.
|
---|
| 281 | <FONT CLASS="LN">64</FONT><A NAME="264"></A> *
|
---|
| 282 | <FONT CLASS="LN">65</FONT><A NAME="265"></A> * @param uri the namespace URI for the tag
|
---|
| 283 | <FONT CLASS="LN">66</FONT><A NAME="266"></A> * @param tag The name of the element being started.
|
---|
| 284 | <FONT CLASS="LN">67</FONT><A NAME="267"></A> * Will not be <code>null</code>.
|
---|
| 285 | <FONT CLASS="LN">68</FONT><A NAME="268"></A> * @param qname The qualified name of the element.
|
---|
| 286 | <FONT CLASS="LN">69</FONT><A NAME="269"></A> * @param attrs Attributes of the element being started.
|
---|
| 287 | <FONT CLASS="LN">70</FONT><A NAME="270"></A> * Will not be <code>null</code>.
|
---|
| 288 | <FONT CLASS="LN">71</FONT><A NAME="271"></A> * @param context The context that this element is in.
|
---|
| 289 | <FONT CLASS="LN">72</FONT><A NAME="272"></A> *
|
---|
| 290 | <FONT CLASS="LN">73</FONT><A NAME="273"></A> * @exception SAXParseException if this method is not overridden, or in
|
---|
| 291 | <FONT CLASS="LN">74</FONT><A NAME="274"></A> * case of error in an overridden version
|
---|
| 292 | <FONT CLASS="LN">75</FONT><A NAME="275"></A> */</FONT>
|
---|
| 293 | <FONT CLASS="LN">76</FONT><A NAME="276"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> onStartElement(String uri, String tag, String qname,
|
---|
| 294 | <FONT CLASS="LN">77</FONT><A NAME="277"></A> Attributes attrs,
|
---|
| 295 | <FONT CLASS="LN">78</FONT><A NAME="278"></A> AntXMLContext context)
|
---|
| 296 | <FONT CLASS="LN">79</FONT><A NAME="279"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
|
---|
| 297 | <FONT CLASS="LN">80</FONT><A NAME="280"></A> }
|
---|
| 298 | <FONT CLASS="LN">81</FONT><A NAME="281"></A>
|
---|
| 299 | <FONT CLASS="LN">82</FONT><A NAME="282"></A> <FONT CLASS="FormalComment">/**
|
---|
| 300 | <FONT CLASS="LN">83</FONT><A NAME="283"></A> * Handles the start of an element. This base implementation just
|
---|
| 301 | <FONT CLASS="LN">84</FONT><A NAME="284"></A> * throws an exception - you must override this method if you expect
|
---|
| 302 | <FONT CLASS="LN">85</FONT><A NAME="285"></A> * child elements.
|
---|
| 303 | <FONT CLASS="LN">86</FONT><A NAME="286"></A> *
|
---|
| 304 | <FONT CLASS="LN">87</FONT><A NAME="287"></A> * @param uri The namespace uri for this element.
|
---|
| 305 | <FONT CLASS="LN">88</FONT><A NAME="288"></A> * @param tag The name of the element being started.
|
---|
| 306 | <FONT CLASS="LN">89</FONT><A NAME="289"></A> * Will not be <code>null</code>.
|
---|
| 307 | <FONT CLASS="LN">90</FONT><A NAME="290"></A> * @param qname The qualified name for this element.
|
---|
| 308 | <FONT CLASS="LN">91</FONT><A NAME="291"></A> * @param attrs Attributes of the element being started.
|
---|
| 309 | <FONT CLASS="LN">92</FONT><A NAME="292"></A> * Will not be <code>null</code>.
|
---|
| 310 | <FONT CLASS="LN">93</FONT><A NAME="293"></A> * @param context The current context.
|
---|
| 311 | <FONT CLASS="LN">94</FONT><A NAME="294"></A> * @return a handler (in the derived classes)
|
---|
| 312 | <FONT CLASS="LN">95</FONT><A NAME="295"></A> *
|
---|
| 313 | <FONT CLASS="LN">96</FONT><A NAME="296"></A> * @exception SAXParseException if this method is not overridden, or in
|
---|
| 314 | <FONT CLASS="LN">97</FONT><A NAME="297"></A> * case of error in an overridden version
|
---|
| 315 | <FONT CLASS="LN">98</FONT><A NAME="298"></A> */</FONT>
|
---|
| 316 | <FONT CLASS="LN">99</FONT><A NAME="299"></A> <FONT CLASS="Public">public</FONT> AntHandler onStartChild(String uri, String tag, String qname,
|
---|
| 317 | <FONT CLASS="LN">00</FONT><A NAME="300"></A> Attributes attrs,
|
---|
| 318 | <FONT CLASS="LN">01</FONT><A NAME="301"></A> AntXMLContext context)
|
---|
| 319 | <FONT CLASS="LN">02</FONT><A NAME="302"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
|
---|
| 320 | <FONT CLASS="LN">03</FONT><A NAME="303"></A> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> SAXParseException(<FONT CLASS="StringLiteral">"Unexpected element \""</FONT> + qname
|
---|
| 321 | <FONT CLASS="LN">04</FONT><A NAME="304"></A> + <FONT CLASS="StringLiteral">" \""</FONT>, context.getLocator());
|
---|
| 322 | <FONT CLASS="LN">05</FONT><A NAME="305"></A> }
|
---|
| 323 | <FONT CLASS="LN">06</FONT><A NAME="306"></A>
|
---|
| 324 | <FONT CLASS="LN">07</FONT><A NAME="307"></A> <FONT CLASS="FormalComment">/**
|
---|
| 325 | <FONT CLASS="LN">08</FONT><A NAME="308"></A> * Handle the end of a element.
|
---|
| 326 | <FONT CLASS="LN">09</FONT><A NAME="309"></A> *
|
---|
| 327 | <FONT CLASS="LN">10</FONT><A NAME="310"></A> * @param uri the namespace uri of the element
|
---|
| 328 | <FONT CLASS="LN">11</FONT><A NAME="311"></A> * @param tag the tag of the element
|
---|
| 329 | <FONT CLASS="LN">12</FONT><A NAME="312"></A> * @param qname the qualified name of the element
|
---|
| 330 | <FONT CLASS="LN">13</FONT><A NAME="313"></A> * @param context the current context
|
---|
| 331 | <FONT CLASS="LN">14</FONT><A NAME="314"></A> * @exception SAXParseException if an error occurs
|
---|
| 332 | <FONT CLASS="LN">15</FONT><A NAME="315"></A> */</FONT>
|
---|
| 333 | <FONT CLASS="LN">16</FONT><A NAME="316"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> onEndChild(String uri, String tag, String qname,
|
---|
| 334 | <FONT CLASS="LN">17</FONT><A NAME="317"></A> AntXMLContext context)
|
---|
| 335 | <FONT CLASS="LN">18</FONT><A NAME="318"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
|
---|
| 336 | <FONT CLASS="LN">19</FONT><A NAME="319"></A> }
|
---|
| 337 | <FONT CLASS="LN">20</FONT><A NAME="320"></A>
|
---|
| 338 | <FONT CLASS="LN">21</FONT><A NAME="321"></A> <FONT CLASS="FormalComment">/**
|
---|
| 339 | <FONT CLASS="LN">22</FONT><A NAME="322"></A> * This method is called when this element and all elements nested into it have been
|
---|
| 340 | <FONT CLASS="LN">23</FONT><A NAME="323"></A> * handled. I.e., this happens at the &lt;/end_tag_of_the_element&gt;.
|
---|
| 341 | <FONT CLASS="LN">24</FONT><A NAME="324"></A> * @param uri the namespace uri for this element
|
---|
| 342 | <FONT CLASS="LN">25</FONT><A NAME="325"></A> * @param tag the element name
|
---|
| 343 | <FONT CLASS="LN">26</FONT><A NAME="326"></A> * @param context the current context
|
---|
| 344 | <FONT CLASS="LN">27</FONT><A NAME="327"></A> */</FONT>
|
---|
| 345 | <FONT CLASS="LN">28</FONT><A NAME="328"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> onEndElement(String uri, String tag,
|
---|
| 346 | <FONT CLASS="LN">29</FONT><A NAME="329"></A> AntXMLContext context) {
|
---|
| 347 | <FONT CLASS="LN">30</FONT><A NAME="330"></A> }
|
---|
| 348 | <FONT CLASS="LN">31</FONT><A NAME="331"></A>
|
---|
| 349 | <FONT CLASS="LN">32</FONT><A NAME="332"></A> <FONT CLASS="FormalComment">/**
|
---|
| 350 | <FONT CLASS="LN">33</FONT><A NAME="333"></A> * Handles text within an element. This base implementation just
|
---|
| 351 | <FONT CLASS="LN">34</FONT><A NAME="334"></A> * throws an exception, you must override it if you expect content.
|
---|
| 352 | <FONT CLASS="LN">35</FONT><A NAME="335"></A> *
|
---|
| 353 | <FONT CLASS="LN">36</FONT><A NAME="336"></A> * @param buf A character array of the text within the element.
|
---|
| 354 | <FONT CLASS="LN">37</FONT><A NAME="337"></A> * Will not be <code>null</code>.
|
---|
| 355 | <FONT CLASS="LN">38</FONT><A NAME="338"></A> * @param start The start element in the array.
|
---|
| 356 | <FONT CLASS="LN">39</FONT><A NAME="339"></A> * @param count The number of characters to read from the array.
|
---|
| 357 | <FONT CLASS="LN">40</FONT><A NAME="340"></A> * @param context The current context.
|
---|
| 358 | <FONT CLASS="LN">41</FONT><A NAME="341"></A> *
|
---|
| 359 | <FONT CLASS="LN">42</FONT><A NAME="342"></A> * @exception SAXParseException if this method is not overridden, or in
|
---|
| 360 | <FONT CLASS="LN">43</FONT><A NAME="343"></A> * case of error in an overridden version
|
---|
| 361 | <FONT CLASS="LN">44</FONT><A NAME="344"></A> */</FONT>
|
---|
| 362 | <FONT CLASS="LN">45</FONT><A NAME="345"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> characters(<FONT CLASS="Char">char</FONT>[] buf, <FONT CLASS="Int">int</FONT> start, <FONT CLASS="Int">int</FONT> count, AntXMLContext context)
|
---|
| 363 | <FONT CLASS="LN">46</FONT><A NAME="346"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
|
---|
| 364 | <FONT CLASS="LN">47</FONT><A NAME="347"></A> String s = <FONT CLASS="New">new</FONT> String(buf, start, count).trim();
|
---|
| 365 | <FONT CLASS="LN">48</FONT><A NAME="348"></A>
|
---|
| 366 | <FONT CLASS="LN">49</FONT><A NAME="349"></A> <FONT CLASS="If">if</FONT> (s.length() > <FONT CLASS="IntegerLiteral">0</FONT>) {
|
---|
| 367 | <FONT CLASS="LN">50</FONT><A NAME="350"></A> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> SAXParseException(<FONT CLASS="StringLiteral">"Unexpected text \""</FONT> + s
|
---|
| 368 | <FONT CLASS="LN">51</FONT><A NAME="351"></A> + <FONT CLASS="StringLiteral">"\""</FONT>, context.getLocator());
|
---|
| 369 | <FONT CLASS="LN">52</FONT><A NAME="352"></A> }
|
---|
| 370 | <FONT CLASS="LN">53</FONT><A NAME="353"></A> }
|
---|
| 371 | <FONT CLASS="LN">54</FONT><A NAME="354"></A>
|
---|
| 372 | <FONT CLASS="LN">55</FONT><A NAME="355"></A> <FONT CLASS="FormalComment">/**
|
---|
| 373 | <FONT CLASS="LN">56</FONT><A NAME="356"></A> * Will be called every time a namespace is reached.
|
---|
| 374 | <FONT CLASS="LN">57</FONT><A NAME="357"></A> * It'll verify if the ns was processed, and if not load the task
|
---|
| 375 | <FONT CLASS="LN">58</FONT><A NAME="358"></A> * definitions.
|
---|
| 376 | <FONT CLASS="LN">59</FONT><A NAME="359"></A> * @param uri The namespace uri.
|
---|
| 377 | <FONT CLASS="LN">60</FONT><A NAME="360"></A> */</FONT>
|
---|
| 378 | <FONT CLASS="LN">61</FONT><A NAME="361"></A> <FONT CLASS="Protected">protected</FONT> <FONT CLASS="Void">void</FONT> checkNamespace(String uri) {
|
---|
| 379 | <FONT CLASS="LN">62</FONT><A NAME="362"></A>
|
---|
| 380 | <FONT CLASS="LN">63</FONT><A NAME="363"></A> }
|
---|
| 381 | <FONT CLASS="LN">64</FONT><A NAME="364"></A> }
|
---|
| 382 | <FONT CLASS="LN">65</FONT><A NAME="365"></A>
|
---|
| 383 | <FONT CLASS="LN">66</FONT><A NAME="366"></A> <FONT CLASS="FormalComment">/**
|
---|
| 384 | <FONT CLASS="LN">67</FONT><A NAME="367"></A> * Handler for ant processing. Uses a stack of AntHandlers to
|
---|
| 385 | <FONT CLASS="LN">68</FONT><A NAME="368"></A> * implement each element ( the original parser used a recursive behavior,
|
---|
| 386 | <FONT CLASS="LN">69</FONT><A NAME="369"></A> * with the implicit execution stack )
|
---|
| 387 | <FONT CLASS="LN">70</FONT><A NAME="370"></A> */</FONT>
|
---|
| 388 | <FONT CLASS="LN">71</FONT><A NAME="371"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Static">static</FONT> <FONT CLASS="Class">class</FONT> RootHandler <FONT CLASS="Extends">extends</FONT> DefaultHandler {
|
---|
| 389 | <FONT CLASS="LN">72</FONT><A NAME="372"></A> <FONT CLASS="Private">private</FONT> Stack antHandlers = <FONT CLASS="New">new</FONT> Stack();
|
---|
| 390 | <FONT CLASS="LN">73</FONT><A NAME="373"></A> <FONT CLASS="Private">private</FONT> AntHandler currentHandler = <FONT CLASS="Null">null</FONT>;
|
---|
| 391 | <FONT CLASS="LN">74</FONT><A NAME="374"></A> <FONT CLASS="Private">private</FONT> AntXMLContext context;
|
---|
| 392 | <FONT CLASS="LN">75</FONT><A NAME="375"></A>
|
---|
| 393 | <FONT CLASS="LN">76</FONT><A NAME="376"></A> <FONT CLASS="FormalComment">/**
|
---|
| 394 | <FONT CLASS="LN">77</FONT><A NAME="377"></A> * Creates a new RootHandler instance.
|
---|
| 395 | <FONT CLASS="LN">78</FONT><A NAME="378"></A> *
|
---|
| 396 | <FONT CLASS="LN">79</FONT><A NAME="379"></A> * @param context The context for the handler.
|
---|
| 397 | <FONT CLASS="LN">80</FONT><A NAME="380"></A> * @param rootHandler The handler for the root element.
|
---|
| 398 | <FONT CLASS="LN">81</FONT><A NAME="381"></A> */</FONT>
|
---|
| 399 | <FONT CLASS="LN">82</FONT><A NAME="382"></A> <FONT CLASS="Public">public</FONT> RootHandler(AntXMLContext context, AntHandler rootHandler) {
|
---|
| 400 | <FONT CLASS="LN">83</FONT><A NAME="383"></A> currentHandler = rootHandler;
|
---|
| 401 | <FONT CLASS="LN">84</FONT><A NAME="384"></A> antHandlers.push(currentHandler);
|
---|
| 402 | <FONT CLASS="LN">85</FONT><A NAME="385"></A> <FONT CLASS="This">this</FONT>.context = context;
|
---|
| 403 | <FONT CLASS="LN">86</FONT><A NAME="386"></A> }
|
---|
| 404 | <FONT CLASS="LN">87</FONT><A NAME="387"></A>
|
---|
| 405 | <FONT CLASS="LN">88</FONT><A NAME="388"></A> <FONT CLASS="FormalComment">/**
|
---|
| 406 | <FONT CLASS="LN">89</FONT><A NAME="389"></A> * Returns the current ant handler object.
|
---|
| 407 | <FONT CLASS="LN">90</FONT><A NAME="390"></A> * @return the current ant handler.
|
---|
| 408 | <FONT CLASS="LN">91</FONT><A NAME="391"></A> */</FONT>
|
---|
| 409 | <FONT CLASS="LN">92</FONT><A NAME="392"></A> <FONT CLASS="Public">public</FONT> AntHandler getCurrentAntHandler() {
|
---|
| 410 | <FONT CLASS="LN">93</FONT><A NAME="393"></A> <FONT CLASS="Return">return</FONT> currentHandler;
|
---|
| 411 | <FONT CLASS="LN">94</FONT><A NAME="394"></A> }
|
---|
| 412 | <FONT CLASS="LN">95</FONT><A NAME="395"></A>
|
---|
| 413 | <FONT CLASS="LN">96</FONT><A NAME="396"></A> <FONT CLASS="FormalComment">/**
|
---|
| 414 | <FONT CLASS="LN">97</FONT><A NAME="397"></A> * Resolves file: URIs relative to the build file.
|
---|
| 415 | <FONT CLASS="LN">98</FONT><A NAME="398"></A> *
|
---|
| 416 | <FONT CLASS="LN">99</FONT><A NAME="399"></A> * @param publicId The public identifier, or <code>null</code>
|
---|
| 417 | <FONT CLASS="LN">00</FONT><A NAME="400"></A> * if none is available. Ignored in this
|
---|
| 418 | <FONT CLASS="LN">01</FONT><A NAME="401"></A> * implementation.
|
---|
| 419 | <FONT CLASS="LN">02</FONT><A NAME="402"></A> * @param systemId The system identifier provided in the XML
|
---|
| 420 | <FONT CLASS="LN">03</FONT><A NAME="403"></A> * document. Will not be <code>null</code>.
|
---|
| 421 | <FONT CLASS="LN">04</FONT><A NAME="404"></A> * @return an inputsource for this identifier
|
---|
| 422 | <FONT CLASS="LN">05</FONT><A NAME="405"></A> */</FONT>
|
---|
| 423 | <FONT CLASS="LN">06</FONT><A NAME="406"></A> <FONT CLASS="Public">public</FONT> InputSource resolveEntity(String publicId,
|
---|
| 424 | <FONT CLASS="LN">07</FONT><A NAME="407"></A> String systemId) {
|
---|
| 425 | <FONT CLASS="LN">08</FONT><A NAME="408"></A>
|
---|
| 426 | <FONT CLASS="LN">09</FONT><A NAME="409"></A> context.getProject().log(<FONT CLASS="StringLiteral">"resolving systemId: "</FONT>
|
---|
| 427 | <FONT CLASS="LN">10</FONT><A NAME="410"></A> + systemId, Project.MSG_VERBOSE);
|
---|
| 428 | <FONT CLASS="LN">11</FONT><A NAME="411"></A>
|
---|
| 429 | <FONT CLASS="LN">12</FONT><A NAME="412"></A> <FONT CLASS="If">if</FONT> (systemId.startsWith(<FONT CLASS="StringLiteral">"file:"</FONT>)) {
|
---|
| 430 | <FONT CLASS="LN">13</FONT><A NAME="413"></A> String path = fu.fromURI(systemId);
|
---|
| 431 | <FONT CLASS="LN">14</FONT><A NAME="414"></A>
|
---|
| 432 | <FONT CLASS="LN">15</FONT><A NAME="415"></A> File file = <FONT CLASS="New">new</FONT> File(path);
|
---|
| 433 | <FONT CLASS="LN">16</FONT><A NAME="416"></A> <FONT CLASS="If">if</FONT> (!file.isAbsolute()) {
|
---|
| 434 | <FONT CLASS="LN">17</FONT><A NAME="417"></A> file = fu.resolveFile(context.getBuildFileParent(), path);
|
---|
| 435 | <FONT CLASS="LN">18</FONT><A NAME="418"></A> }
|
---|
| 436 | <FONT CLASS="LN">19</FONT><A NAME="419"></A> <FONT CLASS="Try">try</FONT> {
|
---|
| 437 | <FONT CLASS="LN">20</FONT><A NAME="420"></A> InputSource inputSource =
|
---|
| 438 | <FONT CLASS="LN">21</FONT><A NAME="421"></A> <FONT CLASS="New">new</FONT> InputSource(<FONT CLASS="New">new</FONT> FileInputStream(file));
|
---|
| 439 | <FONT CLASS="LN">22</FONT><A NAME="422"></A> inputSource.setSystemId(fu.toURI(file.getAbsolutePath()));
|
---|
| 440 | <FONT CLASS="LN">23</FONT><A NAME="423"></A> <FONT CLASS="Return">return</FONT> inputSource;
|
---|
| 441 | <FONT CLASS="LN">24</FONT><A NAME="424"></A> } <FONT CLASS="Catch">catch</FONT> (FileNotFoundException fne) {
|
---|
| 442 | <FONT CLASS="LN">25</FONT><A NAME="425"></A> context.getProject().log(file.getAbsolutePath()
|
---|
| 443 | <FONT CLASS="LN">26</FONT><A NAME="426"></A> + <FONT CLASS="StringLiteral">" could not be found"</FONT>, Project.MSG_WARN);
|
---|
| 444 | <FONT CLASS="LN">27</FONT><A NAME="427"></A> }
|
---|
| 445 | <FONT CLASS="LN">28</FONT><A NAME="428"></A>
|
---|
| 446 | <FONT CLASS="LN">29</FONT><A NAME="429"></A> }
|
---|
| 447 | <FONT CLASS="LN">30</FONT><A NAME="430"></A> <FONT CLASS="SingleLineComment">// use default if not file or file not found
|
---|
| 448 | <FONT CLASS="LN">31</FONT><A NAME="431"></A></FONT> <FONT CLASS="Return">return</FONT> <FONT CLASS="Null">null</FONT>;
|
---|
| 449 | <FONT CLASS="LN">32</FONT><A NAME="432"></A> }
|
---|
| 450 | <FONT CLASS="LN">33</FONT><A NAME="433"></A>
|
---|
| 451 | <FONT CLASS="LN">34</FONT><A NAME="434"></A> <FONT CLASS="FormalComment">/**
|
---|
| 452 | <FONT CLASS="LN">35</FONT><A NAME="435"></A> * Handles the start of a project element. A project handler is created
|
---|
| 453 | <FONT CLASS="LN">36</FONT><A NAME="436"></A> * and initialised with the element name and attributes.
|
---|
| 454 | <FONT CLASS="LN">37</FONT><A NAME="437"></A> *
|
---|
| 455 | <FONT CLASS="LN">38</FONT><A NAME="438"></A> * @param uri The namespace uri for this element.
|
---|
| 456 | <FONT CLASS="LN">39</FONT><A NAME="439"></A> * @param tag The name of the element being started.
|
---|
| 457 | <FONT CLASS="LN">40</FONT><A NAME="440"></A> * Will not be <code>null</code>.
|
---|
| 458 | <FONT CLASS="LN">41</FONT><A NAME="441"></A> * @param qname The qualified name for this element.
|
---|
| 459 | <FONT CLASS="LN">42</FONT><A NAME="442"></A> * @param attrs Attributes of the element being started.
|
---|
| 460 | <FONT CLASS="LN">43</FONT><A NAME="443"></A> * Will not be <code>null</code>.
|
---|
| 461 | <FONT CLASS="LN">44</FONT><A NAME="444"></A> *
|
---|
| 462 | <FONT CLASS="LN">45</FONT><A NAME="445"></A> * @exception org.xml.sax.SAXParseException if the tag given is not
|
---|
| 463 | <FONT CLASS="LN">46</FONT><A NAME="446"></A> * <code>"project"</code>
|
---|
| 464 | <FONT CLASS="LN">47</FONT><A NAME="447"></A> */</FONT>
|
---|
| 465 | <FONT CLASS="LN">48</FONT><A NAME="448"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> startElement(String uri, String tag, String qname, Attributes attrs)
|
---|
| 466 | <FONT CLASS="LN">49</FONT><A NAME="449"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
|
---|
| 467 | <FONT CLASS="LN">50</FONT><A NAME="450"></A> AntHandler next
|
---|
| 468 | <FONT CLASS="LN">51</FONT><A NAME="451"></A> = currentHandler.onStartChild(uri, tag, qname, attrs, context);
|
---|
| 469 | <FONT CLASS="LN">52</FONT><A NAME="452"></A> antHandlers.push(currentHandler);
|
---|
| 470 | <FONT CLASS="LN">53</FONT><A NAME="453"></A> currentHandler = next;
|
---|
| 471 | <FONT CLASS="LN">54</FONT><A NAME="454"></A> currentHandler.onStartElement(uri, tag, qname, attrs, context);
|
---|
| 472 | <FONT CLASS="LN">55</FONT><A NAME="455"></A> }
|
---|
| 473 | <FONT CLASS="LN">56</FONT><A NAME="456"></A>
|
---|
| 474 | <FONT CLASS="LN">57</FONT><A NAME="457"></A> <FONT CLASS="FormalComment">/**
|
---|
| 475 | <FONT CLASS="LN">58</FONT><A NAME="458"></A> * Sets the locator in the project helper for future reference.
|
---|
| 476 | <FONT CLASS="LN">59</FONT><A NAME="459"></A> *
|
---|
| 477 | <FONT CLASS="LN">60</FONT><A NAME="460"></A> * @param locator The locator used by the parser.
|
---|
| 478 | <FONT CLASS="LN">61</FONT><A NAME="461"></A> * Will not be <code>null</code>.
|
---|
| 479 | <FONT CLASS="LN">62</FONT><A NAME="462"></A> */</FONT>
|
---|
| 480 | <FONT CLASS="LN">63</FONT><A NAME="463"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> setDocumentLocator(Locator locator) {
|
---|
| 481 | <FONT CLASS="LN">64</FONT><A NAME="464"></A> context.setLocator(locator);
|
---|
| 482 | <FONT CLASS="LN">65</FONT><A NAME="465"></A> }
|
---|
| 483 | <FONT CLASS="LN">66</FONT><A NAME="466"></A>
|
---|
| 484 | <FONT CLASS="LN">67</FONT><A NAME="467"></A> <FONT CLASS="FormalComment">/**
|
---|
| 485 | <FONT CLASS="LN">68</FONT><A NAME="468"></A> * Handles the end of an element. Any required clean-up is performed
|
---|
| 486 | <FONT CLASS="LN">69</FONT><A NAME="469"></A> * by the onEndElement() method and then the original handler
|
---|
| 487 | <FONT CLASS="LN">70</FONT><A NAME="470"></A> * is restored to the parser.
|
---|
| 488 | <FONT CLASS="LN">71</FONT><A NAME="471"></A> *
|
---|
| 489 | <FONT CLASS="LN">72</FONT><A NAME="472"></A> * @param uri The namespace URI for this element.
|
---|
| 490 | <FONT CLASS="LN">73</FONT><A NAME="473"></A> * @param name The name of the element which is ending.
|
---|
| 491 | <FONT CLASS="LN">74</FONT><A NAME="474"></A> * Will not be <code>null</code>.
|
---|
| 492 | <FONT CLASS="LN">75</FONT><A NAME="475"></A> * @param qName The qualified name for this element.
|
---|
| 493 | <FONT CLASS="LN">76</FONT><A NAME="476"></A> *
|
---|
| 494 | <FONT CLASS="LN">77</FONT><A NAME="477"></A> * @exception SAXException in case of error (not thrown in
|
---|
| 495 | <FONT CLASS="LN">78</FONT><A NAME="478"></A> * this implementation)
|
---|
| 496 | <FONT CLASS="LN">79</FONT><A NAME="479"></A> *
|
---|
| 497 | <FONT CLASS="LN">80</FONT><A NAME="480"></A> */</FONT>
|
---|
| 498 | <FONT CLASS="LN">81</FONT><A NAME="481"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> endElement(String uri, String name, String qName) <FONT CLASS="Throws">throws</FONT> SAXException {
|
---|
| 499 | <FONT CLASS="LN">82</FONT><A NAME="482"></A> currentHandler.onEndElement(uri, name, context);
|
---|
| 500 | <FONT CLASS="LN">83</FONT><A NAME="483"></A> AntHandler prev = (AntHandler) antHandlers.pop();
|
---|
| 501 | <FONT CLASS="LN">84</FONT><A NAME="484"></A> currentHandler = prev;
|
---|
| 502 | <FONT CLASS="LN">85</FONT><A NAME="485"></A> <FONT CLASS="If">if</FONT> (currentHandler != <FONT CLASS="Null">null</FONT>) {
|
---|
| 503 | <FONT CLASS="LN">86</FONT><A NAME="486"></A> currentHandler.onEndChild(uri, name, qName, context);
|
---|
| 504 | <FONT CLASS="LN">87</FONT><A NAME="487"></A> }
|
---|
| 505 | <FONT CLASS="LN">88</FONT><A NAME="488"></A> }
|
---|
| 506 | <FONT CLASS="LN">89</FONT><A NAME="489"></A>
|
---|
| 507 | <FONT CLASS="LN">90</FONT><A NAME="490"></A> <FONT CLASS="FormalComment">/**
|
---|
| 508 | <FONT CLASS="LN">91</FONT><A NAME="491"></A> * Handle text within an element, calls currentHandler.characters.
|
---|
| 509 | <FONT CLASS="LN">92</FONT><A NAME="492"></A> *
|
---|
| 510 | <FONT CLASS="LN">93</FONT><A NAME="493"></A> * @param buf A character array of the test.
|
---|
| 511 | <FONT CLASS="LN">94</FONT><A NAME="494"></A> * @param start The start offset in the array.
|
---|
| 512 | <FONT CLASS="LN">95</FONT><A NAME="495"></A> * @param count The number of characters to read.
|
---|
| 513 | <FONT CLASS="LN">96</FONT><A NAME="496"></A> * @exception SAXParseException if an error occurs
|
---|
| 514 | <FONT CLASS="LN">97</FONT><A NAME="497"></A> */</FONT>
|
---|
| 515 | <FONT CLASS="LN">98</FONT><A NAME="498"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> characters(<FONT CLASS="Char">char</FONT>[] buf, <FONT CLASS="Int">int</FONT> start, <FONT CLASS="Int">int</FONT> count)
|
---|
| 516 | <FONT CLASS="LN">99</FONT><A NAME="499"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
|
---|
| 517 | <FONT CLASS="LN">00</FONT><A NAME="500"></A> currentHandler.characters(buf, start, count, context);
|
---|
| 518 | <FONT CLASS="LN">01</FONT><A NAME="501"></A> }
|
---|
| 519 | <FONT CLASS="LN">02</FONT><A NAME="502"></A>
|
---|
| 520 | <FONT CLASS="LN">03</FONT><A NAME="503"></A> <FONT CLASS="FormalComment">/**
|
---|
| 521 | <FONT CLASS="LN">04</FONT><A NAME="504"></A> * Start a namespace prefix to uri mapping
|
---|
| 522 | <FONT CLASS="LN">05</FONT><A NAME="505"></A> *
|
---|
| 523 | <FONT CLASS="LN">06</FONT><A NAME="506"></A> * @param prefix the namespace prefix
|
---|
| 524 | <FONT CLASS="LN">07</FONT><A NAME="507"></A> * @param uri the namespace uri
|
---|
| 525 | <FONT CLASS="LN">08</FONT><A NAME="508"></A> */</FONT>
|
---|
| 526 | <FONT CLASS="LN">09</FONT><A NAME="509"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> startPrefixMapping(String prefix, String uri) {
|
---|
| 527 | <FONT CLASS="LN">10</FONT><A NAME="510"></A> context.startPrefixMapping(prefix, uri);
|
---|
| 528 | <FONT CLASS="LN">11</FONT><A NAME="511"></A> }
|
---|
| 529 | <FONT CLASS="LN">12</FONT><A NAME="512"></A>
|
---|
| 530 | <FONT CLASS="LN">13</FONT><A NAME="513"></A> <FONT CLASS="FormalComment">/**
|
---|
| 531 | <FONT CLASS="LN">14</FONT><A NAME="514"></A> * End a namepace prefix to uri mapping
|
---|
| 532 | <FONT CLASS="LN">15</FONT><A NAME="515"></A> *
|
---|
| 533 | <FONT CLASS="LN">16</FONT><A NAME="516"></A> * @param prefix the prefix that is not mapped anymore
|
---|
| 534 | <FONT CLASS="LN">17</FONT><A NAME="517"></A> */</FONT>
|
---|
| 535 | <FONT CLASS="LN">18</FONT><A NAME="518"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> endPrefixMapping(String prefix) {
|
---|
| 536 | <FONT CLASS="LN">19</FONT><A NAME="519"></A> context.endPrefixMapping(prefix);
|
---|
| 537 | <FONT CLASS="LN">20</FONT><A NAME="520"></A> }
|
---|
| 538 | <FONT CLASS="LN">21</FONT><A NAME="521"></A> }
|
---|
| 539 | <FONT CLASS="LN">22</FONT><A NAME="522"></A>
|
---|
| 540 | <FONT CLASS="LN">23</FONT><A NAME="523"></A> <FONT CLASS="FormalComment">/**
|
---|
| 541 | <FONT CLASS="LN">24</FONT><A NAME="524"></A> * The main handler - it handles the &lt;project&gt; tag.
|
---|
| 542 | <FONT CLASS="LN">25</FONT><A NAME="525"></A> *
|
---|
| 543 | <FONT CLASS="LN">26</FONT><A NAME="526"></A> * @see AntHandler
|
---|
| 544 | <FONT CLASS="LN">27</FONT><A NAME="527"></A> */</FONT>
|
---|
| 545 | <FONT CLASS="LN">28</FONT><A NAME="528"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Static">static</FONT> <FONT CLASS="Class">class</FONT> MainHandler <FONT CLASS="Extends">extends</FONT> AntHandler {
|
---|
| 546 | <FONT CLASS="LN">29</FONT><A NAME="529"></A>
|
---|
| 547 | <FONT CLASS="LN">30</FONT><A NAME="530"></A> <FONT CLASS="FormalComment">/**
|
---|
| 548 | <FONT CLASS="LN">31</FONT><A NAME="531"></A> * Handle the project tag
|
---|
| 549 | <FONT CLASS="LN">32</FONT><A NAME="532"></A> *
|
---|
| 550 | <FONT CLASS="LN">33</FONT><A NAME="533"></A> * @param uri The namespace uri.
|
---|
| 551 | <FONT CLASS="LN">34</FONT><A NAME="534"></A> * @param name The element tag.
|
---|
| 552 | <FONT CLASS="LN">35</FONT><A NAME="535"></A> * @param qname The element qualified name.
|
---|
| 553 | <FONT CLASS="LN">36</FONT><A NAME="536"></A> * @param attrs The attributes of the element.
|
---|
| 554 | <FONT CLASS="LN">37</FONT><A NAME="537"></A> * @param context The current context.
|
---|
| 555 | <FONT CLASS="LN">38</FONT><A NAME="538"></A> * @return The project handler that handles subelements of project
|
---|
| 556 | <FONT CLASS="LN">39</FONT><A NAME="539"></A> * @exception SAXParseException if the qualified name is not "project".
|
---|
| 557 | <FONT CLASS="LN">40</FONT><A NAME="540"></A> */</FONT>
|
---|
| 558 | <FONT CLASS="LN">41</FONT><A NAME="541"></A> <FONT CLASS="Public">public</FONT> AntHandler onStartChild(String uri, String name, String qname,
|
---|
| 559 | <FONT CLASS="LN">42</FONT><A NAME="542"></A> Attributes attrs,
|
---|
| 560 | <FONT CLASS="LN">43</FONT><A NAME="543"></A> AntXMLContext context)
|
---|
| 561 | <FONT CLASS="LN">44</FONT><A NAME="544"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
|
---|
| 562 | <FONT CLASS="LN">45</FONT><A NAME="545"></A> <FONT CLASS="If">if</FONT> (name.equals(<FONT CLASS="StringLiteral">"project"</FONT>)
|
---|
| 563 | <FONT CLASS="LN">46</FONT><A NAME="546"></A> && (uri.equals(<FONT CLASS="StringLiteral">""</FONT>) || uri.equals(ANT_CORE_URI))) {
|
---|
| 564 | <FONT CLASS="LN">47</FONT><A NAME="547"></A> <FONT CLASS="Return">return</FONT> ProjectHelper3.projectHandler;
|
---|
| 565 | <FONT CLASS="LN">48</FONT><A NAME="548"></A> } <FONT CLASS="Else">else</FONT> {
|
---|
| 566 | <FONT CLASS="LN">49</FONT><A NAME="549"></A><FONT CLASS="SingleLineComment">// if (context.importlevel > 0) {
|
---|
| 567 | <FONT CLASS="LN">50</FONT><A NAME="550"></A></FONT><FONT CLASS="SingleLineComment">// // we are in an imported file. Allow top-level <target>.
|
---|
| 568 | <FONT CLASS="LN">51</FONT><A NAME="551"></A></FONT><FONT CLASS="SingleLineComment">// if (qname.equals( "target" ) )
|
---|
| 569 | <FONT CLASS="LN">52</FONT><A NAME="552"></A></FONT><FONT CLASS="SingleLineComment">// return ProjectHelper3.targetHandler;
|
---|
| 570 | <FONT CLASS="LN">53</FONT><A NAME="553"></A></FONT><FONT CLASS="SingleLineComment">// }
|
---|
| 571 | <FONT CLASS="LN">54</FONT><A NAME="554"></A></FONT> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> SAXParseException(<FONT CLASS="StringLiteral">"Unexpected element \""</FONT> + qname
|
---|
| 572 | <FONT CLASS="LN">55</FONT><A NAME="555"></A> + <FONT CLASS="StringLiteral">"\" "</FONT> + name, context.getLocator());
|
---|
| 573 | <FONT CLASS="LN">56</FONT><A NAME="556"></A> }
|
---|
| 574 | <FONT CLASS="LN">57</FONT><A NAME="557"></A> }
|
---|
| 575 | <FONT CLASS="LN">58</FONT><A NAME="558"></A> }
|
---|
| 576 | <FONT CLASS="LN">59</FONT><A NAME="559"></A>
|
---|
| 577 | <FONT CLASS="LN">60</FONT><A NAME="560"></A> <FONT CLASS="FormalComment">/**
|
---|
| 578 | <FONT CLASS="LN">61</FONT><A NAME="561"></A> * Handler for the top level "project" element.
|
---|
| 579 | <FONT CLASS="LN">62</FONT><A NAME="562"></A> */</FONT>
|
---|
| 580 | <FONT CLASS="LN">63</FONT><A NAME="563"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Static">static</FONT> <FONT CLASS="Class">class</FONT> ProjectHandler <FONT CLASS="Extends">extends</FONT> AntHandler {
|
---|
| 581 | <FONT CLASS="LN">64</FONT><A NAME="564"></A>
|
---|
| 582 | <FONT CLASS="LN">65</FONT><A NAME="565"></A> <FONT CLASS="FormalComment">/**
|
---|
| 583 | <FONT CLASS="LN">66</FONT><A NAME="566"></A> * Initialisation routine called after handler creation
|
---|
| 584 | <FONT CLASS="LN">67</FONT><A NAME="567"></A> * with the element name and attributes. The attributes which
|
---|
| 585 | <FONT CLASS="LN">68</FONT><A NAME="568"></A> * this handler can deal with are: <code>"default"</code>,
|
---|
| 586 | <FONT CLASS="LN">69</FONT><A NAME="569"></A> * <code>"name"</code>, <code>"id"</code> and <code>"basedir"</code>.
|
---|
| 587 | <FONT CLASS="LN">70</FONT><A NAME="570"></A> *
|
---|
| 588 | <FONT CLASS="LN">71</FONT><A NAME="571"></A> * @param uri The namespace URI for this element.
|
---|
| 589 | <FONT CLASS="LN">72</FONT><A NAME="572"></A> * @param tag Name of the element which caused this handler
|
---|
| 590 | <FONT CLASS="LN">73</FONT><A NAME="573"></A> * to be created. Should not be <code>null</code>.
|
---|
| 591 | <FONT CLASS="LN">74</FONT><A NAME="574"></A> * Ignored in this implementation.
|
---|
| 592 | <FONT CLASS="LN">75</FONT><A NAME="575"></A> * @param qname The qualified name for this element.
|
---|
| 593 | <FONT CLASS="LN">76</FONT><A NAME="576"></A> * @param attrs Attributes of the element which caused this
|
---|
| 594 | <FONT CLASS="LN">77</FONT><A NAME="577"></A> * handler to be created. Must not be <code>null</code>.
|
---|
| 595 | <FONT CLASS="LN">78</FONT><A NAME="578"></A> * @param context The current context.
|
---|
| 596 | <FONT CLASS="LN">79</FONT><A NAME="579"></A> *
|
---|
| 597 | <FONT CLASS="LN">80</FONT><A NAME="580"></A> * @exception SAXParseException if an unexpected attribute is
|
---|
| 598 | <FONT CLASS="LN">81</FONT><A NAME="581"></A> * encountered or if the <code>"default"</code> attribute
|
---|
| 599 | <FONT CLASS="LN">82</FONT><A NAME="582"></A> * is missing.
|
---|
| 600 | <FONT CLASS="LN">83</FONT><A NAME="583"></A> */</FONT>
|
---|
| 601 | <FONT CLASS="LN">84</FONT><A NAME="584"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> onStartElement(String uri, String tag, String qname,
|
---|
| 602 | <FONT CLASS="LN">85</FONT><A NAME="585"></A> Attributes attrs,
|
---|
| 603 | <FONT CLASS="LN">86</FONT><A NAME="586"></A> AntXMLContext context)
|
---|
| 604 | <FONT CLASS="LN">87</FONT><A NAME="587"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
|
---|
| 605 | <FONT CLASS="LN">88</FONT><A NAME="588"></A> String id = <FONT CLASS="Null">null</FONT>;
|
---|
| 606 | <FONT CLASS="LN">89</FONT><A NAME="589"></A> String baseDir = <FONT CLASS="Null">null</FONT>;
|
---|
| 607 | <FONT CLASS="LN">90</FONT><A NAME="590"></A> <FONT CLASS="Boolean">boolean</FONT> nameAttributeSet = <FONT CLASS="False">false</FONT>;
|
---|
| 608 | <FONT CLASS="LN">91</FONT><A NAME="591"></A>
|
---|
| 609 | <FONT CLASS="LN">92</FONT><A NAME="592"></A> Project project = context.getProject();
|
---|
| 610 | <FONT CLASS="LN">93</FONT><A NAME="593"></A>
|
---|
| 611 | <FONT CLASS="LN">94</FONT><A NAME="594"></A> <FONT CLASS="FormalComment">/** XXX I really don't like this - the XML processor is still
|
---|
| 612 | <FONT CLASS="LN">95</FONT><A NAME="595"></A> * too 'involved' in the processing. A better solution (IMO)
|
---|
| 613 | <FONT CLASS="LN">96</FONT><A NAME="596"></A> * would be to create UE for Project and Target too, and
|
---|
| 614 | <FONT CLASS="LN">97</FONT><A NAME="597"></A> * then process the tree and have Project/Target deal with
|
---|
| 615 | <FONT CLASS="LN">98</FONT><A NAME="598"></A> * its attributes ( similar with Description ).
|
---|
| 616 | <FONT CLASS="LN">99</FONT><A NAME="599"></A> *
|
---|
| 617 | <FONT CLASS="LN">00</FONT><A NAME="600"></A> * If we eventually switch to ( or add support for ) DOM,
|
---|
| 618 | <FONT CLASS="LN">01</FONT><A NAME="601"></A> * things will work smoothly - UE can be avoided almost completely
|
---|
| 619 | <FONT CLASS="LN">02</FONT><A NAME="602"></A> * ( it could still be created on demand, for backward compatibility )
|
---|
| 620 | <FONT CLASS="LN">03</FONT><A NAME="603"></A> */</FONT>
|
---|
| 621 | <FONT CLASS="LN">04</FONT><A NAME="604"></A>
|
---|
| 622 | <FONT CLASS="LN">05</FONT><A NAME="605"></A> <FONT CLASS="For">for</FONT> (<FONT CLASS="Int">int</FONT> i = <FONT CLASS="IntegerLiteral">0</FONT>; i < attrs.getLength(); i++) {
|
---|
| 623 | <FONT CLASS="LN">06</FONT><A NAME="606"></A> String attrUri = attrs.getURI(i);
|
---|
| 624 | <FONT CLASS="LN">07</FONT><A NAME="607"></A> <FONT CLASS="If">if</FONT> (attrUri != <FONT CLASS="Null">null</FONT>
|
---|
| 625 | <FONT CLASS="LN">08</FONT><A NAME="608"></A> && !attrUri.equals(<FONT CLASS="StringLiteral">""</FONT>)
|
---|
| 626 | <FONT CLASS="LN">09</FONT><A NAME="609"></A> && !attrUri.equals(uri)) {
|
---|
| 627 | <FONT CLASS="LN">10</FONT><A NAME="610"></A> <FONT CLASS="Continue">continue</FONT>; <FONT CLASS="SingleLineComment">// Ignore attributes from unknown uris
|
---|
| 628 | <FONT CLASS="LN">11</FONT><A NAME="611"></A></FONT> }
|
---|
| 629 | <FONT CLASS="LN">12</FONT><A NAME="612"></A> String key = attrs.getLocalName(i);
|
---|
| 630 | <FONT CLASS="LN">13</FONT><A NAME="613"></A> String value = attrs.getValue(i);
|
---|
| 631 | <FONT CLASS="LN">14</FONT><A NAME="614"></A>
|
---|
| 632 | <FONT CLASS="LN">15</FONT><A NAME="615"></A> <FONT CLASS="If">if</FONT> (key.equals(<FONT CLASS="StringLiteral">"default"</FONT>)) {
|
---|
| 633 | <FONT CLASS="LN">16</FONT><A NAME="616"></A> <FONT CLASS="If">if</FONT> (value != <FONT CLASS="Null">null</FONT> && !value.equals(<FONT CLASS="StringLiteral">""</FONT>)) {
|
---|
| 634 | <FONT CLASS="LN">17</FONT><A NAME="617"></A> <FONT CLASS="If">if</FONT> (!context.isIgnoringProjectTag()) {
|
---|
| 635 | <FONT CLASS="LN">18</FONT><A NAME="618"></A> project.setDefault(value);
|
---|
| 636 | <FONT CLASS="LN">19</FONT><A NAME="619"></A> }
|
---|
| 637 | <FONT CLASS="LN">20</FONT><A NAME="620"></A> }
|
---|
| 638 | <FONT CLASS="LN">21</FONT><A NAME="621"></A> } <FONT CLASS="Else">else</FONT> <FONT CLASS="If">if</FONT> (key.equals(<FONT CLASS="StringLiteral">"name"</FONT>)) {
|
---|
| 639 | <FONT CLASS="LN">22</FONT><A NAME="622"></A> <FONT CLASS="If">if</FONT> (value != <FONT CLASS="Null">null</FONT>) {
|
---|
| 640 | <FONT CLASS="LN">23</FONT><A NAME="623"></A> context.setCurrentProjectName(value);
|
---|
| 641 | <FONT CLASS="LN">24</FONT><A NAME="624"></A> nameAttributeSet = <FONT CLASS="True">true</FONT>;
|
---|
| 642 | <FONT CLASS="LN">25</FONT><A NAME="625"></A> <FONT CLASS="If">if</FONT> (!context.isIgnoringProjectTag()) {
|
---|
| 643 | <FONT CLASS="LN">26</FONT><A NAME="626"></A> project.setName(value);
|
---|
| 644 | <FONT CLASS="LN">27</FONT><A NAME="627"></A> project.addReference(value, project);
|
---|
| 645 | <FONT CLASS="LN">28</FONT><A NAME="628"></A> }
|
---|
| 646 | <FONT CLASS="LN">29</FONT><A NAME="629"></A> }
|
---|
| 647 | <FONT CLASS="LN">30</FONT><A NAME="630"></A> } <FONT CLASS="Else">else</FONT> <FONT CLASS="If">if</FONT> (key.equals(<FONT CLASS="StringLiteral">"id"</FONT>)) {
|
---|
| 648 | <FONT CLASS="LN">31</FONT><A NAME="631"></A> <FONT CLASS="If">if</FONT> (value != <FONT CLASS="Null">null</FONT>) {
|
---|
| 649 | <FONT CLASS="LN">32</FONT><A NAME="632"></A> <FONT CLASS="SingleLineComment">// What's the difference between id and name ?
|
---|
| 650 | <FONT CLASS="LN">33</FONT><A NAME="633"></A></FONT> <FONT CLASS="If">if</FONT> (!context.isIgnoringProjectTag()) {
|
---|
| 651 | <FONT CLASS="LN">34</FONT><A NAME="634"></A> project.addReference(value, project);
|
---|
| 652 | <FONT CLASS="LN">35</FONT><A NAME="635"></A> }
|
---|
| 653 | <FONT CLASS="LN">36</FONT><A NAME="636"></A> }
|
---|
| 654 | <FONT CLASS="LN">37</FONT><A NAME="637"></A> } <FONT CLASS="Else">else</FONT> <FONT CLASS="If">if</FONT> (key.equals(<FONT CLASS="StringLiteral">"basedir"</FONT>)) {
|
---|
| 655 | <FONT CLASS="LN">38</FONT><A NAME="638"></A> <FONT CLASS="If">if</FONT> (!context.isIgnoringProjectTag()) {
|
---|
| 656 | <FONT CLASS="LN">39</FONT><A NAME="639"></A> baseDir = value;
|
---|
| 657 | <FONT CLASS="LN">40</FONT><A NAME="640"></A> }
|
---|
| 658 | <FONT CLASS="LN">41</FONT><A NAME="641"></A> } <FONT CLASS="Else">else</FONT> {
|
---|
| 659 | <FONT CLASS="LN">42</FONT><A NAME="642"></A> <FONT CLASS="SingleLineComment">// XXX ignore attributes in a different NS ( maybe store them ? )
|
---|
| 660 | <FONT CLASS="LN">43</FONT><A NAME="643"></A></FONT> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> SAXParseException(<FONT CLASS="StringLiteral">"Unexpected attribute \""</FONT>
|
---|
| 661 | <FONT CLASS="LN">44</FONT><A NAME="644"></A> + attrs.getQName(i) + <FONT CLASS="StringLiteral">"\""</FONT>, context.getLocator());
|
---|
| 662 | <FONT CLASS="LN">45</FONT><A NAME="645"></A> }
|
---|
| 663 | <FONT CLASS="LN">46</FONT><A NAME="646"></A> }
|
---|
| 664 | <FONT CLASS="LN">47</FONT><A NAME="647"></A>
|
---|
| 665 | <FONT CLASS="LN">48</FONT><A NAME="648"></A> <FONT CLASS="SingleLineComment">// XXX Move to Project ( so it is shared by all helpers )
|
---|
| 666 | <FONT CLASS="LN">49</FONT><A NAME="649"></A></FONT> String antFileProp = <FONT CLASS="StringLiteral">"ant.file."</FONT> + context.getCurrentProjectName();
|
---|
| 667 | <FONT CLASS="LN">50</FONT><A NAME="650"></A> String dup = project.getProperty(antFileProp);
|
---|
| 668 | <FONT CLASS="LN">51</FONT><A NAME="651"></A> <FONT CLASS="If">if</FONT> (dup != <FONT CLASS="Null">null</FONT> && nameAttributeSet) {
|
---|
| 669 | <FONT CLASS="LN">52</FONT><A NAME="652"></A> File dupFile = <FONT CLASS="New">new</FONT> File(dup);
|
---|
| 670 | <FONT CLASS="LN">53</FONT><A NAME="653"></A> <FONT CLASS="If">if</FONT> (context.isIgnoringProjectTag()
|
---|
| 671 | <FONT CLASS="LN">54</FONT><A NAME="654"></A> && !dupFile.equals(context.getBuildFile())) {
|
---|
| 672 | <FONT CLASS="LN">55</FONT><A NAME="655"></A> project.log(<FONT CLASS="StringLiteral">"Duplicated project name in import. Project "</FONT>
|
---|
| 673 | <FONT CLASS="LN">56</FONT><A NAME="656"></A> + context.getCurrentProjectName() + <FONT CLASS="StringLiteral">" defined first in "</FONT>
|
---|
| 674 | <FONT CLASS="LN">57</FONT><A NAME="657"></A> + dup + <FONT CLASS="StringLiteral">" and again in "</FONT> + context.getBuildFile(),
|
---|
| 675 | <FONT CLASS="LN">58</FONT><A NAME="658"></A> Project.MSG_WARN);
|
---|
| 676 | <FONT CLASS="LN">59</FONT><A NAME="659"></A> }
|
---|
| 677 | <FONT CLASS="LN">60</FONT><A NAME="660"></A> }
|
---|
| 678 | <FONT CLASS="LN">61</FONT><A NAME="661"></A>
|
---|
| 679 | <FONT CLASS="LN">62</FONT><A NAME="662"></A> <FONT CLASS="If">if</FONT> (context.getBuildFile() != <FONT CLASS="Null">null</FONT>) {
|
---|
| 680 | <FONT CLASS="LN">63</FONT><A NAME="663"></A> project.setUserProperty(<FONT CLASS="StringLiteral">"ant.file."</FONT>
|
---|
| 681 | <FONT CLASS="LN">64</FONT><A NAME="664"></A> + context.getCurrentProjectName(),
|
---|
| 682 | <FONT CLASS="LN">65</FONT><A NAME="665"></A> context.getBuildFile().toString());
|
---|
| 683 | <FONT CLASS="LN">66</FONT><A NAME="666"></A> }
|
---|
| 684 | <FONT CLASS="LN">67</FONT><A NAME="667"></A>
|
---|
| 685 | <FONT CLASS="LN">68</FONT><A NAME="668"></A> <FONT CLASS="If">if</FONT> (context.isIgnoringProjectTag()) {
|
---|
| 686 | <FONT CLASS="LN">69</FONT><A NAME="669"></A> <FONT CLASS="SingleLineComment">// no further processing
|
---|
| 687 | <FONT CLASS="LN">70</FONT><A NAME="670"></A></FONT> <FONT CLASS="Return">return</FONT>;
|
---|
| 688 | <FONT CLASS="LN">71</FONT><A NAME="671"></A> }
|
---|
| 689 | <FONT CLASS="LN">72</FONT><A NAME="672"></A> <FONT CLASS="SingleLineComment">// set explicitly before starting ?
|
---|
| 690 | <FONT CLASS="LN">73</FONT><A NAME="673"></A></FONT> <FONT CLASS="If">if</FONT> (project.getProperty(<FONT CLASS="StringLiteral">"basedir"</FONT>) != <FONT CLASS="Null">null</FONT>) {
|
---|
| 691 | <FONT CLASS="LN">74</FONT><A NAME="674"></A> project.setBasedir(project.getProperty(<FONT CLASS="StringLiteral">"basedir"</FONT>));
|
---|
| 692 | <FONT CLASS="LN">75</FONT><A NAME="675"></A> } <FONT CLASS="Else">else</FONT> {
|
---|
| 693 | <FONT CLASS="LN">76</FONT><A NAME="676"></A> <FONT CLASS="SingleLineComment">// Default for baseDir is the location of the build file.
|
---|
| 694 | <FONT CLASS="LN">77</FONT><A NAME="677"></A></FONT> <FONT CLASS="If">if</FONT> (baseDir == <FONT CLASS="Null">null</FONT>) {
|
---|
| 695 | <FONT CLASS="LN">78</FONT><A NAME="678"></A> project.setBasedir(context.getBuildFileParent().getAbsolutePath());
|
---|
| 696 | <FONT CLASS="LN">79</FONT><A NAME="679"></A> } <FONT CLASS="Else">else</FONT> {
|
---|
| 697 | <FONT CLASS="LN">80</FONT><A NAME="680"></A> <FONT CLASS="SingleLineComment">// check whether the user has specified an absolute path
|
---|
| 698 | <FONT CLASS="LN">81</FONT><A NAME="681"></A></FONT> <FONT CLASS="If">if</FONT> ((<FONT CLASS="New">new</FONT> File(baseDir)).isAbsolute()) {
|
---|
| 699 | <FONT CLASS="LN">82</FONT><A NAME="682"></A> project.setBasedir(baseDir);
|
---|
| 700 | <FONT CLASS="LN">83</FONT><A NAME="683"></A> } <FONT CLASS="Else">else</FONT> {
|
---|
| 701 | <FONT CLASS="LN">84</FONT><A NAME="684"></A> project.setBaseDir(fu.resolveFile(
|
---|
| 702 | <FONT CLASS="LN">85</FONT><A NAME="685"></A> context.getBuildFileParent(), baseDir));
|
---|
| 703 | <FONT CLASS="LN">86</FONT><A NAME="686"></A> }
|
---|
| 704 | <FONT CLASS="LN">87</FONT><A NAME="687"></A> }
|
---|
| 705 | <FONT CLASS="LN">88</FONT><A NAME="688"></A> }
|
---|
| 706 | <FONT CLASS="LN">89</FONT><A NAME="689"></A>
|
---|
| 707 | <FONT CLASS="LN">90</FONT><A NAME="690"></A> project.addTarget(<FONT CLASS="StringLiteral">""</FONT>, context.getImplicitTarget());
|
---|
| 708 | <FONT CLASS="LN">91</FONT><A NAME="691"></A> context.setCurrentTarget(context.getImplicitTarget());
|
---|
| 709 | <FONT CLASS="LN">92</FONT><A NAME="692"></A> }
|
---|
| 710 | <FONT CLASS="LN">93</FONT><A NAME="693"></A>
|
---|
| 711 | <FONT CLASS="LN">94</FONT><A NAME="694"></A> <FONT CLASS="FormalComment">/**
|
---|
| 712 | <FONT CLASS="LN">95</FONT><A NAME="695"></A> * Handles the start of a top-level element within the project. An
|
---|
| 713 | <FONT CLASS="LN">96</FONT><A NAME="696"></A> * appropriate handler is created and initialised with the details
|
---|
| 714 | <FONT CLASS="LN">97</FONT><A NAME="697"></A> * of the element.
|
---|
| 715 | <FONT CLASS="LN">98</FONT><A NAME="698"></A> *
|
---|
| 716 | <FONT CLASS="LN">99</FONT><A NAME="699"></A> * @param uri The namespace URI for this element.
|
---|
| 717 | <FONT CLASS="LN">00</FONT><A NAME="700"></A> * @param name The name of the element being started.
|
---|
| 718 | <FONT CLASS="LN">01</FONT><A NAME="701"></A> * Will not be <code>null</code>.
|
---|
| 719 | <FONT CLASS="LN">02</FONT><A NAME="702"></A> * @param qname The qualified name for this element.
|
---|
| 720 | <FONT CLASS="LN">03</FONT><A NAME="703"></A> * @param attrs Attributes of the element being started.
|
---|
| 721 | <FONT CLASS="LN">04</FONT><A NAME="704"></A> * Will not be <code>null</code>.
|
---|
| 722 | <FONT CLASS="LN">05</FONT><A NAME="705"></A> * @param context The context for this element.
|
---|
| 723 | <FONT CLASS="LN">06</FONT><A NAME="706"></A> * @return a target or an element handler.
|
---|
| 724 | <FONT CLASS="LN">07</FONT><A NAME="707"></A> *
|
---|
| 725 | <FONT CLASS="LN">08</FONT><A NAME="708"></A> * @exception org.xml.sax.SAXParseException if the tag given is not
|
---|
| 726 | <FONT CLASS="LN">09</FONT><A NAME="709"></A> * <code>"taskdef"</code>, <code>"typedef"</code>,
|
---|
| 727 | <FONT CLASS="LN">10</FONT><A NAME="710"></A> * <code>"property"</code>, <code>"target"</code>
|
---|
| 728 | <FONT CLASS="LN">11</FONT><A NAME="711"></A> * or a data type definition
|
---|
| 729 | <FONT CLASS="LN">12</FONT><A NAME="712"></A> */</FONT>
|
---|
| 730 | <FONT CLASS="LN">13</FONT><A NAME="713"></A> <FONT CLASS="Public">public</FONT> AntHandler onStartChild(String uri, String name, String qname,
|
---|
| 731 | <FONT CLASS="LN">14</FONT><A NAME="714"></A> Attributes attrs,
|
---|
| 732 | <FONT CLASS="LN">15</FONT><A NAME="715"></A> AntXMLContext context)
|
---|
| 733 | <FONT CLASS="LN">16</FONT><A NAME="716"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
|
---|
| 734 | <FONT CLASS="LN">17</FONT><A NAME="717"></A> <FONT CLASS="If">if</FONT> (name.equals(<FONT CLASS="StringLiteral">"target"</FONT>)
|
---|
| 735 | <FONT CLASS="LN">18</FONT><A NAME="718"></A> && (uri.equals(<FONT CLASS="StringLiteral">""</FONT>) || uri.equals(ANT_CORE_URI))) {
|
---|
| 736 | <FONT CLASS="LN">19</FONT><A NAME="719"></A> <FONT CLASS="Return">return</FONT> ProjectHelper3.targetHandler;
|
---|
| 737 | <FONT CLASS="LN">20</FONT><A NAME="720"></A> } <FONT CLASS="Else">else</FONT> {
|
---|
| 738 | <FONT CLASS="LN">21</FONT><A NAME="721"></A> <FONT CLASS="Return">return</FONT> ProjectHelper3.elementHandler;
|
---|
| 739 | <FONT CLASS="LN">22</FONT><A NAME="722"></A> }
|
---|
| 740 | <FONT CLASS="LN">23</FONT><A NAME="723"></A> }
|
---|
| 741 | <FONT CLASS="LN">24</FONT><A NAME="724"></A>
|
---|
| 742 | <FONT CLASS="LN">25</FONT><A NAME="725"></A> }
|
---|
| 743 | <FONT CLASS="LN">26</FONT><A NAME="726"></A>
|
---|
| 744 | <FONT CLASS="LN">27</FONT><A NAME="727"></A> <FONT CLASS="FormalComment">/**
|
---|
| 745 | <FONT CLASS="LN">28</FONT><A NAME="728"></A> * Handler for "target" elements.
|
---|
| 746 | <FONT CLASS="LN">29</FONT><A NAME="729"></A> */</FONT>
|
---|
| 747 | <FONT CLASS="LN">30</FONT><A NAME="730"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Static">static</FONT> <FONT CLASS="Class">class</FONT> TargetHandler <FONT CLASS="Extends">extends</FONT> AntHandler {
|
---|
| 748 | <FONT CLASS="LN">31</FONT><A NAME="731"></A>
|
---|
| 749 | <FONT CLASS="LN">32</FONT><A NAME="732"></A> <FONT CLASS="FormalComment">/**
|
---|
| 750 | <FONT CLASS="LN">33</FONT><A NAME="733"></A> * Initialisation routine called after handler creation
|
---|
| 751 | <FONT CLASS="LN">34</FONT><A NAME="734"></A> * with the element name and attributes. The attributes which
|
---|
| 752 | <FONT CLASS="LN">35</FONT><A NAME="735"></A> * this handler can deal with are: <code>"name"</code>,
|
---|
| 753 | <FONT CLASS="LN">36</FONT><A NAME="736"></A> * <code>"depends"</code>, <code>"if"</code>,
|
---|
| 754 | <FONT CLASS="LN">37</FONT><A NAME="737"></A> * <code>"unless"</code>, <code>"id"</code> and
|
---|
| 755 | <FONT CLASS="LN">38</FONT><A NAME="738"></A> * <code>"description"</code>.
|
---|
| 756 | <FONT CLASS="LN">39</FONT><A NAME="739"></A> *
|
---|
| 757 | <FONT CLASS="LN">40</FONT><A NAME="740"></A> * @param uri The namespace URI for this element.
|
---|
| 758 | <FONT CLASS="LN">41</FONT><A NAME="741"></A> * @param tag Name of the element which caused this handler
|
---|
| 759 | <FONT CLASS="LN">42</FONT><A NAME="742"></A> * to be created. Should not be <code>null</code>.
|
---|
| 760 | <FONT CLASS="LN">43</FONT><A NAME="743"></A> * Ignored in this implementation.
|
---|
| 761 | <FONT CLASS="LN">44</FONT><A NAME="744"></A> * @param qname The qualified name for this element.
|
---|
| 762 | <FONT CLASS="LN">45</FONT><A NAME="745"></A> * @param attrs Attributes of the element which caused this
|
---|
| 763 | <FONT CLASS="LN">46</FONT><A NAME="746"></A> * handler to be created. Must not be <code>null</code>.
|
---|
| 764 | <FONT CLASS="LN">47</FONT><A NAME="747"></A> * @param context The current context.
|
---|
| 765 | <FONT CLASS="LN">48</FONT><A NAME="748"></A> *
|
---|
| 766 | <FONT CLASS="LN">49</FONT><A NAME="749"></A> * @exception SAXParseException if an unexpected attribute is encountered
|
---|
| 767 | <FONT CLASS="LN">50</FONT><A NAME="750"></A> * or if the <code>"name"</code> attribute is missing.
|
---|
| 768 | <FONT CLASS="LN">51</FONT><A NAME="751"></A> */</FONT>
|
---|
| 769 | <FONT CLASS="LN">52</FONT><A NAME="752"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> onStartElement(String uri, String tag, String qname,
|
---|
| 770 | <FONT CLASS="LN">53</FONT><A NAME="753"></A> Attributes attrs,
|
---|
| 771 | <FONT CLASS="LN">54</FONT><A NAME="754"></A> AntXMLContext context)
|
---|
| 772 | <FONT CLASS="LN">55</FONT><A NAME="755"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
|
---|
| 773 | <FONT CLASS="LN">56</FONT><A NAME="756"></A> String name = <FONT CLASS="Null">null</FONT>;
|
---|
| 774 | <FONT CLASS="LN">57</FONT><A NAME="757"></A> String depends = <FONT CLASS="StringLiteral">""</FONT>;
|
---|
| 775 | <FONT CLASS="LN">58</FONT><A NAME="758"></A>
|
---|
| 776 | <FONT CLASS="LN">59</FONT><A NAME="759"></A> Project project = context.getProject();
|
---|
| 777 | <FONT CLASS="LN">60</FONT><A NAME="760"></A> Target target = <FONT CLASS="New">new</FONT> Target();
|
---|
| 778 | <FONT CLASS="LN">61</FONT><A NAME="761"></A> target.setProject(project);
|
---|
| 779 | <FONT CLASS="LN">62</FONT><A NAME="762"></A> context.addTarget(target);
|
---|
| 780 | <FONT CLASS="LN">63</FONT><A NAME="763"></A>
|
---|
| 781 | <FONT CLASS="LN">64</FONT><A NAME="764"></A> <FONT CLASS="For">for</FONT> (<FONT CLASS="Int">int</FONT> i = <FONT CLASS="IntegerLiteral">0</FONT>; i < attrs.getLength(); i++) {
|
---|
| 782 | <FONT CLASS="LN">65</FONT><A NAME="765"></A> String attrUri = attrs.getURI(i);
|
---|
| 783 | <FONT CLASS="LN">66</FONT><A NAME="766"></A> <FONT CLASS="If">if</FONT> (attrUri != <FONT CLASS="Null">null</FONT>
|
---|
| 784 | <FONT CLASS="LN">67</FONT><A NAME="767"></A> && !attrUri.equals(<FONT CLASS="StringLiteral">""</FONT>)
|
---|
| 785 | <FONT CLASS="LN">68</FONT><A NAME="768"></A> && !attrUri.equals(uri)) {
|
---|
| 786 | <FONT CLASS="LN">69</FONT><A NAME="769"></A> <FONT CLASS="Continue">continue</FONT>; <FONT CLASS="SingleLineComment">// Ignore attributes from unknown uris
|
---|
| 787 | <FONT CLASS="LN">70</FONT><A NAME="770"></A></FONT> }
|
---|
| 788 | <FONT CLASS="LN">71</FONT><A NAME="771"></A> String key = attrs.getLocalName(i);
|
---|
| 789 | <FONT CLASS="LN">72</FONT><A NAME="772"></A> String value = attrs.getValue(i);
|
---|
| 790 | <FONT CLASS="LN">73</FONT><A NAME="773"></A>
|
---|
| 791 | <FONT CLASS="LN">74</FONT><A NAME="774"></A> <FONT CLASS="If">if</FONT> (key.equals(<FONT CLASS="StringLiteral">"name"</FONT>)) {
|
---|
| 792 | <FONT CLASS="LN">75</FONT><A NAME="775"></A> name = value;
|
---|
| 793 | <FONT CLASS="LN">76</FONT><A NAME="776"></A> <FONT CLASS="If">if</FONT> (<FONT CLASS="StringLiteral">""</FONT>.equals(name)) {
|
---|
| 794 | <FONT CLASS="LN">77</FONT><A NAME="777"></A> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> BuildException(<FONT CLASS="StringLiteral">"name attribute must "</FONT>
|
---|
| 795 | <FONT CLASS="LN">78</FONT><A NAME="778"></A> + <FONT CLASS="StringLiteral">"not be empty"</FONT>);
|
---|
| 796 | <FONT CLASS="LN">79</FONT><A NAME="779"></A> }
|
---|
| 797 | <FONT CLASS="LN">80</FONT><A NAME="780"></A> } <FONT CLASS="Else">else</FONT> <FONT CLASS="If">if</FONT> (key.equals(<FONT CLASS="StringLiteral">"depends"</FONT>)) {
|
---|
| 798 | <FONT CLASS="LN">81</FONT><A NAME="781"></A> depends = value;
|
---|
| 799 | <FONT CLASS="LN">82</FONT><A NAME="782"></A> } <FONT CLASS="Else">else</FONT> <FONT CLASS="If">if</FONT> (key.equals(<FONT CLASS="StringLiteral">"if"</FONT>)) {
|
---|
| 800 | <FONT CLASS="LN">83</FONT><A NAME="783"></A> target.setIf(value);
|
---|
| 801 | <FONT CLASS="LN">84</FONT><A NAME="784"></A> } <FONT CLASS="Else">else</FONT> <FONT CLASS="If">if</FONT> (key.equals(<FONT CLASS="StringLiteral">"unless"</FONT>)) {
|
---|
| 802 | <FONT CLASS="LN">85</FONT><A NAME="785"></A> target.setUnless(value);
|
---|
| 803 | <FONT CLASS="LN">86</FONT><A NAME="786"></A> } <FONT CLASS="Else">else</FONT> <FONT CLASS="If">if</FONT> (key.equals(<FONT CLASS="StringLiteral">"id"</FONT>)) {
|
---|
| 804 | <FONT CLASS="LN">87</FONT><A NAME="787"></A> <FONT CLASS="If">if</FONT> (value != <FONT CLASS="Null">null</FONT> && !value.equals(<FONT CLASS="StringLiteral">""</FONT>)) {
|
---|
| 805 | <FONT CLASS="LN">88</FONT><A NAME="788"></A> context.getProject().addReference(value, target);
|
---|
| 806 | <FONT CLASS="LN">89</FONT><A NAME="789"></A> }
|
---|
| 807 | <FONT CLASS="LN">90</FONT><A NAME="790"></A> } <FONT CLASS="Else">else</FONT> <FONT CLASS="If">if</FONT> (key.equals(<FONT CLASS="StringLiteral">"description"</FONT>)) {
|
---|
| 808 | <FONT CLASS="LN">91</FONT><A NAME="791"></A> target.setDescription(value);
|
---|
| 809 | <FONT CLASS="LN">92</FONT><A NAME="792"></A> } <FONT CLASS="Else">else</FONT> {
|
---|
| 810 | <FONT CLASS="LN">93</FONT><A NAME="793"></A> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> SAXParseException(<FONT CLASS="StringLiteral">"Unexpected attribute \""</FONT>
|
---|
| 811 | <FONT CLASS="LN">94</FONT><A NAME="794"></A> + key + <FONT CLASS="StringLiteral">"\""</FONT>, context.getLocator());
|
---|
| 812 | <FONT CLASS="LN">95</FONT><A NAME="795"></A> }
|
---|
| 813 | <FONT CLASS="LN">96</FONT><A NAME="796"></A> }
|
---|
| 814 | <FONT CLASS="LN">97</FONT><A NAME="797"></A>
|
---|
| 815 | <FONT CLASS="LN">98</FONT><A NAME="798"></A> <FONT CLASS="If">if</FONT> (name == <FONT CLASS="Null">null</FONT>) {
|
---|
| 816 | <FONT CLASS="LN">99</FONT><A NAME="799"></A> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> SAXParseException(<FONT CLASS="StringLiteral">"target element appears without "</FONT>
|
---|
| 817 | <FONT CLASS="LN">00</FONT><A NAME="800"></A> + <FONT CLASS="StringLiteral">"a name attribute"</FONT>, context.getLocator());
|
---|
| 818 | <FONT CLASS="LN">01</FONT><A NAME="801"></A> }
|
---|
| 819 | <FONT CLASS="LN">02</FONT><A NAME="802"></A>
|
---|
| 820 | <FONT CLASS="LN">03</FONT><A NAME="803"></A> Hashtable currentTargets = project.getTargets();
|
---|
| 821 | <FONT CLASS="LN">04</FONT><A NAME="804"></A>
|
---|
| 822 | <FONT CLASS="LN">05</FONT><A NAME="805"></A> <FONT CLASS="SingleLineComment">// If the name has already been defined ( import for example )
|
---|
| 823 | <FONT CLASS="LN">06</FONT><A NAME="806"></A></FONT> <FONT CLASS="If">if</FONT> (currentTargets.containsKey(name)) {
|
---|
| 824 | <FONT CLASS="LN">07</FONT><A NAME="807"></A> <FONT CLASS="If">if</FONT> (!context.isIgnoringProjectTag()) {
|
---|
| 825 | <FONT CLASS="LN">08</FONT><A NAME="808"></A> <FONT CLASS="SingleLineComment">// not in a import'ed file
|
---|
| 826 | <FONT CLASS="LN">09</FONT><A NAME="809"></A></FONT> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> BuildException(
|
---|
| 827 | <FONT CLASS="LN">10</FONT><A NAME="810"></A> <FONT CLASS="StringLiteral">"Duplicate target '"</FONT> + name + <FONT CLASS="StringLiteral">"'"</FONT>,
|
---|
| 828 | <FONT CLASS="LN">11</FONT><A NAME="811"></A> <FONT CLASS="New">new</FONT> Location(context.getLocator().getSystemId(),
|
---|
| 829 | <FONT CLASS="LN">12</FONT><A NAME="812"></A> context.getLocator().getLineNumber(),
|
---|
| 830 | <FONT CLASS="LN">13</FONT><A NAME="813"></A> context.getLocator().getColumnNumber()));
|
---|
| 831 | <FONT CLASS="LN">14</FONT><A NAME="814"></A> }
|
---|
| 832 | <FONT CLASS="LN">15</FONT><A NAME="815"></A> <FONT CLASS="SingleLineComment">// Alter the name.
|
---|
| 833 | <FONT CLASS="LN">16</FONT><A NAME="816"></A></FONT> <FONT CLASS="If">if</FONT> (context.getCurrentProjectName() != <FONT CLASS="Null">null</FONT>) {
|
---|
| 834 | <FONT CLASS="LN">17</FONT><A NAME="817"></A> String newName = context.getCurrentProjectName()
|
---|
| 835 | <FONT CLASS="LN">18</FONT><A NAME="818"></A> + <FONT CLASS="StringLiteral">"."</FONT> + name;
|
---|
| 836 | <FONT CLASS="LN">19</FONT><A NAME="819"></A> project.log(<FONT CLASS="StringLiteral">"Already defined in main or a previous import, "</FONT>
|
---|
| 837 | <FONT CLASS="LN">20</FONT><A NAME="820"></A> + <FONT CLASS="StringLiteral">"define "</FONT> + name + <FONT CLASS="StringLiteral">" as "</FONT> + newName,
|
---|
| 838 | <FONT CLASS="LN">21</FONT><A NAME="821"></A> Project.MSG_VERBOSE);
|
---|
| 839 | <FONT CLASS="LN">22</FONT><A NAME="822"></A> name = newName;
|
---|
| 840 | <FONT CLASS="LN">23</FONT><A NAME="823"></A> } <FONT CLASS="Else">else</FONT> {
|
---|
| 841 | <FONT CLASS="LN">24</FONT><A NAME="824"></A> project.log(<FONT CLASS="StringLiteral">"Already defined in main or a previous import, "</FONT>
|
---|
| 842 | <FONT CLASS="LN">25</FONT><A NAME="825"></A> + <FONT CLASS="StringLiteral">"ignore "</FONT> + name, Project.MSG_VERBOSE);
|
---|
| 843 | <FONT CLASS="LN">26</FONT><A NAME="826"></A> name = <FONT CLASS="Null">null</FONT>;
|
---|
| 844 | <FONT CLASS="LN">27</FONT><A NAME="827"></A> }
|
---|
| 845 | <FONT CLASS="LN">28</FONT><A NAME="828"></A> }
|
---|
| 846 | <FONT CLASS="LN">29</FONT><A NAME="829"></A>
|
---|
| 847 | <FONT CLASS="LN">30</FONT><A NAME="830"></A> <FONT CLASS="If">if</FONT> (name != <FONT CLASS="Null">null</FONT>) {
|
---|
| 848 | <FONT CLASS="LN">31</FONT><A NAME="831"></A> target.setName(name);
|
---|
| 849 | <FONT CLASS="LN">32</FONT><A NAME="832"></A> project.addOrReplaceTarget(name, target);
|
---|
| 850 | <FONT CLASS="LN">33</FONT><A NAME="833"></A> }
|
---|
| 851 | <FONT CLASS="LN">34</FONT><A NAME="834"></A>
|
---|
| 852 | <FONT CLASS="LN">35</FONT><A NAME="835"></A> <FONT CLASS="SingleLineComment">// take care of dependencies
|
---|
| 853 | <FONT CLASS="LN">36</FONT><A NAME="836"></A></FONT> <FONT CLASS="If">if</FONT> (depends.length() > <FONT CLASS="IntegerLiteral">0</FONT>) {
|
---|
| 854 | <FONT CLASS="LN">37</FONT><A NAME="837"></A> target.setDepends(depends);
|
---|
| 855 | <FONT CLASS="LN">38</FONT><A NAME="838"></A> }
|
---|
| 856 | <FONT CLASS="LN">39</FONT><A NAME="839"></A> }
|
---|
| 857 | <FONT CLASS="LN">40</FONT><A NAME="840"></A>
|
---|
| 858 | <FONT CLASS="LN">41</FONT><A NAME="841"></A> <FONT CLASS="FormalComment">/**
|
---|
| 859 | <FONT CLASS="LN">42</FONT><A NAME="842"></A> * Handles the start of an element within a target.
|
---|
| 860 | <FONT CLASS="LN">43</FONT><A NAME="843"></A> *
|
---|
| 861 | <FONT CLASS="LN">44</FONT><A NAME="844"></A> * @param uri The namespace URI for this element.
|
---|
| 862 | <FONT CLASS="LN">45</FONT><A NAME="845"></A> * @param name The name of the element being started.
|
---|
| 863 | <FONT CLASS="LN">46</FONT><A NAME="846"></A> * Will not be <code>null</code>.
|
---|
| 864 | <FONT CLASS="LN">47</FONT><A NAME="847"></A> * @param qname The qualified name for this element.
|
---|
| 865 | <FONT CLASS="LN">48</FONT><A NAME="848"></A> * @param attrs Attributes of the element being started.
|
---|
| 866 | <FONT CLASS="LN">49</FONT><A NAME="849"></A> * Will not be <code>null</code>.
|
---|
| 867 | <FONT CLASS="LN">50</FONT><A NAME="850"></A> * @param context The current context.
|
---|
| 868 | <FONT CLASS="LN">51</FONT><A NAME="851"></A> * @return an element handler.
|
---|
| 869 | <FONT CLASS="LN">52</FONT><A NAME="852"></A> *
|
---|
| 870 | <FONT CLASS="LN">53</FONT><A NAME="853"></A> * @exception SAXParseException if an error occurs when initialising
|
---|
| 871 | <FONT CLASS="LN">54</FONT><A NAME="854"></A> * the appropriate child handler
|
---|
| 872 | <FONT CLASS="LN">55</FONT><A NAME="855"></A> */</FONT>
|
---|
| 873 | <FONT CLASS="LN">56</FONT><A NAME="856"></A> <FONT CLASS="Public">public</FONT> AntHandler onStartChild(String uri, String name, String qname,
|
---|
| 874 | <FONT CLASS="LN">57</FONT><A NAME="857"></A> Attributes attrs,
|
---|
| 875 | <FONT CLASS="LN">58</FONT><A NAME="858"></A> AntXMLContext context)
|
---|
| 876 | <FONT CLASS="LN">59</FONT><A NAME="859"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
|
---|
| 877 | <FONT CLASS="LN">60</FONT><A NAME="860"></A> <FONT CLASS="Return">return</FONT> ProjectHelper3.elementHandler;
|
---|
| 878 | <FONT CLASS="LN">61</FONT><A NAME="861"></A> }
|
---|
| 879 | <FONT CLASS="LN">62</FONT><A NAME="862"></A>
|
---|
| 880 | <FONT CLASS="LN">63</FONT><A NAME="863"></A> <FONT CLASS="FormalComment">/**
|
---|
| 881 | <FONT CLASS="LN">64</FONT><A NAME="864"></A> * Handle the end of the project, sets the current target of the
|
---|
| 882 | <FONT CLASS="LN">65</FONT><A NAME="865"></A> * context to be the implicit target.
|
---|
| 883 | <FONT CLASS="LN">66</FONT><A NAME="866"></A> *
|
---|
| 884 | <FONT CLASS="LN">67</FONT><A NAME="867"></A> * @param uri The namespace URI of the element.
|
---|
| 885 | <FONT CLASS="LN">68</FONT><A NAME="868"></A> * @param tag The name of the element.
|
---|
| 886 | <FONT CLASS="LN">69</FONT><A NAME="869"></A> * @param context The current context.
|
---|
| 887 | <FONT CLASS="LN">70</FONT><A NAME="870"></A> */</FONT>
|
---|
| 888 | <FONT CLASS="LN">71</FONT><A NAME="871"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> onEndElement(String uri, String tag, AntXMLContext context) {
|
---|
| 889 | <FONT CLASS="LN">72</FONT><A NAME="872"></A> context.setCurrentTarget(context.getImplicitTarget());
|
---|
| 890 | <FONT CLASS="LN">73</FONT><A NAME="873"></A> }
|
---|
| 891 | <FONT CLASS="LN">74</FONT><A NAME="874"></A> }
|
---|
| 892 | <FONT CLASS="LN">75</FONT><A NAME="875"></A>
|
---|
| 893 | <FONT CLASS="LN">76</FONT><A NAME="876"></A> <FONT CLASS="FormalComment">/**
|
---|
| 894 | <FONT CLASS="LN">77</FONT><A NAME="877"></A> * Handler for all project elements ( tasks, data types )
|
---|
| 895 | <FONT CLASS="LN">78</FONT><A NAME="878"></A> */</FONT>
|
---|
| 896 | <FONT CLASS="LN">79</FONT><A NAME="879"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Static">static</FONT> <FONT CLASS="Class">class</FONT> ElementHandler <FONT CLASS="Extends">extends</FONT> AntHandler {
|
---|
| 897 | <FONT CLASS="LN">80</FONT><A NAME="880"></A>
|
---|
| 898 | <FONT CLASS="LN">81</FONT><A NAME="881"></A> <FONT CLASS="FormalComment">/**
|
---|
| 899 | <FONT CLASS="LN">82</FONT><A NAME="882"></A> * Constructor.
|
---|
| 900 | <FONT CLASS="LN">83</FONT><A NAME="883"></A> */</FONT>
|
---|
| 901 | <FONT CLASS="LN">84</FONT><A NAME="884"></A> <FONT CLASS="Public">public</FONT> ElementHandler() {
|
---|
| 902 | <FONT CLASS="LN">85</FONT><A NAME="885"></A> }
|
---|
| 903 | <FONT CLASS="LN">86</FONT><A NAME="886"></A>
|
---|
| 904 | <FONT CLASS="LN">87</FONT><A NAME="887"></A> <FONT CLASS="FormalComment">/**
|
---|
| 905 | <FONT CLASS="LN">88</FONT><A NAME="888"></A> * Initialisation routine called after handler creation
|
---|
| 906 | <FONT CLASS="LN">89</FONT><A NAME="889"></A> * with the element name and attributes. This configures
|
---|
| 907 | <FONT CLASS="LN">90</FONT><A NAME="890"></A> * the element with its attributes and sets it up with
|
---|
| 908 | <FONT CLASS="LN">91</FONT><A NAME="891"></A> * its parent container (if any). Nested elements are then
|
---|
| 909 | <FONT CLASS="LN">92</FONT><A NAME="892"></A> * added later as the parser encounters them.
|
---|
| 910 | <FONT CLASS="LN">93</FONT><A NAME="893"></A> *
|
---|
| 911 | <FONT CLASS="LN">94</FONT><A NAME="894"></A> * @param uri The namespace URI for this element.
|
---|
| 912 | <FONT CLASS="LN">95</FONT><A NAME="895"></A> * @param tag Name of the element which caused this handler
|
---|
| 913 | <FONT CLASS="LN">96</FONT><A NAME="896"></A> * to be created. Must not be <code>null</code>.
|
---|
| 914 | <FONT CLASS="LN">97</FONT><A NAME="897"></A> * @param qname The qualified name for this element.
|
---|
| 915 | <FONT CLASS="LN">98</FONT><A NAME="898"></A> * @param attrs Attributes of the element which caused this
|
---|
| 916 | <FONT CLASS="LN">99</FONT><A NAME="899"></A> * handler to be created. Must not be <code>null</code>.
|
---|
| 917 | <FONT CLASS="LN">00</FONT><A NAME="900"></A> * @param context The current context.
|
---|
| 918 | <FONT CLASS="LN">01</FONT><A NAME="901"></A> *
|
---|
| 919 | <FONT CLASS="LN">02</FONT><A NAME="902"></A> * @exception SAXParseException in case of error (not thrown in
|
---|
| 920 | <FONT CLASS="LN">03</FONT><A NAME="903"></A> * this implementation)
|
---|
| 921 | <FONT CLASS="LN">04</FONT><A NAME="904"></A> */</FONT>
|
---|
| 922 | <FONT CLASS="LN">05</FONT><A NAME="905"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> onStartElement(String uri, String tag, String qname,
|
---|
| 923 | <FONT CLASS="LN">06</FONT><A NAME="906"></A> Attributes attrs,
|
---|
| 924 | <FONT CLASS="LN">07</FONT><A NAME="907"></A> AntXMLContext context)
|
---|
| 925 | <FONT CLASS="LN">08</FONT><A NAME="908"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
|
---|
| 926 | <FONT CLASS="LN">09</FONT><A NAME="909"></A> RuntimeConfigurable parentWrapper = context.currentWrapper();
|
---|
| 927 | <FONT CLASS="LN">10</FONT><A NAME="910"></A> Object parent = <FONT CLASS="Null">null</FONT>;
|
---|
| 928 | <FONT CLASS="LN">11</FONT><A NAME="911"></A>
|
---|
| 929 | <FONT CLASS="LN">12</FONT><A NAME="912"></A> <FONT CLASS="If">if</FONT> (parentWrapper != <FONT CLASS="Null">null</FONT>) {
|
---|
| 930 | <FONT CLASS="LN">13</FONT><A NAME="913"></A> parent = parentWrapper.getProxy();
|
---|
| 931 | <FONT CLASS="LN">14</FONT><A NAME="914"></A> }
|
---|
| 932 | <FONT CLASS="LN">15</FONT><A NAME="915"></A>
|
---|
| 933 | <FONT CLASS="LN">16</FONT><A NAME="916"></A> <FONT CLASS="MultiLineComment">/* UnknownElement is used for tasks and data types - with
|
---|
| 934 | <FONT CLASS="LN">17</FONT><A NAME="917"></A> delayed eval */</FONT>
|
---|
| 935 | <FONT CLASS="LN">18</FONT><A NAME="918"></A> UnknownElement task = <FONT CLASS="New">new</FONT> UnknownElement(tag);
|
---|
| 936 | <FONT CLASS="LN">19</FONT><A NAME="919"></A> task.setProject(context.getProject());
|
---|
| 937 | <FONT CLASS="LN">20</FONT><A NAME="920"></A> task.setNamespace(uri);
|
---|
| 938 | <FONT CLASS="LN">21</FONT><A NAME="921"></A> task.setQName(qname);
|
---|
| 939 | <FONT CLASS="LN">22</FONT><A NAME="922"></A> task.setTaskType(
|
---|
| 940 | <FONT CLASS="LN">23</FONT><A NAME="923"></A> ProjectHelper.genComponentName(task.getNamespace(), tag));
|
---|
| 941 | <FONT CLASS="LN">24</FONT><A NAME="924"></A> task.setTaskName(qname);
|
---|
| 942 | <FONT CLASS="LN">25</FONT><A NAME="925"></A>
|
---|
| 943 | <FONT CLASS="LN">26</FONT><A NAME="926"></A> Location location = <FONT CLASS="New">new</FONT> Location(context.getLocator().getSystemId(),
|
---|
| 944 | <FONT CLASS="LN">27</FONT><A NAME="927"></A> context.getLocator().getLineNumber(),
|
---|
| 945 | <FONT CLASS="LN">28</FONT><A NAME="928"></A> context.getLocator().getColumnNumber());
|
---|
| 946 | <FONT CLASS="LN">29</FONT><A NAME="929"></A> task.setLocation(location);
|
---|
| 947 | <FONT CLASS="LN">30</FONT><A NAME="930"></A> task.setOwningTarget(context.getCurrentTarget());
|
---|
| 948 | <FONT CLASS="LN">31</FONT><A NAME="931"></A>
|
---|
| 949 | <FONT CLASS="LN">32</FONT><A NAME="932"></A> context.configureId(task, attrs);
|
---|
| 950 | <FONT CLASS="LN">33</FONT><A NAME="933"></A>
|
---|
| 951 | <FONT CLASS="LN">34</FONT><A NAME="934"></A> <FONT CLASS="If">if</FONT> (parent != <FONT CLASS="Null">null</FONT>) {
|
---|
| 952 | <FONT CLASS="LN">35</FONT><A NAME="935"></A> <FONT CLASS="SingleLineComment">// Nested element
|
---|
| 953 | <FONT CLASS="LN">36</FONT><A NAME="936"></A></FONT> ((UnknownElement) parent).addChild(task);
|
---|
| 954 | <FONT CLASS="LN">37</FONT><A NAME="937"></A> } <FONT CLASS="Else">else</FONT> {
|
---|
| 955 | <FONT CLASS="LN">38</FONT><A NAME="938"></A> <FONT CLASS="SingleLineComment">// Task included in a target ( including the default one ).
|
---|
| 956 | <FONT CLASS="LN">39</FONT><A NAME="939"></A></FONT> context.getCurrentTarget().addTask(task);
|
---|
| 957 | <FONT CLASS="LN">40</FONT><A NAME="940"></A> }
|
---|
| 958 | <FONT CLASS="LN">41</FONT><A NAME="941"></A>
|
---|
| 959 | <FONT CLASS="LN">42</FONT><A NAME="942"></A> <FONT CLASS="SingleLineComment">// container.addTask(task);
|
---|
| 960 | <FONT CLASS="LN">43</FONT><A NAME="943"></A></FONT> <FONT CLASS="SingleLineComment">// This is a nop in UE: task.init();
|
---|
| 961 | <FONT CLASS="LN">44</FONT><A NAME="944"></A></FONT>
|
---|
| 962 | <FONT CLASS="LN">45</FONT><A NAME="945"></A> RuntimeConfigurable wrapper
|
---|
| 963 | <FONT CLASS="LN">46</FONT><A NAME="946"></A> = <FONT CLASS="New">new</FONT> RuntimeConfigurable(task, task.getTaskName());
|
---|
| 964 | <FONT CLASS="LN">47</FONT><A NAME="947"></A>
|
---|
| 965 | <FONT CLASS="LN">48</FONT><A NAME="948"></A> <FONT CLASS="For">for</FONT> (<FONT CLASS="Int">int</FONT> i = <FONT CLASS="IntegerLiteral">0</FONT>; i < attrs.getLength(); i++) {
|
---|
| 966 | <FONT CLASS="LN">49</FONT><A NAME="949"></A> String name = attrs.getLocalName(i);
|
---|
| 967 | <FONT CLASS="LN">50</FONT><A NAME="950"></A> String attrUri = attrs.getURI(i);
|
---|
| 968 | <FONT CLASS="LN">51</FONT><A NAME="951"></A> <FONT CLASS="If">if</FONT> (attrUri != <FONT CLASS="Null">null</FONT>
|
---|
| 969 | <FONT CLASS="LN">52</FONT><A NAME="952"></A> && !attrUri.equals(<FONT CLASS="StringLiteral">""</FONT>)
|
---|
| 970 | <FONT CLASS="LN">53</FONT><A NAME="953"></A> && !attrUri.equals(uri)) {
|
---|
| 971 | <FONT CLASS="LN">54</FONT><A NAME="954"></A> name = attrUri + <FONT CLASS="StringLiteral">":"</FONT> + attrs.getQName(i);
|
---|
| 972 | <FONT CLASS="LN">55</FONT><A NAME="955"></A> }
|
---|
| 973 | <FONT CLASS="LN">56</FONT><A NAME="956"></A> String value = attrs.getValue(i);
|
---|
| 974 | <FONT CLASS="LN">57</FONT><A NAME="957"></A> <FONT CLASS="SingleLineComment">// PR: Hack for ant-type value
|
---|
| 975 | <FONT CLASS="LN">58</FONT><A NAME="958"></A></FONT> <FONT CLASS="SingleLineComment">// an ant-type is a component name which can
|
---|
| 976 | <FONT CLASS="LN">59</FONT><A NAME="959"></A></FONT> <FONT CLASS="SingleLineComment">// be namespaced, need to extract the name
|
---|
| 977 | <FONT CLASS="LN">60</FONT><A NAME="960"></A></FONT> <FONT CLASS="SingleLineComment">// and convert from qualified name to uri/name
|
---|
| 978 | <FONT CLASS="LN">61</FONT><A NAME="961"></A></FONT> <FONT CLASS="If">if</FONT> (ANT_TYPE.equals(name)
|
---|
| 979 | <FONT CLASS="LN">62</FONT><A NAME="962"></A> || (ANT_CORE_URI.equals(attrUri)
|
---|
| 980 | <FONT CLASS="LN">63</FONT><A NAME="963"></A> && ANT_TYPE.equals(attrs.getLocalName(i)))) {
|
---|
| 981 | <FONT CLASS="LN">64</FONT><A NAME="964"></A> name = ANT_TYPE;
|
---|
| 982 | <FONT CLASS="LN">65</FONT><A NAME="965"></A> <FONT CLASS="Int">int</FONT> index = value.indexOf(<FONT CLASS="StringLiteral">":"</FONT>);
|
---|
| 983 | <FONT CLASS="LN">66</FONT><A NAME="966"></A> <FONT CLASS="If">if</FONT> (index != -<FONT CLASS="IntegerLiteral">1</FONT>) {
|
---|
| 984 | <FONT CLASS="LN">67</FONT><A NAME="967"></A> String prefix = value.substring(<FONT CLASS="IntegerLiteral">0</FONT>, index);
|
---|
| 985 | <FONT CLASS="LN">68</FONT><A NAME="968"></A> String mappedUri = context.getPrefixMapping(prefix);
|
---|
| 986 | <FONT CLASS="LN">69</FONT><A NAME="969"></A> <FONT CLASS="If">if</FONT> (mappedUri == <FONT CLASS="Null">null</FONT>) {
|
---|
| 987 | <FONT CLASS="LN">70</FONT><A NAME="970"></A> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> BuildException(
|
---|
| 988 | <FONT CLASS="LN">71</FONT><A NAME="971"></A> <FONT CLASS="StringLiteral">"Unable to find XML NS prefix "</FONT> + prefix);
|
---|
| 989 | <FONT CLASS="LN">72</FONT><A NAME="972"></A> }
|
---|
| 990 | <FONT CLASS="LN">73</FONT><A NAME="973"></A> value = ProjectHelper.genComponentName(
|
---|
| 991 | <FONT CLASS="LN">74</FONT><A NAME="974"></A> mappedUri, value.substring(index + <FONT CLASS="IntegerLiteral">1</FONT>));
|
---|
| 992 | <FONT CLASS="LN">75</FONT><A NAME="975"></A> }
|
---|
| 993 | <FONT CLASS="LN">76</FONT><A NAME="976"></A> }
|
---|
| 994 | <FONT CLASS="LN">77</FONT><A NAME="977"></A> wrapper.setAttribute(name, value);
|
---|
| 995 | <FONT CLASS="LN">78</FONT><A NAME="978"></A> }
|
---|
| 996 | <FONT CLASS="LN">79</FONT><A NAME="979"></A>
|
---|
| 997 | <FONT CLASS="LN">80</FONT><A NAME="980"></A> <FONT CLASS="If">if</FONT> (parentWrapper != <FONT CLASS="Null">null</FONT>) {
|
---|
| 998 | <FONT CLASS="LN">81</FONT><A NAME="981"></A> parentWrapper.addChild(wrapper);
|
---|
| 999 | <FONT CLASS="LN">82</FONT><A NAME="982"></A> }
|
---|
| 1000 | <FONT CLASS="LN">83</FONT><A NAME="983"></A>
|
---|
| 1001 | <FONT CLASS="LN">84</FONT><A NAME="984"></A> context.pushWrapper(wrapper);
|
---|
| 1002 | <FONT CLASS="LN">85</FONT><A NAME="985"></A> }
|
---|
| 1003 | <FONT CLASS="LN">86</FONT><A NAME="986"></A>
|
---|
| 1004 | <FONT CLASS="LN">87</FONT><A NAME="987"></A> <FONT CLASS="FormalComment">/**
|
---|
| 1005 | <FONT CLASS="LN">88</FONT><A NAME="988"></A> * Adds text to the task, using the wrapper
|
---|
| 1006 | <FONT CLASS="LN">89</FONT><A NAME="989"></A> *
|
---|
| 1007 | <FONT CLASS="LN">90</FONT><A NAME="990"></A> * @param buf A character array of the text within the element.
|
---|
| 1008 | <FONT CLASS="LN">91</FONT><A NAME="991"></A> * Will not be <code>null</code>.
|
---|
| 1009 | <FONT CLASS="LN">92</FONT><A NAME="992"></A> * @param start The start element in the array.
|
---|
| 1010 | <FONT CLASS="LN">93</FONT><A NAME="993"></A> * @param count The number of characters to read from the array.
|
---|
| 1011 | <FONT CLASS="LN">94</FONT><A NAME="994"></A> * @param context The current context.
|
---|
| 1012 | <FONT CLASS="LN">95</FONT><A NAME="995"></A> *
|
---|
| 1013 | <FONT CLASS="LN">96</FONT><A NAME="996"></A> * @exception SAXParseException if the element doesn't support text
|
---|
| 1014 | <FONT CLASS="LN">97</FONT><A NAME="997"></A> *
|
---|
| 1015 | <FONT CLASS="LN">98</FONT><A NAME="998"></A> * @see ProjectHelper#addText(Project,java.lang.Object,char[],int,int)
|
---|
| 1016 | <FONT CLASS="LN">99</FONT><A NAME="999"></A> */</FONT>
|
---|
| 1017 | <FONT CLASS="LN">00</FONT><A NAME="1000"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> characters(<FONT CLASS="Char">char</FONT>[] buf, <FONT CLASS="Int">int</FONT> start, <FONT CLASS="Int">int</FONT> count,
|
---|
| 1018 | <FONT CLASS="LN">01</FONT><A NAME="1001"></A> AntXMLContext context)
|
---|
| 1019 | <FONT CLASS="LN">02</FONT><A NAME="1002"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
|
---|
| 1020 | <FONT CLASS="LN">03</FONT><A NAME="1003"></A> RuntimeConfigurable wrapper = context.currentWrapper();
|
---|
| 1021 | <FONT CLASS="LN">04</FONT><A NAME="1004"></A> wrapper.addText(buf, start, count);
|
---|
| 1022 | <FONT CLASS="LN">05</FONT><A NAME="1005"></A> }
|
---|
| 1023 | <FONT CLASS="LN">06</FONT><A NAME="1006"></A>
|
---|
| 1024 | <FONT CLASS="LN">07</FONT><A NAME="1007"></A> <FONT CLASS="FormalComment">/**
|
---|
| 1025 | <FONT CLASS="LN">08</FONT><A NAME="1008"></A> * Handles the start of an element within a target. Task containers
|
---|
| 1026 | <FONT CLASS="LN">09</FONT><A NAME="1009"></A> * will always use another task handler, and all other tasks
|
---|
| 1027 | <FONT CLASS="LN">10</FONT><A NAME="1010"></A> * will always use a nested element handler.
|
---|
| 1028 | <FONT CLASS="LN">11</FONT><A NAME="1011"></A> *
|
---|
| 1029 | <FONT CLASS="LN">12</FONT><A NAME="1012"></A> * @param uri The namespace URI for this element.
|
---|
| 1030 | <FONT CLASS="LN">13</FONT><A NAME="1013"></A> * @param tag The name of the element being started.
|
---|
| 1031 | <FONT CLASS="LN">14</FONT><A NAME="1014"></A> * Will not be <code>null</code>.
|
---|
| 1032 | <FONT CLASS="LN">15</FONT><A NAME="1015"></A> * @param qname The qualified name for this element.
|
---|
| 1033 | <FONT CLASS="LN">16</FONT><A NAME="1016"></A> * @param attrs Attributes of the element being started.
|
---|
| 1034 | <FONT CLASS="LN">17</FONT><A NAME="1017"></A> * Will not be <code>null</code>.
|
---|
| 1035 | <FONT CLASS="LN">18</FONT><A NAME="1018"></A> * @param context The current context.
|
---|
| 1036 | <FONT CLASS="LN">19</FONT><A NAME="1019"></A> * @return The handler for elements.
|
---|
| 1037 | <FONT CLASS="LN">20</FONT><A NAME="1020"></A> *
|
---|
| 1038 | <FONT CLASS="LN">21</FONT><A NAME="1021"></A> * @exception SAXParseException if an error occurs when initialising
|
---|
| 1039 | <FONT CLASS="LN">22</FONT><A NAME="1022"></A> * the appropriate child handler
|
---|
| 1040 | <FONT CLASS="LN">23</FONT><A NAME="1023"></A> */</FONT>
|
---|
| 1041 | <FONT CLASS="LN">24</FONT><A NAME="1024"></A> <FONT CLASS="Public">public</FONT> AntHandler onStartChild(String uri, String tag, String qname,
|
---|
| 1042 | <FONT CLASS="LN">25</FONT><A NAME="1025"></A> Attributes attrs,
|
---|
| 1043 | <FONT CLASS="LN">26</FONT><A NAME="1026"></A> AntXMLContext context)
|
---|
| 1044 | <FONT CLASS="LN">27</FONT><A NAME="1027"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
|
---|
| 1045 | <FONT CLASS="LN">28</FONT><A NAME="1028"></A> <FONT CLASS="Return">return</FONT> ProjectHelper3.elementHandler;
|
---|
| 1046 | <FONT CLASS="LN">29</FONT><A NAME="1029"></A> }
|
---|
| 1047 | <FONT CLASS="LN">30</FONT><A NAME="1030"></A>
|
---|
| 1048 | <FONT CLASS="LN">31</FONT><A NAME="1031"></A> <FONT CLASS="FormalComment">/**
|
---|
| 1049 | <FONT CLASS="LN">32</FONT><A NAME="1032"></A> * Handles the end of the element. This pops the wrapper from
|
---|
| 1050 | <FONT CLASS="LN">33</FONT><A NAME="1033"></A> * the context.
|
---|
| 1051 | <FONT CLASS="LN">34</FONT><A NAME="1034"></A> *
|
---|
| 1052 | <FONT CLASS="LN">35</FONT><A NAME="1035"></A> * @param uri The namespace URI for the element.
|
---|
| 1053 | <FONT CLASS="LN">36</FONT><A NAME="1036"></A> * @param tag The name of the element.
|
---|
| 1054 | <FONT CLASS="LN">37</FONT><A NAME="1037"></A> * @param context The current context.
|
---|
| 1055 | <FONT CLASS="LN">38</FONT><A NAME="1038"></A> */</FONT>
|
---|
| 1056 | <FONT CLASS="LN">39</FONT><A NAME="1039"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> onEndElement(String uri, String tag, AntXMLContext context) {
|
---|
| 1057 | <FONT CLASS="LN">40</FONT><A NAME="1040"></A> context.popWrapper();
|
---|
| 1058 | <FONT CLASS="LN">41</FONT><A NAME="1041"></A> }
|
---|
| 1059 | <FONT CLASS="LN">42</FONT><A NAME="1042"></A> }
|
---|
| 1060 | <FONT CLASS="LN">43</FONT><A NAME="1043"></A>}
|
---|
| 1061 | <FONT CLASS="LN">44</FONT><A NAME="1044"></A></pre>
|
---|
| 1062 | </BODY>
|
---|
| 1063 | </HTML> |
---|