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