diff options
Diffstat (limited to 'java/src/IceGridGUI/ApplicationObserverI.java')
-rw-r--r-- | java/src/IceGridGUI/ApplicationObserverI.java | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/java/src/IceGridGUI/ApplicationObserverI.java b/java/src/IceGridGUI/ApplicationObserverI.java new file mode 100644 index 00000000000..77e8bc8f7b9 --- /dev/null +++ b/java/src/IceGridGUI/ApplicationObserverI.java @@ -0,0 +1,152 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2011 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +package IceGridGUI; + +import javax.swing.SwingUtilities; +import IceGrid.*; + +class ApplicationObserverI extends _ApplicationObserverDisp +{ + ApplicationObserverI(String instanceName, Coordinator coordinator) + { + _instanceName = instanceName; + _coordinator = coordinator; + _trace = coordinator.traceObservers(); + } + + // + // Runs in the UI thread + // + synchronized void waitForInit() + { + // + // TODO: configurable timeout + // + long timeout = 10000; + + if(!_initialized) + { + try + { + wait(timeout); + } + catch(InterruptedException e) + { + } + } + + if(_initialized) + { + _coordinator.applicationInit(_instanceName, _serial, _applications); + } + else + { + throw new Ice.TimeoutException(); + } + } + + public synchronized void applicationInit(int serial, java.util.List<ApplicationInfo> applications, + Ice.Current current) + { + if(_trace) + { + if(applications.size() == 0) + { + _coordinator.traceObserver("applicationInit (no application);" + "serial is " + serial); + } + else + { + String names = ""; + for(ApplicationInfo p : applications) + { + names += " " + p.descriptor.name; + } + + _coordinator.traceObserver("applicationInit for application" + + (applications.size() == 1 ? "" : "s") + + names + + "; serial is " + serial); + } + } + + _initialized = true; + _serial = serial; + + _applications = applications; + + notify(); + } + + public void applicationAdded(final int serial, final ApplicationInfo info, Ice.Current current) + { + if(_trace) + { + _coordinator.traceObserver("applicationAdded for application " + + info.descriptor.name + + "; serial is " + serial); + } + + SwingUtilities.invokeLater(new Runnable() + { + public void run() + { + _coordinator.applicationAdded(serial, info); + } + }); + } + + public void applicationRemoved(final int serial, final String name, final Ice.Current current) + { + if(_trace) + { + _coordinator.traceObserver("applicationRemoved for application " + + name + + "; serial is " + serial); + } + + SwingUtilities.invokeLater(new Runnable() + { + public void run() + { + _coordinator.applicationRemoved(serial, name); + } + }); + } + + public void applicationUpdated(final int serial, final ApplicationUpdateInfo info, Ice.Current current) + { + if(_trace) + { + _coordinator.traceObserver("applicationUpdated for application " + + info.descriptor.name + + "; serial is " + serial); + } + + SwingUtilities.invokeLater(new Runnable() + { + public void run() + { + _coordinator.applicationUpdated(serial, info); + } + }); + } + + private final Coordinator _coordinator; + private final boolean _trace; + + private boolean _initialized = false; + + // + // Values given to init + // + private final String _instanceName; + private int _serial; + private java.util.List<ApplicationInfo> _applications; +} |