+package org.simantics.document.server.request;\r
+\r
+import java.io.ByteArrayOutputStream;\r
+import java.io.PrintStream;\r
+import java.io.UnsupportedEncodingException;\r
+\r
+import org.simantics.Logger;\r
+import org.simantics.db.layer0.exception.MissingVariableException;\r
+import org.simantics.db.layer0.scl.SCLDatabaseException;\r
+import org.simantics.document.server.DocumentException;\r
+import org.simantics.scl.compiler.module.repository.ImportFailure;\r
+import org.simantics.scl.compiler.module.repository.ImportFailureException;\r
+import org.simantics.scl.compiler.top.NotFoundException;\r
+\r
+public class NodeRequestUtils {\r
+\r
+ public static String formatErrorMessage(String name, Throwable t) {\r
+ \r
+ while(t.getCause() != null)\r
+ t = t.getCause();\r
+ \r
+ if (t instanceof DocumentException) {\r
+ return t.getMessage();\r
+ } else if (t instanceof MissingVariableException) {\r
+ return "Evaluation of property '" + name + "' failed\n" +\r
+ t.getMessage();\r
+ } else if (t instanceof SCLDatabaseException) {\r
+ return t.getMessage();\r
+ } else if (t instanceof NotFoundException) {\r
+ return t.getMessage();\r
+ } else if (t instanceof ImportFailureException) {\r
+ ImportFailureException e = (ImportFailureException)t;\r
+ StringBuilder sb = new StringBuilder();\r
+ sb.append("The following SCL modules failed to compile:\n");\r
+ for(ImportFailure f : e.failures)\r
+ sb.append(" " + f.moduleName + "\n");\r
+ return sb.toString();\r
+ } else {\r
+ Logger.defaultLogError(t);\r
+ \r
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();\r
+ PrintStream ps = new PrintStream(baos);\r
+ t.printStackTrace(ps);\r
+ try {\r
+ return baos.toString("UTF-8");\r
+ } catch (UnsupportedEncodingException e) {\r
+ return baos.toString();\r
+ }\r
+ \r
+ }\r
+ }\r
+ \r
+}\r