1 package org.simantics.db.common.utils;
\r
3 import java.lang.reflect.InvocationTargetException;
\r
5 import org.simantics.db.RequestProcessor;
\r
6 import org.simantics.db.Resource;
\r
7 import org.simantics.db.common.request.AdaptValue;
\r
8 import org.simantics.db.exception.DatabaseException;
\r
9 import org.simantics.scl.runtime.function.Function;
\r
11 public class Functions {
\r
13 private static DatabaseException findPossibleRootException(Throwable t) {
\r
14 if(t == null) return null;
\r
15 if(t instanceof DatabaseException) return (DatabaseException)t;
\r
16 if(t instanceof RuntimeException || t instanceof InvocationTargetException) {
\r
17 return findPossibleRootException(t.getCause());
\r
22 public static <T> T exec(RequestProcessor rp, Resource function, Object ... parameters) throws DatabaseException {
\r
23 Object op = rp.syncRequest(new AdaptValue(function));
\r
25 return (T) ((Function)op).applyArray(parameters);
\r
26 } catch (RuntimeException e) {
\r
27 DatabaseException dte = findPossibleRootException(e);
\r
28 if(dte != null) throw dte;
\r
29 else throw new DatabaseException(e);
\r