]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.services/src/org/simantics/db/services/activation/ActivationManager.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.db.services / src / org / simantics / db / services / activation / ActivationManager.java
index 6c80c8c2b76e2dfd93299208f72e3c1f431bb760..3bd7cdf62ea6744d340be72e00b82cde46fbcaf4 100644 (file)
-/*******************************************************************************\r
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- *     VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.db.services.activation;\r
-\r
-import org.simantics.db.Disposable;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.Session;\r
-import org.simantics.db.WriteGraph;\r
-import org.simantics.db.common.CommentMetadata;\r
-import org.simantics.db.common.request.WriteRequest;\r
-import org.simantics.db.common.utils.CommonDBUtils;\r
-import org.simantics.db.common.utils.Logger;\r
-import org.simantics.db.common.utils.NameUtils;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.layer0.utils.queries.QueryExecutor2;\r
-import org.simantics.layer0.utils.triggers.IActivation;\r
-import org.simantics.layer0.utils.triggers.IActivationManager;\r
-import org.simantics.layer0.utils.triggers.IModification;\r
-import org.simantics.layer0.utils.triggers.ITrigger;\r
-import org.simantics.operation.Layer0X;\r
-import org.simantics.utils.logging.TimeLogger;\r
-import org.simantics.utils.threads.logger.IThreadLogger;\r
-import org.simantics.utils.threads.logger.ThreadLogger;\r
-\r
-@SuppressWarnings("deprecation") // No replacement given so now way to fix this error.\r
-public class ActivationManager implements IActivationManager, Disposable {\r
-\r
-       Session session;\r
-       static IThreadLogger threadLogger = ThreadLogger.getInstance();\r
-\r
-       class Activation extends QueryExecutor2 implements IActivation {\r
-               final boolean DEBUG = false;\r
-               final boolean BREAK_INFINITE_ACTIVATION_LOOPS = true;\r
-\r
-               /**\r
-                * After {@value InfiniteLoop} the activation will be forcibly\r
-                * deactivated if {@link #BREAK_INFINITE_ACTIVATION_LOOPS} is\r
-                * <code>true</code>.\r
-                */\r
-               final int INFINITE_LOOP_COUNT = 100;\r
-\r
-               Resource resource;\r
-               int transactionCount = 0;\r
-               boolean disposed = false;\r
-               boolean runOnce = false;\r
-\r
-               public Activation(Resource resource) {\r
-                       this.resource = resource;\r
-               }\r
-\r
-               public void runOnceAndDeactivate() {\r
-                       runOnce = true;\r
-               }\r
-\r
-               @Override\r
-               public void run(ReadGraph g) throws DatabaseException {\r
-//                     ITask task = threadLogger.begin("Activation.perform");\r
-                       Layer0X L0X = Layer0X.getInstance(g);\r
-                       for(Resource r : g.getObjects(resource, L0X.HasTrigger))\r
-                               if(calcModification(g, r) != null)\r
-                                       execute(g, r);\r
-//                     task.finish();\r
-               }\r
-\r
-               private IModification calcModification(ReadGraph g, Resource trigger) throws DatabaseException {\r
-//                     new Exception().printStackTrace();\r
-                       //ITask task = ThreadLogger.getInstance().begin("Activation.calcModification");\r
-                       IModification modi = g.syncRequest(g.adapt(trigger, ITrigger.class));\r
-                       //task.finish();\r
-                       return modi;\r
-               }\r
-\r
-               private WriteRequest getRequest(final Resource trigger) {\r
-                       return new WriteRequest() {\r
-                @Override\r
-                public void perform(WriteGraph g) throws DatabaseException {\r
-                    int count = 0;\r
-                    while (true) {\r
-                       \r
-                       CommonDBUtils.selectClusterSet(g, trigger);\r
-                       \r
-                       TimeLogger.log("ActivationManager: start calculating modification");\r
-                        IModification modification = calcModification(g, trigger);\r
-                        TimeLogger.log("ActivationManager: finished calculating modification");\r
-                        if (modification != null)\r
-                            ++count;\r
-                        else {\r
-                            if (count > 0) {\r
-                                CommentMetadata cm = g.getMetadata(CommentMetadata.class);\r
-                                String msg = "ActivationManager modification count=" + count;\r
-                                g.addMetadata(cm.add(msg));\r
-                                if (DEBUG)\r
-                                    System.out.println("DEBUG: " + msg);\r
-                            }\r
-                            if(runOnce)\r
-                                deactivate();\r
-                            return;    \r
-                        }\r
-                        if (BREAK_INFINITE_ACTIVATION_LOOPS) {\r
-                            if (count > INFINITE_LOOP_COUNT) {\r
-                                deactivate();\r
-                                String msg = "Possible dynamic activation loop. Forcing break."\r
-                                        + "Loop count was " + count\r
-                                        + ". Activated resource was "\r
-                                        + NameUtils.getURIOrSafeNameInternal(g, resource) + ".";\r
-                                System.out.println("WARNING: " + msg);\r
-                                throw new DatabaseException(msg);\r
-                            }\r
-                        }\r
-                        try {\r
-                            modification.perform(g);\r
-                            TimeLogger.log("ActivationManager: performed modification");\r
-                        } catch (DatabaseException e) {\r
-                            deactivate();\r
-                            throw e;\r
-                        }\r
-                    }\r
-                }\r
-            };\r
-               }\r
-               \r
-        private void executeOnce(WriteGraph graph, final Resource trigger) throws DatabaseException {\r
-            getRequest(trigger).perform(graph);\r
-//             graph.syncRequest(getRequest(trigger));\r
-        }\r
-\r
-               private void execute(final ReadGraph graph, final Resource trigger) {\r
-            graph.asyncRequest(getRequest(trigger)); \r
-        }\r
-\r
-               @Override\r
-               public void deactivate() {\r
-                       disposed = true;                        \r
-               }\r
-\r
-               @Override\r
-               public boolean isDisposed() {\r
-                       return disposed || session == null;\r
-               }\r
-               \r
-       }\r
-       \r
-       public ActivationManager(Session session) {\r
-               this.session = session;\r
-       }\r
-\r
-       @Override\r
-       public IActivation activate(Resource r) {\r
-           Session s = session;\r
-           if (s == null)\r
-               throw new IllegalStateException("ActivationManager is disposed");\r
-               Activation activation = new Activation(r);\r
-               try {\r
-                       activation.execute(session);\r
-               } catch (DatabaseException e) {\r
-                       Logger.defaultLogError(e);\r
-               }\r
-               return activation;\r
-       }\r
-\r
-       @Override\r
-       public IActivation activate(WriteGraph graph, Resource r) throws DatabaseException {\r
-           Session s = session;\r
-           if (s == null)\r
-               throw new IllegalStateException("ActivationManager is disposed");\r
-               Activation activation = new Activation(r);\r
-               activation.execute(graph);\r
-               return activation;\r
-       }\r
-\r
-       @Override\r
-       public void activateOnce(Resource resource) {\r
-               activate(resource).runOnceAndDeactivate();              \r
-       }\r
-       \r
-       @Override\r
-       public void activateOnce(WriteGraph graph, Resource resource) throws DatabaseException {\r
-               \r
-           Session s = session;\r
-           if (s == null)\r
-               throw new IllegalStateException("ActivationManager is disposed");\r
-           \r
-           Layer0X L0X = Layer0X.getInstance(graph);\r
-               for(Resource r : graph.getObjects(resource, L0X.HasTrigger)) {\r
-                       new Activation(resource).executeOnce(graph, r);\r
-               }\r
-\r
-               \r
-       }\r
-\r
-       @Override\r
-       public void dispose() {\r
-           session = null;\r
-       }\r
-\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 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:
+ *     VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.db.services.activation;
+
+import org.simantics.db.Disposable;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.Session;
+import org.simantics.db.WriteGraph;
+import org.simantics.db.common.CommentMetadata;
+import org.simantics.db.common.request.WriteRequest;
+import org.simantics.db.common.utils.CommonDBUtils;
+import org.simantics.db.common.utils.Logger;
+import org.simantics.db.common.utils.NameUtils;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.layer0.utils.queries.QueryExecutor2;
+import org.simantics.layer0.utils.triggers.IActivation;
+import org.simantics.layer0.utils.triggers.IActivationManager;
+import org.simantics.layer0.utils.triggers.IModification;
+import org.simantics.layer0.utils.triggers.ITrigger;
+import org.simantics.operation.Layer0X;
+import org.simantics.utils.logging.TimeLogger;
+import org.simantics.utils.threads.logger.IThreadLogger;
+import org.simantics.utils.threads.logger.ThreadLogger;
+
+@SuppressWarnings("deprecation") // No replacement given so now way to fix this error.
+public class ActivationManager implements IActivationManager, Disposable {
+
+       Session session;
+       static IThreadLogger threadLogger = ThreadLogger.getInstance();
+
+       class Activation extends QueryExecutor2 implements IActivation {
+               final boolean DEBUG = false;
+               final boolean BREAK_INFINITE_ACTIVATION_LOOPS = true;
+
+               /**
+                * After {@value InfiniteLoop} the activation will be forcibly
+                * deactivated if {@link #BREAK_INFINITE_ACTIVATION_LOOPS} is
+                * <code>true</code>.
+                */
+               final int INFINITE_LOOP_COUNT = 100;
+
+               Resource resource;
+               int transactionCount = 0;
+               boolean disposed = false;
+               boolean runOnce = false;
+
+               public Activation(Resource resource) {
+                       this.resource = resource;
+               }
+
+               public void runOnceAndDeactivate() {
+                       runOnce = true;
+               }
+
+               @Override
+               public void run(ReadGraph g) throws DatabaseException {
+//                     ITask task = threadLogger.begin("Activation.perform");
+                       Layer0X L0X = Layer0X.getInstance(g);
+                       for(Resource r : g.getObjects(resource, L0X.HasTrigger))
+                               if(calcModification(g, r) != null)
+                                       execute(g, r);
+//                     task.finish();
+               }
+
+               private IModification calcModification(ReadGraph g, Resource trigger) throws DatabaseException {
+//                     new Exception().printStackTrace();
+                       //ITask task = ThreadLogger.getInstance().begin("Activation.calcModification");
+                       IModification modi = g.syncRequest(g.adapt(trigger, ITrigger.class));
+                       //task.finish();
+                       return modi;
+               }
+
+               private WriteRequest getRequest(final Resource trigger) {
+                       return new WriteRequest() {
+                @Override
+                public void perform(WriteGraph g) throws DatabaseException {
+                    int count = 0;
+                    while (true) {
+                       
+                       CommonDBUtils.selectClusterSet(g, trigger);
+                       
+                       TimeLogger.log("ActivationManager: start calculating modification");
+                        IModification modification = calcModification(g, trigger);
+                        TimeLogger.log("ActivationManager: finished calculating modification");
+                        if (modification != null)
+                            ++count;
+                        else {
+                            if (count > 0) {
+                                CommentMetadata cm = g.getMetadata(CommentMetadata.class);
+                                String msg = "ActivationManager modification count=" + count;
+                                g.addMetadata(cm.add(msg));
+                                if (DEBUG)
+                                    System.out.println("DEBUG: " + msg);
+                            }
+                            if(runOnce)
+                                deactivate();
+                            return;    
+                        }
+                        if (BREAK_INFINITE_ACTIVATION_LOOPS) {
+                            if (count > INFINITE_LOOP_COUNT) {
+                                deactivate();
+                                String msg = "Possible dynamic activation loop. Forcing break."
+                                        + "Loop count was " + count
+                                        + ". Activated resource was "
+                                        + NameUtils.getURIOrSafeNameInternal(g, resource) + ".";
+                                System.out.println("WARNING: " + msg);
+                                throw new DatabaseException(msg);
+                            }
+                        }
+                        try {
+                            modification.perform(g);
+                            TimeLogger.log("ActivationManager: performed modification");
+                        } catch (DatabaseException e) {
+                            deactivate();
+                            throw e;
+                        }
+                    }
+                }
+            };
+               }
+               
+        private void executeOnce(WriteGraph graph, final Resource trigger) throws DatabaseException {
+            getRequest(trigger).perform(graph);
+//             graph.syncRequest(getRequest(trigger));
+        }
+
+               private void execute(final ReadGraph graph, final Resource trigger) {
+            graph.asyncRequest(getRequest(trigger)); 
+        }
+
+               @Override
+               public void deactivate() {
+                       disposed = true;                        
+               }
+
+               @Override
+               public boolean isDisposed() {
+                       return disposed || session == null;
+               }
+               
+       }
+       
+       public ActivationManager(Session session) {
+               this.session = session;
+       }
+
+       @Override
+       public IActivation activate(Resource r) {
+           Session s = session;
+           if (s == null)
+               throw new IllegalStateException("ActivationManager is disposed");
+               Activation activation = new Activation(r);
+               try {
+                       activation.execute(session);
+               } catch (DatabaseException e) {
+                       Logger.defaultLogError(e);
+               }
+               return activation;
+       }
+
+       @Override
+       public IActivation activate(WriteGraph graph, Resource r) throws DatabaseException {
+           Session s = session;
+           if (s == null)
+               throw new IllegalStateException("ActivationManager is disposed");
+               Activation activation = new Activation(r);
+               activation.execute(graph);
+               return activation;
+       }
+
+       @Override
+       public void activateOnce(Resource resource) {
+               activate(resource).runOnceAndDeactivate();              
+       }
+       
+       @Override
+       public void activateOnce(WriteGraph graph, Resource resource) throws DatabaseException {
+               
+           Session s = session;
+           if (s == null)
+               throw new IllegalStateException("ActivationManager is disposed");
+           
+           Layer0X L0X = Layer0X.getInstance(graph);
+               for(Resource r : graph.getObjects(resource, L0X.HasTrigger)) {
+                       new Activation(resource).executeOnce(graph, r);
+               }
+
+               
+       }
+
+       @Override
+       public void dispose() {
+           session = null;
+       }
+
+}