]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.document.server/src/org/simantics/document/server/handler/WriteEventHandler.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.server / src / org / simantics / document / server / handler / WriteEventHandler.java
1 package org.simantics.document.server.handler;\r
2 \r
3 import org.simantics.Simantics;\r
4 import org.simantics.db.WriteGraph;\r
5 import org.simantics.db.common.request.WriteResultRequest;\r
6 import org.simantics.db.exception.DatabaseException;\r
7 import org.simantics.document.server.io.CommandContext;\r
8 import org.simantics.document.server.io.CommandResult;\r
9 import org.simantics.document.server.serverResponse.Error;\r
10 import org.simantics.document.server.serverResponse.IDelayedResponse;\r
11 \r
12 public abstract class WriteEventHandler extends AbstractEventHandler {\r
13 \r
14     protected abstract CommandResult handle(WriteGraph graph, CommandContext parameters) throws DatabaseException;\r
15 \r
16     public CommandResult handle(final CommandContext parameters) {\r
17         try {\r
18                 CommandResult response = Simantics.getSession().syncRequest(new WriteResultRequest<CommandResult>() {\r
19                 @Override\r
20                 public CommandResult perform(WriteGraph graph) throws DatabaseException {\r
21                     graph.markUndoPoint();\r
22                     return handle(graph, parameters);\r
23                 }\r
24             });\r
25 \r
26             if(response instanceof IDelayedResponse && !(((IDelayedResponse)response).hasRun())) {\r
27                 try {\r
28                     synchronized(response) {\r
29                         response.wait(200000);\r
30                     }\r
31                 } catch (InterruptedException e) {\r
32                     e.printStackTrace();\r
33                 }\r
34             }\r
35             \r
36             return response;\r
37         } catch (DatabaseException e) {\r
38             e.printStackTrace();\r
39             return new Error(e.getMessage()); // Return some error\r
40         }\r
41     }\r
42 \r
43 \r
44 }\r