import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.Enumeration;
import java.util.Map.Entry;
import java.util.Objects;
LOGGER.error("Extraction to " + fileName + " failed from url " + url, e);
}
} else {
- LOGGER.error("Unsupported URL protocol '" + url + "' for FastLZ native library file '" + fileName);
+ LOGGER.error("Unsupported URL protocol '" + url + "' for reading as file '" + fileName + "'");
}
return null;
}
+ public static Collection<URL> getTGFiles(Bundle b) {
+ Enumeration<URL> enu = b.findEntries("/", "*.tg", false);
+ if (enu == null)
+ return Collections.emptyList();
+ if (!enu.hasMoreElements())
+ return Collections.emptyList();
+ ArrayList<URL> result = new ArrayList<>();
+ while (enu.hasMoreElements())
+ result.add(enu.nextElement());
+ return result;
+ }
+
public static void compile(Bundle b) throws Exception {
Collection<ISource> sources = new ArrayList<>();
for (Bundle b2 : getBundles()) {
if(b.equals(b2)) continue;
- URL url = b2.getEntry("graph.tg");
- if (url==null) continue;
- File graphFile = url2file(FileLocator.resolve(b2.getEntry("/graph.tg")), b2.toString());
- dependencies.add(GraphCompiler.read(graphFile));
+ for (URL url : getTGFiles(b2)) {
+ File graphFile = url2file(url, b2.toString() + url.toString());
+ dependencies.add(GraphCompiler.read(graphFile));
+ }
}
File bundleFile = FileLocator.getBundleFile(b);
//.parallel()
.map(b -> {
try {
- return problem.get() == null ? getGraph(b) : null;
+ return problem.get() == null ? getGraphs(b) : Collections.<GraphBundleEx>emptyList();
} catch (IOException e) {
- if (LOGGER.isDebugEnabled())
+ if (LOGGER.isWarnEnabled())
LOGGER.debug("Could not get graph from bundle {}", b, e);
problem.set(e);
- return null;
+ return Collections.<GraphBundleEx>emptyList();
}
})
- .filter(Objects::nonNull)
+ .flatMap(Collection::stream)
.collect(Collectors.toList());
if (problem.get() != null)
return getGraph( bundle );
}
+ public static Collection<GraphBundleEx> getGraphs(Bundle bundle) throws IOException {
+ return getTGFiles(bundle).stream()
+ .map(url -> {
+ try {
+ GraphBundleEx result = tryGetOnDemandGraph(bundle, url);
+ return result != null ? result : getCompleteGraph(bundle, url);
+ } catch (IOException e) {
+ if (LOGGER.isWarnEnabled())
+ LOGGER.warn("Could not get graph from bundle url {}", url, e);
+ return null;
+ }
+ })
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList());
+ }
+
+ private static String tgFileId(Bundle bundle, URL url) {
+ String urlString = url.toString();
+ String file = urlString.substring(urlString.lastIndexOf("/") + 1);
+ return bundle.getSymbolicName() + "_" + file;
+ }
+
/**
* Read the graph in a graph bundle. Graph is read from "graph.tg" file in the root.
*
private static GraphBundleEx getCompleteGraph(Bundle bundle, URL url) throws IOException {
try {
- String id = bundle.getSymbolicName();
+ String id = tgFileId(bundle, url);
return new GraphBundleEx(
getBundleName(bundle, id),
readTG(url),
}
};
- String id = bundle.getSymbolicName();
+ String id = tgFileId(bundle, url);
return new GraphBundleEx(
getBundleName(bundle, id),