import java.net.URL;
import java.net.URLDecoder;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Map.Entry;
+import java.util.Objects;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
import java.util.jar.Attributes;
import java.util.jar.Manifest;
+import java.util.stream.Collectors;
import org.eclipse.core.internal.runtime.PlatformActivator;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.equinox.p2.metadata.Version;
import org.eclipse.equinox.p2.metadata.VersionedId;
import org.osgi.framework.Bundle;
-import org.simantics.databoard.adapter.AdaptException;
import org.simantics.databoard.binding.Binding;
import org.simantics.databoard.binding.mutable.Variant;
import org.simantics.databoard.container.DataContainer;
import org.simantics.databoard.container.DataContainers;
-import org.simantics.databoard.serialization.SerializationException;
import org.simantics.graph.compiler.CompilationResult;
import org.simantics.graph.compiler.GraphCompiler;
import org.simantics.graph.compiler.GraphCompilerPreferences;
* @param collection
* @throws IOException
*/
- public static void getAllGraphs(Collection<GraphBundle> collection) throws IOException {
- for (Bundle bundle : getBundles()) {
- GraphBundle entry = getGraph(bundle);
- if (entry!=null) collection.add(entry);
- }
- }
+ public static Collection<GraphBundle> getAllGraphs() throws IOException {
+ CompletableFuture<Object> f = new CompletableFuture<>();
+ Bundle[] bundles = getBundles();
+ Collection<GraphBundle> gbundles = Arrays.stream(bundles).map(t -> { // this could be done in parallel in the future?
+ if (f.isCompletedExceptionally())
+ return null;
+ try {
+ return PlatformUtil.getGraph(t);
+ } catch (IOException e) {
+ if (LOGGER.isDebugEnabled())
+ LOGGER.debug("Could not get graph {}", t, e);
+ f.completeExceptionally(e);
+ return null;
+ }
+ }).filter(Objects::nonNull).collect(Collectors.toList());
+ if (f.isCompletedExceptionally()) {
+ try {
+ f.get();
+ } catch (ExecutionException | InterruptedException e) {
+ throw (IOException) e.getCause();
+ }
+ }
+ return gbundles;
+ }
/**
* Get bundle