--- /dev/null
+package org.simantics.document.server.handler;\r
+\r
+import org.simantics.Simantics;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.request.Read;\r
+import org.simantics.document.server.io.CommandContext;\r
+import org.simantics.document.server.io.CommandResult;\r
+import org.simantics.document.server.serverResponse.Error;\r
+import org.simantics.document.server.serverResponse.IDelayedResponse;\r
+import org.simantics.document.server.serverResponse.ServerResponse;\r
+\r
+public abstract class EventHandler extends AbstractEventHandler {\r
+ \r
+ protected abstract ServerResponse handle(ReadGraph graph, CommandContext parameters) throws DatabaseException;\r
+\r
+ public CommandResult handle(final CommandContext parameters) {\r
+ try {\r
+ ServerResponse response = Simantics.getSession().syncRequest(new Read<ServerResponse>() {\r
+ @Override\r
+ public ServerResponse perform(ReadGraph graph) throws DatabaseException {\r
+ return handle(graph, parameters);\r
+ }\r
+ });\r
+\r
+ if(response instanceof IDelayedResponse && !(((IDelayedResponse)response).hasRun())) {\r
+ try {\r
+ synchronized(response) {\r
+ response.wait(20000);\r
+ }\r
+ } catch (InterruptedException e) {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ \r
+ return response;\r
+ } catch (DatabaseException e) {\r
+ e.printStackTrace();\r
+ return new Error(e.getMessage()); // Return some error\r
+ }\r
+ }\r
+\r
+}\r