Skip to content

Commit e65c7a2

Browse files
committed
Partially reverted commit 23c05cf.
1 parent 40125b2 commit e65c7a2

File tree

1 file changed

+63
-20
lines changed

1 file changed

+63
-20
lines changed

src/main/java/org/culturegraph/mf/Flux.java

Lines changed: 63 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import java.io.File;
1919
import java.io.FilenameFilter;
2020
import java.io.IOException;
21+
import java.net.MalformedURLException;
22+
import java.net.URISyntaxException;
2123
import java.net.URL;
2224
import java.net.URLClassLoader;
2325
import java.util.HashMap;
@@ -34,13 +36,19 @@
3436

3537
/**
3638
* @author Markus Michael Geipel
37-
*
39+
*
3840
*/
3941
public final class Flux {
4042
public static final String MODULES_DIR = "modules";
43+
44+
private static final String JAR_FILE_EXTENSION = ".jar";
45+
private static final String CLASS_FILE_EXTENSION = ".class";
46+
4147
private static final Pattern VAR_PATTERN = Pattern.compile("([^=]*)=(.*)");
4248
private static final String SCRIPT_HOME = "FLUX_DIR";
4349

50+
private static final String MODULES_DIR_ARG = "-modules=";
51+
4452
private Flux() {
4553
// no instances
4654
}
@@ -49,34 +57,27 @@ private Flux() {
4957
* @param args
5058
* @throws IOException
5159
* @throws RecognitionException
60+
* @throws URISyntaxException
5261
*/
5362
public static void main(final String[] args) throws IOException, RecognitionException {
5463

55-
final File modulesDir = new File(MODULES_DIR);
56-
if (modulesDir.exists()) {
57-
final FilenameFilter filter = new FilenameFilter() {
58-
@Override
59-
public boolean accept(final File dir, final String name) {
60-
return name.endsWith(".jar") || name.endsWith(".class");
61-
}
62-
};
63-
final List<URL> moduleURLs = new LinkedList<URL>();
64-
for (File file : modulesDir.listFiles(filter)) {
65-
moduleURLs.add(file.getAbsoluteFile().toURI().toURL());
66-
}
67-
final URLClassLoader moduleLoader = new URLClassLoader(moduleURLs.toArray(new URL[0]), Thread
68-
.currentThread().getContextClassLoader());
69-
Thread.currentThread().setContextClassLoader(moduleLoader);
64+
loadModules(getModulesDir(args));
65+
66+
final int fileArg;
67+
if (args.length > 0 && args[0].startsWith(MODULES_DIR_ARG)) {
68+
fileArg = 1;
69+
} else {
70+
fileArg = 0;
7071
}
7172

72-
if (args.length < 1) {
73+
if (args.length < (fileArg + 1)) {
7374
FluxProgramm.printHelp(System.out);
7475
System.exit(2);
7576
} else {
7677

77-
final File fluxFile = new File(args[0]);
78+
final File fluxFile = new File(args[fileArg]);
7879
if (!fluxFile.exists()) {
79-
System.err.println("File not found: " + args[0]);
80+
System.err.println("File not found: " + args[fileArg]);
8081
System.exit(1);
8182
return;
8283
}
@@ -85,7 +86,10 @@ public boolean accept(final File dir, final String name) {
8586
final Map<String, String> vars = new HashMap<String, String>();
8687
vars.put(SCRIPT_HOME, fluxFile.getAbsoluteFile().getParent() + System.getProperty("file.separator"));
8788

88-
for (int i = 1; i < args.length; ++i) {
89+
for (int i = fileArg + 1; i < args.length; ++i) {
90+
if (args[i].startsWith(MODULES_DIR_ARG)) {
91+
continue;
92+
}
8993
final Matcher matcher = VAR_PATTERN.matcher(args[i]);
9094
if (!matcher.find()) {
9195
FluxProgramm.printHelp(System.err);
@@ -96,9 +100,48 @@ public boolean accept(final File dir, final String name) {
96100

97101
// run parser and builder
98102
FluxCompiler.compile(ResourceUtil.getStream(fluxFile), vars).start();
103+
}
104+
}
99105

106+
private static File getModulesDir(final String[] args) {
107+
File modulesDir = new File(MODULES_DIR);
108+
109+
File programDir = null;
110+
try {
111+
programDir = new File(Flux.class.getProtectionDomain().getCodeSource().getLocation().toURI());
112+
} catch (final URISyntaxException e) {
113+
// Ignore the programDir, if it is not available
114+
}
115+
if (programDir != null) {
116+
if (programDir.getName().endsWith(JAR_FILE_EXTENSION)) {
117+
programDir = programDir.getParentFile();
118+
}
119+
modulesDir = new File(programDir, MODULES_DIR);
120+
}
121+
122+
if (args.length > 0 && args[0].startsWith(MODULES_DIR_ARG)) {
123+
modulesDir = new File(args[0].substring(MODULES_DIR_ARG.length()));
100124
}
125+
126+
return modulesDir;
101127
}
102128

129+
private static void loadModules(final File modulesDir) throws MalformedURLException {
130+
if (modulesDir.exists()) {
131+
final FilenameFilter filter = new FilenameFilter() {
132+
@Override
133+
public boolean accept(final File dir, final String name) {
134+
return name.endsWith(JAR_FILE_EXTENSION) || name.endsWith(CLASS_FILE_EXTENSION);
135+
}
136+
};
137+
final List<URL> moduleURLs = new LinkedList<URL>();
138+
for (final File file : modulesDir.listFiles(filter)) {
139+
moduleURLs.add(file.getAbsoluteFile().toURI().toURL());
140+
}
141+
final URLClassLoader moduleLoader = new URLClassLoader(moduleURLs.toArray(new URL[0]), Thread
142+
.currentThread().getContextClassLoader());
143+
Thread.currentThread().setContextClassLoader(moduleLoader);
144+
}
145+
}
103146

104147
}

0 commit comments

Comments
 (0)