Skip to content

Commit 5b191b4

Browse files
committed
Update DTDEncoder.
1 parent d25c2a6 commit 5b191b4

File tree

4 files changed

+47
-12
lines changed

4 files changed

+47
-12
lines changed

sierra-tools/dtd-encoder/build.gradle

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ dependencies {
2020
implementation project(':sierra')
2121

2222
testImplementation 'org.junit.jupiter:junit-jupiter:5.10.1'
23-
testImplementation 'org.jfree:jfreechart:1.5.6'
2423

2524
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
2625
}
@@ -30,5 +29,5 @@ tasks.named('test', Test) {
3029
}
3130

3231
application {
33-
mainClass = 'org.httprpc.sierra.tools.DTDEncoder'
32+
mainClass = 'org.httprpc.sierra.tools.dtd.DTDEncoder'
3433
}

sierra-tools/dtd-encoder/src/main/java/org/httprpc/sierra/tools/DTDEncoder.java renamed to sierra-tools/dtd-encoder/src/main/java/org/httprpc/sierra/tools/dtd/DTDEncoder.java

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
* limitations under the License.
1313
*/
1414

15-
package org.httprpc.sierra.tools;
15+
package org.httprpc.sierra.tools.dtd;
1616

1717
import org.httprpc.kilo.beans.BeanAdapter;
1818
import org.httprpc.kilo.io.Encoder;
@@ -37,6 +37,8 @@
3737
import java.awt.Image;
3838
import java.io.IOException;
3939
import java.io.Writer;
40+
import java.net.URL;
41+
import java.net.URLClassLoader;
4042
import java.nio.file.Files;
4143
import java.nio.file.Path;
4244
import java.util.ArrayList;
@@ -256,7 +258,22 @@ public static void main(String[] args) throws Exception {
256258
var workingPath = Path.of(System.getProperty("user.dir"));
257259

258260
if (args.length > 0) {
259-
applyBindings(workingPath.resolve(args[0]));
261+
ClassLoader classLoader;
262+
if (args.length > 1) {
263+
try (var paths = Files.walk(workingPath.resolve(args[1]))) {
264+
classLoader = new URLClassLoader(paths.map(path -> {
265+
try {
266+
return path.toUri().toURL();
267+
} catch (IOException exception) {
268+
throw new RuntimeException(exception);
269+
}
270+
}).toArray(URL[]::new));
271+
}
272+
} else {
273+
classLoader = ClassLoader.getSystemClassLoader();
274+
}
275+
276+
applyBindings(workingPath.resolve(args[0]), classLoader);
260277
}
261278

262279
var typeSet = new HashSet<Class<?>>();
@@ -287,7 +304,7 @@ public static void main(String[] args) throws Exception {
287304
}
288305

289306
@SuppressWarnings("unchecked")
290-
private static void applyBindings(Path path) throws IOException, ClassNotFoundException {
307+
private static void applyBindings(Path path, ClassLoader classLoader) throws IOException, ClassNotFoundException {
291308
var bindings = new Properties();
292309

293310
try (var inputStream = Files.newInputStream(path)) {
@@ -296,9 +313,9 @@ private static void applyBindings(Path path) throws IOException, ClassNotFoundEx
296313

297314
for (var entry : bindings.entrySet()) {
298315
var tag = (String)entry.getKey();
299-
var type = (Class<? extends JComponent>)Class.forName((String)entry.getValue());
316+
var typeName = (String)entry.getValue();
300317

301-
UILoader.bind(tag, type, () -> null);
318+
UILoader.bind(tag, (Class<? extends JComponent>)classLoader.loadClass(typeName), () -> null);
302319
}
303320
}
304321

sierra-tools/dtd-encoder/src/test/java/org/httprpc/sierra/tools/DTDEncoderTest.java renamed to sierra-tools/dtd-encoder/src/test/java/org/httprpc/sierra/tools/dtd/DTDEncoderTest.java

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@
1212
* limitations under the License.
1313
*/
1414

15-
package org.httprpc.sierra.tools;
15+
package org.httprpc.sierra.tools.dtd;
1616

1717
import org.httprpc.kilo.io.TextDecoder;
18-
import org.jfree.chart.ChartPanel;
1918
import org.junit.jupiter.api.Test;
2019

2120
import java.nio.file.Files;
2221
import java.nio.file.Path;
22+
import java.nio.file.StandardCopyOption;
2323
import java.util.Properties;
2424

2525
import static org.junit.jupiter.api.Assertions.*;
@@ -30,18 +30,34 @@ public void testDTDEncoder() throws Exception {
3030
var workingPath = Path.of(System.getProperty("user.dir"));
3131

3232
var bindingsPath = workingPath.resolve("bindings.properties");
33-
var dtdPath = workingPath.resolve("sierra.dtd");
3433

3534
var properties = new Properties();
3635

37-
properties.put("chart-panel", ChartPanel.class.getName());
36+
properties.put("chart-panel", "org.jfree.chart.ChartPanel");
37+
38+
var libraryPath = workingPath.resolve("lib");
39+
40+
Files.createDirectories(libraryPath);
41+
42+
var dependencyName = "jfreechart-1.5.6.jar";
43+
44+
var dependencyPath = libraryPath.resolve(dependencyName);
45+
46+
try (var inputStream = DTDEncoderTest.class.getResourceAsStream(dependencyName)) {
47+
Files.copy(inputStream, dependencyPath, StandardCopyOption.REPLACE_EXISTING);
48+
}
49+
50+
var dtdPath = workingPath.resolve("sierra.dtd");
3851

3952
try {
4053
try (var outputStream = Files.newOutputStream(bindingsPath)) {
4154
properties.store(outputStream, "Test Bindings");
4255
}
4356

44-
DTDEncoder.main(new String[]{bindingsPath.getFileName().toString()});
57+
DTDEncoder.main(new String[]{
58+
bindingsPath.getFileName().toString(),
59+
libraryPath.getFileName().toString()
60+
});
4561

4662
String text;
4763
try (var inputStream = Files.newInputStream(dtdPath)) {
@@ -53,6 +69,9 @@ public void testDTDEncoder() throws Exception {
5369
assertTrue(text.contains("chart-panel"));
5470
} finally {
5571
Files.deleteIfExists(bindingsPath);
72+
Files.deleteIfExists(dependencyPath);
73+
Files.deleteIfExists(libraryPath);
74+
5675
Files.deleteIfExists(dtdPath);
5776
}
5877
}
Binary file not shown.

0 commit comments

Comments
 (0)