]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network/src/org/simantics/district/network/profile/ThrottledStyleBase.java
Set license/copyright information for district features
[simantics/district.git] / org.simantics.district.network / src / org / simantics / district / network / profile / ThrottledStyleBase.java
index 93af11c4fa633e73dbc8ca4e885fe2e4a45ad599..483f62eddccbb6241f184ef892156f586e4e6de9 100644 (file)
@@ -14,8 +14,6 @@ package org.simantics.district.network.profile;
 import java.util.Optional;
 import java.util.concurrent.atomic.AtomicLong;
 
-import org.simantics.Simantics;
-import org.simantics.databoard.Bindings;
 import org.simantics.db.ReadGraph;
 import org.simantics.db.Resource;
 import org.simantics.db.common.request.UnaryRead;
@@ -44,23 +42,7 @@ public abstract class ThrottledStyleBase<Result> extends StyleBase<Optional<Resu
 
     @Override
     protected Read<Optional<Result>> getStyleCalculationRequest(Resource runtimeDiagram, Resource entry, Resource item) {
-        Simantics.getSession().asyncRequest(new ProfileUpdateIntervalRead(runtimeDiagram), new Listener<Long>() {
-
-            @Override
-            public void execute(Long result) {
-                interval.set(result);
-            }
-
-            @Override
-            public void exception(Throwable t) {
-                LOGGER.error("Could not listen interval from runtime diagram {}", runtimeDiagram, t);
-            }
-
-            @Override
-            public boolean isDisposed() {
-                return resultListener.isDisposed();
-            }
-        });
+        //Simantics.getSession().asyncRequest(new ProfileUpdateIntervalRead(runtimeDiagram), new ProfileUpdateIntervalListener(runtimeDiagram, entry, item)); 
         return super.getStyleCalculationRequest(runtimeDiagram, entry, item);
     }
 
@@ -89,10 +71,12 @@ public abstract class ThrottledStyleBase<Result> extends StyleBase<Optional<Resu
 
     @Override
     public final void applyStyleForNode(EvaluationContext evaluationContext, INode node, Optional<Result> result) {
-        if (!result.equals(Optional.empty())) {
+        if (!Optional.empty().equals(result) && result != null) {
             applyThrottledStyleForNode(evaluationContext, node, result.get());
         } else {
             LOGGER.debug("Do not apply as results are unchanged for {} {} {}", evaluationContext, node, result);
+            // TODO: fix this duplicate method invocation with null
+            applyThrottledStyleForNode(evaluationContext, node, null);
         }
     }
 
@@ -110,9 +94,83 @@ public abstract class ThrottledStyleBase<Result> extends StyleBase<Optional<Resu
             DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
             Long interval = DEFAULT_INTERVAL;
             if (configuration != null) {
-                interval = graph.getPossibleRelatedValue(configuration, DN.Diagram_profileUpdateInterval, Bindings.LONG);
+                // TODO: take back to use when throttled profile is actually working
+                // interval = graph.getPossibleRelatedValue(configuration, DN.Diagram_profileUpdateInterval, Bindings.LONG);
             }
             return interval != null ? interval : DEFAULT_INTERVAL;
         }
     }
+    
+    private class ProfileUpdateIntervalListener implements Listener<Long> {
+
+        private Resource runtimeDiagram;
+        private Resource entry;
+        private Resource item;
+
+        public ProfileUpdateIntervalListener(Resource runtimeDiagram, Resource entry, Resource item) {
+            this.runtimeDiagram = runtimeDiagram;
+            this.entry = entry;
+            this.item = item;
+        }
+
+        @Override
+        public void execute(Long result) {
+            interval.set(result);
+        }
+
+        @Override
+        public void exception(Throwable t) {
+            LOGGER.error("Could not listen interval from runtime diagram {}", runtimeDiagram, t);
+        }
+
+        @Override
+        public boolean isDisposed() {
+            return resultListener.isDisposed();
+        }
+
+        @Override
+        public int hashCode() {
+            final int prime = 31;
+            int result = 1;
+            result = prime * result + getEnclosingInstance().hashCode();
+            result = prime * result + ((entry == null) ? 0 : entry.hashCode());
+            result = prime * result + ((item == null) ? 0 : item.hashCode());
+            result = prime * result + ((runtimeDiagram == null) ? 0 : runtimeDiagram.hashCode());
+            return result;
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj)
+                return true;
+            if (obj == null)
+                return false;
+            if (getClass() != obj.getClass())
+                return false;
+            ProfileUpdateIntervalListener other = (ProfileUpdateIntervalListener) obj;
+            if (!getEnclosingInstance().equals(other.getEnclosingInstance()))
+                return false;
+            if (entry == null) {
+                if (other.entry != null)
+                    return false;
+            } else if (!entry.equals(other.entry))
+                return false;
+            if (item == null) {
+                if (other.item != null)
+                    return false;
+            } else if (!item.equals(other.item))
+                return false;
+            if (runtimeDiagram == null) {
+                if (other.runtimeDiagram != null)
+                    return false;
+            } else if (!runtimeDiagram.equals(other.runtimeDiagram))
+                return false;
+            return true;
+        }
+
+        private ThrottledStyleBase<Result> getEnclosingInstance() {
+            return ThrottledStyleBase.this;
+        }
+    }
+
 }