]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.common/src/org/simantics/db/common/utils/Functions.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.common / src / org / simantics / db / common / utils / Functions.java
1 package org.simantics.db.common.utils;\r
2 \r
3 import java.lang.reflect.InvocationTargetException;\r
4 \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
10 \r
11 public class Functions {\r
12         \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
18                 }\r
19                 return null;\r
20         }\r
21         \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
24         try {\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
30         }\r
31         }\r
32         \r
33 }\r