[CVS jcontainer] Renamed org.jcontainer.loom -> org.codehaus.loom

mauro-yCVjj/[email protected] Mon, 19 Apr 2004 17:19:30 -0500
Newsgroups gmane.comp.java.jcontainer.cvs
Message-ID <[email protected]>
<html>
<head>
<style><!--
  body {background-color:#ffffff;}
  .file {border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;}
  .pathname {font-family:monospace; float:right;}
  .fileheader {margin-bottom:.5em;}
  .diff {margin:0;}
  .tasklist {padding:4px;border:1px dashed #000000;margin-top:1em;}
  .tasklist ul {margin-top:0;margin-bottom:0;}
  tr.alt {background-color:#eeeeee}
  #added {background-color:#ddffdd;}
  #addedchars {background-color:#99ff99;font-weight:bolder;}
  tr.alt #added {background-color:#ccf7cc;}
  #removed {background-color:#ffdddd;}
  #removedchars {background-color:#ff9999;font-weight:bolder;}
  tr.alt #removed {background-color:#f7cccc;}
  #info {color:#888888;}
  #context {background-color:#eeeeee;}
  td {padding-left:.3em;padding-right:.3em;}
  tr.head {border-bottom-width:1px;border-bottom-style:solid;}
  tr.head td {padding:0;padding-top:.2em;}
  .task {background-color:#ffff00;}
  .comment {padding:4px;border:1px dashed #000000;background-color:#ffffdd}
  .error {color:red;}
  hr {border-width:0px;height:2px;background:black;}
--></style>
</head>
<body>
<table cellspacing="0" cellpadding="0" border="0" rules="cols">
<tr class="head"><td colspan="4">Commit in <b><tt>jcontainer/loom/support/classman</tt></b><span id="info"> on MAIN</span></td></tr>
<tr><td><tt>src/test/org/codehaus/loom/classman/reader/test/<a href="#file1"><span id="added">config5.xml</span></a></tt></td><td align="right" id="added">+14</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/reader/test/config5.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file2"><span id="added">config3.xml</span></a></tt></td><td align="right" id="added">+4</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/reader/test/config3.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file3"><span id="added">ReaderTestCase.java</span></a></tt></td><td align="right" id="added">+187</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/reader/test/ReaderTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file4"><span id="added">config2.xml</span></a></tt></td><td align="right" id="added">+4</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/reader/test/config2.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file5"><span id="added">config1.xml</span></a></tt></td><td align="right" id="added">+35</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/reader/test/config1.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file6"><span id="added">config4.xml</span></a></tt></td><td align="right" id="added">+4</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/reader/test/config4.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr><td><tt><a href="#file7">maven.xml</a></tt></td><td align="right" id="added">+1</td><td align="right" id="removed">-1</td><td nowrap="nowrap" align="center"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/maven.xml?rev=1.7&amp;content-type=text/vnd.viewcvs-markup">1.7</a> <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/maven.xml.diff?r1=1.7&amp;r2=1.8">-&gt;</a> <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/maven.xml?rev=1.8&amp;content-type=text/vnd.viewcvs-markup">1.8</a></td></tr>
<tr class="alt"><td><tt><a href="#file8">project.xml</a></tt></td><td align="right" id="added">+1</td><td align="right" id="removed">-1</td><td nowrap="nowrap" align="center"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/project.xml?rev=1.17&amp;content-type=text/vnd.viewcvs-markup">1.17</a> <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/project.xml.diff?r1=1.17&amp;r2=1.18">-&gt;</a> <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/project.xml?rev=1.18&amp;content-type=text/vnd.viewcvs-markup">1.18</a></td></tr>
<tr><td><tt>src/java/org/jcontainer/loom/classman/metadata/<a href="#file9"><span id="removed">FileSetMetaData.java</span></a></tt></td><td></td><td align="right" id="removed">-81</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/metadata/FileSetMetaData.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file10"><span id="removed">ClassLoaderSetMetaData.java</span></a></tt></td><td></td><td align="right" id="removed">-159</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/metadata/ClassLoaderSetMetaData.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file11"><span id="removed">ClassLoaderMetaData.java</span></a></tt></td><td></td><td align="right" id="removed">-101</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/metadata/ClassLoaderMetaData.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file12"><span id="removed">JoinMetaData.java</span></a></tt></td><td></td><td align="right" id="removed">-59</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/metadata/JoinMetaData.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr><td><tt>src/java/org/jcontainer/loom/classman/reader/<a href="#file13"><span id="removed">ClassLoaderSetReader.java</span></a></tt></td><td></td><td align="right" id="removed">-1</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/reader/ClassLoaderSetReader.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file14"><span id="removed">classloader.dtd</span></a></tt></td><td></td><td align="right" id="removed">-138</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/reader/classloader.dtd?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr><td><tt>src/test/org/codehaus/loom/classman/verifier/test/<a href="#file15"><span id="added">config12.xml</span></a></tt></td><td align="right" id="added">+6</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config12.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file16"><span id="added">config13.xml</span></a></tt></td><td align="right" id="added">+5</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config13.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file17"><span id="added">config7.xml</span></a></tt></td><td align="right" id="added">+9</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config7.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file18"><span id="added">config5.xml</span></a></tt></td><td align="right" id="added">+4</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config5.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file19"><span id="added">config3.xml</span></a></tt></td><td align="right" id="added">+6</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config3.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file20"><span id="added">config15.xml</span></a></tt></td><td align="right" id="added">+7</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config15.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file21"><span id="added">config8.xml</span></a></tt></td><td align="right" id="added">+7</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config8.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file22"><span id="added">config17.xml</span></a></tt></td><td align="right" id="added">+35</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config17.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file23"><span id="added">config1.xml</span></a></tt></td><td align="right" id="added">+7</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config1.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file24"><span id="added">config11.xml</span></a></tt></td><td align="right" id="added">+7</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config11.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file25"><span id="added">VerifierTestCase.java</span></a></tt></td><td align="right" id="added">+316</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/VerifierTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file26"><span id="added">config2.xml</span></a></tt></td><td align="right" id="added">+7</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config2.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file27"><span id="added">config4.xml</span></a></tt></td><td align="right" id="added">+8</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config4.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file28"><span id="added">config16.xml</span></a></tt></td><td align="right" id="added">+5</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config16.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file29"><span id="added">config6.xml</span></a></tt></td><td align="right" id="added">+9</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config6.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file30"><span id="added">config14.xml</span></a></tt></td><td align="right" id="added">+7</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config14.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file31"><span id="added">config9.xml</span></a></tt></td><td align="right" id="added">+8</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config9.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file32"><span id="added">config10.xml</span></a></tt></td><td align="right" id="added">+6</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config10.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr><td><tt>src/test/org/jcontainer/loom/classman/verifier/test/<a href="#file33"><span id="removed">config11.xml</span></a></tt></td><td></td><td align="right" id="removed">-7</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config11.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file34"><span id="removed">config15.xml</span></a></tt></td><td></td><td align="right" id="removed">-7</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config15.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file35"><span id="removed">config10.xml</span></a></tt></td><td></td><td align="right" id="removed">-6</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config10.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file36"><span id="removed">config4.xml</span></a></tt></td><td></td><td align="right" id="removed">-8</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config4.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file37"><span id="removed">config13.xml</span></a></tt></td><td></td><td align="right" id="removed">-5</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config13.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file38"><span id="removed">config1.xml</span></a></tt></td><td></td><td align="right" id="removed">-7</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config1.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file39"><span id="removed">config9.xml</span></a></tt></td><td></td><td align="right" id="removed">-8</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config9.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file40"><span id="removed">config14.xml</span></a></tt></td><td></td><td align="right" id="removed">-7</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config14.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file41"><span id="removed">config8.xml</span></a></tt></td><td></td><td align="right" id="removed">-7</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config8.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file42"><span id="removed">config2.xml</span></a></tt></td><td></td><td align="right" id="removed">-7</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config2.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file43"><span id="removed">config5.xml</span></a></tt></td><td></td><td align="right" id="removed">-4</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config5.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file44"><span id="removed">config12.xml</span></a></tt></td><td></td><td align="right" id="removed">-6</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config12.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file45"><span id="removed">VerifierTestCase.java</span></a></tt></td><td></td><td align="right" id="removed">-316</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/VerifierTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file46"><span id="removed">config17.xml</span></a></tt></td><td></td><td align="right" id="removed">-35</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config17.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file47"><span id="removed">config3.xml</span></a></tt></td><td></td><td align="right" id="removed">-6</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config3.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file48"><span id="removed">config7.xml</span></a></tt></td><td></td><td align="right" id="removed">-9</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config7.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file49"><span id="removed">config6.xml</span></a></tt></td><td></td><td align="right" id="removed">-9</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config6.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file50"><span id="removed">config16.xml</span></a></tt></td><td></td><td align="right" id="removed">-5</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config16.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr><td><tt>src/test/org/codehaus/loom/classman/test/<a href="#file51"><span id="added">config1.xml</span></a></tt></td><td align="right" id="added">+43</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/test/config1.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file52"><span id="added">DataConstants.java</span></a></tt></td><td align="right" id="added">+28</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/test/DataConstants.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file53"><span id="added">AbstractLoaderTestCase.java</span></a></tt></td><td align="right" id="added">+82</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/test/AbstractLoaderTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file54"><span id="added">IntegrationTestCase.java</span></a></tt></td><td align="right" id="added">+142</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/test/IntegrationTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr><td><tt>src/testdata/org/codehaus/loom/classman/test/data/cl1/<a href="#file55"><span id="added">Resource.properties</span></a></tt></td><td align="right" id="added">+1</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test/data/cl1/Resource.properties?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file56"><span id="added">Data2.java</span></a></tt></td><td align="right" id="added">+18</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test/data/cl1/Data2.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file57"><span id="added">Data1.java</span></a></tt></td><td align="right" id="added">+17</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test/data/cl1/Data1.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr class="alt"><td><tt>src/testdata/org/jcontainer/loom/classman/test/data/cl1/<a href="#file58"><span id="removed">Data1.java</span></a></tt></td><td></td><td align="right" id="removed">-17</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test/data/cl1/Data1.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file59"><span id="removed">Data2.java</span></a></tt></td><td></td><td align="right" id="removed">-18</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test/data/cl1/Data2.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file60"><span id="removed">Resource.properties</span></a></tt></td><td></td><td align="right" id="removed">-1</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test/data/cl1/Resource.properties?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr><td><tt>src/testdata/org/jcontainer/loom/classman/test/data/cl3/<a href="#file61"><span id="removed">CL3Data.java</span></a></tt></td><td></td><td align="right" id="removed">-20</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test/data/cl3/CL3Data.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr class="alt"><td><tt>src/test/org/jcontainer/loom/classman/runtime/test/<a href="#file62"><span id="removed">JoinClassLoaderTestCase.java</span></a></tt></td><td></td><td align="right" id="removed">-141</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/runtime/test/JoinClassLoaderTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr><td><tt>src/test/org/codehaus/loom/classman/builder/test/<a href="#file63"><span id="added">TestLoaderResolver.java</span></a></tt></td><td align="right" id="added">+51</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/builder/test/TestLoaderResolver.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file64"><span id="added">SimpleLoaderResolverTestCase.java</span></a></tt></td><td align="right" id="added">+46</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/builder/test/SimpleLoaderResolverTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file65"><span id="added">LoaderBuilderTestCase.java</span></a></tt></td><td align="right" id="added">+112</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/builder/test/LoaderBuilderTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr class="alt"><td><tt>src/java/org/codehaus/loom/classman/metadata/<a href="#file66"><span id="added">ClassLoaderMetaData.java</span></a></tt></td><td align="right" id="added">+101</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/metadata/ClassLoaderMetaData.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file67"><span id="added">ClassLoaderSetMetaData.java</span></a></tt></td><td align="right" id="added">+159</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/metadata/ClassLoaderSetMetaData.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file68"><span id="added">FileSetMetaData.java</span></a></tt></td><td align="right" id="added">+81</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/metadata/FileSetMetaData.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file69"><span id="added">JoinMetaData.java</span></a></tt></td><td align="right" id="added">+59</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/metadata/JoinMetaData.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr class="alt"><td><tt>src/java/org/codehaus/loom/classman/builder/<a href="#file70"><span id="added">LoaderResolver.java</span></a></tt></td><td align="right" id="added">+1</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/builder/LoaderResolver.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file71"><span id="added">LoaderBuilder.java</span></a></tt></td><td align="right" id="added">+1</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/builder/LoaderBuilder.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file72"><span id="added">SimpleLoaderResolver.java</span></a></tt></td><td align="right" id="added">+1</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/builder/SimpleLoaderResolver.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file73"><span id="added">Resources.properties</span></a></tt></td><td align="right" id="added">+8</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/builder/Resources.properties?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr class="alt"><td><tt>src/test/org/jcontainer/loom/classman/reader/test/<a href="#file74"><span id="removed">config4.xml</span></a></tt></td><td></td><td align="right" id="removed">-4</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/reader/test/config4.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file75"><span id="removed">config5.xml</span></a></tt></td><td></td><td align="right" id="removed">-14</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/reader/test/config5.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file76"><span id="removed">config1.xml</span></a></tt></td><td></td><td align="right" id="removed">-35</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/reader/test/config1.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file77"><span id="removed">config2.xml</span></a></tt></td><td></td><td align="right" id="removed">-4</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/reader/test/config2.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file78"><span id="removed">config3.xml</span></a></tt></td><td></td><td align="right" id="removed">-4</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/reader/test/config3.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file79"><span id="removed">ReaderTestCase.java</span></a></tt></td><td></td><td align="right" id="removed">-187</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/reader/test/ReaderTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr class="alt"><td><tt>src/test/org/jcontainer/loom/classman/builder/test/<a href="#file80"><span id="removed">TestLoaderResolver.java</span></a></tt></td><td></td><td align="right" id="removed">-50</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/builder/test/TestLoaderResolver.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file81"><span id="removed">SimpleLoaderResolverTestCase.java</span></a></tt></td><td></td><td align="right" id="removed">-45</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/builder/test/SimpleLoaderResolverTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file82"><span id="removed">LoaderBuilderTestCase.java</span></a></tt></td><td></td><td align="right" id="removed">-111</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/builder/test/LoaderBuilderTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr><td><tt>src/java/org/codehaus/loom/classman/reader/<a href="#file83"><span id="added">classloader.dtd</span></a></tt></td><td align="right" id="added">+138</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/reader/classloader.dtd?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file84"><span id="added">ClassLoaderSetReader.java</span></a></tt></td><td align="right" id="added">+1</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/reader/ClassLoaderSetReader.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr><td><tt>src/testdata/org/jcontainer/loom/classman/test/data/cl2/<a href="#file85"><span id="removed">CL2Data.java</span></a></tt></td><td></td><td align="right" id="removed">-17</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test/data/cl2/CL2Data.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr class="alt"><td><tt>src/java/org/jcontainer/loom/classman/builder/<a href="#file86"><span id="removed">LoaderBuilder.java</span></a></tt></td><td></td><td align="right" id="removed">-1</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/builder/LoaderBuilder.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file87"><span id="removed">Resources.properties</span></a></tt></td><td></td><td align="right" id="removed">-8</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/builder/Resources.properties?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file88"><span id="removed">SimpleLoaderResolver.java</span></a></tt></td><td></td><td align="right" id="removed">-1</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/builder/SimpleLoaderResolver.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file89"><span id="removed">LoaderResolver.java</span></a></tt></td><td></td><td align="right" id="removed">-1</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/builder/LoaderResolver.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr class="alt"><td><tt>src/testdata/org/codehaus/loom/classman/test/data/cl3/<a href="#file90"><span id="added">CL3Data.java</span></a></tt></td><td align="right" id="added">+20</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test/data/cl3/CL3Data.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr><td><tt>src/java/org/jcontainer/loom/classman/runtime/<a href="#file91"><span id="removed">JoinClassLoader.java</span></a></tt></td><td></td><td align="right" id="removed">-157</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/runtime/JoinClassLoader.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr class="alt"><td><tt>src/test/org/jcontainer/loom/classman/test/<a href="#file92"><span id="removed">AbstractLoaderTestCase.java</span></a></tt></td><td></td><td align="right" id="removed">-81</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/test/AbstractLoaderTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file93"><span id="removed">IntegrationTestCase.java</span></a></tt></td><td></td><td align="right" id="removed">-141</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/test/IntegrationTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file94"><span id="removed">config1.xml</span></a></tt></td><td></td><td align="right" id="removed">-43</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/test/config1.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file95"><span id="removed">DataConstants.java</span></a></tt></td><td></td><td align="right" id="removed">-28</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/test/DataConstants.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr class="alt"><td><tt>src/java/org/codehaus/loom/classman/runtime/<a href="#file96"><span id="added">JoinClassLoader.java</span></a></tt></td><td align="right" id="added">+157</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/runtime/JoinClassLoader.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr><td><tt>src/test/org/jcontainer/loom/classman/metadata/test/<a href="#file97"><span id="removed">MetaDataTestCase.java</span></a></tt></td><td></td><td align="right" id="removed">-120</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/metadata/test/MetaDataTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr class="alt"><td><tt>src/java/org/codehaus/loom/classman/verifier/<a href="#file98"><span id="added">ClassLoaderVerifier.java</span></a></tt></td><td align="right" id="added">+490</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/verifier/ClassLoaderVerifier.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file99"><span id="added">Resources.properties</span></a></tt></td><td align="right" id="added">+22</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/verifier/Resources.properties?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr class="alt"><td><tt>src/test/org/codehaus/loom/classman/metadata/test/<a href="#file100"><span id="added">MetaDataTestCase.java</span></a></tt></td><td align="right" id="added">+121</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/metadata/test/MetaDataTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr><td><tt>src/java/org/jcontainer/loom/classman/verifier/<a href="#file101"><span id="removed">ClassLoaderVerifier.java</span></a></tt></td><td></td><td align="right" id="removed">-490</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/verifier/ClassLoaderVerifier.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file102"><span id="removed">Resources.properties</span></a></tt></td><td></td><td align="right" id="removed">-22</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/verifier/Resources.properties?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr><td><tt>src/testdata/org/codehaus/loom/classman/test/data/cl4/<a href="#file103"><span id="added">CL4Data.java</span></a></tt></td><td align="right" id="added">+17</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test/data/cl4/CL4Data.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr class="alt"><td><tt>src/test/org/codehaus/loom/classman/runtime/test/<a href="#file104"><span id="added">JoinClassLoaderTestCase.java</span></a></tt></td><td align="right" id="added">+142</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/runtime/test/JoinClassLoaderTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr><td><tt>src/testdata/org/codehaus/loom/classman/test/data/cl2/<a href="#file105"><span id="added">CL2Data.java</span></a></tt></td><td align="right" id="added">+17</td><td></td><td nowrap="nowrap" align="right">added <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test/data/cl2/CL2Data.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></td></tr>
<tr class="alt"><td><tt>src/testdata/org/jcontainer/loom/classman/test/data/cl4/<a href="#file106"><span id="removed">CL4Data.java</span></a></tt></td><td></td><td align="right" id="removed">-17</td><td nowrap="nowrap"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test/data/cl4/CL4Data.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a> removed</td></tr>
<tr><td></td><td align="right" id="added">+2785</td><td align="right" id="removed">-2778</td><td></td></tr>
</table>
<small id="info">52 added + 52 removed + 2 modified, total 106 files</small><br />
<div class="tasklist"><ul>
<li><a href="#task1">TODO: Verify that the joins form a directed graph with no loops</a></li>
</ul></div>
<pre class="comment">
Renamed org.jcontainer.loom -&gt; org.codehaus.loom
</pre>
<hr /><a name="file1" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/reader">reader</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/reader/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>config5.xml</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/reader/test/config5.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config5.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ config5.xml	19 Apr 2004 22:19:23 -0000	1.1
@@ -0,0 +1,14 @@
</small></pre><pre class="diff" id="added">+&lt;classloaders default="cl1" version="1.0"&gt;
+    &lt;predefined name="*system*"/&gt;
+
+    &lt;classloader name="cl1" parent="*system*"&gt;
+        &lt;extension
+            specification-version="4.1"
+            specification-vendor="Apache"
+            implementation-version="4.1"
+            implementation-vendor="Apache"
+            implementation-vendor-id="Apache"
+            implementation-url="http://jakarta..."/&gt;
+    &lt;/classloader&gt;
+
+&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file2" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/reader">reader</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/reader/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>config3.xml</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/reader/test/config3.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config3.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ config3.xml	19 Apr 2004 22:19:23 -0000	1.1
@@ -0,0 +1,4 @@
</small></pre><pre class="diff" id="added">+&lt;classloaders default="*system*"&gt;
+    &lt;predefined name="*system*"/&gt;
+
+&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file3" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/reader">reader</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/reader/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>ReaderTestCase.java</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/reader/test/ReaderTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N ReaderTestCase.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ReaderTestCase.java	19 Apr 2004 22:19:23 -0000	1.1
@@ -0,0 +1,187 @@
</small></pre><pre class="diff" id="added">+/*
+ * Copyright (C) The Spice Group. All rights reserved.
+ *
+ * This software is published under the terms of the Spice
+ * Software License version 1.1, a copy of which has been included
+ * with this distribution in the LICENSE.txt file.
+ */
+package org.codehaus.loom.classman.reader.test;
+
+import org.codehaus.loom.classman.metadata.ClassLoaderSetMetaData;
+import org.codehaus.loom.classman.test.AbstractLoaderTestCase;
+
+/**
+ * TestCase for {@link org.codehaus.loom.classman.reader.ClassLoaderSetReader}.
+ *
+ * @author Peter Donald
+ */
+public class ReaderTestCase
+    extends AbstractLoaderTestCase
+{
+    public void testConfig1()
+        throws Exception
+    {
+        final ClassLoaderSetMetaData defs =
+            buildFromResource( "config1.xml" );
+
+        assertEquals( "ClassLoader Predefined Count",
+                      1,
+                      defs.getPredefined().length );
+        assertEquals( "ClassLoader Predefined",
+                      "*system*",
+                      defs.getPredefined()[ 0 ] );
+        assertEquals( "ClassLoader Default",
+                      "join2",
+                      defs.getDefault() );
+        assertEquals( "ClassLoader Count",
+                      2,
+                      defs.getClassLoaders().length );
+        assertEquals( "Join Count",
+                      2,
+                      defs.getJoins().length );
+        assertNotNull( "ClassLoader cl1",
+                       defs.getClassLoader( "cl1" ) );
+        assertNotNull( "ClassLoader cl2",
+                       defs.getClassLoader( "cl2" ) );
+        assertNotNull( "Join join1",
+                       defs.getJoin( "join1" ) );
+        assertNotNull( "Join join2",
+                       defs.getJoin( "join2" ) );
+
+        assertEquals( "ClassLoader cl1.entrys Name",
+                      defs.getClassLoader( "cl1" ).getName(),
+                      "cl1" );
+        assertEquals( "ClassLoader cl1.entrys Count",
+                      defs.getClassLoader( "cl1" ).getEntrys().length,
+                      2 );
+        assertEquals( "ClassLoader cl1.filesets Count",
+                      defs.getClassLoader( "cl1" ).getFilesets().length,
+                      1 );
+        assertEquals( "ClassLoader cl1.extensions Count",
+                      defs.getClassLoader( "cl1" ).getExtensions().length,
+                      1 );
+        assertEquals( "ClassLoader cl1.fileset[0] Dir",
+                      defs.getClassLoader( "cl1" ).getFilesets()[ 0 ].getBaseDirectory(),
+                      "someDir" );
+        assertEquals( "ClassLoader cl1.fileset[0] Include count",
+                      defs.getClassLoader( "cl1" ).getFilesets()[ 0 ].getIncludes().length,
+                      2 );
+        assertEquals( "ClassLoader cl1.fileset[0] Exclude count",
+                      defs.getClassLoader( "cl1" ).getFilesets()[ 0 ].getExcludes().length,
+                      1 );
+        assertEquals( "ClassLoader cl1.fileset[0].include[0] name",
+                      defs.getClassLoader( "cl1" ).getFilesets()[ 0 ].getIncludes()[ 0 ],
+                      "**/*.jar" );
+        assertEquals( "ClassLoader cl1.fileset[0].include[1] name",
+                      defs.getClassLoader( "cl1" ).getFilesets()[ 0 ].getIncludes()[ 1 ],
+                      "**/*.bar" );
+        assertEquals( "ClassLoader cl1.fileset[0].exclude[0] name",
+                      defs.getClassLoader( "cl1" ).getFilesets()[ 0 ].getExcludes()[ 0 ],
+                      "**/unwanted/*" );
+        assertEquals( "ClassLoader cl1.entrys[0] Location",
+                      defs.getClassLoader( "cl1" ).getEntrys()[ 0 ],
+                      "someFile.jar" );
+        assertEquals( "ClassLoader cl1.entrys[1] Location",
+                      defs.getClassLoader( "cl1" ).getEntrys()[ 1 ],
+                      "someOtherFile.jar" );
+
+        assertEquals( "ClassLoader cl2.entrys Name",
+                      defs.getClassLoader( "cl2" ).getName(),
+                      "cl2" );
+        assertEquals( "ClassLoader cl2.entrys Count",
+                      defs.getClassLoader( "cl2" ).getEntrys().length,
+                      1 );
+        assertEquals( "ClassLoader cl2.filesets Count",
+                      defs.getClassLoader( "cl2" ).getFilesets().length,
+                      0 );
+        assertEquals( "ClassLoader cl2.extensions Count",
+                      defs.getClassLoader( "cl2" ).getExtensions().length,
+                      0 );
+        assertEquals( "ClassLoader cl2.entrys[0] Location",
+                      defs.getClassLoader( "cl2" ).getEntrys()[ 0 ],
+                      "aFile.jar" );
+
+        assertEquals( "Join join1.refs Name",
+                      defs.getJoin( "join1" ).getName(),
+                      "join1" );
+        assertEquals( "Join join1.refs Count",
+                      defs.getJoin( "join1" ).getClassloaders().length,
+                      1 );
+        assertEquals( "Join join1.refs[0] Name",
+                      defs.getJoin( "join1" ).getClassloaders()[ 0 ],
+                      "cl1" );
+
+        assertEquals( "Join join2.refs Name",
+                      defs.getJoin( "join2" ).getName(),
+                      "join2" );
+        assertEquals( "Join join2.refs Count",
+                      defs.getJoin( "join2" ).getClassloaders().length,
+                      2 );
+        assertEquals( "Join join2.refs[0] Name",
+                      defs.getJoin( "join2" ).getClassloaders()[ 0 ],
+                      "cl1" );
+        assertEquals( "Join join2.refs[1] Name",
+                      defs.getJoin( "join2" ).getClassloaders()[ 1 ],
+                      "cl2" );
+    }
+
+    public void testConfig2()
+        throws Exception
+    {
+        try
+        {
+            buildFromResource( "config2.xml" );
+        }
+        catch( final Throwable t )
+        {
+            return;
+        }
+        fail( "Should have failed as loaded a " +
+              "configuration with no default set" );
+    }
+
+    public void testConfig3()
+        throws Exception
+    {
+        try
+        {
+            buildFromResource( "config3.xml" );
+        }
+        catch( final Throwable t )
+        {
+            return;
+        }
+        fail( "Should have failed as loaded a " +
+              "configuration with no version set" );
+    }
+
+    public void testConfig4()
+        throws Exception
+    {
+        try
+        {
+            buildFromResource( "config4.xml" );
+        }
+        catch( final Throwable t )
+        {
+            return;
+        }
+        fail( "Should have failed as loaded a " +
+              "configuration with bad version" );
+    }
+
+    public void testConfig5()
+        throws Exception
+    {
+        try
+        {
+            buildFromResource( "config5.xml" );
+        }
+        catch( final Throwable t )
+        {
+            return;
+        }
+        fail( "Should have failed as loaded a " +
+              "configuration with extension with null name" );
+    }
+}
</pre></div>
<hr /><a name="file4" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/reader">reader</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/reader/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>config2.xml</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/reader/test/config2.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config2.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ config2.xml	19 Apr 2004 22:19:23 -0000	1.1
@@ -0,0 +1,4 @@
</small></pre><pre class="diff" id="added">+&lt;classloaders version="1.0"&gt;
+    &lt;predefined name="*system*"/&gt;
+
+&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file5" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/reader">reader</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/reader/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>config1.xml</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/reader/test/config1.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config1.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ config1.xml	19 Apr 2004 22:19:23 -0000	1.1
@@ -0,0 +1,35 @@
</small></pre><pre class="diff" id="added">+&lt;classloaders default="join2" version="1.0"&gt;
+    &lt;predefined name="*system*"/&gt;
+
+    &lt;classloader name="cl1" parent="*system*"&gt;
+        &lt;entry location="someFile.jar"/&gt;
+        &lt;entry location="someOtherFile.jar"/&gt;
+        &lt;fileset dir="someDir"&gt;
+            &lt;include name="**/*.jar"/&gt;
+            &lt;include name="**/*.bar"/&gt;
+            &lt;exclude name="**/unwanted/*"/&gt;
+        &lt;/fileset&gt;
+        &lt;extension
+            name="Avalon.Framework"
+            specification-version="4.1"
+            specification-vendor="Apache"
+            implementation-version="4.1"
+            implementation-vendor="Apache"
+            implementation-vendor-id="Apache"
+            implementation-url="http://jakarta..." /&gt;
+    &lt;/classloader&gt;
+
+    &lt;classloader name="cl2" parent="*system*"&gt;
+        &lt;entry location="aFile.jar"/&gt;
+    &lt;/classloader&gt;
+
+    &lt;join name="join1"&gt;
+        &lt;classloader-ref name="cl1"/&gt;
+    &lt;/join&gt;
+
+    &lt;join name="join2"&gt;
+        &lt;classloader-ref name="cl1"/&gt;
+        &lt;classloader-ref name="cl2"/&gt;
+    &lt;/join&gt;
+
+&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file6" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/reader">reader</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/reader/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>config4.xml</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/reader/test/config4.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config4.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ config4.xml	19 Apr 2004 22:19:23 -0000	1.1
@@ -0,0 +1,4 @@
</small></pre><pre class="diff" id="added">+&lt;classloaders default="*system*" version="1.2"&gt;
+    &lt;predefined name="*system*"/&gt;
+
+&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file7" /><div class="file">
<span class="pathname"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a><br /></span>
<div class="fileheader"><big><b>maven.xml</b></big> <small id="info"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/maven.xml?rev=1.7&amp;content-type=text/vnd.viewcvs-markup">1.7</a> <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/maven.xml.diff?r1=1.7&amp;r2=1.8">-&gt;</a> <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/maven.xml?rev=1.8&amp;content-type=text/vnd.viewcvs-markup">1.8</a></small></div>
<pre class="diff"><small id="info">diff -u -r1.7 -r1.8
--- maven.xml	31 Mar 2004 03:39:04 -0000	1.7
+++ maven.xml	19 Apr 2004 22:19:24 -0000	1.8
@@ -18,7 +18,7 @@
</small></pre><pre class="diff" id="context"> 
     &lt;preGoal name="xdoc:copy-user-resources"&gt;
         &lt;ant:mkdir dir="${basedir}/xdocs"/&gt;
</pre><pre class="diff" id="removed">-        &lt;ant:copy file="${basedir}/src/java/org/<span id="removedchars">jcontainer</span>/loom/classman/reader/classloader.dtd"
</pre><pre class="diff" id="added">+        &lt;ant:copy file="${basedir}/src/java/org/<span id="addedchars">codehaus</span>/loom/classman/reader/classloader.dtd"
</pre><pre class="diff" id="context">             todir="${basedir}/target/docs"/&gt;
     &lt;/preGoal&gt;
 
</pre></div>
<hr /><a name="file8" /><div class="file">
<span class="pathname"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a><br /></span>
<div class="fileheader"><big><b>project.xml</b></big> <small id="info"><a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/project.xml?rev=1.17&amp;content-type=text/vnd.viewcvs-markup">1.17</a> <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/project.xml.diff?r1=1.17&amp;r2=1.18">-&gt;</a> <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/project.xml?rev=1.18&amp;content-type=text/vnd.viewcvs-markup">1.18</a></small></div>
<pre class="diff"><small id="info">diff -u -r1.17 -r1.18
--- project.xml	31 Mar 2004 02:43:55 -0000	1.17
+++ project.xml	19 Apr 2004 22:19:24 -0000	1.18
@@ -3,7 +3,7 @@
</small></pre><pre class="diff" id="context">     &lt;extend&gt;${basedir}/../../project.xml&lt;/extend&gt;
     &lt;name&gt;ClassMan&lt;/name&gt;
     &lt;id&gt;loom-classman&lt;/id&gt;
</pre><pre class="diff" id="removed">-    &lt;package&gt;org.<span id="removedchars">jcontainer</span>.loom.classman&lt;/package&gt;
</pre><pre class="diff" id="added">+    &lt;package&gt;org.<span id="addedchars">codehaus</span>.loom.classman&lt;/package&gt;
</pre><pre class="diff" id="context">     &lt;inceptionYear&gt;2002&lt;/inceptionYear&gt;
 
     &lt;shortDescription&gt;Toolkit to construct ClassLoader lattices from an XML descriptor.&lt;/shortDescription&gt;
</pre></div>
<hr /><a name="file9" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java">java</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/java/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/metadata">metadata</a><br /></span>
<div class="fileheader" id="removed"><big><b>FileSetMetaData.java</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/metadata/FileSetMetaData.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N FileSetMetaData.java
--- FileSetMetaData.java	31 Mar 2004 03:18:53 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,81 +0,0 @@
</small></pre><pre class="diff" id="removed">-/*
- * Copyright (C) The Spice Group. All rights reserved.
- *
- * This software is published under the terms of the Spice
- * Software License version 1.1, a copy of which has been included
- * with this distribution in the LICENSE.txt file.
- */
-package org.jcontainer.loom.classman.metadata;
-
-/**
- * This class represent a set of files anchored in a base directory. The set of
- * files is determined by the include and excludes that are specified for
- * fileset. If no includes or excludes are specified then all files in base
- * directory are added to fileset.
- *
- * @author Peter Donald
- * @version $Revision: 1.1 $ $Date: 2004/03/31 03:18:53 $
- */
-public class FileSetMetaData
-{
-    /** The base directory from which to apply all the includes/excludes. */
-    private final String m_baseDirectory;
-
-    /** The set of patterns to include in fileset. */
-    private final String[] m_includes;
-
-    /** The set of patterns to exclude from fileset. */
-    private final String[] m_excludes;
-
-    public FileSetMetaData( final String baseDirectory,
-                            final String[] includes,
-                            final String[] excludes )
-    {
-        if( null == baseDirectory )
-        {
-            throw new NullPointerException( "baseDirectory" );
-        }
-        if( null == includes )
-        {
-            throw new NullPointerException( "includes" );
-        }
-        if( null == excludes )
-        {
-            throw new NullPointerException( "excludes" );
-        }
-
-        m_baseDirectory = baseDirectory;
-        m_includes = includes;
-        m_excludes = excludes;
-    }
-
-    /**
-     * Return the base directory of fileset.
-     *
-     * @return the base directory of fileset.
-     */
-    public String getBaseDirectory()
-    {
-        return m_baseDirectory;
-    }
-
-    /**
-     * Return the list of includes for fileset.
-     *
-     * @return the list of includes for fileset.
-     */
-    public String[] getIncludes()
-    {
-        return m_includes;
-    }
-
-    /**
-     * Return the list of excludes for fileset.
-     *
-     * @return the list of excludes for fileset.
-     */
-    public String[] getExcludes()
-    {
-        return m_excludes;
-    }
-}
</pre></div>
<hr /><a name="file10" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java">java</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/java/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/metadata">metadata</a><br /></span>
<div class="fileheader" id="removed"><big><b>ClassLoaderSetMetaData.java</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/metadata/ClassLoaderSetMetaData.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N ClassLoaderSetMetaData.java
--- ClassLoaderSetMetaData.java	31 Mar 2004 03:18:53 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,159 +0,0 @@
</small></pre><pre class="diff" id="removed">-/*
- * Copyright (C) The Spice Group. All rights reserved.
- *
- * This software is published under the terms of the Spice
- * Software License version 1.1, a copy of which has been included
- * with this distribution in the LICENSE.txt file.
- */
-package org.jcontainer.loom.classman.metadata;
-
-/**
- * This class defines a set of ClassLoaders and the default ClassLoader to use.
- *
- * @author Peter Donald
- * @version $Revision: 1.1 $ $Date: 2004/03/31 03:18:53 $
- */
-public class ClassLoaderSetMetaData
-{
-    /**
-     * The name of the current classloader. This may be used by other
-     * ClassLoader definitions to refer to this ClassLoader.
-     */
-    private final String m_default;
-
-    /** The set of ClassLoaders predefined by the application. */
-    private final String[] m_predefined;
-
-    /** The classloaders defined in set. */
-    private final ClassLoaderMetaData[] m_classLoaders;
-
-    /** The joining classloaders defined in set. */
-    private final JoinMetaData[] m_joins;
-
-    /**
-     * Construct set with specified set and ClassLoaders.
-     *
-     * @param aDefault the name of default ClassLoader
-     * @param classLoaders the ClassLoaders in set
-     */
-    public ClassLoaderSetMetaData( final String aDefault,
-                                   final String[] predefined,
-                                   final ClassLoaderMetaData[] classLoaders,
-                                   final JoinMetaData[] joins )
-    {
-        if( null == aDefault )
-        {
-            throw new NullPointerException( "aDefault" );
-        }
-        if( null == classLoaders )
-        {
-            throw new NullPointerException( "classLoaders" );
-        }
-        if( null == joins )
-        {
-            throw new NullPointerException( "joins" );
-        }
-        if( null == predefined )
-        {
-            throw new NullPointerException( "predefined" );
-        }
-
-        m_default = aDefault;
-        m_predefined = predefined;
-        m_classLoaders = classLoaders;
-        m_joins = joins;
-    }
-
-    /**
-     * Return the default ClassLoader name.
-     *
-     * @return the default ClassLoader name.
-     */
-    public String getDefault()
-    {
-        return m_default;
-    }
-
-    /**
-     * Return the set of predefined ClassLoaders.
-     *
-     * @return the set of predefined ClassLoaders.
-     */
-    public String[] getPredefined()
-    {
-        return m_predefined;
-    }
-
-    /**
-     * Return the classloaders in set.
-     *
-     * @return the classloaders in set.
-     */
-    public ClassLoaderMetaData[] getClassLoaders()
-    {
-        return m_classLoaders;
-    }
-
-    /**
-     * Return the "join" classloaders in set.
-     *
-     * @return the "join" classloaders in set.
-     */
-    public JoinMetaData[] getJoins()
-    {
-        return m_joins;
-    }
-
-    /**
-     * Return true if specified name, designates a predefined ClassLoader.
-     *
-     * @return true if specified name, designates a predefined ClassLoader.
-     */
-    public boolean isPredefined( final String name )
-    {
-        for( int i = 0; i &lt; m_predefined.length; i++ )
-        {
-            if( m_predefined[ i ].equals( name ) )
-            {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Return the classloader with specified name.
-     *
-     * @return the classloader with specified name
-     */
-    public ClassLoaderMetaData getClassLoader( final String name )
-    {
-        for( int i = 0; i &lt; m_classLoaders.length; i++ )
-        {
-            final ClassLoaderMetaData classLoader = m_classLoaders[ i ];
-            if( classLoader.getName().equals( name ) )
-            {
-                return classLoader;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Return the "join" classloader with specified name.
-     *
-     * @return the "join" classloader with specified name
-     */
-    public JoinMetaData getJoin( final String name )
-    {
-        for( int i = 0; i &lt; m_joins.length; i++ )
-        {
-            final JoinMetaData join = m_joins[ i ];
-            if( join.getName().equals( name ) )
-            {
-                return join;
-            }
-        }
-        return null;
-    }
-}
</pre></div>
<hr /><a name="file11" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java">java</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/java/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/metadata">metadata</a><br /></span>
<div class="fileheader" id="removed"><big><b>ClassLoaderMetaData.java</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/metadata/ClassLoaderMetaData.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N ClassLoaderMetaData.java
--- ClassLoaderMetaData.java	31 Mar 2004 03:18:53 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,101 +0,0 @@
</small></pre><pre class="diff" id="removed">-/*
- * Copyright (C) The Spice Group. All rights reserved.
- *
- * This software is published under the terms of the Spice
- * Software License version 1.1, a copy of which has been included
- * with this distribution in the LICENSE.txt file.
- */
-package org.jcontainer.loom.classman.metadata;
-
-import org.jcontainer.loom.extension.Extension;
-
-/**
- * This class defines a specific classloader, made up of entrys, Extension and
- * FileSetMetaData objects.
- *
- * @author Peter Donald
- * @version $Revision: 1.1 $ $Date: 2004/03/31 03:18:53 $
- */
-public class ClassLoaderMetaData
-{
-    /**
-     * The name of the current classloader. This may be used by other
-     * ClassLoader definitions to refer to this ClassLoader.
-     */
-    private final String m_name;
-
-    /** The name of the parent classloader. */
-    private final String m_parent;
-
-    /** The Entrys that are added to this ClassLoader. */
-    private final String[] m_entrys;
-
-    /** The Entrys that are required by this ClassLoader. */
-    private final Extension[] m_extensions;
-
-    /** The Filesets that are added to this ClassLoader. */
-    private final FileSetMetaData[] m_filesets;
-
-    public ClassLoaderMetaData( final String name,
-                                final String parent,
-                                final String[] entrys,
-                                final Extension[] extensions,
-                                final FileSetMetaData[] filesets )
-    {
-        m_name = name;
-        m_parent = parent;
-        m_entrys = entrys;
-        m_extensions = extensions;
-        m_filesets = filesets;
-    }
-
-    /**
-     * Return the name of Classloader.
-     *
-     * @return the name of Classloader.
-     */
-    public String getName()
-    {
-        return m_name;
-    }
-
-    /**
-     * Return the name of parent Classloader.
-     *
-     * @return the name of parent Classloader.
-     */
-    public String getParent()
-    {
-        return m_parent;
-    }
-
-    /**
-     * Return the elements added to Classloader.
-     *
-     * @return the elements added to Classloader.
-     */
-    public String[] getEntrys()
-    {
-        return m_entrys;
-    }
-
-    /**
-     * Return the extensions added to Classloader.
-     *
-     * @return the extensions added to Classloader.
-     */
-    public Extension[] getExtensions()
-    {
-        return m_extensions;
-    }
-
-    /**
-     * Return the filesets added to Classloader.
-     *
-     * @return the filesets added to Classloader.
-     */
-    public FileSetMetaData[] getFilesets()
-    {
-        return m_filesets;
-    }
-}
</pre></div>
<hr /><a name="file12" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java">java</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/java/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/metadata">metadata</a><br /></span>
<div class="fileheader" id="removed"><big><b>JoinMetaData.java</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/metadata/JoinMetaData.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N JoinMetaData.java
--- JoinMetaData.java	31 Mar 2004 03:18:53 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,59 +0,0 @@
</small></pre><pre class="diff" id="removed">-/*
- * Copyright (C) The Spice Group. All rights reserved.
- *
- * This software is published under the terms of the Spice
- * Software License version 1.1, a copy of which has been included
- * with this distribution in the LICENSE.txt file.
- */
-package org.jcontainer.loom.classman.metadata;
-
-/**
- * This class defines a classloader that "merges" multiple classloaders. For
- * this to be successful, it is required that the ClassLoaders contain disjoint
- * sets of classes (with the exception of classes loaded from the system
- * classpath).
- *
- * @author Peter Donald
- * @version $Revision: 1.1 $ $Date: 2004/03/31 03:18:53 $
- */
-public class JoinMetaData
-{
-    /**
-     * The name of the current classloader. This may be used by other
-     * ClassLoader definitions to refer to this ClassLoader.
-     */
-    private final String m_name;
-
-    /** The list of classloaders that are merged in this classloader. */
-    private final String[] m_classloaders;
-
-    /**
-     * The definition for set of classloaders
-     */
-    public JoinMetaData( final String name,
-                         final String[] classloaders )
-    {
-        m_name = name;
-        m_classloaders = classloaders;
-    }
-
-    /**
-     * Return the name of Classloader.
-     *
-     * @return the name of Classloader.
-     */
-    public String getName()
-    {
-        return m_name;
-    }
-
-    /**
-     * Return the list of classloaders that are merged in this classloader
-     *
-     * @return the list of classloaders that are merged in this classloader
-     */
-    public String[] getClassloaders()
-    {
-        return m_classloaders;
-    }
-}
</pre></div>
<hr /><a name="file13" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java">java</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/java/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/reader">reader</a><br /></span>
<div class="fileheader" id="removed"><big><b>ClassLoaderSetReader.java</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/reader/ClassLoaderSetReader.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N ClassLoaderSetReader.java
--- ClassLoaderSetReader.java	31 Mar 2004 03:18:53 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1 +0,0 @@
</small></pre><pre class="diff" id="removed">-/*
 * Copyright (C) The Spice Group. All rights reserved.
 *
 * This software is published under the terms of the Spice
 * Software License version 1.1, a copy of which has been included
 * with this distribution in the LICENSE.txt file.
 */
package org.jcontainer.loom.classman.reader;

import java.util.ArrayList;
import org.jcontainer.loom.classman.metadata.ClassLoaderMetaData;
import org.jcontainer.loom.classman.metadata.ClassLoaderSetMetaData;
import org.jcontainer.loom.classman.metadata.FileSetMetaData;
import org.jcontainer.loom.classman.metadata.JoinMetaData;
import org.jcontainer.loom.extension.Extension;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

/**
 * This class builds a {@link ClassLoaderSetMetaData} object from specified
 * configuration.
 *
 * @author Peter Donald
 * @version $Revision: 1.1 $ $Date: 2004/03/31 03:18:53 $
 */
public class ClassLoaderSetReader
{
    /**
     * Build ClassLoader MetaData from a DOM tree.
     *
     * @param config the root element
     * @return the meta data
     * @throws Exception if malformed DOM
     */
    public ClassLoaderSetMetaData build( final Element config )
        throws Exception
    {
        final String defaultClassLoader =
            config.getAttribute( "default" );
        if( isUnspecified( defaultClassLoader ) )
        {
            final String message = "Default classloader not specified.";
            throw new Exception( message );
        }

        final String version =
            config.getAttribute( "version" );
        if( !"1.0".equals( version ) )
        {
            final String message = "Bad version:" + version;
            throw new Exception( message );
        }

        final NodeList joinConfigs =
            config.getElementsByTagName( "join" );
        final JoinMetaData[] joins = buildJoins( joinConfigs );

        final NodeList clConfigs =
            config.getElementsByTagName( "classloader" );

        final ClassLoaderMetaData[] classloaders =
            buildClassLoaders( clConfigs );

        final NodeList predefinedConfigs =
            config.getElementsByTagName( "predefined" );

        final String[] predefined =
            buildPredefined( predefinedConfigs );

        return new ClassLoaderSetMetaData( defaultClassLoader,
                                           predefined,
                                           classloaders,
                                           joins );
    }

    /**
     * Parse out a set of predefined classloaders from specified nodes.
     *
     * @param configs the nodes to process
     * @return the predefined classloaders
     */
    private String[] buildPredefined( final NodeList configs )
    {
        final ArrayList predefines = new ArrayList();

        final int length = configs.getLength();
        for( int i = 0; i &lt; length; i++ )
        {
            final Element element = (Element)configs.item( i );
            final String predefined = element.getAttribute( "name" );
            predefines.add( predefined );
        }

        return (String[])predefines.toArray( new String[ predefines.size() ] );
    }

    /**
     * Build an array of ClassLoader meta datas from node list.
     *
     * @param configs the nodes to process
     * @return the classloaders
     */
    private ClassLoaderMetaData[] buildClassLoaders( final NodeList configs )
        throws Exception
    {
        final ArrayList loaders = new ArrayList();
        final int length = configs.getLength();

        for( int i = 0; i &lt; length; i++ )
        {
            final Element item = (Element)configs.item( i );
            final ClassLoaderMetaData loader = buildLoader( item );
            loaders.add( loader );
        }

        return (ClassLoaderMetaData[])loaders.toArray(
            new ClassLoaderMetaData[ loaders.size() ] );
    }

    /**
     * Build a ClassLoader meta datas from element.
     *
     * @param config the nodes to process
     * @return the classloader
     */
    private ClassLoaderMetaData buildLoader( final Element config )
        throws Exception
    {
        final String name = config.getAttribute( "name" );
        final String parent = config.getAttribute( "parent" );

        final String[] entrys =
            buildEntrys( config.getElementsByTagName( "entry" ) );
        final Extension[] extensions =
            buildExtensions( config.getElementsByTagName( "extension" ) );
        final FileSetMetaData[] fileSets =
            buildFileSets( config.getElementsByTagName( "fileset" ) );
        return new ClassLoaderMetaData( name, parent, entrys,
                                        extensions, fileSets );
    }

    /**
     * Build and array of extensions
     *
     * @param configs the nodes to process
     * @return an array of extensions
     */
    private Extension[] buildExtensions( final NodeList configs )
        throws Exception
    {
        final ArrayList extensions = new ArrayList();

        final int length = configs.getLength();
        for( int i = 0; i &lt; length; i++ )
        {
            final Extension extension =
                buildExtension( (Element)configs.item( i ) );
            extensions.add( extension );
        }

        return (Extension[])extensions.toArray(
            new Extension[ extensions.size() ] );
    }

    /**
     * Build an extension from a DOM element.
     *
     * @param config the node to process
     * @return an extension
     */
    private Extension buildExtension( final Element config )
        throws Exception
    {
        final String name = config.getAttribute( "name" );
        if( isUnspecified( name ) )
        {
            final String message = "Missing name from extension";
            throw new Exception( message );
        }
        final String specVersion =
            config.getAttribute( "specification-version" );
        final String specVendor =
            config.getAttribute( "specification-vendor" );
        final String implVersion =
            config.getAttribute( "implementation-version" );
        final String implVendor =
            config.getAttribute( "implementation-vendor" );
        final String implVendorID =
            config.getAttribute( "implementation-vendor-id" );
        final String implURL =
            config.getAttribute( "implementation-url" );

        return new Extension( name, specVersion, specVendor,
                              implVersion, implVendor, implVendorID,
                              implURL );
    }

    /**
     * Build and array of file sets.
     *
     * @param configs the nodes to process
     * @return an array of file sets
     */
    private FileSetMetaData[] buildFileSets( final NodeList configs )
    {
        final ArrayList fileSets = new ArrayList();

        final int length = configs.getLength();
        for( int i = 0; i &lt; length; i++ )
        {
            final FileSetMetaData fileSet =
                buildFileSet( (Element)configs.item( i ) );
            fileSets.add( fileSet );
        }

        return (FileSetMetaData[])fileSets.toArray(
            new FileSetMetaData[ fileSets.size() ] );
    }

    /**
     * Build a fileset from a DOM element.
     *
     * @param config the node to process
     * @return a fileset
     */
    private FileSetMetaData buildFileSet( final Element config )
    {
        final String dir = config.getAttribute( "dir" );
        final String[] includes =
            buildSelectors( config.getElementsByTagName( "include" ) );
        final String[] excludes =
            buildSelectors( config.getElementsByTagName( "exclude" ) );
        return new FileSetMetaData( dir, includes, excludes );
    }

    /**
     * Build and array of selectors (ie includes/excludes).
     *
     * @param configs the nodes to process
     * @return an array of selectors
     */
    private String[] buildSelectors( final NodeList configs )
    {
        final ArrayList selectors = new ArrayList();

        final int length = configs.getLength();
        for( int i = 0; i &lt; length; i++ )
        {
            final Element element = (Element)configs.item( i );
            final String name = element.getAttribute( "name" );
            selectors.add( name );
        }

        return (String[])selectors.toArray( new String[ selectors.size() ] );
    }

    /**
     * Build file entrys from a nodelist.
     *
     * @param configs the nodes to procexx
     * @return an array of file entrys
     */
    private String[] buildEntrys( final NodeList configs )
    {
        final ArrayList entrys = new ArrayList();

        final int length = configs.getLength();
        for( int i = 0; i &lt; length; i++ )
        {
            final Element config = (Element)configs.item( i );
            final String entry = config.getAttribute( "location" );
            entrys.add( entry );
        }

        return (String[])entrys.toArray( new String[ entrys.size() ] );
    }

    /**
     * Build an array of Join classloaders out of supplied nodes.
     *
     * @param configs the nodes to process
     * @return the join meta data array
     */
    private JoinMetaData[] buildJoins( final NodeList configs )
    {
        final ArrayList joins = new ArrayList();

        final int length = configs.getLength();
        for( int i = 0; i &lt; length; i++ )
        {
            final Element config = (Element)configs.item( i );
            final JoinMetaData join = buildJoin( config );
            joins.add( join );
        }

        return (JoinMetaData[])joins.toArray( new JoinMetaData[ joins.size() ] );
    }

    /**
     * Build a Join classloader out of supplied Element.
     *
     * @param config the config element
     * @return the join meta data
     */
    private JoinMetaData buildJoin( final Element config )
    {
        final String name = config.getAttribute( "name" );
        final NodeList children =
            config.getElementsByTagName( "classloader-ref" );
        final String[] classloaders =
            buildClassLoaderRefs( children );
        return new JoinMetaData( name, classloaders );
    }

    /**
     * Create a set of strings for ClassLoader references in a Join
     * classloader.
     *
     * @param configs the nodes to process
     * @return the strings for class loader refs
     */
    private String[] buildClassLoaderRefs( final NodeList configs )
    {
        final ArrayList refs = new ArrayList();

        final int length = configs.getLength();
        for( int i = 0; i &lt; length; i++ )
        {
            final Element element = (Element)configs.item( i );
            final String ref = element.getAttribute( "name" );
            refs.add( ref );
        }

        return (String[])refs.toArray( new String[ refs.size() ] );
    }

    /**
     * Utility class to test if attribute is unspecified (by testing if it is
     * equal to empty string).
     *
     * @param attribute the attribute
     * @return true if equal to empty string
     */
    private boolean isUnspecified( final String attribute )
    {
        return "".equals( attribute );
    }
}
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file14" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java">java</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/java/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/reader">reader</a><br /></span>
<div class="fileheader" id="removed"><big><b>classloader.dtd</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/reader/classloader.dtd?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N classloader.dtd
--- classloader.dtd	31 Mar 2004 03:18:53 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,138 +0,0 @@
</small></pre><pre class="diff" id="removed">-&lt;!--
-
-   This is the DTD defining the ClassLoader 1.0
-   descriptor (XML) file format/syntax.
-
-   Author: Peter Donald
-
-   This descriptor is used to describe a mechanism of defining
-   a set of ClassLoaders and the arrangment of specified ClassLoaders.
-
-   Copyright (C) The Spice Group. All rights reserved.
-
-   This software is published under the terms of the Spice
-   Software License version 1.1, a copy of which has been included
-   with this distribution in the LICENSE.txt file.
-
-  --&gt;
-
-&lt;!--
-The classloaders is the document root, it defines:
-
-join 	       the join classloaders
-classloader  the regular classloaders
---&gt;
-&lt;!ELEMENT classloaders (predefined*,classloader*,join*)&gt;
-&lt;!ATTLIST classloaders id ID #IMPLIED
-xmlns CDATA #FIXED "http://jakarta.apache.org/avalon/dtds/phoenix/classloaders_1_0.dtd" &gt;
-&lt;!ATTLIST classloaders
-default CDATA #REQUIRED
-version CDATA #REQUIRED &gt;
-
-&lt;!--
-The classloader element describes a regular classloader It defines:
-
-Attributes:
-name	        the name of classloader type. Must be a string
-             containing alphanumeric characters, '.', '-', '_' and
-             starting with a letter or a '_'.
-parent 	     the name of the parent classloader
-
-Elements:
-entry 	      an entry in classloader
-fileset 	    an fileset in classloader
-extension    an extension in classloader
---&gt;
-&lt;!ELEMENT classloader          (entry*,fileset*,extension*)&gt;
-&lt;!ATTLIST classloader
-name CDATA #REQUIRED
-parent CDATA #REQUIRED &gt;
-
-&lt;!--
-The predefined element defines a predefined classloader. It defines:
-
-Attributes:
-name	        the name of classloader.
---&gt;
-&lt;!ELEMENT predefined EMPTY&gt;
-&lt;!ATTLIST predefined name CDATA #REQUIRED &gt;
-
-&lt;!--
-The classloader element describes a regular classloader It defines:
-
-Attributes:
-name	        the name of classloader type. Must be a string
-             containing alphanumeric characters, '.', '-', '_' and
-             starting with a letter or a '_'.
-
-Elements:
-classloader-ref  a reference to all classloaders that are joined
---&gt;
-&lt;!ELEMENT join          (classloader-ref*)&gt;
-&lt;!ATTLIST join name CDATA #REQUIRED &gt;
-
-&lt;!--
-The classloader-ref defines a ClassLoader that are part of join.
-It defines:
-
-Attributes:
-name     the name of other classloader that will join with
---&gt;
-&lt;!ELEMENT classloader-ref EMPTY&gt;
-&lt;!ATTLIST classloader-ref name CDATA #REQUIRED&gt;
-
-&lt;!--
-The entry describes a entry in ClassLoader. It defines:
-
-Attributes:
-location     the location (URL) to add to classloader
---&gt;
-&lt;!ELEMENT entry EMPTY&gt;
-&lt;!ATTLIST entry location CDATA #REQUIRED&gt;
-
-&lt;!--
-The classloader element describes a regular classloader It defines:
-
-Attributes:
-name	        the name of classloader type. Must be a string
-             containing alphanumeric characters, '.', '-', '_' and
-             starting with a letter or a '_'.
-
-Elements:
-classloader-ref  a reference to all classloaders that are joined
---&gt;
-&lt;!ELEMENT fileset          ((include|exclude)*)&gt;
-&lt;!ATTLIST fileset dir CDATA #REQUIRED &gt;
-
-&lt;!--
-The entry describes a include for fileset. It defines:
-
-Attributes:
-name     the pattern to include
---&gt;
-&lt;!ELEMENT include EMPTY&gt;
-&lt;!ATTLIST include name CDATA #REQUIRED&gt;
-
-&lt;!--
-The entry describes a exclude for fileset. It defines:
-
-Attributes:
-name     the pattern to exclude
---&gt;
-&lt;!ELEMENT exclude EMPTY&gt;
-&lt;!ATTLIST exclude name CDATA #REQUIRED&gt;
-
-
-&lt;!--
-The extension describes a extension for ClassLoader.
---&gt;
-&lt;!ELEMENT extension EMPTY&gt;
-&lt;!ATTLIST extension
-name CDATA #REQUIRED
-specification-version CDATA #IMPLIED
-specification-vendor CDATA #IMPLIED
-implementation-version CDATA #IMPLIED
-implementation-vendor CDATA #IMPLIED
-implementation-vendor-id CDATA #IMPLIED
-implementation-url CDATA #IMPLIED
-&gt;
</pre></div>
<hr /><a name="file15" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>config12.xml</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config12.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config12.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ config12.xml	19 Apr 2004 22:19:24 -0000	1.1
@@ -0,0 +1,6 @@
</small></pre><pre class="diff" id="added">+&lt;classloaders default="*system*" version="1.0"&gt;
+    &lt;predefined name="*system*"/&gt;
+
+    &lt;classloader name="*system*" parent="*system*"/&gt;
+
+&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file16" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>config13.xml</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config13.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config13.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ config13.xml	19 Apr 2004 22:19:24 -0000	1.1
@@ -0,0 +1,5 @@
</small></pre><pre class="diff" id="added">+&lt;classloaders default="*system*" version="1.0"&gt;
+    &lt;predefined name="*system*"/&gt;
+    &lt;predefined name="*system*"/&gt;
+
+&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file17" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>config7.xml</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config7.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config7.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ config7.xml	19 Apr 2004 22:19:24 -0000	1.1
@@ -0,0 +1,9 @@
</small></pre><pre class="diff" id="added">+&lt;classloaders default="*system*" version="1.0"&gt;
+    &lt;predefined name="*system*"/&gt;
+
+    &lt;classloader name="cl" parent="*system*"&gt;
+        &lt;entry location="someFile.jar"/&gt;
+        &lt;entry location="someFile.jar"/&gt;
+    &lt;/classloader&gt;
+
+&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file18" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>config5.xml</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config5.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config5.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ config5.xml	19 Apr 2004 22:19:24 -0000	1.1
@@ -0,0 +1,4 @@
</small></pre><pre class="diff" id="added">+&lt;classloaders default="iNoExist" version="1.0"&gt;
+    &lt;predefined name="*system*"/&gt;
+
+&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file19" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>config3.xml</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config3.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config3.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ config3.xml	19 Apr 2004 22:19:24 -0000	1.1
@@ -0,0 +1,6 @@
</small></pre><pre class="diff" id="added">+&lt;classloaders default="*system*" version="1.0"&gt;
+    &lt;predefined name="*system*"/&gt;
+
+    &lt;classloader name="cl" parent="missing-parent"/&gt;
+
+&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file20" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>config15.xml</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config15.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config15.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ config15.xml	19 Apr 2004 22:19:24 -0000	1.1
@@ -0,0 +1,7 @@
</small></pre><pre class="diff" id="added">+&lt;classloaders default="X" version="1.0"&gt;
+    &lt;predefined name="X"/&gt;
+
+    &lt;join name="X"&gt;
+    &lt;/join&gt;
+
+&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file21" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>config8.xml</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config8.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config8.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ config8.xml	19 Apr 2004 22:19:24 -0000	1.1
@@ -0,0 +1,7 @@
</small></pre><pre class="diff" id="added">+&lt;classloaders default="*system*" version="1.0"&gt;
+    &lt;predefined name="*system*"/&gt;
+
+    &lt;join name="jl"/&gt;
+    &lt;join name="jl"/&gt;
+
+&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file22" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>config17.xml</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config17.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config17.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ config17.xml	19 Apr 2004 22:19:24 -0000	1.1
@@ -0,0 +1,35 @@
</small></pre><pre class="diff" id="added">+&lt;classloaders default="join2" version="1.0"&gt;
+    &lt;predefined name="*system*"/&gt;
+
+    &lt;classloader name="cl1" parent="*system*"&gt;
+        &lt;entry location="someFile.jar"/&gt;
+        &lt;entry location="someOtherFile.jar"/&gt;
+        &lt;fileset dir="someDir"&gt;
+            &lt;include name="**/*.jar"/&gt;
+            &lt;include name="**/*.bar"/&gt;
+            &lt;exclude name="**/unwanted/*"/&gt;
+        &lt;/fileset&gt;
+        &lt;extension
+            name="Avalon.Framework"
+            specification-version="4.1"
+            specification-vendor="Apache"
+            implementation-version="4.1"
+            implementation-vendor="Apache"
+            implementation-vendor-id="Apache"
+            implementation-url="http://jakarta..."/&gt;
+    &lt;/classloader&gt;
+
+    &lt;classloader name="cl2" parent="*system*"&gt;
+        &lt;entry location="aFile.jar"/&gt;
+    &lt;/classloader&gt;
+
+    &lt;join name="join1"&gt;
+        &lt;classloader-ref name="cl1"/&gt;
+    &lt;/join&gt;
+
+    &lt;join name="join2"&gt;
+        &lt;classloader-ref name="cl1"/&gt;
+        &lt;classloader-ref name="cl2"/&gt;
+    &lt;/join&gt;
+
+&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file23" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>config1.xml</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config1.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config1.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ config1.xml	19 Apr 2004 22:19:24 -0000	1.1
@@ -0,0 +1,7 @@
</small></pre><pre class="diff" id="added">+&lt;classloaders default="*system*" version="1.0"&gt;
+    &lt;predefined name="*system*"/&gt;
+
+    &lt;join name="join$3"&gt;
+    &lt;/join&gt;
+
+&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file24" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>config11.xml</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config11.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config11.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ config11.xml	19 Apr 2004 22:19:24 -0000	1.1
@@ -0,0 +1,7 @@
</small></pre><pre class="diff" id="added">+&lt;classloaders default="*system*" version="1.0"&gt;
+    &lt;predefined name="*system*"/&gt;
+
+    &lt;classloader name="X" parent="*system*"/&gt;
+    &lt;classloader name="X" parent="*system*"/&gt;
+
+&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file25" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>VerifierTestCase.java</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/VerifierTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N VerifierTestCase.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ VerifierTestCase.java	19 Apr 2004 22:19:24 -0000	1.1
@@ -0,0 +1,316 @@
</small></pre><pre class="diff" id="added">+/*
+ * Copyright (C) The Spice Group. All rights reserved.
+ *
+ * This software is published under the terms of the Spice
+ * Software License version 1.1, a copy of which has been included
+ * with this distribution in the LICENSE.txt file.
+ */
+package org.codehaus.loom.classman.verifier.test;
+
+import org.codehaus.loom.classman.metadata.ClassLoaderSetMetaData;
+import org.codehaus.loom.classman.test.AbstractLoaderTestCase;
+import org.codehaus.loom.classman.verifier.ClassLoaderVerifier;
+
+/**
+ * TestCase for {@link org.codehaus.loom.classman.reader.ClassLoaderSetReader}.
+ *
+ * @author Peter Donald
+ */
+public class VerifierTestCase
+    extends AbstractLoaderTestCase
+{
+    public void testConfig1()
+        throws Exception
+    {
+        try
+        {
+            verifyResource( "config1.xml" );
+        }
+        catch( final Throwable t )
+        {
+            return;
+        }
+
+        fail( "Expected verify to fail as specified " +
+              "bad name for join" );
+    }
+
+    public void testConfig2()
+        throws Exception
+    {
+        try
+        {
+            verifyResource( "config2.xml" );
+        }
+        catch( final Throwable t )
+        {
+            return;
+        }
+
+        fail( "Expected verify to fail as specified " +
+              "bad name for classloader" );
+    }
+
+    public void testConfig3()
+        throws Exception
+    {
+        try
+        {
+            verifyResource( "config3.xml" );
+        }
+        catch( final Throwable t )
+        {
+            return;
+        }
+
+        fail( "Expected verify to fail as specified " +
+              "bad parent for classloader" );
+    }
+
+    public void testConfig4()
+        throws Exception
+    {
+        try
+        {
+            verifyResource( "config4.xml" );
+        }
+        catch( final Throwable t )
+        {
+            return;
+        }
+
+        fail( "Expected verify to fail as specified " +
+              "non existing ClassLoader in Join " +
+              "classloader-ref" );
+    }
+
+    public void testConfig5()
+        throws Exception
+    {
+        try
+        {
+            verifyResource( "config5.xml" );
+        }
+        catch( final Throwable t )
+        {
+            return;
+        }
+
+        fail( "Expected verify to fail as specified " +
+              "default classloader does not exist." );
+    }
+
+    public void testConfig6()
+        throws Exception
+    {
+        try
+        {
+            verifyResource( "config6.xml" );
+        }
+        catch( final Throwable t )
+        {
+            return;
+        }
+
+        fail( "Expected verify to fail as specified " +
+              "join classloader links against same " +
+              "classloader multiple times." );
+    }
+
+    public void testConfig7()
+        throws Exception
+    {
+        try
+        {
+            verifyResource( "config7.xml" );
+        }
+        catch( final Throwable t )
+        {
+            return;
+        }
+
+        fail( "Expected verify to fail as specified " +
+              "classloader has entry multiple times." );
+    }
+
+    public void testConfig8()
+        throws Exception
+    {
+        try
+        {
+            verifyResource( "config8.xml" );
+        }
+        catch( final Throwable t )
+        {
+            return;
+        }
+
+        fail( "Expected verify to fail as a " +
+              "join had same name as another join." );
+    }
+
+    public void testConfig9()
+        throws Exception
+    {
+        try
+        {
+            verifyResource( "config9.xml" );
+        }
+        catch( final Throwable t )
+        {
+            return;
+        }
+
+        fail( "Expected verify to fail as a " +
+              "join had same name as a " +
+              "classloader." );
+    }
+
+    public void testConfig10()
+        throws Exception
+    {
+        try
+        {
+            verifyResource( "config10.xml" );
+        }
+        catch( final Throwable t )
+        {
+            return;
+        }
+
+        fail( "Expected verify to fail as a " +
+              "join had same name as another " +
+              "predefined classloader." );
+    }
+
+    public void testConfig11()
+        throws Exception
+    {
+        try
+        {
+            verifyResource( "config11.xml" );
+        }
+        catch( final Throwable t )
+        {
+            return;
+        }
+
+        fail( "Expected verify to fail as a " +
+              "classloader had same name as another " +
+              "classloader." );
+    }
+
+    public void testConfig12()
+        throws Exception
+    {
+        try
+        {
+            verifyResource( "config12.xml" );
+        }
+        catch( final Throwable t )
+        {
+            return;
+        }
+
+        fail( "Expected verify to fail as a " +
+              "classloader had same name as a " +
+              "predefined classloader." );
+    }
+
+    public void testConfig13()
+        throws Exception
+    {
+        try
+        {
+            final ClassLoaderSetMetaData defs =
+                buildFromResource( "config13.xml" );
+            verify( defs );
+        }
+        catch( final Throwable t )
+        {
+            return;
+        }
+
+        fail( "Expected verify to fail as a " +
+              "predefined had same name as another " +
+              "predefined." );
+    }
+
+    public void testConfig14()
+        throws Exception
+    {
+        try
+        {
+            final ClassLoaderSetMetaData defs =
+                buildFromResource( "config14.xml" );
+            verify( defs );
+        }
+        catch( final Throwable t )
+        {
+            return;
+        }
+
+        fail( "Expected verify to fail as a " +
+              "predefined an empty name." );
+    }
+
+    public void testConfig15()
+        throws Exception
+    {
+        try
+        {
+            final ClassLoaderSetMetaData defs =
+                buildFromResource( "config15.xml" );
+            verify( defs );
+        }
+        catch( final Throwable t )
+        {
+            return;
+        }
+
+        fail( "Expected verify to fail as a " +
+              "predefined has same name as join." );
+    }
+
+    public void testConfig16()
+        throws Exception
+    {
+        try
+        {
+            final ClassLoaderSetMetaData defs =
+                buildFromResource( "config16.xml" );
+            verify( defs );
+        }
+        catch( final Throwable t )
+        {
+            fail( "Should be able to have a join as default classloader." );
+        }
+    }
+
+    public void testConfig17()
+        throws Exception
+    {
+        try
+        {
+            verifyResource( "config17.xml" );
+        }
+        catch( final Throwable t )
+        {
+            fail( "Expected verify to pass" );
+        }
+    }
+
+    private void verifyResource( final String resource )
+        throws Exception
+    {
+        final ClassLoaderSetMetaData defs = buildFromResource( resource );
+        verify( defs );
+    }
+
+    private void verify( final ClassLoaderSetMetaData defs )
+        throws Exception
+    {
+        final ClassLoaderVerifier verifier = new ClassLoaderVerifier();
+        verifier.verifyClassLoaderSet( defs );
+    }
+}
</pre></div>
<hr /><a name="file26" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>config2.xml</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config2.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config2.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ config2.xml	19 Apr 2004 22:19:24 -0000	1.1
@@ -0,0 +1,7 @@
</small></pre><pre class="diff" id="added">+&lt;classloaders default="*system*" version="1.0"&gt;
+    &lt;predefined name="*system*"/&gt;
+
+    &lt;classloader name="cl+" parent="*system*"&gt;
+    &lt;/classloader&gt;
+
+&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file27" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>config4.xml</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config4.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config4.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ config4.xml	19 Apr 2004 22:19:24 -0000	1.1
@@ -0,0 +1,8 @@
</small></pre><pre class="diff" id="added">+&lt;classloaders default="*system*" version="1.0"&gt;
+    &lt;predefined name="*system*"/&gt;
+
+    &lt;join name="jl"&gt;
+        &lt;classloader-ref name="non-existent"/&gt;
+    &lt;/join&gt;
+
+&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file28" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>config16.xml</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config16.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config16.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ config16.xml	19 Apr 2004 22:19:24 -0000	1.1
@@ -0,0 +1,5 @@
</small></pre><pre class="diff" id="added">+&lt;classloaders default="X" version="1.0"&gt;
+    &lt;join name="X"&gt;
+    &lt;/join&gt;
+
+&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file29" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>config6.xml</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config6.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config6.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ config6.xml	19 Apr 2004 22:19:24 -0000	1.1
@@ -0,0 +1,9 @@
</small></pre><pre class="diff" id="added">+&lt;classloaders default="*system*" version="1.0"&gt;
+    &lt;predefined name="*system*"/&gt;
+
+    &lt;join name="jl"&gt;
+        &lt;classloader-ref name="*system*"/&gt;
+        &lt;classloader-ref name="*system*"/&gt;
+    &lt;/join&gt;
+
+&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file30" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>config14.xml</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config14.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config14.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ config14.xml	19 Apr 2004 22:19:24 -0000	1.1
@@ -0,0 +1,7 @@
</small></pre><pre class="diff" id="added">+&lt;classloaders default="*system*" version="1.0"&gt;
+    &lt;predefined name="*system*"/&gt;
+
+    &lt;join name=""&gt;
+    &lt;/join&gt;
+
+&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file31" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>config9.xml</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config9.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config9.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ config9.xml	19 Apr 2004 22:19:24 -0000	1.1
@@ -0,0 +1,8 @@
</small></pre><pre class="diff" id="added">+&lt;classloaders default="*system*" version="1.0"&gt;
+    &lt;predefined name="*system*"/&gt;
+
+    &lt;join name="j1"/&gt;
+
+    &lt;classloader name="j1" parent="*system*"/&gt;
+
+&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file32" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>config10.xml</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/verifier/test/config10.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config10.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ config10.xml	19 Apr 2004 22:19:24 -0000	1.1
@@ -0,0 +1,6 @@
</small></pre><pre class="diff" id="added">+&lt;classloaders default="*system*" version="1.0"&gt;
+    &lt;predefined name="*system*"/&gt;
+
+    &lt;join name="*system*"/&gt;
+
+&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file33" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>config11.xml</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config11.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config11.xml
--- config11.xml	31 Mar 2004 03:18:55 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,7 +0,0 @@
</small></pre><pre class="diff" id="removed">-&lt;classloaders default="*system*" version="1.0"&gt;
-    &lt;predefined name="*system*"/&gt;
-
-    &lt;classloader name="X" parent="*system*"/&gt;
-    &lt;classloader name="X" parent="*system*"/&gt;
-
-&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file34" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>config15.xml</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config15.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config15.xml
--- config15.xml	31 Mar 2004 03:18:55 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,7 +0,0 @@
</small></pre><pre class="diff" id="removed">-&lt;classloaders default="X" version="1.0"&gt;
-    &lt;predefined name="X"/&gt;
-
-    &lt;join name="X"&gt;
-    &lt;/join&gt;
-
-&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file35" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>config10.xml</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config10.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config10.xml
--- config10.xml	31 Mar 2004 03:18:55 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,6 +0,0 @@
</small></pre><pre class="diff" id="removed">-&lt;classloaders default="*system*" version="1.0"&gt;
-    &lt;predefined name="*system*"/&gt;
-
-    &lt;join name="*system*"/&gt;
-
-&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file36" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>config4.xml</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config4.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config4.xml
--- config4.xml	31 Mar 2004 03:18:55 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,8 +0,0 @@
</small></pre><pre class="diff" id="removed">-&lt;classloaders default="*system*" version="1.0"&gt;
-    &lt;predefined name="*system*"/&gt;
-
-    &lt;join name="jl"&gt;
-        &lt;classloader-ref name="non-existent"/&gt;
-    &lt;/join&gt;
-
-&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file37" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>config13.xml</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config13.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config13.xml
--- config13.xml	31 Mar 2004 03:18:55 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,5 +0,0 @@
</small></pre><pre class="diff" id="removed">-&lt;classloaders default="*system*" version="1.0"&gt;
-    &lt;predefined name="*system*"/&gt;
-    &lt;predefined name="*system*"/&gt;
-
-&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file38" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>config1.xml</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config1.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config1.xml
--- config1.xml	31 Mar 2004 03:18:55 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,7 +0,0 @@
</small></pre><pre class="diff" id="removed">-&lt;classloaders default="*system*" version="1.0"&gt;
-    &lt;predefined name="*system*"/&gt;
-
-    &lt;join name="join$3"&gt;
-    &lt;/join&gt;
-
-&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file39" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>config9.xml</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config9.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config9.xml
--- config9.xml	31 Mar 2004 03:18:55 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,8 +0,0 @@
</small></pre><pre class="diff" id="removed">-&lt;classloaders default="*system*" version="1.0"&gt;
-    &lt;predefined name="*system*"/&gt;
-
-    &lt;join name="j1"/&gt;
-
-    &lt;classloader name="j1" parent="*system*"/&gt;
-
-&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file40" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>config14.xml</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config14.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config14.xml
--- config14.xml	31 Mar 2004 03:18:55 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,7 +0,0 @@
</small></pre><pre class="diff" id="removed">-&lt;classloaders default="*system*" version="1.0"&gt;
-    &lt;predefined name="*system*"/&gt;
-
-    &lt;join name=""&gt;
-    &lt;/join&gt;
-
-&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file41" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>config8.xml</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config8.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config8.xml
--- config8.xml	31 Mar 2004 03:18:55 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,7 +0,0 @@
</small></pre><pre class="diff" id="removed">-&lt;classloaders default="*system*" version="1.0"&gt;
-    &lt;predefined name="*system*"/&gt;
-
-    &lt;join name="jl"/&gt;
-    &lt;join name="jl"/&gt;
-
-&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file42" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>config2.xml</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config2.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config2.xml
--- config2.xml	31 Mar 2004 03:18:55 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,7 +0,0 @@
</small></pre><pre class="diff" id="removed">-&lt;classloaders default="*system*" version="1.0"&gt;
-    &lt;predefined name="*system*"/&gt;
-
-    &lt;classloader name="cl+" parent="*system*"&gt;
-    &lt;/classloader&gt;
-
-&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file43" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>config5.xml</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config5.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config5.xml
--- config5.xml	31 Mar 2004 03:18:55 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,4 +0,0 @@
</small></pre><pre class="diff" id="removed">-&lt;classloaders default="iNoExist" version="1.0"&gt;
-    &lt;predefined name="*system*"/&gt;
-
-&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file44" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>config12.xml</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config12.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config12.xml
--- config12.xml	31 Mar 2004 03:18:55 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,6 +0,0 @@
</small></pre><pre class="diff" id="removed">-&lt;classloaders default="*system*" version="1.0"&gt;
-    &lt;predefined name="*system*"/&gt;
-
-    &lt;classloader name="*system*" parent="*system*"/&gt;
-
-&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file45" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>VerifierTestCase.java</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/VerifierTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N VerifierTestCase.java
--- VerifierTestCase.java	31 Mar 2004 03:18:55 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,316 +0,0 @@
</small></pre><pre class="diff" id="removed">-/*
- * Copyright (C) The Spice Group. All rights reserved.
- *
- * This software is published under the terms of the Spice
- * Software License version 1.1, a copy of which has been included
- * with this distribution in the LICENSE.txt file.
- */
-package org.jcontainer.loom.classman.verifier.test;
-
-import org.jcontainer.loom.classman.metadata.ClassLoaderSetMetaData;
-import org.jcontainer.loom.classman.test.AbstractLoaderTestCase;
-import org.jcontainer.loom.classman.verifier.ClassLoaderVerifier;
-
-/**
- * TestCase for {@link org.jcontainer.loom.classman.reader.ClassLoaderSetReader}.
- *
- * @author Peter Donald
- */
-public class VerifierTestCase
-    extends AbstractLoaderTestCase
-{
-    public void testConfig1()
-        throws Exception
-    {
-        try
-        {
-            verifyResource( "config1.xml" );
-        }
-        catch( final Throwable t )
-        {
-            return;
-        }
-
-        fail( "Expected verify to fail as specified " +
-              "bad name for join" );
-    }
-
-    public void testConfig2()
-        throws Exception
-    {
-        try
-        {
-            verifyResource( "config2.xml" );
-        }
-        catch( final Throwable t )
-        {
-            return;
-        }
-
-        fail( "Expected verify to fail as specified " +
-              "bad name for classloader" );
-    }
-
-    public void testConfig3()
-        throws Exception
-    {
-        try
-        {
-            verifyResource( "config3.xml" );
-        }
-        catch( final Throwable t )
-        {
-            return;
-        }
-
-        fail( "Expected verify to fail as specified " +
-              "bad parent for classloader" );
-    }
-
-    public void testConfig4()
-        throws Exception
-    {
-        try
-        {
-            verifyResource( "config4.xml" );
-        }
-        catch( final Throwable t )
-        {
-            return;
-        }
-
-        fail( "Expected verify to fail as specified " +
-              "non existing ClassLoader in Join " +
-              "classloader-ref" );
-    }
-
-    public void testConfig5()
-        throws Exception
-    {
-        try
-        {
-            verifyResource( "config5.xml" );
-        }
-        catch( final Throwable t )
-        {
-            return;
-        }
-
-        fail( "Expected verify to fail as specified " +
-              "default classloader does not exist." );
-    }
-
-    public void testConfig6()
-        throws Exception
-    {
-        try
-        {
-            verifyResource( "config6.xml" );
-        }
-        catch( final Throwable t )
-        {
-            return;
-        }
-
-        fail( "Expected verify to fail as specified " +
-              "join classloader links against same " +
-              "classloader multiple times." );
-    }
-
-    public void testConfig7()
-        throws Exception
-    {
-        try
-        {
-            verifyResource( "config7.xml" );
-        }
-        catch( final Throwable t )
-        {
-            return;
-        }
-
-        fail( "Expected verify to fail as specified " +
-              "classloader has entry multiple times." );
-    }
-
-    public void testConfig8()
-        throws Exception
-    {
-        try
-        {
-            verifyResource( "config8.xml" );
-        }
-        catch( final Throwable t )
-        {
-            return;
-        }
-
-        fail( "Expected verify to fail as a " +
-              "join had same name as another join." );
-    }
-
-    public void testConfig9()
-        throws Exception
-    {
-        try
-        {
-            verifyResource( "config9.xml" );
-        }
-        catch( final Throwable t )
-        {
-            return;
-        }
-
-        fail( "Expected verify to fail as a " +
-              "join had same name as a " +
-              "classloader." );
-    }
-
-    public void testConfig10()
-        throws Exception
-    {
-        try
-        {
-            verifyResource( "config10.xml" );
-        }
-        catch( final Throwable t )
-        {
-            return;
-        }
-
-        fail( "Expected verify to fail as a " +
-              "join had same name as another " +
-              "predefined classloader." );
-    }
-
-    public void testConfig11()
-        throws Exception
-    {
-        try
-        {
-            verifyResource( "config11.xml" );
-        }
-        catch( final Throwable t )
-        {
-            return;
-        }
-
-        fail( "Expected verify to fail as a " +
-              "classloader had same name as another " +
-              "classloader." );
-    }
-
-    public void testConfig12()
-        throws Exception
-    {
-        try
-        {
-            verifyResource( "config12.xml" );
-        }
-        catch( final Throwable t )
-        {
-            return;
-        }
-
-        fail( "Expected verify to fail as a " +
-              "classloader had same name as a " +
-              "predefined classloader." );
-    }
-
-    public void testConfig13()
-        throws Exception
-    {
-        try
-        {
-            final ClassLoaderSetMetaData defs =
-                buildFromResource( "config13.xml" );
-            verify( defs );
-        }
-        catch( final Throwable t )
-        {
-            return;
-        }
-
-        fail( "Expected verify to fail as a " +
-              "predefined had same name as another " +
-              "predefined." );
-    }
-
-    public void testConfig14()
-        throws Exception
-    {
-        try
-        {
-            final ClassLoaderSetMetaData defs =
-                buildFromResource( "config14.xml" );
-            verify( defs );
-        }
-        catch( final Throwable t )
-        {
-            return;
-        }
-
-        fail( "Expected verify to fail as a " +
-              "predefined an empty name." );
-    }
-
-    public void testConfig15()
-        throws Exception
-    {
-        try
-        {
-            final ClassLoaderSetMetaData defs =
-                buildFromResource( "config15.xml" );
-            verify( defs );
-        }
-        catch( final Throwable t )
-        {
-            return;
-        }
-
-        fail( "Expected verify to fail as a " +
-              "predefined has same name as join." );
-    }
-
-    public void testConfig16()
-        throws Exception
-    {
-        try
-        {
-            final ClassLoaderSetMetaData defs =
-                buildFromResource( "config16.xml" );
-            verify( defs );
-        }
-        catch( final Throwable t )
-        {
-            fail( "Should be able to have a join as default classloader." );
-        }
-    }
-
-    public void testConfig17()
-        throws Exception
-    {
-        try
-        {
-            verifyResource( "config17.xml" );
-        }
-        catch( final Throwable t )
-        {
-            fail( "Expected verify to pass" );
-        }
-    }
-
-    private void verifyResource( final String resource )
-        throws Exception
-    {
-        final ClassLoaderSetMetaData defs = buildFromResource( resource );
-        verify( defs );
-    }
-
-    private void verify( final ClassLoaderSetMetaData defs )
-        throws Exception
-    {
-        final ClassLoaderVerifier verifier = new ClassLoaderVerifier();
-        verifier.verifyClassLoaderSet( defs );
-    }
-}
</pre></div>
<hr /><a name="file46" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>config17.xml</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config17.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config17.xml
--- config17.xml	31 Mar 2004 03:18:55 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,35 +0,0 @@
</small></pre><pre class="diff" id="removed">-&lt;classloaders default="join2" version="1.0"&gt;
-    &lt;predefined name="*system*"/&gt;
-
-    &lt;classloader name="cl1" parent="*system*"&gt;
-        &lt;entry location="someFile.jar"/&gt;
-        &lt;entry location="someOtherFile.jar"/&gt;
-        &lt;fileset dir="someDir"&gt;
-            &lt;include name="**/*.jar"/&gt;
-            &lt;include name="**/*.bar"/&gt;
-            &lt;exclude name="**/unwanted/*"/&gt;
-        &lt;/fileset&gt;
-        &lt;extension
-            name="Avalon.Framework"
-            specification-version="4.1"
-            specification-vendor="Apache"
-            implementation-version="4.1"
-            implementation-vendor="Apache"
-            implementation-vendor-id="Apache"
-            implementation-url="http://jakarta..."/&gt;
-    &lt;/classloader&gt;
-
-    &lt;classloader name="cl2" parent="*system*"&gt;
-        &lt;entry location="aFile.jar"/&gt;
-    &lt;/classloader&gt;
-
-    &lt;join name="join1"&gt;
-        &lt;classloader-ref name="cl1"/&gt;
-    &lt;/join&gt;
-
-    &lt;join name="join2"&gt;
-        &lt;classloader-ref name="cl1"/&gt;
-        &lt;classloader-ref name="cl2"/&gt;
-    &lt;/join&gt;
-
-&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file47" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>config3.xml</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config3.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config3.xml
--- config3.xml	31 Mar 2004 03:18:55 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,6 +0,0 @@
</small></pre><pre class="diff" id="removed">-&lt;classloaders default="*system*" version="1.0"&gt;
-    &lt;predefined name="*system*"/&gt;
-
-    &lt;classloader name="cl" parent="missing-parent"/&gt;
-
-&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file48" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>config7.xml</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config7.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config7.xml
--- config7.xml	31 Mar 2004 03:18:55 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,9 +0,0 @@
</small></pre><pre class="diff" id="removed">-&lt;classloaders default="*system*" version="1.0"&gt;
-    &lt;predefined name="*system*"/&gt;
-
-    &lt;classloader name="cl" parent="*system*"&gt;
-        &lt;entry location="someFile.jar"/&gt;
-        &lt;entry location="someFile.jar"/&gt;
-    &lt;/classloader&gt;
-
-&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file49" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>config6.xml</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config6.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config6.xml
--- config6.xml	31 Mar 2004 03:18:55 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,9 +0,0 @@
</small></pre><pre class="diff" id="removed">-&lt;classloaders default="*system*" version="1.0"&gt;
-    &lt;predefined name="*system*"/&gt;
-
-    &lt;join name="jl"&gt;
-        &lt;classloader-ref name="*system*"/&gt;
-        &lt;classloader-ref name="*system*"/&gt;
-    &lt;/join&gt;
-
-&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file50" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier">verifier</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>config16.xml</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/verifier/test/config16.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config16.xml
--- config16.xml	31 Mar 2004 03:18:55 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,5 +0,0 @@
</small></pre><pre class="diff" id="removed">-&lt;classloaders default="X" version="1.0"&gt;
-    &lt;join name="X"&gt;
-    &lt;/join&gt;
-
-&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file51" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>config1.xml</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/test/config1.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config1.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ config1.xml	19 Apr 2004 22:19:24 -0000	1.1
@@ -0,0 +1,43 @@
</small></pre><pre class="diff" id="added">+&lt;classloaders default="*system*" version="1.0"&gt;
+    &lt;predefined name="*system*"/&gt;
+
+    &lt;classloader name="LOADER_1" parent="*system*"&gt;
+        &lt;entry location="cl1.jar"/&gt;
+    &lt;/classloader&gt;
+
+    &lt;classloader name="LOADER_2" parent="*system*"&gt;
+        &lt;entry location="cl2.jar"/&gt;
+    &lt;/classloader&gt;
+
+    &lt;classloader name="LOADER_3" parent="*system*"&gt;
+        &lt;fileset dir="."&gt;
+            &lt;include name="**/*.jar"/&gt;
+            &lt;exclude name="SAR-INF/lib/*.jar"/&gt;
+        &lt;/fileset&gt;
+    &lt;/classloader&gt;
+
+    &lt;classloader name="LOADER_4" parent="LOADER_1"&gt;
+        &lt;fileset dir="."&gt;
+            &lt;include name="SAR-INF/lib/*.jar"/&gt;
+        &lt;/fileset&gt;
+    &lt;/classloader&gt;
+
+    &lt;classloader name="LOADER_5" parent="LOADER_1"&gt;
+        &lt;fileset dir="."&gt;
+            &lt;include name="SAR-INF/**/cl4.jar"/&gt;
+        &lt;/fileset&gt;
+    &lt;/classloader&gt;
+
+    &lt;classloader name="LOADER_6" parent="LOADER_1"&gt;
+        &lt;fileset dir="SAR-INF"&gt;
+            &lt;include name="lib/cl4.jar"/&gt;
+        &lt;/fileset&gt;
+    &lt;/classloader&gt;
+
+    &lt;join name="JOIN_1"&gt;
+        &lt;classloader-ref name="LOADER_1"/&gt;
+        &lt;classloader-ref name="LOADER_2"/&gt;
+    &lt;/join&gt;
+
+
+&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file52" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>DataConstants.java</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/test/DataConstants.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N DataConstants.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ DataConstants.java	19 Apr 2004 22:19:24 -0000	1.1
@@ -0,0 +1,28 @@
</small></pre><pre class="diff" id="added">+/*
+ * Copyright (C) The Spice Group. All rights reserved.
+ *
+ * This software is published under the terms of the Spice
+ * Software License version 1.1, a copy of which has been included
+ * with this distribution in the LICENSE.txt file.
+ */
+package org.codehaus.loom.classman.test;
+
+import org.codehaus.loom.extension.Extension;
+
+/**
+ * Constants used in the tests.
+ *
+ * @author Peter Donald
+ * @version $Revision: 1.1 $ $Date: 2004/04/19 22:19:24 $
+ */
+public interface DataConstants
+{
+    String DATA1_RESOURCE = "org/codehaus/loom/classman/test/data/cl1/Resource.properties";
+    String DATA1_CLASS = "org.codehaus.loom.classman.test.data.cl1.Data1";
+    String DATA1_CLASS2 = "org.codehaus.loom.classman.test.data.cl1.Data2";
+    String DATA2_CLASS = "org.codehaus.loom.classman.test.data.cl2.CL2Data";
+    String DATA3_CLASS = "org.codehaus.loom.classman.test.data.cl3.CL3Data";
+    String DATA4_CLASS = "org.codehaus.loom.classman.test.data.cl4.CL4Data";
+    Extension EXTENSION =
+        new Extension( "Foo-Ext", null, null, null, null, null, null );
+}
</pre></div>
<hr /><a name="file53" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>AbstractLoaderTestCase.java</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/test/AbstractLoaderTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N AbstractLoaderTestCase.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ AbstractLoaderTestCase.java	19 Apr 2004 22:19:24 -0000	1.1
@@ -0,0 +1,82 @@
</small></pre><pre class="diff" id="added">+/*
+ * Copyright (C) The Spice Group. All rights reserved.
+ *
+ * This software is published under the terms of the Spice
+ * Software License version 1.1, a copy of which has been included
+ * with this distribution in the LICENSE.txt file.
+ */
+package org.codehaus.loom.classman.test;
+
+import java.io.File;
+import java.io.InputStream;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import junit.framework.TestCase;
+
+import org.codehaus.loom.classman.metadata.ClassLoaderSetMetaData;
+import org.codehaus.loom.classman.reader.ClassLoaderSetReader;
+import org.w3c.dom.Document;
+
+/**
+ * An abstract base class for all the tests that performed on loaders.
+ *
+ * @author Peter Donald
+ * @version $Revision: 1.1 $ $Date: 2004/04/19 22:19:24 $
+ */
+public abstract class AbstractLoaderTestCase
+    extends TestCase
+{
+    protected ClassLoaderSetMetaData buildFromStream( final InputStream stream )
+        throws Exception
+    {
+        try
+        {
+            final ClassLoaderSetReader builder = new ClassLoaderSetReader();
+            final Document config = load( stream );
+            return builder.build( config.getDocumentElement() );
+        }
+        catch( final Exception e )
+        {
+            fail( "Error building ClassLoaderSet: " + e );
+            return null;
+        }
+    }
+
+    protected Document load( final InputStream stream )
+        throws Exception
+    {
+        final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        //factory.setValidating(true);
+        //factory.setNamespaceAware(true);
+        final DocumentBuilder builder = factory.newDocumentBuilder();
+        return builder.parse( stream );
+    }
+
+    protected ClassLoaderSetMetaData buildFromResource( final String resource )
+        throws Exception
+    {
+        final InputStream stream = getClass().getResourceAsStream( resource );
+        if( null == stream )
+        {
+            fail( "Missing resource " + resource );
+        }
+        return buildFromStream( stream );
+    }
+
+    protected File getBaseDirectory()
+    {
+        final String basedir = System.getProperty( "basedir", "." );
+        final File root = new File( basedir );
+        File baseDirectory = new File( root, "target/test-classes" );
+        if( !baseDirectory.exists() )
+        {
+            baseDirectory = new File( root, "target/classes" );
+        }
+
+        if( !baseDirectory.exists() )
+        {
+            fail( "Unable to locate base test directory" );
+        }
+        return baseDirectory;
+    }
+}
</pre></div>
<hr /><a name="file54" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>IntegrationTestCase.java</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/test/IntegrationTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N IntegrationTestCase.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ IntegrationTestCase.java	19 Apr 2004 22:19:24 -0000	1.1
@@ -0,0 +1,142 @@
</small></pre><pre class="diff" id="added">+/*
+ * Copyright (C) The Spice Group. All rights reserved.
+ *
+ * This software is published under the terms of the Spice
+ * Software License version 1.1, a copy of which has been included
+ * with this distribution in the LICENSE.txt file.
+ */
+package org.codehaus.loom.classman.test;
+
+import java.io.File;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.codehaus.loom.classman.builder.LoaderBuilder;
+import org.codehaus.loom.classman.builder.SimpleLoaderResolver;
+import org.codehaus.loom.classman.metadata.ClassLoaderSetMetaData;
+import org.codehaus.loom.classman.verifier.ClassLoaderVerifier;
+
+/**
+ *
+ * @author Peter Donald
+ * @version $Revision: 1.1 $ $Date: 2004/04/19 22:19:24 $
+ */
+public class IntegrationTestCase
+    extends AbstractLoaderTestCase
+{
+    public void testPresence()
+        throws Exception
+    {
+        final Map map = buildClassLoaders( "config1.xml" );
+
+        assertPresent( map, "LOADER_1" );
+        assertPresent( map, "LOADER_2" );
+        assertPresent( map, "LOADER_3" );
+        assertPresent( map, "LOADER_4" );
+        assertPresent( map, "LOADER_5" );
+        assertPresent( map, "LOADER_6" );
+        assertPresent( map, "JOIN_1" );
+
+        final String[] files1 = new String[]{"cl1.jar"};
+        final String[] files2 = new String[]{"cl2.jar"};
+        final String[] files3 = new String[]{"cl1.jar", "cl2.jar"};
+        final String[] files4 =
+            new String[]{"SAR-INF/lib/cl3.jar", "SAR-INF/lib/cl4.jar"};
+        final String[] files5 = new String[]{"SAR-INF/lib/cl4.jar"};
+        final String[] files6 = new String[]{"SAR-INF/lib/cl4.jar"};
+
+        assertURLsPresent( map, "LOADER_1", files1 );
+        assertURLsPresent( map, "LOADER_2", files2 );
+        assertURLsPresent( map, "LOADER_3", files3 );
+        assertURLsPresent( map, "LOADER_4", files4 );
+        assertURLsPresent( map, "LOADER_5", files5 );
+        assertURLsPresent( map, "LOADER_6", files6 );
+
+        assertClassPresent( map, "LOADER_1", DataConstants.DATA1_CLASS );
+        assertClassPresent( map, "LOADER_1", DataConstants.DATA1_CLASS2 );
+        assertClassPresent( map, "LOADER_2", DataConstants.DATA2_CLASS );
+        assertClassPresent( map, "LOADER_3", DataConstants.DATA1_CLASS );
+        assertClassPresent( map, "LOADER_3", DataConstants.DATA1_CLASS2 );
+        assertClassPresent( map, "LOADER_3", DataConstants.DATA2_CLASS );
+        assertClassPresent( map, "LOADER_4", DataConstants.DATA1_CLASS );
+        assertClassPresent( map, "LOADER_4", DataConstants.DATA1_CLASS2 );
+        assertClassPresent( map, "LOADER_4", DataConstants.DATA3_CLASS );
+        assertClassPresent( map, "LOADER_4", DataConstants.DATA4_CLASS );
+        assertClassPresent( map, "LOADER_5", DataConstants.DATA1_CLASS );
+        assertClassPresent( map, "LOADER_5", DataConstants.DATA1_CLASS2 );
+        assertClassPresent( map, "LOADER_5", DataConstants.DATA4_CLASS );
+        assertClassPresent( map, "LOADER_6", DataConstants.DATA1_CLASS );
+        assertClassPresent( map, "LOADER_6", DataConstants.DATA1_CLASS2 );
+        assertClassPresent( map, "LOADER_6", DataConstants.DATA4_CLASS );
+        assertClassPresent( map, "JOIN_1", DataConstants.DATA1_CLASS );
+        assertClassPresent( map, "JOIN_1", DataConstants.DATA1_CLASS2 );
+        assertClassPresent( map, "JOIN_1", DataConstants.DATA2_CLASS );
+    }
+
+    private void assertClassPresent( final Map map,
+                                     final String name,
+                                     final String classname )
+    {
+        final ClassLoader classLoader = (ClassLoader)map.get( name );
+        try
+        {
+            classLoader.loadClass( classname );
+        }
+        catch( ClassNotFoundException e )
+        {
+            fail( "Unable to load " + classname + " from " +
+                  name + " classloader" );
+        }
+    }
+
+    private void assertURLsPresent( final Map map,
+                                    final String name,
+                                    final String[] files )
+    {
+        final URLClassLoader classLoader = (URLClassLoader)map.get( name );
+        final URL[] urls = classLoader.getURLs();
+
+        assertEquals( "URL count:", files.length, urls.length );
+        for( int i = 0; i &lt; urls.length; i++ )
+        {
+            final URL url = urls[ i ];
+            final String file = files[ i ];
+            assertTrue( "url=" + url + " ends with " + file,
+                        url.getFile().endsWith( file ) );
+        }
+    }
+
+    private void assertPresent( final Map map,
+                                final String name )
+    {
+        assertTrue( "map.containsKey( '" + name + "' )",
+                    map.containsKey( name ) );
+        /*
+        final Object object = map.get( name );
+        if( object instanceof URLClassLoader )
+        {
+            final URLClassLoader classLoader = (URLClassLoader)object;
+            final URL[] urls = classLoader.getURLs();
+            System.out.println( name + ": " + Arrays.asList( urls ) );
+        }
+        */
+    }
+
+    private Map buildClassLoaders( final String resource )
+        throws Exception
+    {
+        final ClassLoaderSetMetaData metaData =
+            buildFromResource( resource );
+        final ClassLoaderVerifier verifier = new ClassLoaderVerifier();
+        verifier.verifyClassLoaderSet( metaData );
+        final LoaderBuilder builder = new LoaderBuilder();
+        final HashMap predefined = new HashMap();
+        predefined.put( "*system*", ClassLoader.getSystemClassLoader() );
+        final File baseDirectory = getBaseDirectory();
+        final SimpleLoaderResolver resolver =
+            new SimpleLoaderResolver( baseDirectory );
+        return builder.buildClassLoaders( metaData, resolver, predefined );
+    }
+}
</pre></div>
<hr /><a name="file55" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata">testdata</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontai
 ner/loom/support/classman/src/testdata/org/codehaus/loom/classman">classman</a>/<a href="!
http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test/data">data</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test/data/cl1">cl1</a><br /></span>
<div class="fileheader" id="added"><big><b>Resource.properties</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test/data/cl1/Resource.properties?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N Resource.properties
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ Resource.properties	19 Apr 2004 22:19:25 -0000	1.1
@@ -0,0 +1 @@
</small></pre><pre class="diff" id="added">+Some random resource!
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file56" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata">testdata</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontai
 ner/loom/support/classman/src/testdata/org/codehaus/loom/classman">classman</a>/<a href="!
http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test/data">data</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test/data/cl1">cl1</a><br /></span>
<div class="fileheader" id="added"><big><b>Data2.java</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test/data/cl1/Data2.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N Data2.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ Data2.java	19 Apr 2004 22:19:25 -0000	1.1
@@ -0,0 +1,18 @@
</small></pre><pre class="diff" id="added">+/*
+ * Copyright (C) The Spice Group. All rights reserved.
+ *
+ * This software is published under the terms of the Spice
+ * Software License version 1.1, a copy of which has been included
+ * with this distribution in the LICENSE.txt file.
+ */
+package org.codehaus.loom.classman.test.data.cl1;
+
+/**
+ *
+ * @author Peter Donald
+ * @version $Revision: 1.1 $ $Date: 2004/04/19 22:19:25 $
+ */
+public class Data2
+{
+    public final static String CROSS_REF = Data1.class.getName();
+}
</pre></div>
<hr /><a name="file57" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata">testdata</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontai
 ner/loom/support/classman/src/testdata/org/codehaus/loom/classman">classman</a>/<a href="!
http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test/data">data</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test/data/cl1">cl1</a><br /></span>
<div class="fileheader" id="added"><big><b>Data1.java</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test/data/cl1/Data1.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N Data1.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ Data1.java	19 Apr 2004 22:19:25 -0000	1.1
@@ -0,0 +1,17 @@
</small></pre><pre class="diff" id="added">+/*
+ * Copyright (C) The Spice Group. All rights reserved.
+ *
+ * This software is published under the terms of the Spice
+ * Software License version 1.1, a copy of which has been included
+ * with this distribution in the LICENSE.txt file.
+ */
+package org.codehaus.loom.classman.test.data.cl1;
+
+/**
+ *
+ * @author Peter Donald
+ * @version $Revision: 1.1 $ $Date: 2004/04/19 22:19:25 $
+ */
+public class Data1
+{
+}
</pre></div>
<hr /><a name="file58" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata">testdata</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org
 /jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman">classman</a>!
/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test/data">data</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test/data/cl1">cl1</a><br /></span>
<div class="fileheader" id="removed"><big><b>Data1.java</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test/data/cl1/Data1.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N Data1.java
--- Data1.java	31 Mar 2004 03:18:56 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,17 +0,0 @@
</small></pre><pre class="diff" id="removed">-/*
- * Copyright (C) The Spice Group. All rights reserved.
- *
- * This software is published under the terms of the Spice
- * Software License version 1.1, a copy of which has been included
- * with this distribution in the LICENSE.txt file.
- */
-package org.jcontainer.loom.classman.test.data.cl1;
-
-/**
- *
- * @author Peter Donald
- * @version $Revision: 1.1 $ $Date: 2004/03/31 03:18:56 $
- */
-public class Data1
-{
-}
</pre></div>
<hr /><a name="file59" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata">testdata</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org
 /jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman">classman</a>!
/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test/data">data</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test/data/cl1">cl1</a><br /></span>
<div class="fileheader" id="removed"><big><b>Data2.java</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test/data/cl1/Data2.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N Data2.java
--- Data2.java	31 Mar 2004 03:18:56 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,18 +0,0 @@
</small></pre><pre class="diff" id="removed">-/*
- * Copyright (C) The Spice Group. All rights reserved.
- *
- * This software is published under the terms of the Spice
- * Software License version 1.1, a copy of which has been included
- * with this distribution in the LICENSE.txt file.
- */
-package org.jcontainer.loom.classman.test.data.cl1;
-
-/**
- *
- * @author Peter Donald
- * @version $Revision: 1.1 $ $Date: 2004/03/31 03:18:56 $
- */
-public class Data2
-{
-    public final static String CROSS_REF = Data1.class.getName();
-}
</pre></div>
<hr /><a name="file60" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata">testdata</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org
 /jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman">classman</a>!
/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test/data">data</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test/data/cl1">cl1</a><br /></span>
<div class="fileheader" id="removed"><big><b>Resource.properties</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test/data/cl1/Resource.properties?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N Resource.properties
--- Resource.properties	31 Mar 2004 03:18:56 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1 +0,0 @@
</small></pre><pre class="diff" id="removed">-Some random resource!
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file61" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata">testdata</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org
 /jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman">classman</a>!
/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test/data">data</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test/data/cl3">cl3</a><br /></span>
<div class="fileheader" id="removed"><big><b>CL3Data.java</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test/data/cl3/CL3Data.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N CL3Data.java
--- CL3Data.java	31 Mar 2004 03:18:56 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,20 +0,0 @@
</small></pre><pre class="diff" id="removed">-/*
- * Copyright (C) The Spice Group. All rights reserved.
- *
- * This software is published under the terms of the Spice
- * Software License version 1.1, a copy of which has been included
- * with this distribution in the LICENSE.txt file.
- */
-package org.jcontainer.loom.classman.test.data.cl3;
-
-import org.jcontainer.loom.classman.test.data.cl1.Data1;
-
-/**
- *
- * @author Peter Donald
- * @version $Revision: 1.1 $ $Date: 2004/03/31 03:18:56 $
- */
-public class CL3Data
-{
-    public final static String CROSS_REF = Data1.class.getName();
-}
</pre></div>
<hr /><a name="file62" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/runtime">runtime</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/runtime/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>JoinClassLoaderTestCase.java</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/runtime/test/JoinClassLoaderTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N JoinClassLoaderTestCase.java
--- JoinClassLoaderTestCase.java	31 Mar 2004 03:18:55 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,141 +0,0 @@
</small></pre><pre class="diff" id="removed">-/*
- * Copyright (C) The Spice Group. All rights reserved.
- *
- * This software is published under the terms of the Spice
- * Software License version 1.1, a copy of which has been included
- * with this distribution in the LICENSE.txt file.
- */
-package org.jcontainer.loom.classman.runtime.test;
-
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.Enumeration;
-import org.jcontainer.loom.classman.runtime.JoinClassLoader;
-import org.jcontainer.loom.classman.test.AbstractLoaderTestCase;
-import org.jcontainer.loom.classman.test.DataConstants;
-
-/**
- * Unit test for join classloader.
- *
- * @author Peter Donald
- * @version $Revision: 1.1 $ $Date: 2004/03/31 03:18:55 $
- */
-public class JoinClassLoaderTestCase
-    extends AbstractLoaderTestCase
-{
-    public void testJoinClassLoader()
-        throws Exception
-    {
-        if( System.getProperty( "gump", "false" ).equals( "true" ) )
-        {
-            //Can't test the rest of this as it requires
-            //explicit classloader setup that gump ignores.
-            return;
-        }
-
-        final URLClassLoader cl1 = createClassLoader( "cl1.jar" );
-        final URLClassLoader cl2 = createClassLoader( "cl2.jar" );
-        final ClassLoader[] cls = new ClassLoader[]{cl1, cl2};
-        final JoinClassLoader join =
-            new JoinClassLoader( cls, ClassLoader.getSystemClassLoader() );
-        try
-        {
-            join.loadClass( DataConstants.DATA1_CLASS );
-        }
-        catch( ClassNotFoundException e )
-        {
-            fail( "Unable to load Data1 from cl1 classloader" );
-        }
-        try
-        {
-            join.loadClass( DataConstants.DATA2_CLASS );
-        }
-        catch( ClassNotFoundException e )
-        {
-            fail( "Unable to load CL2Data from cl2 classloader" );
-        }
-        try
-        {
-            join.loadClass( "i.no.exist" );
-            fail( "Expected that would be unable to load non-existent class" );
-        }
-        catch( ClassNotFoundException e )
-        {
-        }
-
-        try
-        {
-            assertEquals( "Loading from system classloader",
-                          Integer.class,
-                          join.loadClass( Integer.class.getName() ) );
-        }
-        catch( ClassNotFoundException e )
-        {
-            fail( "Unable to load Integer from classloader" );
-        }
-
-        final URL url1 = join.getResource( DataConstants.DATA1_RESOURCE );
-        assertNotNull( "Loading " + DataConstants.DATA1_RESOURCE + " from c1 classloader",
-                       url1 );
-        final URL url2 = join.getResource( "noexist.txt" );
-        assertNull( "Loading noexist.txt from c1 classloader", url2 );
-
-        final Enumeration resources1 = join.getResources( DataConstants.DATA1_RESOURCE );
-        assertNotNull( "Loading set of " + DataConstants.DATA1_RESOURCE + " from c1 classloader",
-                       resources1 );
-        assertTrue( "Count of resource from classloader", resources1.hasMoreElements() );
-        assertEquals( "Resource found from classloader", url1, resources1.nextElement() );
-
-        assertTrue( "Second Count of resource from classloader", !resources1.hasMoreElements() );
-
-        final Enumeration resources2 = join.getResources( "noexist.txt" );
-        assertNotNull( "Loading set of noexist.txt from c1 classloader", resources2 );
-        assertTrue( "Count of noexist.txt from classloader", !resources2.hasMoreElements() );
-
-        try
-        {
-            ClassLoader.getSystemClassLoader().loadClass( DataConstants.DATA1_CLASS );
-        }
-        catch( ClassNotFoundException e )
-        {
-            return;
-        }
-        fail( "Able to load Data1 from system classloader" );
-    }
-
-    public void testCtorNullsInClassLoaderSet()
-        throws Exception
-    {
-        try
-        {
-            new JoinClassLoader( null,
-                                 ClassLoader.getSystemClassLoader() );
-            fail( "Expected a NPE" );
-        }
-        catch( NullPointerException e )
-        {
-            assertEquals( "NPE type", "classLoaders", e.getMessage() );
-        }
-        try
-        {
-            new JoinClassLoader( new ClassLoader[]{null},
-                                 ClassLoader.getSystemClassLoader() );
-            fail( "Expected a NPE" );
-        }
-        catch( NullPointerException e )
-        {
-            assertEquals( "NPE type", "classLoaders[0]", e.getMessage() );
-        }
-    }
-
-    private URLClassLoader createClassLoader( final String filename ) throws MalformedURLException
-    {
-        final File baseDirectory = getBaseDirectory();
-        final File file = new File( baseDirectory, filename );
-        final URL url = file.toURL();
-        final URL[] urls = new URL[]{url};
-        return new URLClassLoader( urls, ClassLoader.getSystemClassLoader() );
-    }
-}
</pre></div>
<hr /><a name="file63" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/builder">builder</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/builder/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>TestLoaderResolver.java</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/builder/test/TestLoaderResolver.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N TestLoaderResolver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ TestLoaderResolver.java	19 Apr 2004 22:19:25 -0000	1.1
@@ -0,0 +1,51 @@
</small></pre><pre class="diff" id="added">+/*
+ * Copyright (C) The Spice Group. All rights reserved.
+ *
+ * This software is published under the terms of the Spice
+ * Software License version 1.1, a copy of which has been included
+ * with this distribution in the LICENSE.txt file.
+ */
+package org.codehaus.loom.classman.builder.test;
+
+import org.codehaus.loom.classman.builder.SimpleLoaderResolver;
+import org.codehaus.loom.classman.test.DataConstants;
+import org.codehaus.loom.extension.Extension;
+
+import java.io.File;
+import java.net.URL;
+import java.util.Set;
+
+/**
+ *
+ * @author Peter Donald
+ * @version $Revision: 1.1 $ $Date: 2004/04/19 22:19:25 $
+ */
+class TestLoaderResolver
+    extends SimpleLoaderResolver
+{
+    public TestLoaderResolver( final File baseDirectory )
+    {
+        super( baseDirectory );
+    }
+
+    public URL resolveExtension( final Extension extension )
+        throws Exception
+    {
+        if( extension == DataConstants.EXTENSION )
+        {
+            return new URL( "file:/" );
+        }
+        else
+        {
+            return super.resolveExtension( extension );
+        }
+    }
+
+    protected void scanDependencies( Extension[] required,
+                                     Extension[] available,
+                                     Set dependencies,
+                                     Set unsatisfied )
+    {
+        super.scanDependencies( required, available, dependencies, unsatisfied );
+    }
+}
</pre></div>
<hr /><a name="file64" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/builder">builder</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/builder/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>SimpleLoaderResolverTestCase.java</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/builder/test/SimpleLoaderResolverTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N SimpleLoaderResolverTestCase.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ SimpleLoaderResolverTestCase.java	19 Apr 2004 22:19:25 -0000	1.1
@@ -0,0 +1,46 @@
</small></pre><pre class="diff" id="added">+/*
+ * Copyright (C) The Spice Group. All rights reserved.
+ *
+ * This software is published under the terms of the Spice
+ * Software License version 1.1, a copy of which has been included
+ * with this distribution in the LICENSE.txt file.
+ */
+package org.codehaus.loom.classman.builder.test;
+
+import java.net.URL;
+
+import org.codehaus.loom.classman.builder.SimpleLoaderResolver;
+import org.codehaus.loom.classman.test.AbstractLoaderTestCase;
+import org.codehaus.loom.classman.test.DataConstants;
+
+/**
+ * Unit test for join classloader.
+ *
+ * @author Peter Donald
+ * @version $Revision: 1.1 $ $Date: 2004/04/19 22:19:25 $
+ */
+public class SimpleLoaderResolverTestCase
+    extends AbstractLoaderTestCase
+{
+    public void testNullBaseDirectory()
+        throws Exception
+    {
+        final SimpleLoaderResolver resolver = new SimpleLoaderResolver( null );
+        final URL url = resolver.resolveURL( "." );
+        assertTrue( "URL is a dir", url.toString().endsWith( "/" ) );
+    }
+
+    public void testNullManager()
+        throws Exception
+    {
+        final SimpleLoaderResolver resolver = new SimpleLoaderResolver( null );
+        try
+        {
+            resolver.resolveExtension( DataConstants.EXTENSION );
+            fail( "Expected resolve extension as resolver unable to implement" );
+        }
+        catch( UnsupportedOperationException e )
+        {
+        }
+    }
+}
</pre></div>
<hr /><a name="file65" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/builder">builder</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/builder/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>LoaderBuilderTestCase.java</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/builder/test/LoaderBuilderTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N LoaderBuilderTestCase.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ LoaderBuilderTestCase.java	19 Apr 2004 22:19:25 -0000	1.1
@@ -0,0 +1,112 @@
</small></pre><pre class="diff" id="added">+/*
+ * Copyright (C) The Spice Group. All rights reserved.
+ *
+ * This software is published under the terms of the Spice
+ * Software License version 1.1, a copy of which has been included
+ * with this distribution in the LICENSE.txt file.
+ */
+package org.codehaus.loom.classman.builder.test;
+
+import java.io.File;
+import java.util.HashMap;
+
+import org.codehaus.loom.classman.builder.LoaderBuilder;
+import org.codehaus.loom.classman.builder.SimpleLoaderResolver;
+import org.codehaus.loom.classman.metadata.ClassLoaderMetaData;
+import org.codehaus.loom.classman.metadata.ClassLoaderSetMetaData;
+import org.codehaus.loom.classman.metadata.FileSetMetaData;
+import org.codehaus.loom.classman.metadata.JoinMetaData;
+import org.codehaus.loom.classman.test.AbstractLoaderTestCase;
+import org.codehaus.loom.classman.test.DataConstants;
+import org.codehaus.loom.extension.Extension;
+
+/**
+ * Unit test for join classloader.
+ *
+ * @author Peter Donald
+ * @version $Revision: 1.1 $ $Date: 2004/04/19 22:19:25 $
+ */
+public class LoaderBuilderTestCase
+    extends AbstractLoaderTestCase
+{
+    public void testMissingClassLoader()
+        throws Exception
+    {
+        final LoaderBuilder builder = new LoaderBuilder();
+        final ClassLoaderMetaData classLoader =
+            new ClassLoaderMetaData( "blah",
+                                     "bad-parent",
+                                     new String[ 0 ],
+                                     new Extension[ 0 ],
+                                     new FileSetMetaData[ 0 ] );
+        final ClassLoaderSetMetaData metadata =
+            new ClassLoaderSetMetaData( "blah",
+                                        new String[ 0 ],
+                                        new ClassLoaderMetaData[]{classLoader},
+                                        new JoinMetaData[ 0 ] );
+        final SimpleLoaderResolver resolver = new SimpleLoaderResolver( null );
+        final HashMap predefined = new HashMap();
+        try
+        {
+            builder.buildClassLoaders( metadata, resolver, predefined );
+            fail( "Expected to fail as unable to find classloader 'bad-parent'" );
+        }
+        catch( Exception e )
+        {
+            assertTrue( "Exception message", -1 != e.getMessage().indexOf( "bad-parent" ) );
+            return;
+        }
+    }
+
+    public void testMissingPredefined()
+        throws Exception
+    {
+        final LoaderBuilder builder = new LoaderBuilder();
+        final ClassLoaderSetMetaData metadata =
+            new ClassLoaderSetMetaData( "*system*",
+                                        new String[]{"*system*"},
+                                        new ClassLoaderMetaData[ 0 ],
+                                        new JoinMetaData[ 0 ] );
+        final SimpleLoaderResolver resolver = new SimpleLoaderResolver( null );
+        final HashMap predefined = new HashMap();
+        try
+        {
+            builder.buildClassLoaders( metadata, resolver, predefined );
+            fail( "Expected to fail as predefined list did " +
+                  "not container predefined specified in metadata" );
+        }
+        catch( Exception e )
+        {
+            assertTrue( "Exception message", -1 != e.getMessage().indexOf( "*system*" ) );
+            return;
+        }
+    }
+
+    public void testExtensions()
+        throws Exception
+    {
+        final LoaderBuilder builder = new LoaderBuilder();
+        final ClassLoaderMetaData classLoader =
+            new ClassLoaderMetaData( "ext",
+                                     "*system*",
+                                     new String[ 0 ],
+                                     new Extension[]{DataConstants.EXTENSION},
+                                     new FileSetMetaData[ 0 ] );
+        final ClassLoaderSetMetaData metadata =
+            new ClassLoaderSetMetaData( "ext",
+                                        new String[]{"*system*"},
+                                        new ClassLoaderMetaData[]{classLoader},
+                                        new JoinMetaData[ 0 ] );
+        final SimpleLoaderResolver resolver = new TestLoaderResolver( new File( "." ) );
+        final HashMap predefined = new HashMap();
+        predefined.put( "*system*", ClassLoader.getSystemClassLoader() );
+        try
+        {
+            builder.buildClassLoaders( metadata, resolver, predefined );
+        }
+        catch( Exception e )
+        {
+            fail( "Unexpected failure to build classloaders with extension: " + e );
+        }
+    }
+}
</pre></div>
<hr /><a name="file66" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java">java</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/java/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/metadata">metadata</a><br /></span>
<div class="fileheader" id="added"><big><b>ClassLoaderMetaData.java</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/metadata/ClassLoaderMetaData.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N ClassLoaderMetaData.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ClassLoaderMetaData.java	19 Apr 2004 22:19:25 -0000	1.1
@@ -0,0 +1,101 @@
</small></pre><pre class="diff" id="added">+/*
+ * Copyright (C) The Spice Group. All rights reserved.
+ *
+ * This software is published under the terms of the Spice
+ * Software License version 1.1, a copy of which has been included
+ * with this distribution in the LICENSE.txt file.
+ */
+package org.codehaus.loom.classman.metadata;
+
+import org.codehaus.loom.extension.Extension;
+
+/**
+ * This class defines a specific classloader, made up of entrys, Extension and
+ * FileSetMetaData objects.
+ *
+ * @author Peter Donald
+ * @version $Revision: 1.1 $ $Date: 2004/04/19 22:19:25 $
+ */
+public class ClassLoaderMetaData
+{
+    /**
+     * The name of the current classloader. This may be used by other
+     * ClassLoader definitions to refer to this ClassLoader.
+     */
+    private final String m_name;
+
+    /** The name of the parent classloader. */
+    private final String m_parent;
+
+    /** The Entrys that are added to this ClassLoader. */
+    private final String[] m_entrys;
+
+    /** The Entrys that are required by this ClassLoader. */
+    private final Extension[] m_extensions;
+
+    /** The Filesets that are added to this ClassLoader. */
+    private final FileSetMetaData[] m_filesets;
+
+    public ClassLoaderMetaData( final String name,
+                                final String parent,
+                                final String[] entrys,
+                                final Extension[] extensions,
+                                final FileSetMetaData[] filesets )
+    {
+        m_name = name;
+        m_parent = parent;
+        m_entrys = entrys;
+        m_extensions = extensions;
+        m_filesets = filesets;
+    }
+
+    /**
+     * Return the name of Classloader.
+     *
+     * @return the name of Classloader.
+     */
+    public String getName()
+    {
+        return m_name;
+    }
+
+    /**
+     * Return the name of parent Classloader.
+     *
+     * @return the name of parent Classloader.
+     */
+    public String getParent()
+    {
+        return m_parent;
+    }
+
+    /**
+     * Return the elements added to Classloader.
+     *
+     * @return the elements added to Classloader.
+     */
+    public String[] getEntrys()
+    {
+        return m_entrys;
+    }
+
+    /**
+     * Return the extensions added to Classloader.
+     *
+     * @return the extensions added to Classloader.
+     */
+    public Extension[] getExtensions()
+    {
+        return m_extensions;
+    }
+
+    /**
+     * Return the filesets added to Classloader.
+     *
+     * @return the filesets added to Classloader.
+     */
+    public FileSetMetaData[] getFilesets()
+    {
+        return m_filesets;
+    }
+}
</pre></div>
<hr /><a name="file67" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java">java</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/java/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/metadata">metadata</a><br /></span>
<div class="fileheader" id="added"><big><b>ClassLoaderSetMetaData.java</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/metadata/ClassLoaderSetMetaData.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N ClassLoaderSetMetaData.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ClassLoaderSetMetaData.java	19 Apr 2004 22:19:25 -0000	1.1
@@ -0,0 +1,159 @@
</small></pre><pre class="diff" id="added">+/*
+ * Copyright (C) The Spice Group. All rights reserved.
+ *
+ * This software is published under the terms of the Spice
+ * Software License version 1.1, a copy of which has been included
+ * with this distribution in the LICENSE.txt file.
+ */
+package org.codehaus.loom.classman.metadata;
+
+/**
+ * This class defines a set of ClassLoaders and the default ClassLoader to use.
+ *
+ * @author Peter Donald
+ * @version $Revision: 1.1 $ $Date: 2004/04/19 22:19:25 $
+ */
+public class ClassLoaderSetMetaData
+{
+    /**
+     * The name of the current classloader. This may be used by other
+     * ClassLoader definitions to refer to this ClassLoader.
+     */
+    private final String m_default;
+
+    /** The set of ClassLoaders predefined by the application. */
+    private final String[] m_predefined;
+
+    /** The classloaders defined in set. */
+    private final ClassLoaderMetaData[] m_classLoaders;
+
+    /** The joining classloaders defined in set. */
+    private final JoinMetaData[] m_joins;
+
+    /**
+     * Construct set with specified set and ClassLoaders.
+     *
+     * @param aDefault the name of default ClassLoader
+     * @param classLoaders the ClassLoaders in set
+     */
+    public ClassLoaderSetMetaData( final String aDefault,
+                                   final String[] predefined,
+                                   final ClassLoaderMetaData[] classLoaders,
+                                   final JoinMetaData[] joins )
+    {
+        if( null == aDefault )
+        {
+            throw new NullPointerException( "aDefault" );
+        }
+        if( null == classLoaders )
+        {
+            throw new NullPointerException( "classLoaders" );
+        }
+        if( null == joins )
+        {
+            throw new NullPointerException( "joins" );
+        }
+        if( null == predefined )
+        {
+            throw new NullPointerException( "predefined" );
+        }
+
+        m_default = aDefault;
+        m_predefined = predefined;
+        m_classLoaders = classLoaders;
+        m_joins = joins;
+    }
+
+    /**
+     * Return the default ClassLoader name.
+     *
+     * @return the default ClassLoader name.
+     */
+    public String getDefault()
+    {
+        return m_default;
+    }
+
+    /**
+     * Return the set of predefined ClassLoaders.
+     *
+     * @return the set of predefined ClassLoaders.
+     */
+    public String[] getPredefined()
+    {
+        return m_predefined;
+    }
+
+    /**
+     * Return the classloaders in set.
+     *
+     * @return the classloaders in set.
+     */
+    public ClassLoaderMetaData[] getClassLoaders()
+    {
+        return m_classLoaders;
+    }
+
+    /**
+     * Return the "join" classloaders in set.
+     *
+     * @return the "join" classloaders in set.
+     */
+    public JoinMetaData[] getJoins()
+    {
+        return m_joins;
+    }
+
+    /**
+     * Return true if specified name, designates a predefined ClassLoader.
+     *
+     * @return true if specified name, designates a predefined ClassLoader.
+     */
+    public boolean isPredefined( final String name )
+    {
+        for( int i = 0; i &lt; m_predefined.length; i++ )
+        {
+            if( m_predefined[ i ].equals( name ) )
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Return the classloader with specified name.
+     *
+     * @return the classloader with specified name
+     */
+    public ClassLoaderMetaData getClassLoader( final String name )
+    {
+        for( int i = 0; i &lt; m_classLoaders.length; i++ )
+        {
+            final ClassLoaderMetaData classLoader = m_classLoaders[ i ];
+            if( classLoader.getName().equals( name ) )
+            {
+                return classLoader;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Return the "join" classloader with specified name.
+     *
+     * @return the "join" classloader with specified name
+     */
+    public JoinMetaData getJoin( final String name )
+    {
+        for( int i = 0; i &lt; m_joins.length; i++ )
+        {
+            final JoinMetaData join = m_joins[ i ];
+            if( join.getName().equals( name ) )
+            {
+                return join;
+            }
+        }
+        return null;
+    }
+}
</pre></div>
<hr /><a name="file68" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java">java</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/java/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/metadata">metadata</a><br /></span>
<div class="fileheader" id="added"><big><b>FileSetMetaData.java</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/metadata/FileSetMetaData.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N FileSetMetaData.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ FileSetMetaData.java	19 Apr 2004 22:19:25 -0000	1.1
@@ -0,0 +1,81 @@
</small></pre><pre class="diff" id="added">+/*
+ * Copyright (C) The Spice Group. All rights reserved.
+ *
+ * This software is published under the terms of the Spice
+ * Software License version 1.1, a copy of which has been included
+ * with this distribution in the LICENSE.txt file.
+ */
+package org.codehaus.loom.classman.metadata;
+
+/**
+ * This class represent a set of files anchored in a base directory. The set of
+ * files is determined by the include and excludes that are specified for
+ * fileset. If no includes or excludes are specified then all files in base
+ * directory are added to fileset.
+ *
+ * @author Peter Donald
+ * @version $Revision: 1.1 $ $Date: 2004/04/19 22:19:25 $
+ */
+public class FileSetMetaData
+{
+    /** The base directory from which to apply all the includes/excludes. */
+    private final String m_baseDirectory;
+
+    /** The set of patterns to include in fileset. */
+    private final String[] m_includes;
+
+    /** The set of patterns to exclude from fileset. */
+    private final String[] m_excludes;
+
+    public FileSetMetaData( final String baseDirectory,
+                            final String[] includes,
+                            final String[] excludes )
+    {
+        if( null == baseDirectory )
+        {
+            throw new NullPointerException( "baseDirectory" );
+        }
+        if( null == includes )
+        {
+            throw new NullPointerException( "includes" );
+        }
+        if( null == excludes )
+        {
+            throw new NullPointerException( "excludes" );
+        }
+
+        m_baseDirectory = baseDirectory;
+        m_includes = includes;
+        m_excludes = excludes;
+    }
+
+    /**
+     * Return the base directory of fileset.
+     *
+     * @return the base directory of fileset.
+     */
+    public String getBaseDirectory()
+    {
+        return m_baseDirectory;
+    }
+
+    /**
+     * Return the list of includes for fileset.
+     *
+     * @return the list of includes for fileset.
+     */
+    public String[] getIncludes()
+    {
+        return m_includes;
+    }
+
+    /**
+     * Return the list of excludes for fileset.
+     *
+     * @return the list of excludes for fileset.
+     */
+    public String[] getExcludes()
+    {
+        return m_excludes;
+    }
+}
</pre></div>
<hr /><a name="file69" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java">java</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/java/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/metadata">metadata</a><br /></span>
<div class="fileheader" id="added"><big><b>JoinMetaData.java</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/metadata/JoinMetaData.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N JoinMetaData.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ JoinMetaData.java	19 Apr 2004 22:19:25 -0000	1.1
@@ -0,0 +1,59 @@
</small></pre><pre class="diff" id="added">+/*
+ * Copyright (C) The Spice Group. All rights reserved.
+ *
+ * This software is published under the terms of the Spice
+ * Software License version 1.1, a copy of which has been included
+ * with this distribution in the LICENSE.txt file.
+ */
+package org.codehaus.loom.classman.metadata;
+
+/**
+ * This class defines a classloader that "merges" multiple classloaders. For
+ * this to be successful, it is required that the ClassLoaders contain disjoint
+ * sets of classes (with the exception of classes loaded from the system
+ * classpath).
+ *
+ * @author Peter Donald
+ * @version $Revision: 1.1 $ $Date: 2004/04/19 22:19:25 $
+ */
+public class JoinMetaData
+{
+    /**
+     * The name of the current classloader. This may be used by other
+     * ClassLoader definitions to refer to this ClassLoader.
+     */
+    private final String m_name;
+
+    /** The list of classloaders that are merged in this classloader. */
+    private final String[] m_classloaders;
+
+    /**
+     * The definition for set of classloaders
+     */
+    public JoinMetaData( final String name,
+                         final String[] classloaders )
+    {
+        m_name = name;
+        m_classloaders = classloaders;
+    }
+
+    /**
+     * Return the name of Classloader.
+     *
+     * @return the name of Classloader.
+     */
+    public String getName()
+    {
+        return m_name;
+    }
+
+    /**
+     * Return the list of classloaders that are merged in this classloader
+     *
+     * @return the list of classloaders that are merged in this classloader
+     */
+    public String[] getClassloaders()
+    {
+        return m_classloaders;
+    }
+}
</pre></div>
<hr /><a name="file70" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java">java</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/java/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/builder">builder</a><br /></span>
<div class="fileheader" id="added"><big><b>LoaderResolver.java</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/builder/LoaderResolver.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N LoaderResolver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ LoaderResolver.java	19 Apr 2004 22:19:25 -0000	1.1
@@ -0,0 +1 @@
</small></pre><pre class="diff" id="added">+/*
 * Copyright (C) The Spice Group. All rights reserved.
 *
 * This software is published under the terms of the Spice
 * Software License version 1.1, a copy of which has been included
 * with this distribution in the LICENSE.txt file.
 */
package org.codehaus.loom.classman.builder;

import java.net.URL;

import org.codehaus.loom.extension.Extension;

/**
 * This is the class that clients provide to implement a specific policy with
 * respect to how ClassLoader hierarchy is constructed.
 *
 * @author Peter Donald
 * @version $Revision: 1.1 $ $Date: 2004/04/19 22:19:25 $
 */
public interface LoaderResolver
{
    /**
     * Resolve an Extension to a URL. The URL that locates the "Optional
     * Package" that provides specified Extension.
     *
     * @param extension the extension
     * @return the URL that locates the "Optional Package" that provides
     *         specified Extension.
     * @throws Exception if unable to locate Extension
     */
    URL resolveExtension( Extension extension )
        throws Exception;

    /**
     * Resolve a string into a URL. This allows resolvers to anchor URLs using
     * relative URL or by handling non-standard URL protocols (such as
     * "sar:/SAR-INF/lib/cornerstone.jar").
     *
     * @param location the location to transform into a URL
     * @return the URL
     * @throws Exception if unable to resolve URL
     */
    URL resolveURL( String location )
        throws Exception;

    /**
     * Resolve a fileset to a set of URLs.
     *
     * @param baseDirectory the Base directory of fileset
     * @return the set of URLs making up fileset
     * @throws Exception if unable to resolve fileset
     */
    URL[] resolveFileSet( String baseDirectory,
                          String[] includes,
                          String[] excludes )
        throws Exception;

    /**
     * Create a Join ClassLoader for specified ClassLoaders.
     *
     * @param classLoaders the ClassLoaders to "join"
     * @return the joined ClassLoader
     * @throws Exception if unable to create classloader
     */
    ClassLoader createJoinClassLoader( ClassLoader[] classLoaders )
        throws Exception;

    /**
     * Create a ClassLoader with specified parent and containing specified
     * URLs.
     *
     * @param parent the parent classloader
     * @param urls the URLs that the ClassLoader should contain
     * @return the newly created ClassLoader
     * @throws Exception if unable to create classloader
     */
    ClassLoader createClassLoader( ClassLoader parent, URL[] urls )
        throws Exception;
}
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file71" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java">java</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/java/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/builder">builder</a><br /></span>
<div class="fileheader" id="added"><big><b>LoaderBuilder.java</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/builder/LoaderBuilder.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N LoaderBuilder.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ LoaderBuilder.java	19 Apr 2004 22:19:25 -0000	1.1
@@ -0,0 +1 @@
</small></pre><pre class="diff" id="added">+/*
 * Copyright (C) The Spice Group. All rights reserved.
 *
 * This software is published under the terms of the Spice
 * Software License version 1.1, a copy of which has been included
 * with this distribution in the LICENSE.txt file.
 */
package org.codehaus.loom.classman.builder;

import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import org.codehaus.loom.classman.metadata.ClassLoaderMetaData;
import org.codehaus.loom.classman.metadata.ClassLoaderSetMetaData;
import org.codehaus.loom.classman.metadata.FileSetMetaData;
import org.codehaus.loom.classman.metadata.JoinMetaData;
import org.codehaus.loom.extension.Extension;

/**
 * This class is responsible for building the set of actual {@link
 * java.lang.ClassLoader}s out of the {@link ClassLoaderSetMetaData} objects.
 *
 * @author Peter Donald
 * @version $Revision: 1.1 $ $Date: 2004/04/19 22:19:25 $
 */
public class LoaderBuilder
{
    /**
     * Build a map of all the classloaders defined by the metadata.
     *
     * @param metadata the metadata
     * @param resolver the reoslver to use to resolve files/urls etc
     * @param predefined the map containing all the predefined classloaders.
     * @return the map of created classloaders
     * @throws Exception if unable to create some classloaders
     */
    public Map buildClassLoaders( final ClassLoaderSetMetaData metadata,
                                  final LoaderResolver resolver,
                                  final Map predefined )
        throws Exception
    {
        final HashMap classLoaders = new HashMap();

        addPredefined( metadata.getPredefined(), predefined, classLoaders );
        addAllClassLoaders( metadata, resolver, classLoaders );
        addAllJoins( metadata, resolver, classLoaders );

        return classLoaders;
    }

    /**
     * Add all the classloaders to the result metaData.
     *
     * @param metaData the metadata
     * @param resolver the resolver to use
     * @param classLoaders the result map of classloaders
     * @throws Exception if unable to create the classloaders
     */
    private void addAllClassLoaders( final ClassLoaderSetMetaData metaData,
                                     final LoaderResolver resolver,
                                     final Map classLoaders )
        throws Exception
    {
        final ClassLoaderMetaData[] classLoaderDefs = metaData.getClassLoaders();
        for( int i = 0; i &lt; classLoaderDefs.length; i++ )
        {
            final String name = classLoaderDefs[ i ].getName();
            processClassLoader( name, metaData, resolver, classLoaders );
        }
    }

    /**
     * Add all the classloaders to the result metaData.
     *
     * @param metaData the metadata
     * @param resolver the resolver to use
     * @param classLoaders the result map of classloaders
     * @throws Exception if unable to create the classloaders
     */
    private void addAllJoins( final ClassLoaderSetMetaData metaData,
                              final LoaderResolver resolver,
                              final Map classLoaders )
        throws Exception
    {
        final JoinMetaData[] joins = metaData.getJoins();
        for( int i = 0; i &lt; joins.length; i++ )
        {
            final String name = joins[ i ].getName();
            processClassLoader( name, metaData, resolver, classLoaders );
        }
    }

    /**
     * Process a ClassLoader entry, create ClassLoader and add it to result
     * map.
     *
     * @param name the name of classloader
     * @param set the set of metatadata
     * @param resolver the resolver for construction
     * @param classLoaders the result map of classloaders
     * @throws Exception if unable to process classloader
     */
    private void processClassLoader( final String name,
                                     final ClassLoaderSetMetaData set,
                                     final LoaderResolver resolver,
                                     final Map classLoaders )
        throws Exception
    {
        if( classLoaders.containsKey( name ) )
        {
            return;
        }

        final ClassLoaderMetaData regular = set.getClassLoader( name );
        if( null != regular )
        {
            //Make sure parent classloader is built
            processClassLoader( regular.getParent(),
                                set,
                                resolver,
                                classLoaders );

            final ClassLoader classLoader =
                buildRegularClassLoader( regular, resolver, classLoaders );
            classLoaders.put( name, classLoader );
        }
        else
        {
            final JoinMetaData join = set.getJoin( name );
            if( null == join )
            {
                final String message = "Unknown classloader " + name;
                throw new Exception( message );
            }
            //Make sure all our dependencies are processed
            final String[] names = join.getClassloaders();
            for( int i = 0; i &lt; names.length; i++ )
            {
                processClassLoader( names[ i ], set, resolver, classLoaders );
            }
            final ClassLoader classLoader =
                buildJoinClassLoader( join, resolver, classLoaders );
            classLoaders.put( name, classLoader );
        }
    }

    /**
     * Create a Join ClassLoader.
     *
     * @param join the metadata
     * @param resolver the resolver to use to resolve URLs etc
     * @param classLoaders the already created ClassLoaders
     * @return the created JoinClassLoader
     */
    private ClassLoader buildJoinClassLoader( final JoinMetaData join,
                                              final LoaderResolver resolver,
                                              final Map classLoaders )
        throws Exception
    {
        final ArrayList list = new ArrayList();
        final String[] names = join.getClassloaders();
        for( int i = 0; i &lt; names.length; i++ )
        {
            list.add( classLoaders.get( names[ i ] ) );
        }

        final ClassLoader[] elements =
            (ClassLoader[])list.toArray( new ClassLoader[ list.size() ] );

        return resolver.createJoinClassLoader( elements );
    }

    /**
     * Build a regular classloader with entries, extensions and filesets fully
     * resolved.
     *
     * @param metaData the classloader definition
     * @param resolver the resolver to use when creating URLs/Extensions etc
     * @param classLoaders the already created ClassLoaders
     * @return the created ClassLoader
     * @throws Exception if unable to create ClassLoader
     */
    private ClassLoader buildRegularClassLoader(
        final ClassLoaderMetaData metaData,
        final LoaderResolver resolver,
        final Map classLoaders )
        throws Exception
    {
        final ClassLoader parent =
            (ClassLoader)classLoaders.get( metaData.getParent() );
        final ArrayList urlSet = new ArrayList();

        final String[] entrys = metaData.getEntrys();
        for( int i = 0; i &lt; entrys.length; i++ )
        {
            final URL url = resolver.resolveURL( entrys[ i ] );
            urlSet.add( url );
        }

        //Add all filesets defined for classloader
        final FileSetMetaData[] filesets = metaData.getFilesets();
        for( int i = 0; i &lt; filesets.length; i++ )
        {
            final FileSetMetaData fileset = filesets[ i ];
            final String baseDirectory = fileset.getBaseDirectory();
            final String[] includes = fileset.getIncludes();
            final String[] excludes = fileset.getExcludes();
            final URL[] urls =
                resolver.resolveFileSet( baseDirectory,
                                         includes,
                                         excludes );
            for( int j = 0; j &lt; urls.length; j++ )
            {
                urlSet.add( urls[ j ] );
            }
        }

        final Extension[] extensions = metaData.getExtensions();
        for( int i = 0; i &lt; extensions.length; i++ )
        {
            final URL url = resolver.resolveExtension( extensions[ i ] );
            urlSet.add( url );
        }

        final URL[] urls = (URL[])urlSet.toArray( new URL[ urlSet.size() ] );
        return resolver.createClassLoader( parent, urls );
    }

    /**
     * Add all the predefined classloaders to the set of available
     * ClassLoaders.
     *
     * @param entrys the names of predefined classloaders
     * @param predefined the map containg predefined classloaders
     * @param classLoaders the destination map of classloaders
     */
    private void addPredefined( final String[] entrys,
                                final Map predefined,
                                final HashMap classLoaders )
    {
        for( int i = 0; i &lt; entrys.length; i++ )
        {
            final String name = entrys[ i ];
            final ClassLoader classLoader =
                (ClassLoader)predefined.get( name );
            if( null == classLoader )
            {
                final String message =
                    "Missing predefined ClassLoader " + name;
                throw new IllegalArgumentException( message );
            }
            classLoaders.put( name, classLoader );
        }
    }
}
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file72" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java">java</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/java/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/builder">builder</a><br /></span>
<div class="fileheader" id="added"><big><b>SimpleLoaderResolver.java</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/builder/SimpleLoaderResolver.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N SimpleLoaderResolver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ SimpleLoaderResolver.java	19 Apr 2004 22:19:25 -0000	1.1
@@ -0,0 +1 @@
</small></pre><pre class="diff" id="added">+/*
 * Copyright (C) The Spice Group. All rights reserved.
 *
 * This software is published under the terms of the Spice
 * Software License version 1.1, a copy of which has been included
 * with this distribution in the LICENSE.txt file.
 */
package org.codehaus.loom.classman.builder;

import java.io.File;
import java.io.IOException;
import java.net.JarURLConnection;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.jar.Manifest;

import org.codehaus.loom.classman.runtime.JoinClassLoader;
import org.codehaus.loom.extension.Extension;
import org.codehaus.spice.salt.i18n.ResourceManager;
import org.codehaus.spice.salt.i18n.Resources;
import org.codehaus.spice.salt.io.FileUtil;
import org.codehaus.spice.salt.io.PathMatcher;

/**
 * This is a class that performs resolver that; &lt;ul&gt; &lt;li&gt;creates "Join"
 * ClassLoaders using the  {@link JoinClassLoader} class&lt;/li&gt; &lt;li&gt;creates normal
 * ClassLoaders using a {@link URLClassLoader}. It also makes sure that all
 * dependencies of jars (as declared using the JDK1.3 "Optional Pakcages" Spec)
 * are present in classloader.&lt;/li&gt; &lt;li&gt;The locations are resolved to a single
 * base directiory.&lt;/li&gt; &lt;li&gt;The Extensions are not resolved but may be by
 * subclasses.&lt;/li&gt; &lt;li&gt;FileSets are currently unsupported and throw a {@link
 * UnsupportedOperationException} if attempt to be constructed.&lt;/li&gt; &lt;/ul&gt;
 *
 * @author Peter Donald
 * @version $Revision: 1.1 $ $Date: 2004/04/19 22:19:25 $
 */
public class SimpleLoaderResolver
    implements LoaderResolver
{
    /** i18n utils for presenting messages. */
    private static final Resources REZ =
        ResourceManager.getPackageResources( SimpleLoaderResolver.class );

    /** The base directory relative to which to aquire files. */
    private File m_baseDirectory;

    /**
     * Create a resolver that resolves all files according to specied
     * baseDirectory.
     *
     * @param baseDirectory the base directory
     */
    public SimpleLoaderResolver( final File baseDirectory )
    {
        setBaseDirectory( baseDirectory );
    }

    /**
     * Retrieve a URL for specified extension.
     *
     * @param extension the extension
     * @return the URL
     * @throws Exception if unable to locate URL for extension
     */
    public URL resolveExtension( final Extension extension )
        throws Exception
    {
        throw new UnsupportedOperationException();
    }

    /**
     * Resolve a location to a particular URL.
     *
     * @param location the location
     * @return the URL
     * @throws Exception if unable to resolve location
     */
    public URL resolveURL( final String location )
        throws Exception
    {
        final File file = getFileFor( location );
        String url = file.toURL().toString();
        if( file.isDirectory() )
        {
            url += "/";
        }
        return new URL( url );
    }

    /**
     * Resolve a fileset.
     *
     * @param baseDirectory the base directory of fileset
     * @param includes the list of ant-style includes
     * @param excludes the list of ant style excludes
     * @return the URLs contained within fileset
     * @throws Exception if unable to resolve fileset
     */
    public URL[] resolveFileSet( final String baseDirectory,
                                 final String[] includes,
                                 final String[] excludes )
        throws Exception
    {
        final File base = getFileFor( "." );
        return resolveFileSet( base, baseDirectory, includes, excludes );
    }

    /**
     * Create a Join ClassLoader for specified ClassLoaders. Use {@link
     * JoinClassLoader} to implement functionality.
     *
     * @param classLoaders the ClassLoaders to "join"
     * @return the joined ClassLoader
     * @throws Exception if unable to create classloader
     */
    public ClassLoader createJoinClassLoader( final ClassLoader[] classLoaders )
        throws Exception
    {
        return new JoinClassLoader( classLoaders,
                                    ClassLoader.getSystemClassLoader() );
    }

    /**
     * Create a ClassLoader with specified parent and containing specified URLs.
     * This implementation just creates it using the default URLClassLoader.
     *
     * @param parent the parent classloader
     * @param urls the URLs that the ClassLoader should contain
     * @return the newly created ClassLoader
     * @throws Exception if unable to create classloader
     */
    public ClassLoader createClassLoader( final ClassLoader parent,
                                          final URL[] urls )
        throws Exception
    {
        final URL[] classpath = determineCompleteClasspath( urls );
        return new URLClassLoader( classpath, parent );
    }

    /**
     * Retrieve the complete classpath given an input set of URLs. The complete
     * classpath includes all URLs for extensions required by the jars
     * (according to the "Optional Package" Spec).
     *
     * @param urls the urls
     * @return the complete set of URLs for classpath
     * @throws Exception if unable to determine complete classpath set
     */
    protected final URL[] determineCompleteClasspath( final URL[] urls )
        throws Exception
    {
        final ArrayList classpathSet = new ArrayList();

        //Add all supplied URLS to classpath
        for( int i = 0; i &lt; urls.length; i++ )
        {
            final URL url = urls[ i ];
            classpathSet.add( url );
        }

        //Add all the optional packages that are declared as
        // dependencies of class path elements
        final File[] files = getOptionalPackagesFor( urls );
        for( int i = 0; i &lt; files.length; i++ )
        {
            final File file = files[ i ];
            classpathSet.add( file.toURL() );
        }

        //Define final classpath with all dependencies added
        return (URL[])classpathSet.toArray( new URL[ classpathSet.size() ] );
    }

    /**
     * Utility class to retrieve a file object for specified location.
     *
     * @param location which to get file for.
     * @return the file for specified location
     */
    protected File getFileFor( final String location )
        throws IOException
    {
        File base = getBaseDirectory();
        if( null == base )
        {
            base = new File( "." );
        }

        return new File( base, location ).getCanonicalFile();
    }

    /**
     * Return the base directory against which to resolve relative files.
     *
     * @return the base directory against which to resolve relative files.
     */
    protected File getBaseDirectory()
    {
        return m_baseDirectory;
    }

    /**
     * Set the base directory.
     *
     * @param baseDirectory the base directory.
     */
    protected void setBaseDirectory( File baseDirectory )
    {
        m_baseDirectory = baseDirectory;
    }

    /**
     * Retrieve the files for the optional packages required by the jars in
     * ClassPath.
     *
     * @param classPath the Classpath array
     * @return the files that need to be added to ClassLoader
     */
    protected final File[] getOptionalPackagesFor( final URL[] classPath )
        throws Exception
    {
        final Manifest[] manifests = getManifests( classPath );
        final Extension[] available = Extension.getAvailable( manifests );
        final Extension[] required = Extension.getRequired( manifests );

        if( isDebugEnabled() )
        {
            final String message1 =
                REZ.format( "available-extensions",
                            Arrays.asList( available ) );
            debug( message1 );
            final String message2 =
                REZ.format( "required-extensions",
                            Arrays.asList( required ) );
            debug( message2 );
        }

        if( 0 == required.length )
        {
            return new File[ 0 ];
        }

        final Set dependencies = new HashSet();
        final Set unsatisfied = new HashSet();

        scanDependencies( required,
                          available,
                          dependencies,
                          unsatisfied );

        final int size = unsatisfied.size();
        if( 0 != size )
        {
            final Iterator iterator = unsatisfied.iterator();
            while( iterator.hasNext() )
            {
                final Extension extension = (Extension)iterator.next();
                final Object[] params = new Object[]
                {
                    extension.getExtensionName(),
                    extension.getSpecificationVendor(),
                    extension.getSpecificationVersion(),
                    extension.getImplementationVendor(),
                    extension.getImplementationVendorID(),
                    extension.getImplementationVersion(),
                    extension.getImplementationURL()
                };
                final String message = REZ.format( "missing.extension",
                                                   params );
                warn( message );
            }

            final String message =
                REZ.format( "unsatisfied.extensions", new Integer( size ) );
            throw new Exception( message );
        }

        if( isDebugEnabled() )
        {
            final String message =
                REZ.format( "optional-packages-added", dependencies );
            debug( message );
        }

        return (File[])dependencies.toArray( new File[ dependencies.size() ] );
    }

    /**
     * Attempt to locate a set of dependencies that transitively satisfy all
     * required extensions.
     *
     * @param required the required extensions
     * @param available the extensions already available
     * @param dependencies the set of dependencies collected by this method
     * @param unsatisfied this method should place any unsatisfied depenencies
     * into this set
     */
    protected void scanDependencies( final Extension[] required,
                                     final Extension[] available,
                                     final Set dependencies,
                                     final Set unsatisfied )
    {
        throw new UnsupportedOperationException();
    }

    /**
     * write out a warning message. Subclasses may overide this method to
     * redirect logging as appropriate.
     *
     * @param message the warning message
     */
    protected void warn( final String message )
    {
    }

    /**
     * Determine if debug messages are turned on. Subclasses should overide this
     * method.
     *
     * @return true if debugging enabled.
     */
    protected boolean isDebugEnabled()
    {
        return false;
    }

    /**
     * write out a debug message. Subclasses may overide this method to redirect
     * logging as appropriate.
     *
     * @param message the debug message
     */
    protected void debug( final String message )
    {
    }

    /**
     * Retrieve all the Manifests from the specified Classlpath.
     *
     * @param classPath the classpath
     * @return the set of manifests on the classpath
     * @throws Exception if there is an error reading manifests from files on
     * classpath
     */
    private Manifest[] getManifests( final URL[] classPath )
        throws Exception
    {
        final ArrayList manifests = new ArrayList();

        for( int i = 0; i &lt; classPath.length; i++ )
        {
            final URL element = classPath[ i ];
            if( element.getFile().endsWith( ".jar" ) )
            {
                try
                {
                    final URL url = new URL( "jar:" + element + "!/" );
                    final JarURLConnection connection =
                        (JarURLConnection)url.openConnection();
                    final Manifest manifest = connection.getManifest();
                    if( null != manifest )
                    {
                        manifests.add( manifest );
                    }
                }
                catch( final IOException ioe )
                {
                    final String message =
                        REZ.format( "bad-classpath-entry", element );
                    throw new Exception( message );
                }
            }
        }

        return (Manifest[])manifests.toArray( new Manifest[ 0 ] );
    }

    /**
     * Resolve a fileset in a particular hierarchy.
     *
     * @param base the file hierarchy to use
     * @param baseDirectory the base directory (relative to base)
     * @param includes the ant-style include patterns
     * @param excludes the ant-style exclude patterns
     * @return the resolved URLs for fileset
     */
    protected final URL[] resolveFileSet( final File base,
                                          final String baseDirectory,
                                          final String[] includes,
                                          final String[] excludes )
    {
        //woefully inefficient .. but then again - no need
        //for efficency here
        final String newBaseDirectory = FileUtil.normalize( baseDirectory );
        final String[] newIncludes = prefixPatterns( newBaseDirectory,
                                                     includes );
        final String[] newExcludes = prefixPatterns( newBaseDirectory,
                                                     excludes );
        final PathMatcher matcher = new PathMatcher( newIncludes,
                                                     newExcludes );
        final File[] files = FileUtil.resolveFileSet( base, matcher );
        try
        {
            return FileUtil.toURLs( files );
        }
        catch( IOException ioe )
        {
            throw new IllegalArgumentException( ioe.getMessage() );
        }
    }

    /**
     * Return a new array with specified prefix added to start of every element
     * in supplied array.
     *
     * @param prefix the prefix
     * @param patterns the source array
     * @return a new array with all elements having prefix added
     */
    private String[] prefixPatterns( final String prefix,
                                     final String[] patterns )
    {
        if( 0 == prefix.length() || ".".equals( prefix ) )
        {
            return patterns;
        }

        final String[] newPatterns = new String[ patterns.length ];
        for( int i = 0; i &lt; newPatterns.length; i++ )
        {
            newPatterns[ i ] = prefix + "/" + patterns[ i ];
        }
        return newPatterns;
    }
}
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file73" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java">java</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/java/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/builder">builder</a><br /></span>
<div class="fileheader" id="added"><big><b>Resources.properties</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/builder/Resources.properties?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N Resources.properties
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ Resources.properties	19 Apr 2004 22:19:25 -0000	1.1
@@ -0,0 +1,8 @@
</small></pre><pre class="diff" id="added">+missing.extension=Unable to locate an extension that is required by application.\nExtension Name: {0}\nSpecification Vendor: {1}\nSpecification Version: {2}\nImplementation Vendor: {3}\nImplementation Vendor-Id: {4}\nImplementation Version: {5}\nImplementation URL: {6}
+unsatisfied.extensions=Missing {0} extensions and thus can not build ClassLoader for application.
+bad-classpath-entry=There is a bad entry ("{0}") on classpath that made it impossible to load a manifest.
+available-extensions=The list of available extensions for application includes; {0}
+required-extensions=The list of required extensions for application includes; {0}
+optional-packages-added=The list of "Optional Packages" added to the application includes; {0}
+classpath-entries=The list of classpath entries for the application includes; {0}
+missing-packagemanager=Unable to resolve Extension as no PackageManager has been specified.
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file74" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/reader">reader</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/reader/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>config4.xml</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/reader/test/config4.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config4.xml
--- config4.xml	31 Mar 2004 03:18:54 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,4 +0,0 @@
</small></pre><pre class="diff" id="removed">-&lt;classloaders default="*system*" version="1.2"&gt;
-    &lt;predefined name="*system*"/&gt;
-
-&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file75" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/reader">reader</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/reader/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>config5.xml</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/reader/test/config5.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config5.xml
--- config5.xml	31 Mar 2004 03:18:54 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,14 +0,0 @@
</small></pre><pre class="diff" id="removed">-&lt;classloaders default="cl1" version="1.0"&gt;
-    &lt;predefined name="*system*"/&gt;
-
-    &lt;classloader name="cl1" parent="*system*"&gt;
-        &lt;extension
-            specification-version="4.1"
-            specification-vendor="Apache"
-            implementation-version="4.1"
-            implementation-vendor="Apache"
-            implementation-vendor-id="Apache"
-            implementation-url="http://jakarta..."/&gt;
-    &lt;/classloader&gt;
-
-&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file76" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/reader">reader</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/reader/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>config1.xml</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/reader/test/config1.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config1.xml
--- config1.xml	31 Mar 2004 03:18:54 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,35 +0,0 @@
</small></pre><pre class="diff" id="removed">-&lt;classloaders default="join2" version="1.0"&gt;
-    &lt;predefined name="*system*"/&gt;
-
-    &lt;classloader name="cl1" parent="*system*"&gt;
-        &lt;entry location="someFile.jar"/&gt;
-        &lt;entry location="someOtherFile.jar"/&gt;
-        &lt;fileset dir="someDir"&gt;
-            &lt;include name="**/*.jar"/&gt;
-            &lt;include name="**/*.bar"/&gt;
-            &lt;exclude name="**/unwanted/*"/&gt;
-        &lt;/fileset&gt;
-        &lt;extension
-            name="Avalon.Framework"
-            specification-version="4.1"
-            specification-vendor="Apache"
-            implementation-version="4.1"
-            implementation-vendor="Apache"
-            implementation-vendor-id="Apache"
-            implementation-url="http://jakarta..." /&gt;
-    &lt;/classloader&gt;
-
-    &lt;classloader name="cl2" parent="*system*"&gt;
-        &lt;entry location="aFile.jar"/&gt;
-    &lt;/classloader&gt;
-
-    &lt;join name="join1"&gt;
-        &lt;classloader-ref name="cl1"/&gt;
-    &lt;/join&gt;
-
-    &lt;join name="join2"&gt;
-        &lt;classloader-ref name="cl1"/&gt;
-        &lt;classloader-ref name="cl2"/&gt;
-    &lt;/join&gt;
-
-&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file77" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/reader">reader</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/reader/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>config2.xml</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/reader/test/config2.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config2.xml
--- config2.xml	31 Mar 2004 03:18:54 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,4 +0,0 @@
</small></pre><pre class="diff" id="removed">-&lt;classloaders version="1.0"&gt;
-    &lt;predefined name="*system*"/&gt;
-
-&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file78" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/reader">reader</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/reader/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>config3.xml</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/reader/test/config3.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config3.xml
--- config3.xml	31 Mar 2004 03:18:54 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,4 +0,0 @@
</small></pre><pre class="diff" id="removed">-&lt;classloaders default="*system*"&gt;
-    &lt;predefined name="*system*"/&gt;
-
-&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file79" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/reader">reader</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/reader/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>ReaderTestCase.java</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/reader/test/ReaderTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N ReaderTestCase.java
--- ReaderTestCase.java	31 Mar 2004 03:18:54 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,187 +0,0 @@
</small></pre><pre class="diff" id="removed">-/*
- * Copyright (C) The Spice Group. All rights reserved.
- *
- * This software is published under the terms of the Spice
- * Software License version 1.1, a copy of which has been included
- * with this distribution in the LICENSE.txt file.
- */
-package org.jcontainer.loom.classman.reader.test;
-
-import org.jcontainer.loom.classman.metadata.ClassLoaderSetMetaData;
-import org.jcontainer.loom.classman.test.AbstractLoaderTestCase;
-
-/**
- * TestCase for {@link org.jcontainer.loom.classman.reader.ClassLoaderSetReader}.
- *
- * @author Peter Donald
- */
-public class ReaderTestCase
-    extends AbstractLoaderTestCase
-{
-    public void testConfig1()
-        throws Exception
-    {
-        final ClassLoaderSetMetaData defs =
-            buildFromResource( "config1.xml" );
-
-        assertEquals( "ClassLoader Predefined Count",
-                      1,
-                      defs.getPredefined().length );
-        assertEquals( "ClassLoader Predefined",
-                      "*system*",
-                      defs.getPredefined()[ 0 ] );
-        assertEquals( "ClassLoader Default",
-                      "join2",
-                      defs.getDefault() );
-        assertEquals( "ClassLoader Count",
-                      2,
-                      defs.getClassLoaders().length );
-        assertEquals( "Join Count",
-                      2,
-                      defs.getJoins().length );
-        assertNotNull( "ClassLoader cl1",
-                       defs.getClassLoader( "cl1" ) );
-        assertNotNull( "ClassLoader cl2",
-                       defs.getClassLoader( "cl2" ) );
-        assertNotNull( "Join join1",
-                       defs.getJoin( "join1" ) );
-        assertNotNull( "Join join2",
-                       defs.getJoin( "join2" ) );
-
-        assertEquals( "ClassLoader cl1.entrys Name",
-                      defs.getClassLoader( "cl1" ).getName(),
-                      "cl1" );
-        assertEquals( "ClassLoader cl1.entrys Count",
-                      defs.getClassLoader( "cl1" ).getEntrys().length,
-                      2 );
-        assertEquals( "ClassLoader cl1.filesets Count",
-                      defs.getClassLoader( "cl1" ).getFilesets().length,
-                      1 );
-        assertEquals( "ClassLoader cl1.extensions Count",
-                      defs.getClassLoader( "cl1" ).getExtensions().length,
-                      1 );
-        assertEquals( "ClassLoader cl1.fileset[0] Dir",
-                      defs.getClassLoader( "cl1" ).getFilesets()[ 0 ].getBaseDirectory(),
-                      "someDir" );
-        assertEquals( "ClassLoader cl1.fileset[0] Include count",
-                      defs.getClassLoader( "cl1" ).getFilesets()[ 0 ].getIncludes().length,
-                      2 );
-        assertEquals( "ClassLoader cl1.fileset[0] Exclude count",
-                      defs.getClassLoader( "cl1" ).getFilesets()[ 0 ].getExcludes().length,
-                      1 );
-        assertEquals( "ClassLoader cl1.fileset[0].include[0] name",
-                      defs.getClassLoader( "cl1" ).getFilesets()[ 0 ].getIncludes()[ 0 ],
-                      "**/*.jar" );
-        assertEquals( "ClassLoader cl1.fileset[0].include[1] name",
-                      defs.getClassLoader( "cl1" ).getFilesets()[ 0 ].getIncludes()[ 1 ],
-                      "**/*.bar" );
-        assertEquals( "ClassLoader cl1.fileset[0].exclude[0] name",
-                      defs.getClassLoader( "cl1" ).getFilesets()[ 0 ].getExcludes()[ 0 ],
-                      "**/unwanted/*" );
-        assertEquals( "ClassLoader cl1.entrys[0] Location",
-                      defs.getClassLoader( "cl1" ).getEntrys()[ 0 ],
-                      "someFile.jar" );
-        assertEquals( "ClassLoader cl1.entrys[1] Location",
-                      defs.getClassLoader( "cl1" ).getEntrys()[ 1 ],
-                      "someOtherFile.jar" );
-
-        assertEquals( "ClassLoader cl2.entrys Name",
-                      defs.getClassLoader( "cl2" ).getName(),
-                      "cl2" );
-        assertEquals( "ClassLoader cl2.entrys Count",
-                      defs.getClassLoader( "cl2" ).getEntrys().length,
-                      1 );
-        assertEquals( "ClassLoader cl2.filesets Count",
-                      defs.getClassLoader( "cl2" ).getFilesets().length,
-                      0 );
-        assertEquals( "ClassLoader cl2.extensions Count",
-                      defs.getClassLoader( "cl2" ).getExtensions().length,
-                      0 );
-        assertEquals( "ClassLoader cl2.entrys[0] Location",
-                      defs.getClassLoader( "cl2" ).getEntrys()[ 0 ],
-                      "aFile.jar" );
-
-        assertEquals( "Join join1.refs Name",
-                      defs.getJoin( "join1" ).getName(),
-                      "join1" );
-        assertEquals( "Join join1.refs Count",
-                      defs.getJoin( "join1" ).getClassloaders().length,
-                      1 );
-        assertEquals( "Join join1.refs[0] Name",
-                      defs.getJoin( "join1" ).getClassloaders()[ 0 ],
-                      "cl1" );
-
-        assertEquals( "Join join2.refs Name",
-                      defs.getJoin( "join2" ).getName(),
-                      "join2" );
-        assertEquals( "Join join2.refs Count",
-                      defs.getJoin( "join2" ).getClassloaders().length,
-                      2 );
-        assertEquals( "Join join2.refs[0] Name",
-                      defs.getJoin( "join2" ).getClassloaders()[ 0 ],
-                      "cl1" );
-        assertEquals( "Join join2.refs[1] Name",
-                      defs.getJoin( "join2" ).getClassloaders()[ 1 ],
-                      "cl2" );
-    }
-
-    public void testConfig2()
-        throws Exception
-    {
-        try
-        {
-            buildFromResource( "config2.xml" );
-        }
-        catch( final Throwable t )
-        {
-            return;
-        }
-        fail( "Should have failed as loaded a " +
-              "configuration with no default set" );
-    }
-
-    public void testConfig3()
-        throws Exception
-    {
-        try
-        {
-            buildFromResource( "config3.xml" );
-        }
-        catch( final Throwable t )
-        {
-            return;
-        }
-        fail( "Should have failed as loaded a " +
-              "configuration with no version set" );
-    }
-
-    public void testConfig4()
-        throws Exception
-    {
-        try
-        {
-            buildFromResource( "config4.xml" );
-        }
-        catch( final Throwable t )
-        {
-            return;
-        }
-        fail( "Should have failed as loaded a " +
-              "configuration with bad version" );
-    }
-
-    public void testConfig5()
-        throws Exception
-    {
-        try
-        {
-            buildFromResource( "config5.xml" );
-        }
-        catch( final Throwable t )
-        {
-            return;
-        }
-        fail( "Should have failed as loaded a " +
-              "configuration with extension with null name" );
-    }
-}
</pre></div>
<hr /><a name="file80" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/builder">builder</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/builder/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>TestLoaderResolver.java</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/builder/test/TestLoaderResolver.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N TestLoaderResolver.java
--- TestLoaderResolver.java	31 Mar 2004 03:18:54 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,50 +0,0 @@
</small></pre><pre class="diff" id="removed">-/*
- * Copyright (C) The Spice Group. All rights reserved.
- *
- * This software is published under the terms of the Spice
- * Software License version 1.1, a copy of which has been included
- * with this distribution in the LICENSE.txt file.
- */
-package org.jcontainer.loom.classman.builder.test;
-
-import org.jcontainer.loom.classman.builder.SimpleLoaderResolver;
-import org.jcontainer.loom.classman.test.DataConstants;
-import org.jcontainer.loom.extension.Extension;
-import java.io.File;
-import java.net.URL;
-import java.util.Set;
-
-/**
- *
- * @author Peter Donald
- * @version $Revision: 1.1 $ $Date: 2004/03/31 03:18:54 $
- */
-class TestLoaderResolver
-    extends SimpleLoaderResolver
-{
-    public TestLoaderResolver( final File baseDirectory )
-    {
-        super( baseDirectory );
-    }
-
-    public URL resolveExtension( final Extension extension )
-        throws Exception
-    {
-        if( extension == DataConstants.EXTENSION )
-        {
-            return new URL( "file:/" );
-        }
-        else
-        {
-            return super.resolveExtension( extension );
-        }
-    }
-
-    protected void scanDependencies( Extension[] required,
-                                     Extension[] available,
-                                     Set dependencies,
-                                     Set unsatisfied )
-    {
-        super.scanDependencies( required, available, dependencies, unsatisfied );
-    }
-}
</pre></div>
<hr /><a name="file81" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/builder">builder</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/builder/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>SimpleLoaderResolverTestCase.java</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/builder/test/SimpleLoaderResolverTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N SimpleLoaderResolverTestCase.java
--- SimpleLoaderResolverTestCase.java	31 Mar 2004 03:18:54 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,45 +0,0 @@
</small></pre><pre class="diff" id="removed">-/*
- * Copyright (C) The Spice Group. All rights reserved.
- *
- * This software is published under the terms of the Spice
- * Software License version 1.1, a copy of which has been included
- * with this distribution in the LICENSE.txt file.
- */
-package org.jcontainer.loom.classman.builder.test;
-
-import java.net.URL;
-import org.jcontainer.loom.classman.builder.SimpleLoaderResolver;
-import org.jcontainer.loom.classman.test.AbstractLoaderTestCase;
-import org.jcontainer.loom.classman.test.DataConstants;
-
-/**
- * Unit test for join classloader.
- *
- * @author Peter Donald
- * @version $Revision: 1.1 $ $Date: 2004/03/31 03:18:54 $
- */
-public class SimpleLoaderResolverTestCase
-    extends AbstractLoaderTestCase
-{
-    public void testNullBaseDirectory()
-        throws Exception
-    {
-        final SimpleLoaderResolver resolver = new SimpleLoaderResolver( null );
-        final URL url = resolver.resolveURL( "." );
-        assertTrue( "URL is a dir", url.toString().endsWith( "/" ) );
-    }
-
-    public void testNullManager()
-        throws Exception
-    {
-        final SimpleLoaderResolver resolver = new SimpleLoaderResolver( null );
-        try
-        {
-            resolver.resolveExtension( DataConstants.EXTENSION );
-            fail( "Expected resolve extension as resolver unable to implement" );
-        }
-        catch( UnsupportedOperationException e )
-        {
-        }
-    }
-}
</pre></div>
<hr /><a name="file82" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/builder">builder</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/builder/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>LoaderBuilderTestCase.java</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/builder/test/LoaderBuilderTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N LoaderBuilderTestCase.java
--- LoaderBuilderTestCase.java	31 Mar 2004 03:18:54 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,111 +0,0 @@
</small></pre><pre class="diff" id="removed">-/*
- * Copyright (C) The Spice Group. All rights reserved.
- *
- * This software is published under the terms of the Spice
- * Software License version 1.1, a copy of which has been included
- * with this distribution in the LICENSE.txt file.
- */
-package org.jcontainer.loom.classman.builder.test;
-
-import java.io.File;
-import java.util.HashMap;
-import org.jcontainer.loom.classman.builder.LoaderBuilder;
-import org.jcontainer.loom.classman.builder.SimpleLoaderResolver;
-import org.jcontainer.loom.classman.metadata.ClassLoaderMetaData;
-import org.jcontainer.loom.classman.metadata.ClassLoaderSetMetaData;
-import org.jcontainer.loom.classman.metadata.FileSetMetaData;
-import org.jcontainer.loom.classman.metadata.JoinMetaData;
-import org.jcontainer.loom.classman.test.AbstractLoaderTestCase;
-import org.jcontainer.loom.classman.test.DataConstants;
-import org.jcontainer.loom.extension.Extension;
-
-/**
- * Unit test for join classloader.
- *
- * @author Peter Donald
- * @version $Revision: 1.1 $ $Date: 2004/03/31 03:18:54 $
- */
-public class LoaderBuilderTestCase
-    extends AbstractLoaderTestCase
-{
-    public void testMissingClassLoader()
-        throws Exception
-    {
-        final LoaderBuilder builder = new LoaderBuilder();
-        final ClassLoaderMetaData classLoader =
-            new ClassLoaderMetaData( "blah",
-                                     "bad-parent",
-                                     new String[ 0 ],
-                                     new Extension[ 0 ],
-                                     new FileSetMetaData[ 0 ] );
-        final ClassLoaderSetMetaData metadata =
-            new ClassLoaderSetMetaData( "blah",
-                                        new String[ 0 ],
-                                        new ClassLoaderMetaData[]{classLoader},
-                                        new JoinMetaData[ 0 ] );
-        final SimpleLoaderResolver resolver = new SimpleLoaderResolver( null );
-        final HashMap predefined = new HashMap();
-        try
-        {
-            builder.buildClassLoaders( metadata, resolver, predefined );
-            fail( "Expected to fail as unable to find classloader 'bad-parent'" );
-        }
-        catch( Exception e )
-        {
-            assertTrue( "Exception message", -1 != e.getMessage().indexOf( "bad-parent" ) );
-            return;
-        }
-    }
-
-    public void testMissingPredefined()
-        throws Exception
-    {
-        final LoaderBuilder builder = new LoaderBuilder();
-        final ClassLoaderSetMetaData metadata =
-            new ClassLoaderSetMetaData( "*system*",
-                                        new String[]{"*system*"},
-                                        new ClassLoaderMetaData[ 0 ],
-                                        new JoinMetaData[ 0 ] );
-        final SimpleLoaderResolver resolver = new SimpleLoaderResolver( null );
-        final HashMap predefined = new HashMap();
-        try
-        {
-            builder.buildClassLoaders( metadata, resolver, predefined );
-            fail( "Expected to fail as predefined list did " +
-                  "not container predefined specified in metadata" );
-        }
-        catch( Exception e )
-        {
-            assertTrue( "Exception message", -1 != e.getMessage().indexOf( "*system*" ) );
-            return;
-        }
-    }
-
-    public void testExtensions()
-        throws Exception
-    {
-        final LoaderBuilder builder = new LoaderBuilder();
-        final ClassLoaderMetaData classLoader =
-            new ClassLoaderMetaData( "ext",
-                                     "*system*",
-                                     new String[ 0 ],
-                                     new Extension[]{DataConstants.EXTENSION},
-                                     new FileSetMetaData[ 0 ] );
-        final ClassLoaderSetMetaData metadata =
-            new ClassLoaderSetMetaData( "ext",
-                                        new String[]{"*system*"},
-                                        new ClassLoaderMetaData[]{classLoader},
-                                        new JoinMetaData[ 0 ] );
-        final SimpleLoaderResolver resolver = new TestLoaderResolver( new File( "." ) );
-        final HashMap predefined = new HashMap();
-        predefined.put( "*system*", ClassLoader.getSystemClassLoader() );
-        try
-        {
-            builder.buildClassLoaders( metadata, resolver, predefined );
-        }
-        catch( Exception e )
-        {
-            fail( "Unexpected failure to build classloaders with extension: " + e );
-        }
-    }
-}
</pre></div>
<hr /><a name="file83" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java">java</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/java/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/reader">reader</a><br /></span>
<div class="fileheader" id="added"><big><b>classloader.dtd</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/reader/classloader.dtd?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N classloader.dtd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ classloader.dtd	19 Apr 2004 22:19:25 -0000	1.1
@@ -0,0 +1,138 @@
</small></pre><pre class="diff" id="added">+&lt;!--
+
+   This is the DTD defining the ClassLoader 1.0
+   descriptor (XML) file format/syntax.
+
+   Author: Peter Donald
+
+   This descriptor is used to describe a mechanism of defining
+   a set of ClassLoaders and the arrangment of specified ClassLoaders.
+
+   Copyright (C) The Spice Group. All rights reserved.
+
+   This software is published under the terms of the Spice
+   Software License version 1.1, a copy of which has been included
+   with this distribution in the LICENSE.txt file.
+
+  --&gt;
+
+&lt;!--
+The classloaders is the document root, it defines:
+
+join 	       the join classloaders
+classloader  the regular classloaders
+--&gt;
+&lt;!ELEMENT classloaders (predefined*,classloader*,join*)&gt;
+&lt;!ATTLIST classloaders id ID #IMPLIED
+xmlns CDATA #FIXED "http://jakarta.apache.org/avalon/dtds/phoenix/classloaders_1_0.dtd" &gt;
+&lt;!ATTLIST classloaders
+default CDATA #REQUIRED
+version CDATA #REQUIRED &gt;
+
+&lt;!--
+The classloader element describes a regular classloader It defines:
+
+Attributes:
+name	        the name of classloader type. Must be a string
+             containing alphanumeric characters, '.', '-', '_' and
+             starting with a letter or a '_'.
+parent 	     the name of the parent classloader
+
+Elements:
+entry 	      an entry in classloader
+fileset 	    an fileset in classloader
+extension    an extension in classloader
+--&gt;
+&lt;!ELEMENT classloader          (entry*,fileset*,extension*)&gt;
+&lt;!ATTLIST classloader
+name CDATA #REQUIRED
+parent CDATA #REQUIRED &gt;
+
+&lt;!--
+The predefined element defines a predefined classloader. It defines:
+
+Attributes:
+name	        the name of classloader.
+--&gt;
+&lt;!ELEMENT predefined EMPTY&gt;
+&lt;!ATTLIST predefined name CDATA #REQUIRED &gt;
+
+&lt;!--
+The classloader element describes a regular classloader It defines:
+
+Attributes:
+name	        the name of classloader type. Must be a string
+             containing alphanumeric characters, '.', '-', '_' and
+             starting with a letter or a '_'.
+
+Elements:
+classloader-ref  a reference to all classloaders that are joined
+--&gt;
+&lt;!ELEMENT join          (classloader-ref*)&gt;
+&lt;!ATTLIST join name CDATA #REQUIRED &gt;
+
+&lt;!--
+The classloader-ref defines a ClassLoader that are part of join.
+It defines:
+
+Attributes:
+name     the name of other classloader that will join with
+--&gt;
+&lt;!ELEMENT classloader-ref EMPTY&gt;
+&lt;!ATTLIST classloader-ref name CDATA #REQUIRED&gt;
+
+&lt;!--
+The entry describes a entry in ClassLoader. It defines:
+
+Attributes:
+location     the location (URL) to add to classloader
+--&gt;
+&lt;!ELEMENT entry EMPTY&gt;
+&lt;!ATTLIST entry location CDATA #REQUIRED&gt;
+
+&lt;!--
+The classloader element describes a regular classloader It defines:
+
+Attributes:
+name	        the name of classloader type. Must be a string
+             containing alphanumeric characters, '.', '-', '_' and
+             starting with a letter or a '_'.
+
+Elements:
+classloader-ref  a reference to all classloaders that are joined
+--&gt;
+&lt;!ELEMENT fileset          ((include|exclude)*)&gt;
+&lt;!ATTLIST fileset dir CDATA #REQUIRED &gt;
+
+&lt;!--
+The entry describes a include for fileset. It defines:
+
+Attributes:
+name     the pattern to include
+--&gt;
+&lt;!ELEMENT include EMPTY&gt;
+&lt;!ATTLIST include name CDATA #REQUIRED&gt;
+
+&lt;!--
+The entry describes a exclude for fileset. It defines:
+
+Attributes:
+name     the pattern to exclude
+--&gt;
+&lt;!ELEMENT exclude EMPTY&gt;
+&lt;!ATTLIST exclude name CDATA #REQUIRED&gt;
+
+
+&lt;!--
+The extension describes a extension for ClassLoader.
+--&gt;
+&lt;!ELEMENT extension EMPTY&gt;
+&lt;!ATTLIST extension
+name CDATA #REQUIRED
+specification-version CDATA #IMPLIED
+specification-vendor CDATA #IMPLIED
+implementation-version CDATA #IMPLIED
+implementation-vendor CDATA #IMPLIED
+implementation-vendor-id CDATA #IMPLIED
+implementation-url CDATA #IMPLIED
+&gt;
</pre></div>
<hr /><a name="file84" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java">java</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/java/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/reader">reader</a><br /></span>
<div class="fileheader" id="added"><big><b>ClassLoaderSetReader.java</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/reader/ClassLoaderSetReader.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N ClassLoaderSetReader.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ClassLoaderSetReader.java	19 Apr 2004 22:19:25 -0000	1.1
@@ -0,0 +1 @@
</small></pre><pre class="diff" id="added">+/*
 * Copyright (C) The Spice Group. All rights reserved.
 *
 * This software is published under the terms of the Spice
 * Software License version 1.1, a copy of which has been included
 * with this distribution in the LICENSE.txt file.
 */
package org.codehaus.loom.classman.reader;

import java.util.ArrayList;

import org.codehaus.loom.classman.metadata.ClassLoaderMetaData;
import org.codehaus.loom.classman.metadata.ClassLoaderSetMetaData;
import org.codehaus.loom.classman.metadata.FileSetMetaData;
import org.codehaus.loom.classman.metadata.JoinMetaData;
import org.codehaus.loom.extension.Extension;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

/**
 * This class builds a {@link ClassLoaderSetMetaData} object from specified
 * configuration.
 *
 * @author Peter Donald
 * @version $Revision: 1.1 $ $Date: 2004/04/19 22:19:25 $
 */
public class ClassLoaderSetReader
{
    /**
     * Build ClassLoader MetaData from a DOM tree.
     *
     * @param config the root element
     * @return the meta data
     * @throws Exception if malformed DOM
     */
    public ClassLoaderSetMetaData build( final Element config )
        throws Exception
    {
        final String defaultClassLoader =
            config.getAttribute( "default" );
        if( isUnspecified( defaultClassLoader ) )
        {
            final String message = "Default classloader not specified.";
            throw new Exception( message );
        }

        final String version =
            config.getAttribute( "version" );
        if( !"1.0".equals( version ) )
        {
            final String message = "Bad version:" + version;
            throw new Exception( message );
        }

        final NodeList joinConfigs =
            config.getElementsByTagName( "join" );
        final JoinMetaData[] joins = buildJoins( joinConfigs );

        final NodeList clConfigs =
            config.getElementsByTagName( "classloader" );

        final ClassLoaderMetaData[] classloaders =
            buildClassLoaders( clConfigs );

        final NodeList predefinedConfigs =
            config.getElementsByTagName( "predefined" );

        final String[] predefined =
            buildPredefined( predefinedConfigs );

        return new ClassLoaderSetMetaData( defaultClassLoader,
                                           predefined,
                                           classloaders,
                                           joins );
    }

    /**
     * Parse out a set of predefined classloaders from specified nodes.
     *
     * @param configs the nodes to process
     * @return the predefined classloaders
     */
    private String[] buildPredefined( final NodeList configs )
    {
        final ArrayList predefines = new ArrayList();

        final int length = configs.getLength();
        for( int i = 0; i &lt; length; i++ )
        {
            final Element element = (Element)configs.item( i );
            final String predefined = element.getAttribute( "name" );
            predefines.add( predefined );
        }

        return (String[])predefines.toArray( new String[ predefines.size() ] );
    }

    /**
     * Build an array of ClassLoader meta datas from node list.
     *
     * @param configs the nodes to process
     * @return the classloaders
     */
    private ClassLoaderMetaData[] buildClassLoaders( final NodeList configs )
        throws Exception
    {
        final ArrayList loaders = new ArrayList();
        final int length = configs.getLength();

        for( int i = 0; i &lt; length; i++ )
        {
            final Element item = (Element)configs.item( i );
            final ClassLoaderMetaData loader = buildLoader( item );
            loaders.add( loader );
        }

        return (ClassLoaderMetaData[])loaders.toArray(
            new ClassLoaderMetaData[ loaders.size() ] );
    }

    /**
     * Build a ClassLoader meta datas from element.
     *
     * @param config the nodes to process
     * @return the classloader
     */
    private ClassLoaderMetaData buildLoader( final Element config )
        throws Exception
    {
        final String name = config.getAttribute( "name" );
        final String parent = config.getAttribute( "parent" );

        final String[] entrys =
            buildEntrys( config.getElementsByTagName( "entry" ) );
        final Extension[] extensions =
            buildExtensions( config.getElementsByTagName( "extension" ) );
        final FileSetMetaData[] fileSets =
            buildFileSets( config.getElementsByTagName( "fileset" ) );
        return new ClassLoaderMetaData( name, parent, entrys,
                                        extensions, fileSets );
    }

    /**
     * Build and array of extensions
     *
     * @param configs the nodes to process
     * @return an array of extensions
     */
    private Extension[] buildExtensions( final NodeList configs )
        throws Exception
    {
        final ArrayList extensions = new ArrayList();

        final int length = configs.getLength();
        for( int i = 0; i &lt; length; i++ )
        {
            final Extension extension =
                buildExtension( (Element)configs.item( i ) );
            extensions.add( extension );
        }

        return (Extension[])extensions.toArray(
            new Extension[ extensions.size() ] );
    }

    /**
     * Build an extension from a DOM element.
     *
     * @param config the node to process
     * @return an extension
     */
    private Extension buildExtension( final Element config )
        throws Exception
    {
        final String name = config.getAttribute( "name" );
        if( isUnspecified( name ) )
        {
            final String message = "Missing name from extension";
            throw new Exception( message );
        }
        final String specVersion =
            config.getAttribute( "specification-version" );
        final String specVendor =
            config.getAttribute( "specification-vendor" );
        final String implVersion =
            config.getAttribute( "implementation-version" );
        final String implVendor =
            config.getAttribute( "implementation-vendor" );
        final String implVendorID =
            config.getAttribute( "implementation-vendor-id" );
        final String implURL =
            config.getAttribute( "implementation-url" );

        return new Extension( name, specVersion, specVendor,
                              implVersion, implVendor, implVendorID,
                              implURL );
    }

    /**
     * Build and array of file sets.
     *
     * @param configs the nodes to process
     * @return an array of file sets
     */
    private FileSetMetaData[] buildFileSets( final NodeList configs )
    {
        final ArrayList fileSets = new ArrayList();

        final int length = configs.getLength();
        for( int i = 0; i &lt; length; i++ )
        {
            final FileSetMetaData fileSet =
                buildFileSet( (Element)configs.item( i ) );
            fileSets.add( fileSet );
        }

        return (FileSetMetaData[])fileSets.toArray(
            new FileSetMetaData[ fileSets.size() ] );
    }

    /**
     * Build a fileset from a DOM element.
     *
     * @param config the node to process
     * @return a fileset
     */
    private FileSetMetaData buildFileSet( final Element config )
    {
        final String dir = config.getAttribute( "dir" );
        final String[] includes =
            buildSelectors( config.getElementsByTagName( "include" ) );
        final String[] excludes =
            buildSelectors( config.getElementsByTagName( "exclude" ) );
        return new FileSetMetaData( dir, includes, excludes );
    }

    /**
     * Build and array of selectors (ie includes/excludes).
     *
     * @param configs the nodes to process
     * @return an array of selectors
     */
    private String[] buildSelectors( final NodeList configs )
    {
        final ArrayList selectors = new ArrayList();

        final int length = configs.getLength();
        for( int i = 0; i &lt; length; i++ )
        {
            final Element element = (Element)configs.item( i );
            final String name = element.getAttribute( "name" );
            selectors.add( name );
        }

        return (String[])selectors.toArray( new String[ selectors.size() ] );
    }

    /**
     * Build file entrys from a nodelist.
     *
     * @param configs the nodes to procexx
     * @return an array of file entrys
     */
    private String[] buildEntrys( final NodeList configs )
    {
        final ArrayList entrys = new ArrayList();

        final int length = configs.getLength();
        for( int i = 0; i &lt; length; i++ )
        {
            final Element config = (Element)configs.item( i );
            final String entry = config.getAttribute( "location" );
            entrys.add( entry );
        }

        return (String[])entrys.toArray( new String[ entrys.size() ] );
    }

    /**
     * Build an array of Join classloaders out of supplied nodes.
     *
     * @param configs the nodes to process
     * @return the join meta data array
     */
    private JoinMetaData[] buildJoins( final NodeList configs )
    {
        final ArrayList joins = new ArrayList();

        final int length = configs.getLength();
        for( int i = 0; i &lt; length; i++ )
        {
            final Element config = (Element)configs.item( i );
            final JoinMetaData join = buildJoin( config );
            joins.add( join );
        }

        return (JoinMetaData[])joins.toArray( new JoinMetaData[ joins.size() ] );
    }

    /**
     * Build a Join classloader out of supplied Element.
     *
     * @param config the config element
     * @return the join meta data
     */
    private JoinMetaData buildJoin( final Element config )
    {
        final String name = config.getAttribute( "name" );
        final NodeList children =
            config.getElementsByTagName( "classloader-ref" );
        final String[] classloaders =
            buildClassLoaderRefs( children );
        return new JoinMetaData( name, classloaders );
    }

    /**
     * Create a set of strings for ClassLoader references in a Join
     * classloader.
     *
     * @param configs the nodes to process
     * @return the strings for class loader refs
     */
    private String[] buildClassLoaderRefs( final NodeList configs )
    {
        final ArrayList refs = new ArrayList();

        final int length = configs.getLength();
        for( int i = 0; i &lt; length; i++ )
        {
            final Element element = (Element)configs.item( i );
            final String ref = element.getAttribute( "name" );
            refs.add( ref );
        }

        return (String[])refs.toArray( new String[ refs.size() ] );
    }

    /**
     * Utility class to test if attribute is unspecified (by testing if it is
     * equal to empty string).
     *
     * @param attribute the attribute
     * @return true if equal to empty string
     */
    private boolean isUnspecified( final String attribute )
    {
        return "".equals( attribute );
    }
}
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file85" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata">testdata</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org
 /jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman">classman</a>!
/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test/data">data</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test/data/cl2">cl2</a><br /></span>
<div class="fileheader" id="removed"><big><b>CL2Data.java</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test/data/cl2/CL2Data.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N CL2Data.java
--- CL2Data.java	31 Mar 2004 03:18:56 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,17 +0,0 @@
</small></pre><pre class="diff" id="removed">-/*
- * Copyright (C) The Spice Group. All rights reserved.
- *
- * This software is published under the terms of the Spice
- * Software License version 1.1, a copy of which has been included
- * with this distribution in the LICENSE.txt file.
- */
-package org.jcontainer.loom.classman.test.data.cl2;
-
-/**
- *
- * @author Peter Donald
- * @version $Revision: 1.1 $ $Date: 2004/03/31 03:18:56 $
- */
-public class CL2Data
-{
-}
</pre></div>
<hr /><a name="file86" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java">java</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/java/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/builder">builder</a><br /></span>
<div class="fileheader" id="removed"><big><b>LoaderBuilder.java</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/builder/LoaderBuilder.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N LoaderBuilder.java
--- LoaderBuilder.java	31 Mar 2004 03:18:53 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1 +0,0 @@
</small></pre><pre class="diff" id="removed">-/*
 * Copyright (C) The Spice Group. All rights reserved.
 *
 * This software is published under the terms of the Spice
 * Software License version 1.1, a copy of which has been included
 * with this distribution in the LICENSE.txt file.
 */
package org.jcontainer.loom.classman.builder;

import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.jcontainer.loom.classman.metadata.ClassLoaderMetaData;
import org.jcontainer.loom.classman.metadata.ClassLoaderSetMetaData;
import org.jcontainer.loom.classman.metadata.FileSetMetaData;
import org.jcontainer.loom.classman.metadata.JoinMetaData;
import org.jcontainer.loom.extension.Extension;

/**
 * This class is responsible for building the set of actual {@link
 * java.lang.ClassLoader}s out of the {@link ClassLoaderSetMetaData} objects.
 *
 * @author Peter Donald
 * @version $Revision: 1.1 $ $Date: 2004/03/31 03:18:53 $
 */
public class LoaderBuilder
{
    /**
     * Build a map of all the classloaders defined by the metadata.
     *
     * @param metadata the metadata
     * @param resolver the reoslver to use to resolve files/urls etc
     * @param predefined the map containing all the predefined classloaders.
     * @return the map of created classloaders
     * @throws Exception if unable to create some classloaders
     */
    public Map buildClassLoaders( final ClassLoaderSetMetaData metadata,
                                  final LoaderResolver resolver,
                                  final Map predefined )
        throws Exception
    {
        final HashMap classLoaders = new HashMap();

        addPredefined( metadata.getPredefined(), predefined, classLoaders );
        addAllClassLoaders( metadata, resolver, classLoaders );
        addAllJoins( metadata, resolver, classLoaders );

        return classLoaders;
    }

    /**
     * Add all the classloaders to the result metaData.
     *
     * @param metaData the metadata
     * @param resolver the resolver to use
     * @param classLoaders the result map of classloaders
     * @throws Exception if unable to create the classloaders
     */
    private void addAllClassLoaders( final ClassLoaderSetMetaData metaData,
                                     final LoaderResolver resolver,
                                     final Map classLoaders )
        throws Exception
    {
        final ClassLoaderMetaData[] classLoaderDefs = metaData.getClassLoaders();
        for( int i = 0; i &lt; classLoaderDefs.length; i++ )
        {
            final String name = classLoaderDefs[ i ].getName();
            processClassLoader( name, metaData, resolver, classLoaders );
        }
    }

    /**
     * Add all the classloaders to the result metaData.
     *
     * @param metaData the metadata
     * @param resolver the resolver to use
     * @param classLoaders the result map of classloaders
     * @throws Exception if unable to create the classloaders
     */
    private void addAllJoins( final ClassLoaderSetMetaData metaData,
                              final LoaderResolver resolver,
                              final Map classLoaders )
        throws Exception
    {
        final JoinMetaData[] joins = metaData.getJoins();
        for( int i = 0; i &lt; joins.length; i++ )
        {
            final String name = joins[ i ].getName();
            processClassLoader( name, metaData, resolver, classLoaders );
        }
    }

    /**
     * Process a ClassLoader entry, create ClassLoader and add it to result
     * map.
     *
     * @param name the name of classloader
     * @param set the set of metatadata
     * @param resolver the resolver for construction
     * @param classLoaders the result map of classloaders
     * @throws Exception if unable to process classloader
     */
    private void processClassLoader( final String name,
                                     final ClassLoaderSetMetaData set,
                                     final LoaderResolver resolver,
                                     final Map classLoaders )
        throws Exception
    {
        if( classLoaders.containsKey( name ) )
        {
            return;
        }

        final ClassLoaderMetaData regular = set.getClassLoader( name );
        if( null != regular )
        {
            //Make sure parent classloader is built
            processClassLoader( regular.getParent(),
                                set,
                                resolver,
                                classLoaders );

            final ClassLoader classLoader =
                buildRegularClassLoader( regular, resolver, classLoaders );
            classLoaders.put( name, classLoader );
        }
        else
        {
            final JoinMetaData join = set.getJoin( name );
            if( null == join )
            {
                final String message = "Unknown classloader " + name;
                throw new Exception( message );
            }
            //Make sure all our dependencies are processed
            final String[] names = join.getClassloaders();
            for( int i = 0; i &lt; names.length; i++ )
            {
                processClassLoader( names[ i ], set, resolver, classLoaders );
            }
            final ClassLoader classLoader =
                buildJoinClassLoader( join, resolver, classLoaders );
            classLoaders.put( name, classLoader );
        }
    }

    /**
     * Create a Join ClassLoader.
     *
     * @param join the metadata
     * @param resolver the resolver to use to resolve URLs etc
     * @param classLoaders the already created ClassLoaders
     * @return the created JoinClassLoader
     */
    private ClassLoader buildJoinClassLoader( final JoinMetaData join,
                                              final LoaderResolver resolver,
                                              final Map classLoaders )
        throws Exception
    {
        final ArrayList list = new ArrayList();
        final String[] names = join.getClassloaders();
        for( int i = 0; i &lt; names.length; i++ )
        {
            list.add( classLoaders.get( names[ i ] ) );
        }

        final ClassLoader[] elements =
            (ClassLoader[])list.toArray( new ClassLoader[ list.size() ] );

        return resolver.createJoinClassLoader( elements );
    }

    /**
     * Build a regular classloader with entries, extensions and filesets fully
     * resolved.
     *
     * @param metaData the classloader definition
     * @param resolver the resolver to use when creating URLs/Extensions etc
     * @param classLoaders the already created ClassLoaders
     * @return the created ClassLoader
     * @throws Exception if unable to create ClassLoader
     */
    private ClassLoader buildRegularClassLoader(
        final ClassLoaderMetaData metaData,
        final LoaderResolver resolver,
        final Map classLoaders )
        throws Exception
    {
        final ClassLoader parent =
            (ClassLoader)classLoaders.get( metaData.getParent() );
        final ArrayList urlSet = new ArrayList();

        final String[] entrys = metaData.getEntrys();
        for( int i = 0; i &lt; entrys.length; i++ )
        {
            final URL url = resolver.resolveURL( entrys[ i ] );
            urlSet.add( url );
        }

        //Add all filesets defined for classloader
        final FileSetMetaData[] filesets = metaData.getFilesets();
        for( int i = 0; i &lt; filesets.length; i++ )
        {
            final FileSetMetaData fileset = filesets[ i ];
            final String baseDirectory = fileset.getBaseDirectory();
            final String[] includes = fileset.getIncludes();
            final String[] excludes = fileset.getExcludes();
            final URL[] urls =
                resolver.resolveFileSet( baseDirectory,
                                         includes,
                                         excludes );
            for( int j = 0; j &lt; urls.length; j++ )
            {
                urlSet.add( urls[ j ] );
            }
        }

        final Extension[] extensions = metaData.getExtensions();
        for( int i = 0; i &lt; extensions.length; i++ )
        {
            final URL url = resolver.resolveExtension( extensions[ i ] );
            urlSet.add( url );
        }

        final URL[] urls = (URL[])urlSet.toArray( new URL[ urlSet.size() ] );
        return resolver.createClassLoader( parent, urls );
    }

    /**
     * Add all the predefined classloaders to the set of available
     * ClassLoaders.
     *
     * @param entrys the names of predefined classloaders
     * @param predefined the map containg predefined classloaders
     * @param classLoaders the destination map of classloaders
     */
    private void addPredefined( final String[] entrys,
                                final Map predefined,
                                final HashMap classLoaders )
    {
        for( int i = 0; i &lt; entrys.length; i++ )
        {
            final String name = entrys[ i ];
            final ClassLoader classLoader =
                (ClassLoader)predefined.get( name );
            if( null == classLoader )
            {
                final String message =
                    "Missing predefined ClassLoader " + name;
                throw new IllegalArgumentException( message );
            }
            classLoaders.put( name, classLoader );
        }
    }
}
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file87" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java">java</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/java/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/builder">builder</a><br /></span>
<div class="fileheader" id="removed"><big><b>Resources.properties</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/builder/Resources.properties?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N Resources.properties
--- Resources.properties	31 Mar 2004 03:18:53 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,8 +0,0 @@
</small></pre><pre class="diff" id="removed">-missing.extension=Unable to locate an extension that is required by application.\nExtension Name: {0}\nSpecification Vendor: {1}\nSpecification Version: {2}\nImplementation Vendor: {3}\nImplementation Vendor-Id: {4}\nImplementation Version: {5}\nImplementation URL: {6}
-unsatisfied.extensions=Missing {0} extensions and thus can not build ClassLoader for application.
-bad-classpath-entry=There is a bad entry ("{0}") on classpath that made it impossible to load a manifest.
-available-extensions=The list of available extensions for application includes; {0}
-required-extensions=The list of required extensions for application includes; {0}
-optional-packages-added=The list of "Optional Packages" added to the application includes; {0}
-classpath-entries=The list of classpath entries for the application includes; {0}
-missing-packagemanager=Unable to resolve Extension as no PackageManager has been specified.
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file88" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java">java</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/java/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/builder">builder</a><br /></span>
<div class="fileheader" id="removed"><big><b>SimpleLoaderResolver.java</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/builder/SimpleLoaderResolver.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N SimpleLoaderResolver.java
--- SimpleLoaderResolver.java	31 Mar 2004 03:18:53 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1 +0,0 @@
</small></pre><pre class="diff" id="removed">-/*
 * Copyright (C) The Spice Group. All rights reserved.
 *
 * This software is published under the terms of the Spice
 * Software License version 1.1, a copy of which has been included
 * with this distribution in the LICENSE.txt file.
 */
package org.jcontainer.loom.classman.builder;

import java.io.File;
import java.io.IOException;
import java.net.JarURLConnection;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.jar.Manifest;
import org.codehaus.spice.salt.i18n.ResourceManager;
import org.codehaus.spice.salt.i18n.Resources;
import org.codehaus.spice.salt.io.FileUtil;
import org.codehaus.spice.salt.io.PathMatcher;
import org.jcontainer.loom.classman.runtime.JoinClassLoader;
import org.jcontainer.loom.extension.Extension;

/**
 * This is a class that performs resolver that; &lt;ul&gt; &lt;li&gt;creates "Join"
 * ClassLoaders using the  {@link JoinClassLoader} class&lt;/li&gt; &lt;li&gt;creates normal
 * ClassLoaders using a {@link URLClassLoader}. It also makes sure that all
 * dependencies of jars (as declared using the JDK1.3 "Optional Pakcages" Spec)
 * are present in classloader.&lt;/li&gt; &lt;li&gt;The locations are resolved to a single
 * base directiory.&lt;/li&gt; &lt;li&gt;The Extensions are not resolved but may be by
 * subclasses.&lt;/li&gt; &lt;li&gt;FileSets are currently unsupported and throw a {@link
 * UnsupportedOperationException} if attempt to be constructed.&lt;/li&gt; &lt;/ul&gt;
 *
 * @author Peter Donald
 * @version $Revision: 1.1 $ $Date: 2004/03/31 03:18:53 $
 */
public class SimpleLoaderResolver
    implements LoaderResolver
{
    /** i18n utils for presenting messages. */
    private static final Resources REZ =
        ResourceManager.getPackageResources( SimpleLoaderResolver.class );

    /** The base directory relative to which to aquire files. */
    private File m_baseDirectory;

    /**
     * Create a resolver that resolves all files according to specied
     * baseDirectory.
     *
     * @param baseDirectory the base directory
     */
    public SimpleLoaderResolver( final File baseDirectory )
    {
        setBaseDirectory( baseDirectory );
    }

    /**
     * Retrieve a URL for specified extension.
     *
     * @param extension the extension
     * @return the URL
     * @throws Exception if unable to locate URL for extension
     */
    public URL resolveExtension( final Extension extension )
        throws Exception
    {
        throw new UnsupportedOperationException();
    }

    /**
     * Resolve a location to a particular URL.
     *
     * @param location the location
     * @return the URL
     * @throws Exception if unable to resolve location
     */
    public URL resolveURL( final String location )
        throws Exception
    {
        final File file = getFileFor( location );
        String url = file.toURL().toString();
        if( file.isDirectory() )
        {
            url += "/";
        }
        return new URL( url );
    }

    /**
     * Resolve a fileset.
     *
     * @param baseDirectory the base directory of fileset
     * @param includes the list of ant-style includes
     * @param excludes the list of ant style excludes
     * @return the URLs contained within fileset
     * @throws Exception if unable to resolve fileset
     */
    public URL[] resolveFileSet( final String baseDirectory,
                                 final String[] includes,
                                 final String[] excludes )
        throws Exception
    {
        final File base = getFileFor( "." );
        return resolveFileSet( base, baseDirectory, includes, excludes );
    }

    /**
     * Create a Join ClassLoader for specified ClassLoaders. Use {@link
     * JoinClassLoader} to implement functionality.
     *
     * @param classLoaders the ClassLoaders to "join"
     * @return the joined ClassLoader
     * @throws Exception if unable to create classloader
     */
    public ClassLoader createJoinClassLoader( final ClassLoader[] classLoaders )
        throws Exception
    {
        return new JoinClassLoader( classLoaders,
                                    ClassLoader.getSystemClassLoader() );
    }

    /**
     * Create a ClassLoader with specified parent and containing specified URLs.
     * This implementation just creates it using the default URLClassLoader.
     *
     * @param parent the parent classloader
     * @param urls the URLs that the ClassLoader should contain
     * @return the newly created ClassLoader
     * @throws Exception if unable to create classloader
     */
    public ClassLoader createClassLoader( final ClassLoader parent,
                                          final URL[] urls )
        throws Exception
    {
        final URL[] classpath = determineCompleteClasspath( urls );
        return new URLClassLoader( classpath, parent );
    }

    /**
     * Retrieve the complete classpath given an input set of URLs. The complete
     * classpath includes all URLs for extensions required by the jars
     * (according to the "Optional Package" Spec).
     *
     * @param urls the urls
     * @return the complete set of URLs for classpath
     * @throws Exception if unable to determine complete classpath set
     */
    protected final URL[] determineCompleteClasspath( final URL[] urls )
        throws Exception
    {
        final ArrayList classpathSet = new ArrayList();

        //Add all supplied URLS to classpath
        for( int i = 0; i &lt; urls.length; i++ )
        {
            final URL url = urls[ i ];
            classpathSet.add( url );
        }

        //Add all the optional packages that are declared as
        // dependencies of class path elements
        final File[] files = getOptionalPackagesFor( urls );
        for( int i = 0; i &lt; files.length; i++ )
        {
            final File file = files[ i ];
            classpathSet.add( file.toURL() );
        }

        //Define final classpath with all dependencies added
        return (URL[])classpathSet.toArray( new URL[ classpathSet.size() ] );
    }

    /**
     * Utility class to retrieve a file object for specified location.
     *
     * @param location which to get file for.
     * @return the file for specified location
     */
    protected File getFileFor( final String location )
        throws IOException
    {
        File base = getBaseDirectory();
        if( null == base )
        {
            base = new File( "." );
        }

        return new File( base, location ).getCanonicalFile();
    }

    /**
     * Return the base directory against which to resolve relative files.
     *
     * @return the base directory against which to resolve relative files.
     */
    protected File getBaseDirectory()
    {
        return m_baseDirectory;
    }

    /**
     * Set the base directory.
     *
     * @param baseDirectory the base directory.
     */
    protected void setBaseDirectory( File baseDirectory )
    {
        m_baseDirectory = baseDirectory;
    }

    /**
     * Retrieve the files for the optional packages required by the jars in
     * ClassPath.
     *
     * @param classPath the Classpath array
     * @return the files that need to be added to ClassLoader
     */
    protected final File[] getOptionalPackagesFor( final URL[] classPath )
        throws Exception
    {
        final Manifest[] manifests = getManifests( classPath );
        final Extension[] available = Extension.getAvailable( manifests );
        final Extension[] required = Extension.getRequired( manifests );

        if( isDebugEnabled() )
        {
            final String message1 =
                REZ.format( "available-extensions",
                            Arrays.asList( available ) );
            debug( message1 );
            final String message2 =
                REZ.format( "required-extensions",
                            Arrays.asList( required ) );
            debug( message2 );
        }

        if( 0 == required.length )
        {
            return new File[ 0 ];
        }

        final Set dependencies = new HashSet();
        final Set unsatisfied = new HashSet();

        scanDependencies( required,
                          available,
                          dependencies,
                          unsatisfied );

        final int size = unsatisfied.size();
        if( 0 != size )
        {
            final Iterator iterator = unsatisfied.iterator();
            while( iterator.hasNext() )
            {
                final Extension extension = (Extension)iterator.next();
                final Object[] params = new Object[]
                {
                    extension.getExtensionName(),
                    extension.getSpecificationVendor(),
                    extension.getSpecificationVersion(),
                    extension.getImplementationVendor(),
                    extension.getImplementationVendorID(),
                    extension.getImplementationVersion(),
                    extension.getImplementationURL()
                };
                final String message = REZ.format( "missing.extension",
                                                   params );
                warn( message );
            }

            final String message =
                REZ.format( "unsatisfied.extensions", new Integer( size ) );
            throw new Exception( message );
        }

        if( isDebugEnabled() )
        {
            final String message =
                REZ.format( "optional-packages-added", dependencies );
            debug( message );
        }

        return (File[])dependencies.toArray( new File[ dependencies.size() ] );
    }

    /**
     * Attempt to locate a set of dependencies that transitively satisfy all
     * required extensions.
     *
     * @param required the required extensions
     * @param available the extensions already available
     * @param dependencies the set of dependencies collected by this method
     * @param unsatisfied this method should place any unsatisfied depenencies
     * into this set
     */
    protected void scanDependencies( final Extension[] required,
                                     final Extension[] available,
                                     final Set dependencies,
                                     final Set unsatisfied )
    {
        throw new UnsupportedOperationException();
    }

    /**
     * write out a warning message. Subclasses may overide this method to
     * redirect logging as appropriate.
     *
     * @param message the warning message
     */
    protected void warn( final String message )
    {
    }

    /**
     * Determine if debug messages are turned on. Subclasses should overide this
     * method.
     *
     * @return true if debugging enabled.
     */
    protected boolean isDebugEnabled()
    {
        return false;
    }

    /**
     * write out a debug message. Subclasses may overide this method to redirect
     * logging as appropriate.
     *
     * @param message the debug message
     */
    protected void debug( final String message )
    {
    }

    /**
     * Retrieve all the Manifests from the specified Classlpath.
     *
     * @param classPath the classpath
     * @return the set of manifests on the classpath
     * @throws Exception if there is an error reading manifests from files on
     * classpath
     */
    private Manifest[] getManifests( final URL[] classPath )
        throws Exception
    {
        final ArrayList manifests = new ArrayList();

        for( int i = 0; i &lt; classPath.length; i++ )
        {
            final URL element = classPath[ i ];
            if( element.getFile().endsWith( ".jar" ) )
            {
                try
                {
                    final URL url = new URL( "jar:" + element + "!/" );
                    final JarURLConnection connection =
                        (JarURLConnection)url.openConnection();
                    final Manifest manifest = connection.getManifest();
                    if( null != manifest )
                    {
                        manifests.add( manifest );
                    }
                }
                catch( final IOException ioe )
                {
                    final String message =
                        REZ.format( "bad-classpath-entry", element );
                    throw new Exception( message );
                }
            }
        }

        return (Manifest[])manifests.toArray( new Manifest[ 0 ] );
    }

    /**
     * Resolve a fileset in a particular hierarchy.
     *
     * @param base the file hierarchy to use
     * @param baseDirectory the base directory (relative to base)
     * @param includes the ant-style include patterns
     * @param excludes the ant-style exclude patterns
     * @return the resolved URLs for fileset
     */
    protected final URL[] resolveFileSet( final File base,
                                          final String baseDirectory,
                                          final String[] includes,
                                          final String[] excludes )
    {
        //woefully inefficient .. but then again - no need
        //for efficency here
        final String newBaseDirectory = FileUtil.normalize( baseDirectory );
        final String[] newIncludes = prefixPatterns( newBaseDirectory,
                                                     includes );
        final String[] newExcludes = prefixPatterns( newBaseDirectory,
                                                     excludes );
        final PathMatcher matcher = new PathMatcher( newIncludes,
                                                     newExcludes );
        final File[] files = FileUtil.resolveFileSet( base, matcher );
        try
        {
            return FileUtil.toURLs( files );
        }
        catch( IOException ioe )
        {
            throw new IllegalArgumentException( ioe.getMessage() );
        }
    }

    /**
     * Return a new array with specified prefix added to start of every element
     * in supplied array.
     *
     * @param prefix the prefix
     * @param patterns the source array
     * @return a new array with all elements having prefix added
     */
    private String[] prefixPatterns( final String prefix,
                                     final String[] patterns )
    {
        if( 0 == prefix.length() || ".".equals( prefix ) )
        {
            return patterns;
        }

        final String[] newPatterns = new String[ patterns.length ];
        for( int i = 0; i &lt; newPatterns.length; i++ )
        {
            newPatterns[ i ] = prefix + "/" + patterns[ i ];
        }
        return newPatterns;
    }
}
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file89" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java">java</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/java/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/builder">builder</a><br /></span>
<div class="fileheader" id="removed"><big><b>LoaderResolver.java</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/builder/LoaderResolver.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N LoaderResolver.java
--- LoaderResolver.java	31 Mar 2004 03:18:53 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1 +0,0 @@
</small></pre><pre class="diff" id="removed">-/*
 * Copyright (C) The Spice Group. All rights reserved.
 *
 * This software is published under the terms of the Spice
 * Software License version 1.1, a copy of which has been included
 * with this distribution in the LICENSE.txt file.
 */
package org.jcontainer.loom.classman.builder;

import java.net.URL;
import org.jcontainer.loom.extension.Extension;

/**
 * This is the class that clients provide to implement a specific policy with
 * respect to how ClassLoader hierarchy is constructed.
 *
 * @author Peter Donald
 * @version $Revision: 1.1 $ $Date: 2004/03/31 03:18:53 $
 */
public interface LoaderResolver
{
    /**
     * Resolve an Extension to a URL. The URL that locates the "Optional
     * Package" that provides specified Extension.
     *
     * @param extension the extension
     * @return the URL that locates the "Optional Package" that provides
     *         specified Extension.
     * @throws Exception if unable to locate Extension
     */
    URL resolveExtension( Extension extension )
        throws Exception;

    /**
     * Resolve a string into a URL. This allows resolvers to anchor URLs using
     * relative URL or by handling non-standard URL protocols (such as
     * "sar:/SAR-INF/lib/cornerstone.jar").
     *
     * @param location the location to transform into a URL
     * @return the URL
     * @throws Exception if unable to resolve URL
     */
    URL resolveURL( String location )
        throws Exception;

    /**
     * Resolve a fileset to a set of URLs.
     *
     * @param baseDirectory the Base directory of fileset
     * @return the set of URLs making up fileset
     * @throws Exception if unable to resolve fileset
     */
    URL[] resolveFileSet( String baseDirectory,
                          String[] includes,
                          String[] excludes )
        throws Exception;

    /**
     * Create a Join ClassLoader for specified ClassLoaders.
     *
     * @param classLoaders the ClassLoaders to "join"
     * @return the joined ClassLoader
     * @throws Exception if unable to create classloader
     */
    ClassLoader createJoinClassLoader( ClassLoader[] classLoaders )
        throws Exception;

    /**
     * Create a ClassLoader with specified parent and containing specified
     * URLs.
     *
     * @param parent the parent classloader
     * @param urls the URLs that the ClassLoader should contain
     * @return the newly created ClassLoader
     * @throws Exception if unable to create classloader
     */
    ClassLoader createClassLoader( ClassLoader parent, URL[] urls )
        throws Exception;
}
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file90" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata">testdata</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontai
 ner/loom/support/classman/src/testdata/org/codehaus/loom/classman">classman</a>/<a href="!
http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test/data">data</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test/data/cl3">cl3</a><br /></span>
<div class="fileheader" id="added"><big><b>CL3Data.java</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test/data/cl3/CL3Data.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N CL3Data.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ CL3Data.java	19 Apr 2004 22:19:26 -0000	1.1
@@ -0,0 +1,20 @@
</small></pre><pre class="diff" id="added">+/*
+ * Copyright (C) The Spice Group. All rights reserved.
+ *
+ * This software is published under the terms of the Spice
+ * Software License version 1.1, a copy of which has been included
+ * with this distribution in the LICENSE.txt file.
+ */
+package org.codehaus.loom.classman.test.data.cl3;
+
+import org.codehaus.loom.classman.test.data.cl1.Data1;
+
+/**
+ *
+ * @author Peter Donald
+ * @version $Revision: 1.1 $ $Date: 2004/04/19 22:19:26 $
+ */
+public class CL3Data
+{
+    public final static String CROSS_REF = Data1.class.getName();
+}
</pre></div>
<hr /><a name="file91" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java">java</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/java/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/runtime">runtime</a><br /></span>
<div class="fileheader" id="removed"><big><b>JoinClassLoader.java</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/runtime/JoinClassLoader.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N JoinClassLoader.java
--- JoinClassLoader.java	31 Mar 2004 03:18:53 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,157 +0,0 @@
</small></pre><pre class="diff" id="removed">-/*
- * Copyright (C) The Spice Group. All rights reserved.
- *
- * This software is published under the terms of the Spice
- * Software License version 1.1, a copy of which has been included
- * with this distribution in the LICENSE.txt file.
- */
-package org.jcontainer.loom.classman.runtime;
-
-import java.io.IOException;
-import java.net.URL;
-import java.security.SecureClassLoader;
-import java.util.Enumeration;
-import java.util.Vector;
-
-/**
- * The &lt;tt&gt;JoinClassLoader&lt;/tt&gt; is a {@link ClassLoader} that joins a list of
- * ClassLoaders together. The JoinClassLoader has a list of ClassLoaders
- * specified from which resources and classes can be loaded from. The
- * JoinClassLoader will attempt to load the Class or resources from each
- * ClassLoader in succession.
- *
- * &lt;p&gt;Note that it is recomended that each ClassLoader be made up of distinct,
- * non-overlapping sets of resources or else ClassCastExceptions may result
- * along with other undersired behaviour. &lt;/p&gt;
- *
- * @author Peter Donald
- * @version $Revision: 1.1 $ $Date: 2004/03/31 03:18:53 $
- */
-public class JoinClassLoader
-    extends SecureClassLoader
-{
-    /**
-     * The list of classLoaders to search through each time a class or resource
-     * is requested.
-     */
-    private final ClassLoader[] m_classLoaders;
-
-    /**
-     * Construct a join ClassLoader that defines parent ClassLoader and list of
-     * ClassLoaders to search for classes or resources when requested.
-     *
-     * @param parent the parent classloader
-     * @param classLoaders the classloaders to search
-     */
-    public JoinClassLoader( final ClassLoader[] classLoaders,
-                            final ClassLoader parent )
-    {
-        super( parent );
-        if( null == classLoaders )
-        {
-            throw new NullPointerException( "classLoaders" );
-        }
-        for( int i = 0; i &lt; classLoaders.length; i++ )
-        {
-            if( null == classLoaders[ i ] )
-            {
-                throw new NullPointerException( "classLoaders[" + i + "]" );
-            }
-        }
-        m_classLoaders = classLoaders;
-    }
-
-    /**
-     * Overide findClass to find a class by searching all the ClassLoaders for
-     * class.
-     *
-     * @param name the name of class
-     * @return the Class instance
-     * @throws ClassNotFoundException if unable to find class
-     * @see ClassLoader#findClass
-     */
-    protected Class findClass( final String name )
-        throws ClassNotFoundException
-    {
-        for( int i = 0; i &lt; m_classLoaders.length; i++ )
-        {
-            try
-            {
-                return m_classLoaders[ i ].loadClass( name );
-            }
-            catch( final ClassNotFoundException cnfe )
-            {
-                //Not in that classloader
-            }
-        }
-
-        return super.findClass( name );
-    }
-
-    /**
-     * Overide findResources to retrieve all the resources from all classloaders
-     * with a particular name.
-     *
-     * @param name the resources to search for
-     * @return an enumeration of all resources with specified name
-     * @throws IOException if unable to find resources
-     * @see ClassLoader#findResources
-     */
-    protected Enumeration findResources( final String name )
-        throws IOException
-    {
-        final Vector result = new Vector();
-
-        for( int i = 0; i &lt; m_classLoaders.length; i++ )
-        {
-            try
-            {
-                final Enumeration resources =
-                    m_classLoaders[ i ].getResources( name );
-                addAll( result, resources );
-            }
-            catch( final IOException ioe )
-            {
-                //Not in that classloader
-            }
-        }
-        final Enumeration resources = super.findResources( name );
-        addAll( result, resources );
-        return result.elements();
-    }
-
-    /**
-     * Add all resources specified into result vector.
-     *
-     * @param result the result vector
-     * @param resources the enumeration of resources
-     */
-    private void addAll( final Vector result,
-                         final Enumeration resources )
-    {
-        while( resources.hasMoreElements() )
-        {
-            result.add( resources.nextElement() );
-        }
-    }
-
-    /**
-     * Overide findResource to search through all classloaders.
-     *
-     * @param name the resources to search for
-     * @return the resource URL
-     * @see ClassLoader#findResource
-     */
-    protected URL findResource( final String name )
-    {
-        for( int i = 0; i &lt; m_classLoaders.length; i++ )
-        {
-            final URL resource = m_classLoaders[ i ].getResource( name );
-            if( null != resource )
-            {
-                return resource;
-            }
-        }
-        return super.findResource( name );
-    }
-}
</pre></div>
<hr /><a name="file92" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>AbstractLoaderTestCase.java</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/test/AbstractLoaderTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N AbstractLoaderTestCase.java
--- AbstractLoaderTestCase.java	31 Mar 2004 03:18:55 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,81 +0,0 @@
</small></pre><pre class="diff" id="removed">-/*
- * Copyright (C) The Spice Group. All rights reserved.
- *
- * This software is published under the terms of the Spice
- * Software License version 1.1, a copy of which has been included
- * with this distribution in the LICENSE.txt file.
- */
-package org.jcontainer.loom.classman.test;
-
-import java.io.File;
-import java.io.InputStream;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import junit.framework.TestCase;
-import org.jcontainer.loom.classman.metadata.ClassLoaderSetMetaData;
-import org.jcontainer.loom.classman.reader.ClassLoaderSetReader;
-import org.w3c.dom.Document;
-
-/**
- * An abstract base class for all the tests that performed on loaders.
- *
- * @author Peter Donald
- * @version $Revision: 1.1 $ $Date: 2004/03/31 03:18:55 $
- */
-public abstract class AbstractLoaderTestCase
-    extends TestCase
-{
-    protected ClassLoaderSetMetaData buildFromStream( final InputStream stream )
-        throws Exception
-    {
-        try
-        {
-            final ClassLoaderSetReader builder = new ClassLoaderSetReader();
-            final Document config = load( stream );
-            return builder.build( config.getDocumentElement() );
-        }
-        catch( final Exception e )
-        {
-            fail( "Error building ClassLoaderSet: " + e );
-            return null;
-        }
-    }
-
-    protected Document load( final InputStream stream )
-        throws Exception
-    {
-        final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-        //factory.setValidating(true);
-        //factory.setNamespaceAware(true);
-        final DocumentBuilder builder = factory.newDocumentBuilder();
-        return builder.parse( stream );
-    }
-
-    protected ClassLoaderSetMetaData buildFromResource( final String resource )
-        throws Exception
-    {
-        final InputStream stream = getClass().getResourceAsStream( resource );
-        if( null == stream )
-        {
-            fail( "Missing resource " + resource );
-        }
-        return buildFromStream( stream );
-    }
-
-    protected File getBaseDirectory()
-    {
-        final String basedir = System.getProperty( "basedir", "." );
-        final File root = new File( basedir );
-        File baseDirectory = new File( root, "target/test-classes" );
-        if( !baseDirectory.exists() )
-        {
-            baseDirectory = new File( root, "target/classes" );
-        }
-
-        if( !baseDirectory.exists() )
-        {
-            fail( "Unable to locate base test directory" );
-        }
-        return baseDirectory;
-    }
-}
</pre></div>
<hr /><a name="file93" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>IntegrationTestCase.java</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/test/IntegrationTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N IntegrationTestCase.java
--- IntegrationTestCase.java	31 Mar 2004 03:18:55 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,141 +0,0 @@
</small></pre><pre class="diff" id="removed">-/*
- * Copyright (C) The Spice Group. All rights reserved.
- *
- * This software is published under the terms of the Spice
- * Software License version 1.1, a copy of which has been included
- * with this distribution in the LICENSE.txt file.
- */
-package org.jcontainer.loom.classman.test;
-
-import java.io.File;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.HashMap;
-import java.util.Map;
-import org.jcontainer.loom.classman.builder.LoaderBuilder;
-import org.jcontainer.loom.classman.builder.SimpleLoaderResolver;
-import org.jcontainer.loom.classman.metadata.ClassLoaderSetMetaData;
-import org.jcontainer.loom.classman.verifier.ClassLoaderVerifier;
-
-/**
- *
- * @author Peter Donald
- * @version $Revision: 1.1 $ $Date: 2004/03/31 03:18:55 $
- */
-public class IntegrationTestCase
-    extends AbstractLoaderTestCase
-{
-    public void testPresence()
-        throws Exception
-    {
-        final Map map = buildClassLoaders( "config1.xml" );
-
-        assertPresent( map, "LOADER_1" );
-        assertPresent( map, "LOADER_2" );
-        assertPresent( map, "LOADER_3" );
-        assertPresent( map, "LOADER_4" );
-        assertPresent( map, "LOADER_5" );
-        assertPresent( map, "LOADER_6" );
-        assertPresent( map, "JOIN_1" );
-
-        final String[] files1 = new String[]{"cl1.jar"};
-        final String[] files2 = new String[]{"cl2.jar"};
-        final String[] files3 = new String[]{"cl1.jar", "cl2.jar"};
-        final String[] files4 =
-            new String[]{"SAR-INF/lib/cl3.jar", "SAR-INF/lib/cl4.jar"};
-        final String[] files5 = new String[]{"SAR-INF/lib/cl4.jar"};
-        final String[] files6 = new String[]{"SAR-INF/lib/cl4.jar"};
-
-        assertURLsPresent( map, "LOADER_1", files1 );
-        assertURLsPresent( map, "LOADER_2", files2 );
-        assertURLsPresent( map, "LOADER_3", files3 );
-        assertURLsPresent( map, "LOADER_4", files4 );
-        assertURLsPresent( map, "LOADER_5", files5 );
-        assertURLsPresent( map, "LOADER_6", files6 );
-
-        assertClassPresent( map, "LOADER_1", DataConstants.DATA1_CLASS );
-        assertClassPresent( map, "LOADER_1", DataConstants.DATA1_CLASS2 );
-        assertClassPresent( map, "LOADER_2", DataConstants.DATA2_CLASS );
-        assertClassPresent( map, "LOADER_3", DataConstants.DATA1_CLASS );
-        assertClassPresent( map, "LOADER_3", DataConstants.DATA1_CLASS2 );
-        assertClassPresent( map, "LOADER_3", DataConstants.DATA2_CLASS );
-        assertClassPresent( map, "LOADER_4", DataConstants.DATA1_CLASS );
-        assertClassPresent( map, "LOADER_4", DataConstants.DATA1_CLASS2 );
-        assertClassPresent( map, "LOADER_4", DataConstants.DATA3_CLASS );
-        assertClassPresent( map, "LOADER_4", DataConstants.DATA4_CLASS );
-        assertClassPresent( map, "LOADER_5", DataConstants.DATA1_CLASS );
-        assertClassPresent( map, "LOADER_5", DataConstants.DATA1_CLASS2 );
-        assertClassPresent( map, "LOADER_5", DataConstants.DATA4_CLASS );
-        assertClassPresent( map, "LOADER_6", DataConstants.DATA1_CLASS );
-        assertClassPresent( map, "LOADER_6", DataConstants.DATA1_CLASS2 );
-        assertClassPresent( map, "LOADER_6", DataConstants.DATA4_CLASS );
-        assertClassPresent( map, "JOIN_1", DataConstants.DATA1_CLASS );
-        assertClassPresent( map, "JOIN_1", DataConstants.DATA1_CLASS2 );
-        assertClassPresent( map, "JOIN_1", DataConstants.DATA2_CLASS );
-    }
-
-    private void assertClassPresent( final Map map,
-                                     final String name,
-                                     final String classname )
-    {
-        final ClassLoader classLoader = (ClassLoader)map.get( name );
-        try
-        {
-            classLoader.loadClass( classname );
-        }
-        catch( ClassNotFoundException e )
-        {
-            fail( "Unable to load " + classname + " from " +
-                  name + " classloader" );
-        }
-    }
-
-    private void assertURLsPresent( final Map map,
-                                    final String name,
-                                    final String[] files )
-    {
-        final URLClassLoader classLoader = (URLClassLoader)map.get( name );
-        final URL[] urls = classLoader.getURLs();
-
-        assertEquals( "URL count:", files.length, urls.length );
-        for( int i = 0; i &lt; urls.length; i++ )
-        {
-            final URL url = urls[ i ];
-            final String file = files[ i ];
-            assertTrue( "url=" + url + " ends with " + file,
-                        url.getFile().endsWith( file ) );
-        }
-    }
-
-    private void assertPresent( final Map map,
-                                final String name )
-    {
-        assertTrue( "map.containsKey( '" + name + "' )",
-                    map.containsKey( name ) );
-        /*
-        final Object object = map.get( name );
-        if( object instanceof URLClassLoader )
-        {
-            final URLClassLoader classLoader = (URLClassLoader)object;
-            final URL[] urls = classLoader.getURLs();
-            System.out.println( name + ": " + Arrays.asList( urls ) );
-        }
-        */
-    }
-
-    private Map buildClassLoaders( final String resource )
-        throws Exception
-    {
-        final ClassLoaderSetMetaData metaData =
-            buildFromResource( resource );
-        final ClassLoaderVerifier verifier = new ClassLoaderVerifier();
-        verifier.verifyClassLoaderSet( metaData );
-        final LoaderBuilder builder = new LoaderBuilder();
-        final HashMap predefined = new HashMap();
-        predefined.put( "*system*", ClassLoader.getSystemClassLoader() );
-        final File baseDirectory = getBaseDirectory();
-        final SimpleLoaderResolver resolver =
-            new SimpleLoaderResolver( baseDirectory );
-        return builder.buildClassLoaders( metaData, resolver, predefined );
-    }
-}
</pre></div>
<hr /><a name="file94" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>config1.xml</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/test/config1.xml?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N config1.xml
--- config1.xml	31 Mar 2004 03:18:55 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,43 +0,0 @@
</small></pre><pre class="diff" id="removed">-&lt;classloaders default="*system*" version="1.0"&gt;
-    &lt;predefined name="*system*"/&gt;
-
-    &lt;classloader name="LOADER_1" parent="*system*"&gt;
-        &lt;entry location="cl1.jar"/&gt;
-    &lt;/classloader&gt;
-
-    &lt;classloader name="LOADER_2" parent="*system*"&gt;
-        &lt;entry location="cl2.jar"/&gt;
-    &lt;/classloader&gt;
-
-    &lt;classloader name="LOADER_3" parent="*system*"&gt;
-        &lt;fileset dir="."&gt;
-            &lt;include name="**/*.jar"/&gt;
-            &lt;exclude name="SAR-INF/lib/*.jar"/&gt;
-        &lt;/fileset&gt;
-    &lt;/classloader&gt;
-
-    &lt;classloader name="LOADER_4" parent="LOADER_1"&gt;
-        &lt;fileset dir="."&gt;
-            &lt;include name="SAR-INF/lib/*.jar"/&gt;
-        &lt;/fileset&gt;
-    &lt;/classloader&gt;
-
-    &lt;classloader name="LOADER_5" parent="LOADER_1"&gt;
-        &lt;fileset dir="."&gt;
-            &lt;include name="SAR-INF/**/cl4.jar"/&gt;
-        &lt;/fileset&gt;
-    &lt;/classloader&gt;
-
-    &lt;classloader name="LOADER_6" parent="LOADER_1"&gt;
-        &lt;fileset dir="SAR-INF"&gt;
-            &lt;include name="lib/cl4.jar"/&gt;
-        &lt;/fileset&gt;
-    &lt;/classloader&gt;
-
-    &lt;join name="JOIN_1"&gt;
-        &lt;classloader-ref name="LOADER_1"/&gt;
-        &lt;classloader-ref name="LOADER_2"/&gt;
-    &lt;/join&gt;
-
-
-&lt;/classloaders&gt;
</pre><pre class="diff"><small id="info">\ No newline at end of file
</small></pre></div>
<hr /><a name="file95" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>DataConstants.java</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/test/DataConstants.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N DataConstants.java
--- DataConstants.java	31 Mar 2004 03:18:55 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,28 +0,0 @@
</small></pre><pre class="diff" id="removed">-/*
- * Copyright (C) The Spice Group. All rights reserved.
- *
- * This software is published under the terms of the Spice
- * Software License version 1.1, a copy of which has been included
- * with this distribution in the LICENSE.txt file.
- */
-package org.jcontainer.loom.classman.test;
-
-import org.jcontainer.loom.extension.Extension;
-
-/**
- * Constants used in the tests.
- *
- * @author Peter Donald
- * @version $Revision: 1.1 $ $Date: 2004/03/31 03:18:55 $
- */
-public interface DataConstants
-{
-    String DATA1_RESOURCE = "org/jcontainer/loom/classman/test/data/cl1/Resource.properties";
-    String DATA1_CLASS = "org.jcontainer.loom.classman.test.data.cl1.Data1";
-    String DATA1_CLASS2 = "org.jcontainer.loom.classman.test.data.cl1.Data2";
-    String DATA2_CLASS = "org.jcontainer.loom.classman.test.data.cl2.CL2Data";
-    String DATA3_CLASS = "org.jcontainer.loom.classman.test.data.cl3.CL3Data";
-    String DATA4_CLASS = "org.jcontainer.loom.classman.test.data.cl4.CL4Data";
-    Extension EXTENSION =
-        new Extension( "Foo-Ext", null, null, null, null, null, null );
-}
</pre></div>
<hr /><a name="file96" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java">java</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/java/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/runtime">runtime</a><br /></span>
<div class="fileheader" id="added"><big><b>JoinClassLoader.java</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/runtime/JoinClassLoader.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N JoinClassLoader.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ JoinClassLoader.java	19 Apr 2004 22:19:26 -0000	1.1
@@ -0,0 +1,157 @@
</small></pre><pre class="diff" id="added">+/*
+ * Copyright (C) The Spice Group. All rights reserved.
+ *
+ * This software is published under the terms of the Spice
+ * Software License version 1.1, a copy of which has been included
+ * with this distribution in the LICENSE.txt file.
+ */
+package org.codehaus.loom.classman.runtime;
+
+import java.io.IOException;
+import java.net.URL;
+import java.security.SecureClassLoader;
+import java.util.Enumeration;
+import java.util.Vector;
+
+/**
+ * The &lt;tt&gt;JoinClassLoader&lt;/tt&gt; is a {@link ClassLoader} that joins a list of
+ * ClassLoaders together. The JoinClassLoader has a list of ClassLoaders
+ * specified from which resources and classes can be loaded from. The
+ * JoinClassLoader will attempt to load the Class or resources from each
+ * ClassLoader in succession.
+ *
+ * &lt;p&gt;Note that it is recomended that each ClassLoader be made up of distinct,
+ * non-overlapping sets of resources or else ClassCastExceptions may result
+ * along with other undersired behaviour. &lt;/p&gt;
+ *
+ * @author Peter Donald
+ * @version $Revision: 1.1 $ $Date: 2004/04/19 22:19:26 $
+ */
+public class JoinClassLoader
+    extends SecureClassLoader
+{
+    /**
+     * The list of classLoaders to search through each time a class or resource
+     * is requested.
+     */
+    private final ClassLoader[] m_classLoaders;
+
+    /**
+     * Construct a join ClassLoader that defines parent ClassLoader and list of
+     * ClassLoaders to search for classes or resources when requested.
+     *
+     * @param parent the parent classloader
+     * @param classLoaders the classloaders to search
+     */
+    public JoinClassLoader( final ClassLoader[] classLoaders,
+                            final ClassLoader parent )
+    {
+        super( parent );
+        if( null == classLoaders )
+        {
+            throw new NullPointerException( "classLoaders" );
+        }
+        for( int i = 0; i &lt; classLoaders.length; i++ )
+        {
+            if( null == classLoaders[ i ] )
+            {
+                throw new NullPointerException( "classLoaders[" + i + "]" );
+            }
+        }
+        m_classLoaders = classLoaders;
+    }
+
+    /**
+     * Overide findClass to find a class by searching all the ClassLoaders for
+     * class.
+     *
+     * @param name the name of class
+     * @return the Class instance
+     * @throws ClassNotFoundException if unable to find class
+     * @see ClassLoader#findClass
+     */
+    protected Class findClass( final String name )
+        throws ClassNotFoundException
+    {
+        for( int i = 0; i &lt; m_classLoaders.length; i++ )
+        {
+            try
+            {
+                return m_classLoaders[ i ].loadClass( name );
+            }
+            catch( final ClassNotFoundException cnfe )
+            {
+                //Not in that classloader
+            }
+        }
+
+        return super.findClass( name );
+    }
+
+    /**
+     * Overide findResources to retrieve all the resources from all classloaders
+     * with a particular name.
+     *
+     * @param name the resources to search for
+     * @return an enumeration of all resources with specified name
+     * @throws IOException if unable to find resources
+     * @see ClassLoader#findResources
+     */
+    protected Enumeration findResources( final String name )
+        throws IOException
+    {
+        final Vector result = new Vector();
+
+        for( int i = 0; i &lt; m_classLoaders.length; i++ )
+        {
+            try
+            {
+                final Enumeration resources =
+                    m_classLoaders[ i ].getResources( name );
+                addAll( result, resources );
+            }
+            catch( final IOException ioe )
+            {
+                //Not in that classloader
+            }
+        }
+        final Enumeration resources = super.findResources( name );
+        addAll( result, resources );
+        return result.elements();
+    }
+
+    /**
+     * Add all resources specified into result vector.
+     *
+     * @param result the result vector
+     * @param resources the enumeration of resources
+     */
+    private void addAll( final Vector result,
+                         final Enumeration resources )
+    {
+        while( resources.hasMoreElements() )
+        {
+            result.add( resources.nextElement() );
+        }
+    }
+
+    /**
+     * Overide findResource to search through all classloaders.
+     *
+     * @param name the resources to search for
+     * @return the resource URL
+     * @see ClassLoader#findResource
+     */
+    protected URL findResource( final String name )
+    {
+        for( int i = 0; i &lt; m_classLoaders.length; i++ )
+        {
+            final URL resource = m_classLoaders[ i ].getResource( name );
+            if( null != resource )
+            {
+                return resource;
+            }
+        }
+        return super.findResource( name );
+    }
+}
</pre></div>
<hr /><a name="file97" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/test/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/metadata">metadata</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/metadata/test">test</a><br /></span>
<div class="fileheader" id="removed"><big><b>MetaDataTestCase.java</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/jcontainer/loom/classman/metadata/test/MetaDataTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N MetaDataTestCase.java
--- MetaDataTestCase.java	31 Mar 2004 03:18:54 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,120 +0,0 @@
</small></pre><pre class="diff" id="removed">-/*
- * Copyright (C) The Spice Group. All rights reserved.
- *
- * This software is published under the terms of the Spice
- * Software License version 1.1, a copy of which has been included
- * with this distribution in the LICENSE.txt file.
- */
-package org.jcontainer.loom.classman.metadata.test;
-
-import junit.framework.TestCase;
-import org.jcontainer.loom.classman.metadata.ClassLoaderMetaData;
-import org.jcontainer.loom.classman.metadata.ClassLoaderSetMetaData;
-import org.jcontainer.loom.classman.metadata.FileSetMetaData;
-import org.jcontainer.loom.classman.metadata.JoinMetaData;
-
-/**
- * Unit test for join classloader.
- *
- * @author Peter Donald
- * @version $Revision: 1.1 $ $Date: 2004/03/31 03:18:54 $
- */
-public class MetaDataTestCase
-    extends TestCase
-{
-    public void testCtorNullsInClassLoaderSet()
-        throws Exception
-    {
-        try
-        {
-            new ClassLoaderSetMetaData( null,
-                                        new String[ 0 ],
-                                        new ClassLoaderMetaData[ 0 ],
-                                        new JoinMetaData[ 0 ] );
-            fail( "Expected a NPE" );
-        }
-        catch( NullPointerException e )
-        {
-            assertEquals( "NPE type", "aDefault", e.getMessage() );
-        }
-
-        try
-        {
-            new ClassLoaderSetMetaData( "",
-                                        null,
-                                        new ClassLoaderMetaData[ 0 ],
-                                        new JoinMetaData[ 0 ] );
-            fail( "Expected a NPE" );
-        }
-        catch( NullPointerException e )
-        {
-            assertEquals( "NPE type", "predefined", e.getMessage() );
-        }
-
-        try
-        {
-            new ClassLoaderSetMetaData( "",
-                                        new String[ 0 ],
-                                        new ClassLoaderMetaData[ 0 ],
-                                        null );
-            fail( "Expected a NPE" );
-        }
-        catch( NullPointerException e )
-        {
-            assertEquals( "NPE type", "joins", e.getMessage() );
-        }
-
-        try
-        {
-            new ClassLoaderSetMetaData( "",
-                                        new String[ 0 ],
-                                        null,
-                                        new JoinMetaData[ 0 ] );
-            fail( "Expected a NPE" );
-        }
-        catch( NullPointerException e )
-        {
-            assertEquals( "NPE type", "classLoaders", e.getMessage() );
-        }
-    }
-
-    public void testCtorNullsInFileSet()
-        throws Exception
-    {
-        try
-        {
-            new FileSetMetaData( null,
-                                 new String[ 0 ],
-                                 new String[ 0 ] );
-            fail( "Expected a NPE" );
-        }
-        catch( NullPointerException e )
-        {
-            assertEquals( "NPE type", "baseDirectory", e.getMessage() );
-        }
-
-        try
-        {
-            new FileSetMetaData( ".",
-                                 null,
-                                 new String[ 0 ] );
-            fail( "Expected a NPE" );
-        }
-        catch( NullPointerException e )
-        {
-            assertEquals( "NPE type", "includes", e.getMessage() );
-        }
-
-        try
-        {
-            new FileSetMetaData( ".",
-                                 new String[ 0 ],
-                                 null );
-            fail( "Expected a NPE" );
-        }
-        catch( NullPointerException e )
-        {
-            assertEquals( "NPE type", "excludes", e.getMessage() );
-        }
-    }
-}
</pre></div>
<hr /><a name="file98" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java">java</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/java/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/verifier">verifier</a><br /></span>
<div class="fileheader" id="added"><big><b>ClassLoaderVerifier.java</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/verifier/ClassLoaderVerifier.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N ClassLoaderVerifier.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ClassLoaderVerifier.java	19 Apr 2004 22:19:26 -0000	1.1
@@ -0,0 +1,490 @@
</small></pre><pre class="diff" id="added">+/*
+ * Copyright (C) The Spice Group. All rights reserved.
+ *
+ * This software is published under the terms of the Spice
+ * Software License version 1.1, a copy of which has been included
+ * with this distribution in the LICENSE.txt file.
+ */
+package org.codehaus.loom.classman.verifier;
+
+import org.codehaus.loom.classman.metadata.ClassLoaderMetaData;
+import org.codehaus.loom.classman.metadata.ClassLoaderSetMetaData;
+import org.codehaus.loom.classman.metadata.JoinMetaData;
+import org.codehaus.spice.salt.i18n.ResourceManager;
+import org.codehaus.spice.salt.i18n.Resources;
+
+/**
+ * Verify ClassLoader set is valid. Validity is defined as &lt;ul&gt; &lt;li&gt;With
+ * exception of predefined names, all ClassLoader names should be defined
+ * starting with letters or '_' and then continuing with Alpha-Numeric
+ * characters, '-', '.' or '_'.&lt;/li&gt; &lt;li&gt;No ClassLoader can have a parent
+ * ClassLoader that is not predefined or not defined in ClassLoaderSet.&lt;/li&gt;
+ * &lt;li&gt;No "join" ClassLoader can link against a non-existent ClassLoader.&lt;/li&gt;
+ * &lt;li&gt;No "join" ClassLoader can join multiple instances of same
+ * ClassLoader.&lt;/li&gt; &lt;li&gt;No ClassLoader can have multiple entrys that point to
+ * the same location.&lt;/li&gt; &lt;li&gt;No ClassLoader (either predefined, join or
+ * regular) can have the same name.&lt;/li&gt; &lt;li&gt;The default ClassLoader must
+ * exist.&lt;/li&gt; &lt;li&gt;There must be no circular dependencies between join
+ * classloaders.&lt;/li&gt; &lt;/ul&gt;
+ *
+ * @author Peter Donald
+ * @version $Revision: 1.1 $ $Date: 2004/04/19 22:19:26 $
+ */
+public class ClassLoaderVerifier
+{
+    /** i18n resources for used to present messages. */
+    private static final Resources REZ =
+        ResourceManager.getPackageResources( ClassLoaderVerifier.class );
+
+    public void verifyClassLoaderSet( final ClassLoaderSetMetaData set )
+        throws Exception
+    {
+        String message = null;
+
+        message = REZ.getString( "valid-names.notice" );
+        info( message );
+        verifyNames( set );
+
+        message = REZ.getString( "valid-parents.notice" );
+        info( message );
+        verifyParents( set );
+
+        message = REZ.getString( "valid-links.notice" );
+        info( message );
+        verifyLinks( set );
+
+        message = REZ.getString( "default-loader.notice" );
+        info( message );
+        verifyDefaultLoaderExists( set );
+
+        message = REZ.getString( "unique-classloader.notice" );
+        info( message );
+        verifyUniqueClassLoaderNames( set );
+
+        message = REZ.getString( "unique-joins.notice" );
+        info( message );
+        verifyUniqueJoinNames( set );
+
+        message = REZ.getString( "unique-predefined.notice" );
+        info( message );
+        verifyUniquePredefinedNames( set );
+
+        message = REZ.getString( "unique-joins-entrys.notice" );
+        info( message );
+        verifyUniqueJoinEntrys( set );
+
+        message = REZ.getString( "unique-classpath-entrys.notice" );
+        info( message );
+        verifyUniqueClassLoaderEntrys( set );
+
<a name="task1" />+        //<span class="task">TODO</span>: Verify that the joins form a directed graph with no loops
+    }
+
+    /**
+     * Log an informational message. Sub-classes should overide this.
+     *
+     * @param message the message
+     */
+    protected void info( final String message )
+    {
+        //noop
+    }
+
+    /**
+     * Verify that all the classloaders have valid names.
+     *
+     * @throws Exception if validity check fails
+     */
+    private void verifyNames( ClassLoaderSetMetaData set )
+        throws Exception
+    {
+        final ClassLoaderMetaData[] classLoaders = set.getClassLoaders();
+        for( int i = 0; i &lt; classLoaders.length; i++ )
+        {
+            final String name = classLoaders[ i ].getName();
+            verifyName( name );
+        }
+
+        final JoinMetaData[] joins = set.getJoins();
+        for( int i = 0; i &lt; joins.length; i++ )
+        {
+            final String name = joins[ i ].getName();
+            verifyName( name );
+        }
+    }
+
+    /**
+     * Verify that all the classloaders have valid parents.
+     *
+     * @throws Exception if validity check fails
+     */
+    private void verifyParents( ClassLoaderSetMetaData set )
+        throws Exception
+    {
+        final ClassLoaderMetaData[] classLoaders = set.getClassLoaders();
+        for( int i = 0; i &lt; classLoaders.length; i++ )
+        {
+            final ClassLoaderMetaData classLoader = classLoaders[ i ];
+            final String parent = classLoader.getParent();
+            if( !isLoaderDefined( parent, set ) )
+            {
+                final String message =
+                    REZ.format( "invalid-parent.error",
+                                classLoader.getName(),
+                                parent );
+                throw new Exception( message );
+            }
+        }
+    }
+
+    /**
+     * Verify that each join ClassLoader only links to ClassLoaders that exist.
+     *
+     * @throws Exception if validity check fails
+     */
+    private void verifyLinks( final ClassLoaderSetMetaData set )
+        throws Exception
+    {
+        final JoinMetaData[] joins = set.getJoins();
+        for( int i = 0; i &lt; joins.length; i++ )
+        {
+            verifyLinks( joins[ i ], set );
+        }
+    }
+
+    /**
+     * Verify that each join ClassLoader only links to ClassLoaders that exist.
+     *
+     * @throws Exception if validity check fails
+     */
+    private void verifyLinks( final JoinMetaData join,
+                              final ClassLoaderSetMetaData set )
+        throws Exception
+    {
+        final String[] classloaders = join.getClassloaders();
+        for( int i = 0; i &lt; classloaders.length; i++ )
+        {
+            final String classloader = classloaders[ i ];
+            if( !isLoaderDefined( classloader, set ) )
+            {
+                final String message =
+                    REZ.format( "bad-join-link.error",
+                                join.getName(),
+                                classloader );
+                throw new Exception( message );
+            }
+        }
+    }
+
+    /**
+     * Verify that all the classloaders have valid names.
+     *
+     * @throws Exception if validity check fails
+     */
+    private void verifyName( final String name )
+        throws Exception
+    {
+        final int size = name.length();
+        if( 0 == size )
+        {
+            final String message =
+                REZ.format( "empty-name.error",
+                            name );
+            throw new Exception( message );
+        }
+        final char ch = name.charAt( 0 );
+        if( !Character.isLetter( ch ) &amp;&amp;
+            '_' != ch )
+        {
+            final String message =
+                REZ.format( "name-invalid-start.error",
+                            name );
+            throw new Exception( message );
+        }
+
+        for( int i = 1; i &lt; size; i++ )
+        {
+            final char c = name.charAt( i );
+            if( !Character.isLetterOrDigit( c ) &amp;&amp;
+                '_' != c &amp;&amp;
+                '-' != c &amp;&amp;
+                '.' != c )
+            {
+                final String message =
+                    REZ.format( "name-invalid-char.error",
+                                name,
+                                String.valueOf( c ) );
+                throw new Exception( message );
+            }
+        }
+    }
+
+    /**
+     * Verify that each regular ClassLoader only contains unique entrys.
+     *
+     * @throws Exception if validity check fails
+     */
+    private void verifyUniqueClassLoaderEntrys(
+        final ClassLoaderSetMetaData set )
+        throws Exception
+    {
+        final ClassLoaderMetaData[] classLoaders = set.getClassLoaders();
+        for( int i = 0; i &lt; classLoaders.length; i++ )
+        {
+            verifyUniqueClassLoaderEntrys( classLoaders[ i ] );
+        }
+    }
+
+    /**
+     * Verify that each regular ClassLoader only contains unique entrys.
+     *
+     * @throws Exception if validity check fails
+     */
+    private void verifyUniqueClassLoaderEntrys(
+        final ClassLoaderMetaData classLoader )
+        throws Exception
+    {
+        final String[] entrys = classLoader.getEntrys();
+        for( int i = 0; i &lt; entrys.length; i++ )
+        {
+            final String location = entrys[ i ];
+            for( int j = i + 1; j &lt; entrys.length; j++ )
+            {
+                if( location.equals( entrys[ j ] ) )
+                {
+                    final String message =
+                        REZ.format( "classloader-dup-entrys.error",
+                                    classLoader.getName(),
+                                    location );
+                    throw new Exception( message );
+                }
+            }
+        }
+    }
+
+    /**
+     * Verify that each join only contains unique classloaders.
+     *
+     * @throws Exception if validity check fails
+     */
+    private void verifyUniqueJoinEntrys( final ClassLoaderSetMetaData set )
+        throws Exception
+    {
+        final JoinMetaData[] joins = set.getJoins();
+        for( int i = 0; i &lt; joins.length; i++ )
+        {
+            verifyUniqueJoinEntrys( joins[ i ] );
+        }
+    }
+
+    /**
+     * Verify that specified join only contains unique classloaders.
+     *
+     * @throws Exception if validity check fails
+     */
+    private void verifyUniqueJoinEntrys( final JoinMetaData join )
+        throws Exception
+    {
+        final String[] classloaders = join.getClassloaders();
+        for( int j = 0; j &lt; classloaders.length; j++ )
+        {
+            final String name = classloaders[ j ];
+            for( int k = j + 1; k &lt; classloaders.length; k++ )
+            {
+                final String other = classloaders[ k ];
+                if( other.equals( name ) )
+                {
+                    final String message =
+                        REZ.format( "join-dup-entrys.error",
+                                    join.getName(),
+                                    name );
+                    throw new Exception( message );
+                }
+            }
+        }
+    }
+
+    /**
+     * Verify that the Predefined names are unique set.
+     *
+     * @throws Exception if validity check fails
+     */
+    private void verifyUniquePredefinedNames( final ClassLoaderSetMetaData set )
+        throws Exception
+    {
+        final String[] predefined = set.getPredefined();
+        for( int i = 0; i &lt; predefined.length; i++ )
+        {
+            final String name = predefined[ i ];
+            for( int j = i + 1; j &lt; predefined.length; j++ )
+            {
+                final String other = predefined[ j ];
+                if( other.equals( name ) )
+                {
+                    final String message =
+                        REZ.format( "duplicate-name.error",
+                                    "predefined",
+                                    "predefined",
+                                    name );
+                    throw new Exception( message );
+                }
+            }
+        }
+    }
+
+    /**
+     * Verify that the ClassLoader names are unique throughout the set.
+     *
+     * @param set the set of ClassLoader defs to search in
+     * @throws Exception if validity check fails
+     */
+    private void verifyUniqueClassLoaderNames(
+        final ClassLoaderSetMetaData set )
+        throws Exception
+    {
+        final ClassLoaderMetaData[] classLoaders = set.getClassLoaders();
+        for( int i = 0; i &lt; classLoaders.length; i++ )
+        {
+            final ClassLoaderMetaData classLoader = classLoaders[ i ];
+            verifyUniqueName( set,
+                              classLoader.getName(),
+                              "classloader",
+                              classLoader );
+        }
+    }
+
+    /**
+     * Verify that the specified name is unique in set except for specified
+     * entity.
+     *
+     * @param set the set of classloaders
+     * @param name the name
+     * @param type the type of classloder (used for exception messages)
+     * @param entity the entity to skip (ie the one the name refers to)
+     * @throws Exception if validity check fails
+     */
+    private void verifyUniqueName( final ClassLoaderSetMetaData set,
+                                   final String name,
+                                   final String type,
+                                   final Object entity )
+        throws Exception
+    {
+        //Make sure our join does not have same name as a
+        //predefined ClassLoader
+        if( set.isPredefined( name ) )
+        {
+            final String message =
+                REZ.format( "duplicate-name.error",
+                            type,
+                            "predefined",
+                            name );
+            throw new Exception( message );
+        }
+
+        //Make sure no joins have same name as our join
+        final JoinMetaData[] joins = set.getJoins();
+        for( int j = 0; j &lt; joins.length; j++ )
+        {
+            final JoinMetaData other = joins[ j ];
+            if( other == entity )
+            {
+                continue;
+            }
+            if( other.getName().equals( name ) )
+            {
+                final String message =
+                    REZ.format( "duplicate-name.error",
+                                type,
+                                "join",
+                                name );
+                throw new Exception( message );
+            }
+        }
+
+        final ClassLoaderMetaData[] classLoaders = set.getClassLoaders();
+        for( int j = 0; j &lt; classLoaders.length; j++ )
+        {
+            final ClassLoaderMetaData other = classLoaders[ j ];
+            if( other == entity )
+            {
+                continue;
+            }
+            if( other.getName().equals( name ) )
+            {
+                final String message =
+                    REZ.format( "duplicate-name.error",
+                                type,
+                                "classloader",
+                                name );
+                throw new Exception( message );
+            }
+        }
+    }
+
+    /**
+     * Verify that the join names are unique throughout the set.
+     *
+     * @param set the set of ClassLoader defs to search in
+     * @throws Exception if validity check fails
+     */
+    private void verifyUniqueJoinNames( final ClassLoaderSetMetaData set )
+        throws Exception
+    {
+        final JoinMetaData[] joins = set.getJoins();
+        for( int i = 0; i &lt; joins.length; i++ )
+        {
+            final JoinMetaData join = joins[ i ];
+            verifyUniqueName( set,
+                              join.getName(),
+                              "join",
+                              join );
+        }
+    }
+
+    /**
+     * Verify that the default loader is defined.
+     *
+     * @param set the set of ClassLoader defs to search in
+     * @throws Exception if validity check fails
+     */
+    private void verifyDefaultLoaderExists( final ClassLoaderSetMetaData set )
+        throws Exception
+    {
+        final String name = set.getDefault();
+        if( !isLoaderDefined( name, set ) )
+        {
+            final String message =
+                REZ.format( "missing-default-loader.error",
+                            name );
+            throw new Exception( message );
+        }
+    }
+
+    /**
+     * Return true if specified loader is defined in set.
+     *
+     * @param name the name of loader
+     * @param set the set to search
+     * @return true if specified loader is defined in set.
+     */
+    private boolean isLoaderDefined( final String name,
+                                     final ClassLoaderSetMetaData set )
+    {
+        if( set.isPredefined( name ) )
+        {
+            return true;
+        }
+        else if( null != set.getClassLoader( name ) )
+        {
+            return true;
+        }
+        else if( null != set.getJoin( name ) )
+        {
+            return true;
+        }
+        else
+        {
+            return false;
+        }
+    }
+}
</pre></div>
<hr /><a name="file99" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java">java</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/java/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/verifier">verifier</a><br /></span>
<div class="fileheader" id="added"><big><b>Resources.properties</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/codehaus/loom/classman/verifier/Resources.properties?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N Resources.properties
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ Resources.properties	19 Apr 2004 22:19:26 -0000	1.1
@@ -0,0 +1,22 @@
</small></pre><pre class="diff" id="added">+valid-names.notice=Verifying that all ClassLoaders have valid names.
+valid-parents.notice=Verifying that all ClassLoaders have valid parents.
+valid-links.notice=Verifying that all "Join" ClassLoaders link against existing ClassLoaders.
+default-loader.notice=Verifying that the default ClassLoader exists.
+unique-classloader.notice=Verifying that all Regular ClassLoaders have a unique name.
+unique-joins.notice=Verifying that all Join ClassLoaders have a unique name.
+unique-predefined.notice=Verifying that all predefined ClassLoaders have a unique name.
+unique-joins-entrys.notice=Verifying that all "Join" ClassLoaders link with other classLoaders no more than once.
+unique-classpath-entrys.notice=Verifying that all Regular ClassLoaders have unique entrys.
+unique-classpath-entrys.notice=Verifying that all Regular ClassLoaders have unique entrys.
+
+
+invalid-parent.error=ClassLoader named "{0}" specified a non-existent parent "{1}".
+bad-join-link.error="Join" ClassLoader named "{0}" specified a non-existent classloader-ref "{1}".
+empty-name.error=Invalid empty ClassLoader name.
+name-invalid-start.error=ClassLoader name "{0}" begins with invalid name. Must begin with a letter or the '_' character.
+name-invalid-char.error=ClassLoader name "{0}" contains invalid character "{1}".
+classloader-dup-entrys.error=Duplicate entry "{1}" detected for regular ClassLoader named "{0}".
+join-dup-entrys.error=Duplicate classloader-ref "{1}" detected for "Join" ClassLoader named "{0}".
+join-dup-entrys.error=Duplicate classloader-ref "{1}" detected for "Join" ClassLoader named "{0}".
+missing-default-loader.error=Unable to locate default ClassLoader named "{0}".
+duplicate-name.error=Multiple ClassLoaders exist with name "{2}". (One is a {0,choice,classloader#Regular|predefined#Predefined|join#Join} ClassLoader, the other is a {1,choice,classloader#Regular|predefined#Predefined|join#Join} ClassLoader).
</pre></div>
<hr /><a name="file100" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/metadata">metadata</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/metadata/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>MetaDataTestCase.java</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/metadata/test/MetaDataTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N MetaDataTestCase.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ MetaDataTestCase.java	19 Apr 2004 22:19:26 -0000	1.1
@@ -0,0 +1,121 @@
</small></pre><pre class="diff" id="added">+/*
+ * Copyright (C) The Spice Group. All rights reserved.
+ *
+ * This software is published under the terms of the Spice
+ * Software License version 1.1, a copy of which has been included
+ * with this distribution in the LICENSE.txt file.
+ */
+package org.codehaus.loom.classman.metadata.test;
+
+import junit.framework.TestCase;
+
+import org.codehaus.loom.classman.metadata.ClassLoaderMetaData;
+import org.codehaus.loom.classman.metadata.ClassLoaderSetMetaData;
+import org.codehaus.loom.classman.metadata.FileSetMetaData;
+import org.codehaus.loom.classman.metadata.JoinMetaData;
+
+/**
+ * Unit test for join classloader.
+ *
+ * @author Peter Donald
+ * @version $Revision: 1.1 $ $Date: 2004/04/19 22:19:26 $
+ */
+public class MetaDataTestCase
+    extends TestCase
+{
+    public void testCtorNullsInClassLoaderSet()
+        throws Exception
+    {
+        try
+        {
+            new ClassLoaderSetMetaData( null,
+                                        new String[ 0 ],
+                                        new ClassLoaderMetaData[ 0 ],
+                                        new JoinMetaData[ 0 ] );
+            fail( "Expected a NPE" );
+        }
+        catch( NullPointerException e )
+        {
+            assertEquals( "NPE type", "aDefault", e.getMessage() );
+        }
+
+        try
+        {
+            new ClassLoaderSetMetaData( "",
+                                        null,
+                                        new ClassLoaderMetaData[ 0 ],
+                                        new JoinMetaData[ 0 ] );
+            fail( "Expected a NPE" );
+        }
+        catch( NullPointerException e )
+        {
+            assertEquals( "NPE type", "predefined", e.getMessage() );
+        }
+
+        try
+        {
+            new ClassLoaderSetMetaData( "",
+                                        new String[ 0 ],
+                                        new ClassLoaderMetaData[ 0 ],
+                                        null );
+            fail( "Expected a NPE" );
+        }
+        catch( NullPointerException e )
+        {
+            assertEquals( "NPE type", "joins", e.getMessage() );
+        }
+
+        try
+        {
+            new ClassLoaderSetMetaData( "",
+                                        new String[ 0 ],
+                                        null,
+                                        new JoinMetaData[ 0 ] );
+            fail( "Expected a NPE" );
+        }
+        catch( NullPointerException e )
+        {
+            assertEquals( "NPE type", "classLoaders", e.getMessage() );
+        }
+    }
+
+    public void testCtorNullsInFileSet()
+        throws Exception
+    {
+        try
+        {
+            new FileSetMetaData( null,
+                                 new String[ 0 ],
+                                 new String[ 0 ] );
+            fail( "Expected a NPE" );
+        }
+        catch( NullPointerException e )
+        {
+            assertEquals( "NPE type", "baseDirectory", e.getMessage() );
+        }
+
+        try
+        {
+            new FileSetMetaData( ".",
+                                 null,
+                                 new String[ 0 ] );
+            fail( "Expected a NPE" );
+        }
+        catch( NullPointerException e )
+        {
+            assertEquals( "NPE type", "includes", e.getMessage() );
+        }
+
+        try
+        {
+            new FileSetMetaData( ".",
+                                 new String[ 0 ],
+                                 null );
+            fail( "Expected a NPE" );
+        }
+        catch( NullPointerException e )
+        {
+            assertEquals( "NPE type", "excludes", e.getMessage() );
+        }
+    }
+}
</pre></div>
<hr /><a name="file101" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java">java</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/java/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/verifier">verifier</a><br /></span>
<div class="fileheader" id="removed"><big><b>ClassLoaderVerifier.java</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/verifier/ClassLoaderVerifier.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N ClassLoaderVerifier.java
--- ClassLoaderVerifier.java	31 Mar 2004 03:18:54 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,490 +0,0 @@
</small></pre><pre class="diff" id="removed">-/*
- * Copyright (C) The Spice Group. All rights reserved.
- *
- * This software is published under the terms of the Spice
- * Software License version 1.1, a copy of which has been included
- * with this distribution in the LICENSE.txt file.
- */
-package org.jcontainer.loom.classman.verifier;
-
-import org.codehaus.spice.salt.i18n.ResourceManager;
-import org.codehaus.spice.salt.i18n.Resources;
-import org.jcontainer.loom.classman.metadata.ClassLoaderMetaData;
-import org.jcontainer.loom.classman.metadata.ClassLoaderSetMetaData;
-import org.jcontainer.loom.classman.metadata.JoinMetaData;
-
-/**
- * Verify ClassLoader set is valid. Validity is defined as &lt;ul&gt; &lt;li&gt;With
- * exception of predefined names, all ClassLoader names should be defined
- * starting with letters or '_' and then continuing with Alpha-Numeric
- * characters, '-', '.' or '_'.&lt;/li&gt; &lt;li&gt;No ClassLoader can have a parent
- * ClassLoader that is not predefined or not defined in ClassLoaderSet.&lt;/li&gt;
- * &lt;li&gt;No "join" ClassLoader can link against a non-existent ClassLoader.&lt;/li&gt;
- * &lt;li&gt;No "join" ClassLoader can join multiple instances of same
- * ClassLoader.&lt;/li&gt; &lt;li&gt;No ClassLoader can have multiple entrys that point to
- * the same location.&lt;/li&gt; &lt;li&gt;No ClassLoader (either predefined, join or
- * regular) can have the same name.&lt;/li&gt; &lt;li&gt;The default ClassLoader must
- * exist.&lt;/li&gt; &lt;li&gt;There must be no circular dependencies between join
- * classloaders.&lt;/li&gt; &lt;/ul&gt;
- *
- * @author Peter Donald
- * @version $Revision: 1.1 $ $Date: 2004/03/31 03:18:54 $
- */
-public class ClassLoaderVerifier
-{
-    /** i18n resources for used to present messages. */
-    private static final Resources REZ =
-        ResourceManager.getPackageResources( ClassLoaderVerifier.class );
-
-    public void verifyClassLoaderSet( final ClassLoaderSetMetaData set )
-        throws Exception
-    {
-        String message = null;
-
-        message = REZ.getString( "valid-names.notice" );
-        info( message );
-        verifyNames( set );
-
-        message = REZ.getString( "valid-parents.notice" );
-        info( message );
-        verifyParents( set );
-
-        message = REZ.getString( "valid-links.notice" );
-        info( message );
-        verifyLinks( set );
-
-        message = REZ.getString( "default-loader.notice" );
-        info( message );
-        verifyDefaultLoaderExists( set );
-
-        message = REZ.getString( "unique-classloader.notice" );
-        info( message );
-        verifyUniqueClassLoaderNames( set );
-
-        message = REZ.getString( "unique-joins.notice" );
-        info( message );
-        verifyUniqueJoinNames( set );
-
-        message = REZ.getString( "unique-predefined.notice" );
-        info( message );
-        verifyUniquePredefinedNames( set );
-
-        message = REZ.getString( "unique-joins-entrys.notice" );
-        info( message );
-        verifyUniqueJoinEntrys( set );
-
-        message = REZ.getString( "unique-classpath-entrys.notice" );
-        info( message );
-        verifyUniqueClassLoaderEntrys( set );
-
-        //TODO: Verify that the joins form a directed graph with no loops
-    }
-
-    /**
-     * Log an informational message. Sub-classes should overide this.
-     *
-     * @param message the message
-     */
-    protected void info( final String message )
-    {
-        //noop
-    }
-
-    /**
-     * Verify that all the classloaders have valid names.
-     *
-     * @throws Exception if validity check fails
-     */
-    private void verifyNames( ClassLoaderSetMetaData set )
-        throws Exception
-    {
-        final ClassLoaderMetaData[] classLoaders = set.getClassLoaders();
-        for( int i = 0; i &lt; classLoaders.length; i++ )
-        {
-            final String name = classLoaders[ i ].getName();
-            verifyName( name );
-        }
-
-        final JoinMetaData[] joins = set.getJoins();
-        for( int i = 0; i &lt; joins.length; i++ )
-        {
-            final String name = joins[ i ].getName();
-            verifyName( name );
-        }
-    }
-
-    /**
-     * Verify that all the classloaders have valid parents.
-     *
-     * @throws Exception if validity check fails
-     */
-    private void verifyParents( ClassLoaderSetMetaData set )
-        throws Exception
-    {
-        final ClassLoaderMetaData[] classLoaders = set.getClassLoaders();
-        for( int i = 0; i &lt; classLoaders.length; i++ )
-        {
-            final ClassLoaderMetaData classLoader = classLoaders[ i ];
-            final String parent = classLoader.getParent();
-            if( !isLoaderDefined( parent, set ) )
-            {
-                final String message =
-                    REZ.format( "invalid-parent.error",
-                                classLoader.getName(),
-                                parent );
-                throw new Exception( message );
-            }
-        }
-    }
-
-    /**
-     * Verify that each join ClassLoader only links to ClassLoaders that exist.
-     *
-     * @throws Exception if validity check fails
-     */
-    private void verifyLinks( final ClassLoaderSetMetaData set )
-        throws Exception
-    {
-        final JoinMetaData[] joins = set.getJoins();
-        for( int i = 0; i &lt; joins.length; i++ )
-        {
-            verifyLinks( joins[ i ], set );
-        }
-    }
-
-    /**
-     * Verify that each join ClassLoader only links to ClassLoaders that exist.
-     *
-     * @throws Exception if validity check fails
-     */
-    private void verifyLinks( final JoinMetaData join,
-                              final ClassLoaderSetMetaData set )
-        throws Exception
-    {
-        final String[] classloaders = join.getClassloaders();
-        for( int i = 0; i &lt; classloaders.length; i++ )
-        {
-            final String classloader = classloaders[ i ];
-            if( !isLoaderDefined( classloader, set ) )
-            {
-                final String message =
-                    REZ.format( "bad-join-link.error",
-                                join.getName(),
-                                classloader );
-                throw new Exception( message );
-            }
-        }
-    }
-
-    /**
-     * Verify that all the classloaders have valid names.
-     *
-     * @throws Exception if validity check fails
-     */
-    private void verifyName( final String name )
-        throws Exception
-    {
-        final int size = name.length();
-        if( 0 == size )
-        {
-            final String message =
-                REZ.format( "empty-name.error",
-                            name );
-            throw new Exception( message );
-        }
-        final char ch = name.charAt( 0 );
-        if( !Character.isLetter( ch ) &amp;&amp;
-            '_' != ch )
-        {
-            final String message =
-                REZ.format( "name-invalid-start.error",
-                            name );
-            throw new Exception( message );
-        }
-
-        for( int i = 1; i &lt; size; i++ )
-        {
-            final char c = name.charAt( i );
-            if( !Character.isLetterOrDigit( c ) &amp;&amp;
-                '_' != c &amp;&amp;
-                '-' != c &amp;&amp;
-                '.' != c )
-            {
-                final String message =
-                    REZ.format( "name-invalid-char.error",
-                                name,
-                                String.valueOf( c ) );
-                throw new Exception( message );
-            }
-        }
-    }
-
-    /**
-     * Verify that each regular ClassLoader only contains unique entrys.
-     *
-     * @throws Exception if validity check fails
-     */
-    private void verifyUniqueClassLoaderEntrys(
-        final ClassLoaderSetMetaData set )
-        throws Exception
-    {
-        final ClassLoaderMetaData[] classLoaders = set.getClassLoaders();
-        for( int i = 0; i &lt; classLoaders.length; i++ )
-        {
-            verifyUniqueClassLoaderEntrys( classLoaders[ i ] );
-        }
-    }
-
-    /**
-     * Verify that each regular ClassLoader only contains unique entrys.
-     *
-     * @throws Exception if validity check fails
-     */
-    private void verifyUniqueClassLoaderEntrys(
-        final ClassLoaderMetaData classLoader )
-        throws Exception
-    {
-        final String[] entrys = classLoader.getEntrys();
-        for( int i = 0; i &lt; entrys.length; i++ )
-        {
-            final String location = entrys[ i ];
-            for( int j = i + 1; j &lt; entrys.length; j++ )
-            {
-                if( location.equals( entrys[ j ] ) )
-                {
-                    final String message =
-                        REZ.format( "classloader-dup-entrys.error",
-                                    classLoader.getName(),
-                                    location );
-                    throw new Exception( message );
-                }
-            }
-        }
-    }
-
-    /**
-     * Verify that each join only contains unique classloaders.
-     *
-     * @throws Exception if validity check fails
-     */
-    private void verifyUniqueJoinEntrys( final ClassLoaderSetMetaData set )
-        throws Exception
-    {
-        final JoinMetaData[] joins = set.getJoins();
-        for( int i = 0; i &lt; joins.length; i++ )
-        {
-            verifyUniqueJoinEntrys( joins[ i ] );
-        }
-    }
-
-    /**
-     * Verify that specified join only contains unique classloaders.
-     *
-     * @throws Exception if validity check fails
-     */
-    private void verifyUniqueJoinEntrys( final JoinMetaData join )
-        throws Exception
-    {
-        final String[] classloaders = join.getClassloaders();
-        for( int j = 0; j &lt; classloaders.length; j++ )
-        {
-            final String name = classloaders[ j ];
-            for( int k = j + 1; k &lt; classloaders.length; k++ )
-            {
-                final String other = classloaders[ k ];
-                if( other.equals( name ) )
-                {
-                    final String message =
-                        REZ.format( "join-dup-entrys.error",
-                                    join.getName(),
-                                    name );
-                    throw new Exception( message );
-                }
-            }
-        }
-    }
-
-    /**
-     * Verify that the Predefined names are unique set.
-     *
-     * @throws Exception if validity check fails
-     */
-    private void verifyUniquePredefinedNames( final ClassLoaderSetMetaData set )
-        throws Exception
-    {
-        final String[] predefined = set.getPredefined();
-        for( int i = 0; i &lt; predefined.length; i++ )
-        {
-            final String name = predefined[ i ];
-            for( int j = i + 1; j &lt; predefined.length; j++ )
-            {
-                final String other = predefined[ j ];
-                if( other.equals( name ) )
-                {
-                    final String message =
-                        REZ.format( "duplicate-name.error",
-                                    "predefined",
-                                    "predefined",
-                                    name );
-                    throw new Exception( message );
-                }
-            }
-        }
-    }
-
-    /**
-     * Verify that the ClassLoader names are unique throughout the set.
-     *
-     * @param set the set of ClassLoader defs to search in
-     * @throws Exception if validity check fails
-     */
-    private void verifyUniqueClassLoaderNames(
-        final ClassLoaderSetMetaData set )
-        throws Exception
-    {
-        final ClassLoaderMetaData[] classLoaders = set.getClassLoaders();
-        for( int i = 0; i &lt; classLoaders.length; i++ )
-        {
-            final ClassLoaderMetaData classLoader = classLoaders[ i ];
-            verifyUniqueName( set,
-                              classLoader.getName(),
-                              "classloader",
-                              classLoader );
-        }
-    }
-
-    /**
-     * Verify that the specified name is unique in set except for specified
-     * entity.
-     *
-     * @param set the set of classloaders
-     * @param name the name
-     * @param type the type of classloder (used for exception messages)
-     * @param entity the entity to skip (ie the one the name refers to)
-     * @throws Exception if validity check fails
-     */
-    private void verifyUniqueName( final ClassLoaderSetMetaData set,
-                                   final String name,
-                                   final String type,
-                                   final Object entity )
-        throws Exception
-    {
-        //Make sure our join does not have same name as a
-        //predefined ClassLoader
-        if( set.isPredefined( name ) )
-        {
-            final String message =
-                REZ.format( "duplicate-name.error",
-                            type,
-                            "predefined",
-                            name );
-            throw new Exception( message );
-        }
-
-        //Make sure no joins have same name as our join
-        final JoinMetaData[] joins = set.getJoins();
-        for( int j = 0; j &lt; joins.length; j++ )
-        {
-            final JoinMetaData other = joins[ j ];
-            if( other == entity )
-            {
-                continue;
-            }
-            if( other.getName().equals( name ) )
-            {
-                final String message =
-                    REZ.format( "duplicate-name.error",
-                                type,
-                                "join",
-                                name );
-                throw new Exception( message );
-            }
-        }
-
-        final ClassLoaderMetaData[] classLoaders = set.getClassLoaders();
-        for( int j = 0; j &lt; classLoaders.length; j++ )
-        {
-            final ClassLoaderMetaData other = classLoaders[ j ];
-            if( other == entity )
-            {
-                continue;
-            }
-            if( other.getName().equals( name ) )
-            {
-                final String message =
-                    REZ.format( "duplicate-name.error",
-                                type,
-                                "classloader",
-                                name );
-                throw new Exception( message );
-            }
-        }
-    }
-
-    /**
-     * Verify that the join names are unique throughout the set.
-     *
-     * @param set the set of ClassLoader defs to search in
-     * @throws Exception if validity check fails
-     */
-    private void verifyUniqueJoinNames( final ClassLoaderSetMetaData set )
-        throws Exception
-    {
-        final JoinMetaData[] joins = set.getJoins();
-        for( int i = 0; i &lt; joins.length; i++ )
-        {
-            final JoinMetaData join = joins[ i ];
-            verifyUniqueName( set,
-                              join.getName(),
-                              "join",
-                              join );
-        }
-    }
-
-    /**
-     * Verify that the default loader is defined.
-     *
-     * @param set the set of ClassLoader defs to search in
-     * @throws Exception if validity check fails
-     */
-    private void verifyDefaultLoaderExists( final ClassLoaderSetMetaData set )
-        throws Exception
-    {
-        final String name = set.getDefault();
-        if( !isLoaderDefined( name, set ) )
-        {
-            final String message =
-                REZ.format( "missing-default-loader.error",
-                            name );
-            throw new Exception( message );
-        }
-    }
-
-    /**
-     * Return true if specified loader is defined in set.
-     *
-     * @param name the name of loader
-     * @param set the set to search
-     * @return true if specified loader is defined in set.
-     */
-    private boolean isLoaderDefined( final String name,
-                                     final ClassLoaderSetMetaData set )
-    {
-        if( set.isPredefined( name ) )
-        {
-            return true;
-        }
-        else if( null != set.getClassLoader( name ) )
-        {
-            return true;
-        }
-        else if( null != set.getJoin( name ) )
-        {
-            return true;
-        }
-        else
-        {
-            return false;
-        }
-    }
-}
</pre></div>
<hr /><a name="file102" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java">java</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/sup
 port/classman/src/java/org/jcontainer/loom/classman">classman</a>/<a href="http://xstream!
.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/verifier">verifier</a><br /></span>
<div class="fileheader" id="removed"><big><b>Resources.properties</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/java/org/jcontainer/loom/classman/verifier/Resources.properties?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N Resources.properties
--- Resources.properties	31 Mar 2004 03:18:54 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,22 +0,0 @@
</small></pre><pre class="diff" id="removed">-valid-names.notice=Verifying that all ClassLoaders have valid names.
-valid-parents.notice=Verifying that all ClassLoaders have valid parents.
-valid-links.notice=Verifying that all "Join" ClassLoaders link against existing ClassLoaders.
-default-loader.notice=Verifying that the default ClassLoader exists.
-unique-classloader.notice=Verifying that all Regular ClassLoaders have a unique name.
-unique-joins.notice=Verifying that all Join ClassLoaders have a unique name.
-unique-predefined.notice=Verifying that all predefined ClassLoaders have a unique name.
-unique-joins-entrys.notice=Verifying that all "Join" ClassLoaders link with other classLoaders no more than once.
-unique-classpath-entrys.notice=Verifying that all Regular ClassLoaders have unique entrys.
-unique-classpath-entrys.notice=Verifying that all Regular ClassLoaders have unique entrys.
-
-
-invalid-parent.error=ClassLoader named "{0}" specified a non-existent parent "{1}".
-bad-join-link.error="Join" ClassLoader named "{0}" specified a non-existent classloader-ref "{1}".
-empty-name.error=Invalid empty ClassLoader name.
-name-invalid-start.error=ClassLoader name "{0}" begins with invalid name. Must begin with a letter or the '_' character.
-name-invalid-char.error=ClassLoader name "{0}" contains invalid character "{1}".
-classloader-dup-entrys.error=Duplicate entry "{1}" detected for regular ClassLoader named "{0}".
-join-dup-entrys.error=Duplicate classloader-ref "{1}" detected for "Join" ClassLoader named "{0}".
-join-dup-entrys.error=Duplicate classloader-ref "{1}" detected for "Join" ClassLoader named "{0}".
-missing-default-loader.error=Unable to locate default ClassLoader named "{0}".
-duplicate-name.error=Multiple ClassLoaders exist with name "{2}". (One is a {0,choice,classloader#Regular|predefined#Predefined|join#Join} ClassLoader, the other is a {1,choice,classloader#Regular|predefined#Predefined|join#Join} ClassLoader).
</pre></div>
<hr /><a name="file103" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata">testdata</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontai
 ner/loom/support/classman/src/testdata/org/codehaus/loom/classman">classman</a>/<a href="!
http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test/data">data</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test/data/cl4">cl4</a><br /></span>
<div class="fileheader" id="added"><big><b>CL4Data.java</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test/data/cl4/CL4Data.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N CL4Data.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ CL4Data.java	19 Apr 2004 22:19:26 -0000	1.1
@@ -0,0 +1,17 @@
</small></pre><pre class="diff" id="added">+/*
+ * Copyright (C) The Spice Group. All rights reserved.
+ *
+ * This software is published under the terms of the Spice
+ * Software License version 1.1, a copy of which has been included
+ * with this distribution in the LICENSE.txt file.
+ */
+package org.codehaus.loom.classman.test.data.cl4;
+
+/**
+ *
+ * @author Peter Donald
+ * @version $Revision: 1.1 $ $Date: 2004/04/19 22:19:26 $
+ */
+public class CL4Data
+{
+}
</pre></div>
<hr /><a name="file104" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/cla
 ssman/src/test/org/codehaus/loom/classman">classman</a>/<a href="http://xstream.cvs.codeh!
aus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/runtime">runtime</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/runtime/test">test</a><br /></span>
<div class="fileheader" id="added"><big><b>JoinClassLoaderTestCase.java</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/test/org/codehaus/loom/classman/runtime/test/JoinClassLoaderTestCase.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N JoinClassLoaderTestCase.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ JoinClassLoaderTestCase.java	19 Apr 2004 22:19:26 -0000	1.1
@@ -0,0 +1,142 @@
</small></pre><pre class="diff" id="added">+/*
+ * Copyright (C) The Spice Group. All rights reserved.
+ *
+ * This software is published under the terms of the Spice
+ * Software License version 1.1, a copy of which has been included
+ * with this distribution in the LICENSE.txt file.
+ */
+package org.codehaus.loom.classman.runtime.test;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.Enumeration;
+
+import org.codehaus.loom.classman.runtime.JoinClassLoader;
+import org.codehaus.loom.classman.test.AbstractLoaderTestCase;
+import org.codehaus.loom.classman.test.DataConstants;
+
+/**
+ * Unit test for join classloader.
+ *
+ * @author Peter Donald
+ * @version $Revision: 1.1 $ $Date: 2004/04/19 22:19:26 $
+ */
+public class JoinClassLoaderTestCase
+    extends AbstractLoaderTestCase
+{
+    public void testJoinClassLoader()
+        throws Exception
+    {
+        if( System.getProperty( "gump", "false" ).equals( "true" ) )
+        {
+            //Can't test the rest of this as it requires
+            //explicit classloader setup that gump ignores.
+            return;
+        }
+
+        final URLClassLoader cl1 = createClassLoader( "cl1.jar" );
+        final URLClassLoader cl2 = createClassLoader( "cl2.jar" );
+        final ClassLoader[] cls = new ClassLoader[]{cl1, cl2};
+        final JoinClassLoader join =
+            new JoinClassLoader( cls, ClassLoader.getSystemClassLoader() );
+        try
+        {
+            join.loadClass( DataConstants.DATA1_CLASS );
+        }
+        catch( ClassNotFoundException e )
+        {
+            fail( "Unable to load Data1 from cl1 classloader" );
+        }
+        try
+        {
+            join.loadClass( DataConstants.DATA2_CLASS );
+        }
+        catch( ClassNotFoundException e )
+        {
+            fail( "Unable to load CL2Data from cl2 classloader" );
+        }
+        try
+        {
+            join.loadClass( "i.no.exist" );
+            fail( "Expected that would be unable to load non-existent class" );
+        }
+        catch( ClassNotFoundException e )
+        {
+        }
+
+        try
+        {
+            assertEquals( "Loading from system classloader",
+                          Integer.class,
+                          join.loadClass( Integer.class.getName() ) );
+        }
+        catch( ClassNotFoundException e )
+        {
+            fail( "Unable to load Integer from classloader" );
+        }
+
+        final URL url1 = join.getResource( DataConstants.DATA1_RESOURCE );
+        assertNotNull( "Loading " + DataConstants.DATA1_RESOURCE + " from c1 classloader",
+                       url1 );
+        final URL url2 = join.getResource( "noexist.txt" );
+        assertNull( "Loading noexist.txt from c1 classloader", url2 );
+
+        final Enumeration resources1 = join.getResources( DataConstants.DATA1_RESOURCE );
+        assertNotNull( "Loading set of " + DataConstants.DATA1_RESOURCE + " from c1 classloader",
+                       resources1 );
+        assertTrue( "Count of resource from classloader", resources1.hasMoreElements() );
+        assertEquals( "Resource found from classloader", url1, resources1.nextElement() );
+
+        assertTrue( "Second Count of resource from classloader", !resources1.hasMoreElements() );
+
+        final Enumeration resources2 = join.getResources( "noexist.txt" );
+        assertNotNull( "Loading set of noexist.txt from c1 classloader", resources2 );
+        assertTrue( "Count of noexist.txt from classloader", !resources2.hasMoreElements() );
+
+        try
+        {
+            ClassLoader.getSystemClassLoader().loadClass( DataConstants.DATA1_CLASS );
+        }
+        catch( ClassNotFoundException e )
+        {
+            return;
+        }
+        fail( "Able to load Data1 from system classloader" );
+    }
+
+    public void testCtorNullsInClassLoaderSet()
+        throws Exception
+    {
+        try
+        {
+            new JoinClassLoader( null,
+                                 ClassLoader.getSystemClassLoader() );
+            fail( "Expected a NPE" );
+        }
+        catch( NullPointerException e )
+        {
+            assertEquals( "NPE type", "classLoaders", e.getMessage() );
+        }
+        try
+        {
+            new JoinClassLoader( new ClassLoader[]{null},
+                                 ClassLoader.getSystemClassLoader() );
+            fail( "Expected a NPE" );
+        }
+        catch( NullPointerException e )
+        {
+            assertEquals( "NPE type", "classLoaders[0]", e.getMessage() );
+        }
+    }
+
+    private URLClassLoader createClassLoader( final String filename ) throws MalformedURLException
+    {
+        final File baseDirectory = getBaseDirectory();
+        final File file = new File( baseDirectory, filename );
+        final URL url = file.toURL();
+        final URL[] urls = new URL[]{url};
+        return new URLClassLoader( urls, ClassLoader.getSystemClassLoader() );
+    }
+}
</pre></div>
<hr /><a name="file105" /><div class="file">
<span class="pathname" id="added"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata">testdata</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus">codehaus</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontai
 ner/loom/support/classman/src/testdata/org/codehaus/loom/classman">classman</a>/<a href="!
http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test/data">data</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test/data/cl2">cl2</a><br /></span>
<div class="fileheader" id="added"><big><b>CL2Data.java</b></big> <small id="info">added at <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/codehaus/loom/classman/test/data/cl2/CL2Data.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N CL2Data.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ CL2Data.java	19 Apr 2004 22:19:26 -0000	1.1
@@ -0,0 +1,17 @@
</small></pre><pre class="diff" id="added">+/*
+ * Copyright (C) The Spice Group. All rights reserved.
+ *
+ * This software is published under the terms of the Spice
+ * Software License version 1.1, a copy of which has been included
+ * with this distribution in the LICENSE.txt file.
+ */
+package org.codehaus.loom.classman.test.data.cl2;
+
+/**
+ *
+ * @author Peter Donald
+ * @version $Revision: 1.1 $ $Date: 2004/04/19 22:19:26 $
+ */
+public class CL2Data
+{
+}
</pre></div>
<hr /><a name="file106" /><div class="file">
<span class="pathname" id="removed"><a href="http://xstream.cvs.codehaus.org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support">support</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman">classman</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src">src</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata">testdata</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org">org</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer">jcontainer</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom">loom</a>/<a href="http://xstream.cvs.codehaus.org
 /jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman">classman</a>!
/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test">test</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test/data">data</a>/<a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test/data/cl4">cl4</a><br /></span>
<div class="fileheader" id="removed"><big><b>CL4Data.java</b></big> <small id="info">removed after <a href="http://xstream.cvs.codehaus.org/jcontainer/loom/support/classman/src/testdata/org/jcontainer/loom/classman/test/data/cl4/CL4Data.java?rev=1.1&amp;content-type=text/vnd.viewcvs-markup">1.1</a></small></div>
<pre class="diff"><small id="info">diff -N CL4Data.java
--- CL4Data.java	31 Mar 2004 03:18:56 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,17 +0,0 @@
</small></pre><pre class="diff" id="removed">-/*
- * Copyright (C) The Spice Group. All rights reserved.
- *
- * This software is published under the terms of the Spice
- * Software License version 1.1, a copy of which has been included
- * with this distribution in the LICENSE.txt file.
- */
-package org.jcontainer.loom.classman.test.data.cl4;
-
-/**
- *
- * @author Peter Donald
- * @version $Revision: 1.1 $ $Date: 2004/03/31 03:18:56 $
- */
-public class CL4Data
-{
-}
</pre></div>
<center><small><a href="http://www.badgers-in-foil.co.uk/projects/cvsspam/" title="commit -&gt; email">CVSspam</a> 0.2.8</small></center>
</body></html>