1212 * limitations under the License.
1313 */
1414
15- package org .httprpc .sierra .tools ;
15+ package org .httprpc .sierra .tools . dtd ;
1616
1717import org .httprpc .kilo .beans .BeanAdapter ;
1818import org .httprpc .kilo .io .Encoder ;
3737import java .awt .Image ;
3838import java .io .IOException ;
3939import java .io .Writer ;
40+ import java .net .URL ;
41+ import java .net .URLClassLoader ;
4042import java .nio .file .Files ;
4143import java .nio .file .Path ;
4244import java .util .ArrayList ;
4749import java .util .Map ;
4850import java .util .Properties ;
4951
50- import static org .httprpc .sierra .UILoader .*;
51-
5252public class DTDEncoder extends Encoder <Void > {
5353 private List <Class <?>> typeList ;
5454 private Map <Class <?>, String > tags ;
@@ -256,15 +256,30 @@ public static void main(String[] args) throws Exception {
256256 var workingPath = Path .of (System .getProperty ("user.dir" ));
257257
258258 if (args .length > 0 ) {
259- applyBindings (workingPath .resolve (args [0 ]));
259+ ClassLoader classLoader ;
260+ if (args .length > 1 ) {
261+ try (var paths = Files .walk (workingPath .resolve (args [1 ]))) {
262+ classLoader = new URLClassLoader (paths .map (path -> {
263+ try {
264+ return path .toUri ().toURL ();
265+ } catch (IOException exception ) {
266+ throw new RuntimeException (exception );
267+ }
268+ }).toArray (URL []::new ));
269+ }
270+ } else {
271+ classLoader = ClassLoader .getSystemClassLoader ();
272+ }
273+
274+ applyBindings (workingPath .resolve (args [0 ]), classLoader );
260275 }
261276
262277 var typeSet = new HashSet <Class <?>>();
263278
264279 var tags = new HashMap <Class <?>, String >();
265280
266- for (var tag : getTags ()) {
267- var type = (Class <?>)getType (tag );
281+ for (var tag : UILoader . getTags ()) {
282+ var type = (Class <?>)UILoader . getType (tag );
268283
269284 tags .put (type , tag );
270285
@@ -287,7 +302,7 @@ public static void main(String[] args) throws Exception {
287302 }
288303
289304 @ SuppressWarnings ("unchecked" )
290- private static void applyBindings (Path path ) throws IOException , ClassNotFoundException {
305+ private static void applyBindings (Path path , ClassLoader classLoader ) throws IOException , ClassNotFoundException {
291306 var bindings = new Properties ();
292307
293308 try (var inputStream = Files .newInputStream (path )) {
@@ -296,9 +311,9 @@ private static void applyBindings(Path path) throws IOException, ClassNotFoundEx
296311
297312 for (var entry : bindings .entrySet ()) {
298313 var tag = (String )entry .getKey ();
299- var type = (Class <? extends JComponent >) Class . forName (( String )entry .getValue () );
314+ var typeName = (String )entry .getValue ();
300315
301- UILoader .bind (tag , type , () -> null );
316+ UILoader .bind (tag , ( Class <? extends JComponent >) classLoader . loadClass ( typeName ) , () -> null );
302317 }
303318 }
304319
0 commit comments