1 package org.simantics.scenegraph.profile.impl;
\r
3 import java.util.HashSet;
\r
4 import java.util.Set;
\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
15 public class ProfileActivationListener extends SingleSetSyncListener<ProfileEntry> {
\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
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
29 public boolean start(ReadGraph graph) throws DatabaseException {
\r
31 if (observer == null || observer.isDisposed())
\r
33 if (runtime == null)
\r
41 public void add(ReadGraph graph, ProfileEntry item) throws DatabaseException {
\r
43 item.activate(graph, runtime, observer);
\r
45 if (DebugPolicy.DEBUG_PROFILE_STYLE_ACTIVATION)
\r
46 System.out.println("ACTIVATED PROFILE ENTRY: " + item);
\r
50 public void remove(ReadGraph graph, ProfileEntry item) throws DatabaseException {
\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
59 public void finished(ReadGraph graph) throws DatabaseException {
\r
60 // observer.update();
\r
64 public void exception(ReadGraph graph, Throwable t) {
\r
65 Logger.defaultLogError(t);
\r
69 public boolean isDisposed() {
\r
70 return disposable.isDisposed();
\r
73 public void cleanup() {
\r
74 if(!active.isEmpty()) {
\r
75 for(ProfileEntry entry : active) entry.deactivate(runtime, observer);
\r