]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scenegraph.profile/src/org/simantics/scenegraph/profile/impl/ProfileActivationListener.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scenegraph.profile / src / org / simantics / scenegraph / profile / impl / ProfileActivationListener.java
1 package org.simantics.scenegraph.profile.impl;\r
2 \r
3 import java.util.HashSet;\r
4 import java.util.Set;\r
5 \r
6 import org.simantics.db.ReadGraph;\r
7 import org.simantics.db.Resource;\r
8 import org.simantics.db.common.procedure.single.SingleSetSyncListener;\r
9 import org.simantics.db.common.utils.Logger;\r
10 import org.simantics.db.exception.DatabaseException;\r
11 import org.simantics.scenegraph.profile.ProfileEntry;\r
12 import org.simantics.scenegraph.profile.common.ProfileObserver;\r
13 import org.simantics.utils.datastructures.disposable.IDisposable;\r
14 \r
15 public class ProfileActivationListener extends SingleSetSyncListener<ProfileEntry> {\r
16 \r
17     final Resource runtime;\r
18     final ProfileObserver observer;\r
19     final IDisposable disposable;\r
20     final Set<ProfileEntry> active = new HashSet<ProfileEntry>();\r
21     \r
22     public ProfileActivationListener(Resource runtime, ProfileObserver observer, IDisposable disposable) {\r
23         this.runtime = runtime;\r
24         this.observer = observer;\r
25         this.disposable = disposable;\r
26     }\r
27     \r
28     @Override\r
29     public boolean start(ReadGraph graph) throws DatabaseException {\r
30         \r
31         if (observer == null || observer.isDisposed())\r
32             return false;\r
33         if (runtime == null)\r
34             return false;\r
35 \r
36         return true;\r
37         \r
38     }\r
39 \r
40     @Override\r
41     public void add(ReadGraph graph, ProfileEntry item) throws DatabaseException {\r
42         observer.update();\r
43         item.activate(graph, runtime, observer);\r
44         active.add(item);\r
45         if (DebugPolicy.DEBUG_PROFILE_STYLE_ACTIVATION)\r
46             System.out.println("ACTIVATED PROFILE ENTRY: " + item);\r
47     }\r
48 \r
49     @Override\r
50     public void remove(ReadGraph graph, ProfileEntry item) throws DatabaseException {\r
51         observer.update();\r
52         active.remove(item);\r
53         if (DebugPolicy.DEBUG_PROFILE_STYLE_ACTIVATION)\r
54             System.out.println("DE-ACTIVATING PROFILE ENTRY: " + item);\r
55         item.deactivate(runtime, observer);\r
56     }\r
57 \r
58     @Override\r
59     public void finished(ReadGraph graph) throws DatabaseException {\r
60 //        observer.update();\r
61     }\r
62 \r
63     @Override\r
64     public void exception(ReadGraph graph, Throwable t) {\r
65         Logger.defaultLogError(t);\r
66     }\r
67 \r
68     @Override\r
69     public boolean isDisposed() {\r
70         return disposable.isDisposed();\r
71     }\r
72     \r
73     public void cleanup() {\r
74         if(!active.isEmpty()) {\r
75                 for(ProfileEntry entry : active) entry.deactivate(runtime, observer);\r
76                 active.clear();\r
77         }\r
78     }\r
79 \r
80 }