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> { public URIDocumentRequest(String var) { super(var); } @Override public List perform(ReadGraph graph) throws DatabaseException { Variable var = Variables.getPossibleVariable(graph, parameter); if(var == null) { Variables.getPossibleVariable(graph, parameter); return Collections.emptyList(); } IConsoleSupport cs = Simantics.getSession().getService(IConsoleSupport.class); Variable root = ProxyVariables.proxyVariableRoot(graph, var); if(root == null) return Collections.emptyList(); Variable session = root.getParent(graph); String guid = session.getName(graph); IConsole console = cs.getConsole(guid); SCLReportingHandler printer = (console != null) ? new ConsoleSCLReportingHandler(console) : (SCLReportingHandler) SCLContext.getCurrent().get(SCLReportingHandler.REPORTING_HANDLER); SCLContext sclContext = SCLContext.getCurrent(); Object oldPrinter = sclContext.put(SCLReportingHandler.REPORTING_HANDLER, printer); try { ArrayList result = new ArrayList(graph.syncRequest(new DocumentRequest(var))); Collections.sort(result, new Comparator() { @Override public int compare(JSONObject o1, JSONObject o2) { return o1.id.compareTo(o2.id); } }); return result; } finally { sclContext.put(SCLReportingHandler.REPORTING_HANDLER, oldPrinter); } } }