+
+ public static void subqueryL(ReadGraph graph, Function query, Function executeCallback, Function1<Throwable, Tuple> exceptionCallback, Function1<Tuple0, Boolean> isDisposedCallback) throws DatabaseException {
+ graph.asyncRequest(new Subquery(query), new SyncListenerAdapter<Object>() {
+ @Override
+ public void execute(ReadGraph graph, Object result) throws DatabaseException {
+ Simantics.applySCLRead(graph, executeCallback, result);
+ }
+
+ @Override
+ public void exception(ReadGraph graph, Throwable t) throws DatabaseException {
+ Simantics.applySCLRead(graph, exceptionCallback, t);
+ }
+
+ @Override
+ public boolean isDisposed() {
+ return isDisposedCallback.apply(Tuple0.INSTANCE);
+ }
+ });
+ }
+
+ public static Object possibleFromDynamic(Type expectedType, String moduleName, Object value) {
+
+ try {
+
+
+ Failable<Module> failable = SCLOsgi.MODULE_REPOSITORY.getModule(moduleName);
+ Module module = failable.getResult();
+
+ RuntimeEnvironment env = SCLOsgi.MODULE_REPOSITORY.createRuntimeEnvironment(
+ EnvironmentSpecification.of(moduleName, ""), module.getParentClassLoader());
+
+ JavaTypeTranslator tr = new JavaTypeTranslator(env.getEnvironment());
+ TypeDesc desc = tr.toTypeDesc(expectedType);
+ String className = desc.getFullName();
+ Class<?> clazz = env.getMutableClassLoader().loadClass(className);
+ if (!clazz.isAssignableFrom(value.getClass()))
+ return null;
+
+ } catch (ImportFailureException | ClassNotFoundException e) {
+ }
+ return value;
+ }
+