X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.document.server%2Fsrc%2Forg%2Fsimantics%2Fdocument%2Fserver%2Fhandler%2FWriteEventHandler.java;fp=bundles%2Forg.simantics.document.server%2Fsrc%2Forg%2Fsimantics%2Fdocument%2Fserver%2Fhandler%2FWriteEventHandler.java;h=f58e9c35cf05089809d83d7ed5c21545a34b3a04;hb=969bd23cab98a79ca9101af33334000879fb60c5;hp=0000000000000000000000000000000000000000;hpb=866dba5cd5a3929bbeae85991796acb212338a08;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.document.server/src/org/simantics/document/server/handler/WriteEventHandler.java b/bundles/org.simantics.document.server/src/org/simantics/document/server/handler/WriteEventHandler.java new file mode 100644 index 000000000..f58e9c35c --- /dev/null +++ b/bundles/org.simantics.document.server/src/org/simantics/document/server/handler/WriteEventHandler.java @@ -0,0 +1,44 @@ +package org.simantics.document.server.handler; + +import org.simantics.Simantics; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.request.WriteResultRequest; +import org.simantics.db.exception.DatabaseException; +import org.simantics.document.server.io.CommandContext; +import org.simantics.document.server.io.CommandResult; +import org.simantics.document.server.serverResponse.Error; +import org.simantics.document.server.serverResponse.IDelayedResponse; + +public abstract class WriteEventHandler extends AbstractEventHandler { + + protected abstract CommandResult handle(WriteGraph graph, CommandContext parameters) throws DatabaseException; + + public CommandResult handle(final CommandContext parameters) { + try { + CommandResult response = Simantics.getSession().syncRequest(new WriteResultRequest() { + @Override + public CommandResult perform(WriteGraph graph) throws DatabaseException { + graph.markUndoPoint(); + return handle(graph, parameters); + } + }); + + if(response instanceof IDelayedResponse && !(((IDelayedResponse)response).hasRun())) { + try { + synchronized(response) { + response.wait(200000); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + return response; + } catch (DatabaseException e) { + e.printStackTrace(); + return new Error(e.getMessage()); // Return some error + } + } + + +}