-package org.simantics.document.server.request;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Collections;\r
-import java.util.Comparator;\r
-import java.util.List;\r
-\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.common.request.UnaryRead;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.layer0.variable.Variable;\r
-import org.simantics.db.layer0.variable.Variables;\r
-import org.simantics.document.server.JSONObject;\r
-\r
-public class URIDocumentRequest extends UnaryRead<String, List<JSONObject>> {\r
-\r
- public URIDocumentRequest(String var) {\r
- super(var);\r
- }\r
-\r
- @Override\r
- public List<JSONObject> perform(ReadGraph graph) throws DatabaseException {\r
- \r
- Variable var = Variables.getPossibleVariable(graph, parameter);\r
- if(var == null) {\r
- Variables.getPossibleVariable(graph, parameter);\r
- return Collections.emptyList();\r
- }\r
- \r
- ArrayList<JSONObject> result = new ArrayList<JSONObject>(graph.syncRequest(new DocumentRequest(var)));\r
- Collections.sort(result, new Comparator<JSONObject>() {\r
-\r
- @Override\r
- public int compare(JSONObject o1, JSONObject o2) {\r
- return o1.id.compareTo(o2.id);\r
- }\r
- \r
- });\r
- return result;\r
- \r
- }\r
- \r
+package org.simantics.document.server.request;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import org.simantics.Simantics;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.common.request.UnaryRead;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.variable.ProxyVariables;
+import org.simantics.db.layer0.variable.Variable;
+import org.simantics.db.layer0.variable.Variables;
+import org.simantics.document.server.ConsoleSCLReportingHandler;
+import org.simantics.document.server.JSONObject;
+import org.simantics.document.server.io.IConsole;
+import org.simantics.document.server.io.IConsoleSupport;
+import org.simantics.scl.runtime.SCLContext;
+import org.simantics.scl.runtime.reporting.SCLReportingHandler;
+
+public class URIDocumentRequest extends UnaryRead<String, List<JSONObject>> {
+
+ public URIDocumentRequest(String var) {
+ super(var);
+ }
+
+ @Override
+ public List<JSONObject> perform(ReadGraph graph) throws DatabaseException {
+
+ Variable var = Variables.getPossibleVariable(graph, parameter);
+ if(var == null) {
+ Variables.getPossibleVariable(graph, parameter);
+ return Collections.emptyList();
+ }
+
+ IConsole console = null;
+ IConsoleSupport cs = Simantics.getSession().peekService(IConsoleSupport.class);
+ if (cs != null) {
+ Variable root = ProxyVariables.proxyVariableRoot(graph, var);
+ if (root == null)
+ return Collections.emptyList();
+ Variable session = root.getParent(graph);
+ String guid = session.getName(graph);
+ console = cs.getConsole(guid);
+ }
+
+ SCLContext sclContext = SCLContext.getCurrent();
+ SCLReportingHandler printer = (console != null) ? new ConsoleSCLReportingHandler(console)
+ : (SCLReportingHandler) sclContext.get(SCLReportingHandler.REPORTING_HANDLER);
+ Object oldPrinter = sclContext.put(SCLReportingHandler.REPORTING_HANDLER, printer);
+
+ try {
+ List<JSONObject> result = new ArrayList<>(graph.syncRequest(new DocumentRequest(var)));
+ Collections.sort(result, COMPARATOR);
+ return result;
+ } finally {
+ sclContext.put(SCLReportingHandler.REPORTING_HANDLER, oldPrinter);
+ }
+
+ }
+
+ private static final Comparator<JSONObject> COMPARATOR = (o1, o2) -> o1.id.compareTo(o2.id);
+
}
\ No newline at end of file