diff options
Diffstat (limited to 'java/src/IceGridGUI/LiveDeployment/Service.java')
-rw-r--r-- | java/src/IceGridGUI/LiveDeployment/Service.java | 488 |
1 files changed, 488 insertions, 0 deletions
diff --git a/java/src/IceGridGUI/LiveDeployment/Service.java b/java/src/IceGridGUI/LiveDeployment/Service.java new file mode 100644 index 00000000000..5f9fe170d03 --- /dev/null +++ b/java/src/IceGridGUI/LiveDeployment/Service.java @@ -0,0 +1,488 @@ +// ********************************************************************** +// +// 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.LiveDeployment; + +import java.awt.Component; +import javax.swing.Icon; +import javax.swing.JOptionPane; +import javax.swing.JPopupMenu; +import javax.swing.JTree; +import javax.swing.SwingUtilities; +import javax.swing.tree.DefaultTreeCellRenderer; +import javax.swing.tree.TreeModel; +import javax.swing.tree.TreePath; +import java.util.Enumeration; + +import IceGrid.*; +import IceGridGUI.*; + +public class Service extends ListArrayTreeNode +{ + // + // Actions + // + public boolean[] getAvailableActions() + { + boolean[] actions = new boolean[ACTION_COUNT]; + + ServerState serverState = ((Server)_parent).getState(); + + if(serverState != null) + { + actions[RETRIEVE_LOG] = _serviceDescriptor.logs.length > 0; + } + if(serverState == ServerState.Active) + { + if(((Server)_parent).hasServiceObserver()) + { + actions[START] = !_started; + actions[STOP] = _started; + } + else + { + actions[START] = true; + actions[STOP] = true; + } + } + + return actions; + } + + public void start() + { + Ice.ObjectPrx serverAdmin = ((Server)_parent).getServerAdmin(); + + if(serverAdmin != null) + { + final String prefix = "Starting service '" + _id + "'..."; + getCoordinator().getStatusBar().setText(prefix); + + IceBox.AMI_ServiceManager_startService cb = new IceBox.AMI_ServiceManager_startService() + { + // + // Called by another thread! + // + public void ice_response() + { + amiSuccess(prefix); + } + + public void ice_exception(Ice.UserException e) + { + if(e instanceof IceBox.AlreadyStartedException) + { + amiSuccess(prefix); + } + else + { + amiFailure(prefix, "Failed to start service " + _id, e.toString()); + } + } + + public void ice_exception(Ice.LocalException e) + { + amiFailure(prefix, "Failed to start service " + _id, e.toString()); + } + }; + + IceBox.ServiceManagerPrx serviceManager = IceBox.ServiceManagerPrxHelper. + uncheckedCast(serverAdmin.ice_facet("IceBox.ServiceManager")); + + try + { + serviceManager.startService_async(cb, _id); + } + catch(Ice.LocalException e) + { + failure(prefix, "Failed to start service " + _id, e.toString()); + } + } + } + + public void stop() + { + Ice.ObjectPrx serverAdmin = ((Server)_parent).getServerAdmin(); + + if(serverAdmin != null) + { + final String prefix = "Stopping service '" + _id + "'..."; + getCoordinator().getStatusBar().setText(prefix); + + IceBox.AMI_ServiceManager_stopService cb = new IceBox.AMI_ServiceManager_stopService() + { + // + // Called by another thread! + // + public void ice_response() + { + amiSuccess(prefix); + } + + public void ice_exception(Ice.UserException e) + { + if(e instanceof IceBox.AlreadyStoppedException) + { + amiSuccess(prefix); + } + else + { + amiFailure(prefix, "Failed to stop service " + _id, e.toString()); + } + } + + public void ice_exception(Ice.LocalException e) + { + amiFailure(prefix, "Failed to stop service " + _id, e.toString()); + } + }; + + IceBox.ServiceManagerPrx serviceManager = IceBox.ServiceManagerPrxHelper. + uncheckedCast(serverAdmin.ice_facet("IceBox.ServiceManager")); + + try + { + serviceManager.stopService_async(cb, _id); + } + catch(Ice.LocalException e) + { + failure(prefix, "Failed to stop service " + _id, e.toString()); + } + } + } + + public void retrieveLog() + { + assert _serviceDescriptor.logs.length > 0; + + String path = null; + + if(_serviceDescriptor.logs.length == 1) + { + path = _resolver.substitute(_serviceDescriptor.logs[0]); + } + else + { + Object[] pathArray = new Object[_serviceDescriptor.logs.length]; + int i = 0; + for(String log : _serviceDescriptor.logs) + { + pathArray[i++] = _resolver.substitute(log); + } + + path = (String)JOptionPane.showInputDialog( + getCoordinator().getMainFrame(), + "Which log file do you want to retrieve?", + "Retrieve Log File", + JOptionPane.QUESTION_MESSAGE, null, + pathArray, pathArray[0]); + } + + if(path != null) + { + final String fPath = path; + + getRoot().openShowLogDialog(new ShowLogDialog.FileIteratorFactory() + { + public FileIteratorPrx open(int count) + throws FileNotAvailableException, ServerNotExistException, NodeUnreachableException, + DeploymentException + { + AdminSessionPrx session = getRoot().getCoordinator().getSession(); + return session.openServerLog(_parent.getId(), fPath, count); + } + + public String getTitle() + { + return "Service " + _parent.getId() + "/" + _id + " " + new java.io.File(fPath).getName(); + } + + public String getDefaultFilename() + { + return new java.io.File(fPath).getName(); + } + }); + } + } + + public Component getTreeCellRendererComponent( + JTree tree, + Object value, + boolean sel, + boolean expanded, + boolean leaf, + int row, + boolean hasFocus) + { + if(_cellRenderer == null) + { + _cellRenderer = new DefaultTreeCellRenderer(); + + _startedIcon = Utils.getIcon("/icons/16x16/service_running.png"); + _stoppedIcon = Utils.getIcon("/icons/16x16/service.png"); + } + + Icon icon = _started ? _startedIcon : _stoppedIcon; + + if(expanded) + { + _cellRenderer.setOpenIcon(icon); + } + else + { + _cellRenderer.setClosedIcon(icon); + } + + return _cellRenderer.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); + } + + public Editor getEditor() + { + if(_editor == null) + { + _editor = new ServiceEditor(getCoordinator()); + } + _editor.show(this); + return _editor; + } + + public JPopupMenu getPopupMenu() + { + LiveActions la = getCoordinator().getLiveActionsForPopup(); + + if(_popup == null) + { + _popup = new JPopupMenu(); + _popup.add(la.get(START)); + _popup.add(la.get(STOP)); + _popup.addSeparator(); + _popup.add(la.get(RETRIEVE_LOG)); + } + + la.setTarget(this); + return _popup; + } + + Service(Server parent, String serviceName, Utils.Resolver resolver, ServiceInstanceDescriptor descriptor, + ServiceDescriptor serviceDescriptor, PropertySetDescriptor serverInstancePSDescriptor) + { + super(parent, serviceName, 2); + _resolver = resolver; + + _instanceDescriptor = descriptor; + _serviceDescriptor = serviceDescriptor; + _serverInstancePSDescriptor = serverInstancePSDescriptor; + + _childrenArray[0] = _adapters; + _childrenArray[1] = _dbEnvs; + + createAdapters(); + createDbEnvs(); + } + + boolean updateAdapter(AdapterDynamicInfo info) + { + for(Adapter p : _adapters) + { + if(p.update(info)) + { + return true; + } + } + return false; + } + + int updateAdapters(java.util.List<AdapterDynamicInfo> infoList) + { + int result = 0; + java.util.Iterator<Adapter> p = _adapters.iterator(); + while(p.hasNext() && result < infoList.size()) + { + Adapter adapter = p.next(); + if(adapter.update(infoList)) + { + result++; + } + } + return result; + } + + void nodeDown() + { + for(Adapter p : _adapters) + { + p.update((AdapterDynamicInfo)null); + } + } + + boolean isStarted() + { + return _started; + } + + void started() + { + if(!_started) + { + _started = true; + getRoot().getTreeModel().nodeChanged(this); + } + } + + void stopped() + { + if(_started) + { + _started = false; + getRoot().getTreeModel().nodeChanged(this); + } + } + + void showRuntimeProperties() + { + Ice.ObjectPrx serverAdmin = ((Server)_parent).getServerAdmin(); + + if(serverAdmin == null) + { + _editor.setBuildId("", this); + } + else + { + Ice.AMI_PropertiesAdmin_getPropertiesForPrefix cb = new Ice.AMI_PropertiesAdmin_getPropertiesForPrefix() + { + public void ice_response(final java.util.Map<String, String> properties) + { + SwingUtilities.invokeLater(new Runnable() + { + public void run() + { + _editor.setRuntimeProperties((java.util.SortedMap<String, String>)properties, + Service.this); + } + }); + } + + public void ice_exception(final Ice.LocalException e) + { + SwingUtilities.invokeLater(new Runnable() + { + public void run() + { + if(e instanceof Ice.ObjectNotExistException) + { + _editor.setBuildId("Error: can't reach the icebox Admin object", Service.this); + } + else if(e instanceof Ice.FacetNotExistException) + { + _editor.setBuildId("Error: this icebox Admin object does not provide a " + + "'Properties' facet for this service", Service.this); + } + else + { + _editor.setBuildId("Error: " + e.toString(), Service.this); + } + } + }); + } + }; + + try + { + Ice.PropertiesAdminPrx propAdmin = + Ice.PropertiesAdminPrxHelper.uncheckedCast(serverAdmin.ice_facet("IceBox.Service." + _id + + ".Properties")); + propAdmin.getPropertiesForPrefix_async(cb, ""); + } + catch(Ice.LocalException e) + { + _editor.setBuildId("Error: " + e.toString(), this); + } + } + } + + Utils.Resolver getResolver() + { + return _resolver; + } + + ServiceDescriptor getServiceDescriptor() + { + return _serviceDescriptor; + } + + ServiceInstanceDescriptor getInstanceDescriptor() + { + return _instanceDescriptor; + } + + java.util.SortedMap<String, String> getProperties() + { + java.util.List<Utils.ExpandedPropertySet> psList = new java.util.LinkedList<Utils.ExpandedPropertySet>(); + Node node = (Node)_parent.getParent(); + + String applicationName = ((Server)_parent).getApplication().name; + + psList.add(node.expand(_serviceDescriptor.propertySet, applicationName, _resolver)); + + if(_instanceDescriptor != null) + { + psList.add(node.expand(_instanceDescriptor.propertySet, applicationName, _resolver)); + } + + if(_serverInstancePSDescriptor != null) + { + psList.add(node.expand(_serverInstancePSDescriptor, applicationName, _resolver)); + + } + + return Utils.propertySetsToMap(psList, _resolver); + } + + private void createAdapters() + { + for(AdapterDescriptor p : _serviceDescriptor.adapters) + { + String adapterName = Utils.substitute(p.name, _resolver); + + String adapterId = Utils.substitute(p.id, _resolver); + Ice.ObjectPrx proxy = null; + if(adapterId.length() > 0) + { + proxy = ((Node)_parent.getParent()).getProxy(adapterId); + } + + insertSortedChild(new Adapter(this, adapterName, _resolver, adapterId, p, proxy), _adapters, null); + } + } + + private void createDbEnvs() + { + for(DbEnvDescriptor p : _serviceDescriptor.dbEnvs) + { + String dbEnvName = Utils.substitute(p.name, _resolver); + insertSortedChild(new DbEnv(this, dbEnvName, _resolver, p), _dbEnvs, null); + } + } + + private final ServiceInstanceDescriptor _instanceDescriptor; + private final ServiceDescriptor _serviceDescriptor; + private final PropertySetDescriptor _serverInstancePSDescriptor; + private final Utils.Resolver _resolver; + + private final java.util.List<Adapter> _adapters = new java.util.LinkedList<Adapter>(); + private final java.util.List<DbEnv> _dbEnvs = new java.util.LinkedList<DbEnv>(); + + private boolean _started = false; + + static private ServiceEditor _editor; + static private DefaultTreeCellRenderer _cellRenderer; + static private JPopupMenu _popup; + static private Icon _startedIcon; + static private Icon _stoppedIcon; +} |