]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db/src/org/simantics/db/procedure/SyncContextMultiProcedure.java
Multiple reader thread support for db client
[simantics/platform.git] / bundles / org.simantics.db / src / org / simantics / db / procedure / SyncContextMultiProcedure.java
diff --git a/bundles/org.simantics.db/src/org/simantics/db/procedure/SyncContextMultiProcedure.java b/bundles/org.simantics.db/src/org/simantics/db/procedure/SyncContextMultiProcedure.java
new file mode 100644 (file)
index 0000000..cdbfc2a
--- /dev/null
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2018 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Semantum Oy - initial API and implementation
+ *******************************************************************************/
+package org.simantics.db.procedure;
+
+import org.simantics.db.AsyncReadGraph;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.exception.DatabaseException;
+
+/**
+ * @author Antti Villberg
+ * 
+ * First execute is called k times. After this finished or exception is called exactly once.
+ *
+ * @param <Result> the result object type accepted by the procedure
+ */
+public interface SyncContextMultiProcedure<Context, Result> {
+
+    /**
+     * Invoked once for each separate result of the request with potentially
+     * multiple results. It shall be guaranteed that all <code>execute</code>
+     * invocations have been completed when either
+     * {@link #finished(AsyncReadGraph)} or
+     * {@link #exception(AsyncReadGraph, Throwable)} are called and that no
+     * <code>execute</code> invocations will follow afterwards.
+     * 
+     * @param graph asynchronous graph access
+     * @param result a single result of the multiresult procedure
+     */
+    void execute(ReadGraph graph, Context context, Result result) throws DatabaseException;
+
+    /**
+     * Invoked after all {@link #execute(AsyncReadGraph, Object)} calls have
+     * been finished successfully. This method will not be invoked if case of
+     * errors in {@link #execute(AsyncReadGraph, Object)} or the performed
+     * request that provides the results to this procedure.
+     * 
+     * @param graph asynchronous graph access
+     */
+    void finished(ReadGraph graph, Context context) throws DatabaseException;
+
+    /**
+     * If an error occurs in the processing of the database request that
+     * produces the results for this procedure.
+     * 
+     * @param graph asynchronous graph access
+     * @param throwable the exception that occurred
+     */
+    void exception(ReadGraph graph, Throwable throwable) throws DatabaseException;
+
+}