[jboss-cvs] jbosside/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server ...

Robert Stryker rawblem at gmail.com
Thu Nov 9 19:30:23 EST 2006


  User: rawb    
  Date: 06/11/09 19:30:23

  Added:       as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server     
                        TwiddlePollerListener.java JBossServerView.java
                        StrippedServerView.java ServerTableViewer.java
                        JBossServerTableViewer.java
  Log:
  Rewrote ui entirely
  
  Revision  Changes    Path
  1.1      date: 2006/11/10 00:30:23;  author: rawb;  state: Exp;jbosside/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/TwiddlePollerListener.java
  
  Index: TwiddlePollerListener.java
  ===================================================================
  package org.jboss.ide.eclipse.as.ui.views.server;
  
  import org.eclipse.jface.preference.IPreferenceStore;
  import org.eclipse.swt.widgets.Display;
  import org.eclipse.swt.widgets.MessageBox;
  import org.eclipse.swt.widgets.Shell;
  import org.eclipse.wst.server.core.IServer;
  import org.jboss.ide.eclipse.as.core.runtime.server.IServerPollerTimeoutListener;
  import org.jboss.ide.eclipse.as.ui.JBossServerUIPlugin;
  
  public class TwiddlePollerListener implements IServerPollerTimeoutListener {
  	public static final String key = "org.jboss.ide.eclipse.as.ui.preferencepages.TwiddlePollerListener";
  	public void serverTimedOut(IServer server, boolean expectedState) {
  		if( expectedState && firstEverTimeout()) {
  			IPreferenceStore store = JBossServerUIPlugin.getDefault().getPreferenceStore();
  			store.setValue(key, 2);
  			
  			Display.getDefault().asyncExec(new Runnable() {
  				public void run() {
  					MessageBox box = new MessageBox(new Shell());
  					box.setMessage("The Poller has timed out");
  					box.setText("Twiddle Poller Timed Out");
  					box.open();
  				} 
  			});
  		}
  	}
  	
  	protected boolean firstEverTimeout() {
  		return true;
  //		IPreferenceStore store = JBossServerUIPlugin.getDefault().getPreferenceStore();
  //		int val = store.getInt(key);
  //		if( val == 2 ) return false;
  //		return true;
  	}
  
  }
  
  
  
  1.1      date: 2006/11/10 00:30:23;  author: rawb;  state: Exp;jbosside/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/JBossServerView.java
  
  Index: JBossServerView.java
  ===================================================================
  package org.jboss.ide.eclipse.as.ui.views.server;
  
  import java.util.ArrayList;
  import java.util.Arrays;
  
  import org.eclipse.core.runtime.CoreException;
  import org.eclipse.debug.core.ILaunchConfiguration;
  import org.eclipse.debug.ui.DebugUITools;
  import org.eclipse.jface.action.Action;
  import org.eclipse.jface.action.IMenuListener;
  import org.eclipse.jface.action.IMenuManager;
  import org.eclipse.jface.action.MenuManager;
  import org.eclipse.jface.action.Separator;
  import org.eclipse.jface.viewers.ISelection;
  import org.eclipse.jface.viewers.ISelectionChangedListener;
  import org.eclipse.jface.viewers.IStructuredSelection;
  import org.eclipse.jface.viewers.SelectionChangedEvent;
  import org.eclipse.jface.viewers.TreeSelection;
  import org.eclipse.swt.SWT;
  import org.eclipse.swt.custom.SashForm;
  import org.eclipse.swt.layout.FillLayout;
  import org.eclipse.swt.layout.GridLayout;
  import org.eclipse.swt.widgets.Composite;
  import org.eclipse.swt.widgets.Display;
  import org.eclipse.swt.widgets.Menu;
  import org.eclipse.swt.widgets.Shell;
  import org.eclipse.swt.widgets.Tree;
  import org.eclipse.ui.IMemento;
  import org.eclipse.ui.IViewSite;
  import org.eclipse.ui.IWorkbenchActionConstants;
  import org.eclipse.ui.PartInitException;
  import org.eclipse.ui.views.properties.IPropertySheetPage;
  import org.eclipse.wst.server.core.IServer;
  import org.eclipse.wst.server.core.internal.Server;
  import org.eclipse.wst.server.core.internal.Trace;
  import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
  import org.eclipse.wst.server.ui.internal.view.servers.ModuleServer;
  import org.jboss.ide.eclipse.as.core.server.JBossServer;
  import org.jboss.ide.eclipse.as.ui.JBossServerUISharedImages;
  import org.jboss.ide.eclipse.as.ui.Messages;
  import org.jboss.ide.eclipse.as.ui.dialogs.TwiddleDialog;
  
  public class JBossServerView extends StrippedServerView {
  
  	private static final String TAG_SASHFORM_HEIGHT = "sashformHeight"; 
  		
  	protected int[] sashRows; // For the sashform sashRows
  	
  	protected SashForm form;
  	
  	protected JBossServerTableViewer jbViewer;
  	protected Tree jbTreeTable;
  	
  	
  	protected Action  refreshViewerAction, editLaunchConfigAction, twiddleAction, cloneServerAction;
  
  	
  	
  	public static JBossServerView instance;
  	public static JBossServerView getDefault() {
  		return instance;
  	}
  	
  	
  	public JBossServerView() {
  		super();
  		instance = this;		
  	}
  	
  	public JBossServerTableViewer getJBViewer() {
  		return jbViewer;
  	}
  	
  	public void createPartControl(Composite parent) {
  				
  		form = new SashForm(parent, SWT.VERTICAL);
  		form.setLayout(new FillLayout());
  		
  		addServerViewer(form);
  		addSecondViewer(form);
  		form.setWeights(sashRows);
  		createActions();
  		addListeners();
  		doMenuStuff(parent);
  	}
  
  	private void addServerViewer(Composite form) {
  		Composite child1 = new Composite(form,SWT.NONE);
  		child1.setLayout(new GridLayout());
  		super.createPartControl(child1);
  	}
  	
  	private void addSecondViewer(Composite form) {
  		Composite child2 = new Composite(form,SWT.NONE);
  		child2.setLayout(new FillLayout());
  		jbTreeTable = new Tree(child2, SWT.SINGLE | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
  		jbViewer = new JBossServerTableViewer(jbTreeTable);
  		getSite().setSelectionProvider(jbViewer);
  	}
  	
  	
  	public void createActions() {
  		refreshViewerAction = new Action() {
  			public void run() {
  				Display.getDefault().asyncExec(new Runnable() {
  					public void run() {
  						refresh();
  					} 
  				});
  			}
  			
  		};
  		refreshViewerAction.setText(Messages.RefreshViewerAction);
  		
  		
  		editLaunchConfigAction = new Action() {
  			public void run() {
  				Display.getDefault().asyncExec(new Runnable() { 
  					public void run() {
  						try {
  							final Object selected = getSelectedServer();
  							IServer s = null;
  							if( selected instanceof JBossServer ) {
  								s = ((JBossServer)selected).getServer();
  							} else if( selected instanceof IServer ) {
  								s = (IServer)selected;
  							}
  							
  							if( s != null ) {
  								ILaunchConfiguration launchConfig = ((Server) s).getLaunchConfiguration(true, null);
  								// TODO: use correct launch group
  								DebugUITools.openLaunchConfigurationPropertiesDialog(new Shell(), launchConfig, "org.eclipse.debug.ui.launchGroup.run");
  							}
  						} catch (CoreException ce) {
  							Trace.trace(Trace.SEVERE, "Could not create launch configuration", ce);
  						}
  
  					}
  				});
  			}
  		};
  		editLaunchConfigAction.setText(Messages.EditLaunchConfigurationAction);
  		editLaunchConfigAction.setImageDescriptor(JBossServerUISharedImages.getImageDescriptor(JBossServerUISharedImages.IMG_JBOSS_CONFIGURATION));
  		
  		twiddleAction = new Action() {
  			public void run() {
  				final IStructuredSelection selected = ((IStructuredSelection)tableViewer.getSelection());
  				Display.getDefault().asyncExec(new Runnable() {
  					public void run() {
  						TwiddleDialog dialog = new TwiddleDialog(tableViewer.getTree().getShell(), selected);
  						dialog.open();
  					} 
  				} );
  
  			}
  		};
  		twiddleAction.setText(Messages.TwiddleServerAction);
  		twiddleAction.setImageDescriptor(JBossServerUISharedImages.getImageDescriptor(JBossServerUISharedImages.TWIDDLE_IMAGE));
  		
  		
  //		cloneServerAction = new Action() {
  //			public void run() {
  //				Object selected = getSelectedElement();
  //				if( selected != null && selected instanceof JBossServer ) {
  //					final JBossServer server = (JBossServer)selected;
  //					
  //					// Show a wizard
  //					final ServerCloneWizard wizard = new ServerCloneWizard(server);
  //					WizardDialog dlg = new WizardDialog(Display.getDefault().getActiveShell(), wizard);
  //				    int ret = dlg.open();
  //				    if( ret == Window.OK ) {
  //				    	
  //				    	
  //				    	IRunnableWithProgress op = new IRunnableWithProgress() {
  //
  //							public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
  //								try {
  //									int filesWork = wizard.getSelectedFiles().length; 
  //							    	int totalWork = filesWork + 1 + 50;
  //							    	monitor.beginTask("Cloning Server", totalWork);
  //	
  //							    	// clone the directories
  //							    	File[] files = wizard.getSelectedFiles();
  //							    	String config = wizard.getConfig();
  //							    	ServerCloneUtil.directoriesClone(files, config, server, new SubProgressMonitor(monitor, filesWork+1));
  //
  //							    	// clone the wst server
  //							    	ServerCloneUtil.wstServerClone(server, wizard.getName(), wizard.getConfig(), 
  //											new SubProgressMonitor(monitor, 50));
  //									
  //									monitor.done();
  //								} catch( Exception e ) {
  //									e.printStackTrace();
  //								}
  //							}
  //				    		
  //				    	};
  //				    	try {
  //				    	new ProgressMonitorDialog(Display.getDefault().getActiveShell()).run(true, true, op);
  //				    	} catch( Exception e) {
  //				    		e.printStackTrace();
  //				    	}
  //				    }
  //				}
  //			}
  //		};
  //		cloneServerAction.setText(Messages.CloneServerAction);
  	}
  	
  	
  	protected void refresh() {
  		tableViewer.refresh(); // should auto-refresh the other
  	}
  	// for superclass, for the top viewer
  	protected void fillContextMenu(Shell shell, IMenuManager menu) {
  		menu.add(newServerAction);
  		menu.add(new Separator());
  		menu.add(actions[1]);
  		menu.add(actions[0]);
  		menu.add(actions[4]);
  		menu.add(actions[5]);
  		menu.add(new Separator());
  		menu.add(twiddleAction);
  		menu.add(editLaunchConfigAction);
  		menu.add(actions[6]);
  		menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
  		
  		boolean twiddleEnabled = getSelectedServer().getServerState() == IServer.STATE_STARTED;
  		twiddleAction.setEnabled(twiddleEnabled);
  	}
  
  	
  	
  	public IServer getSelectedServer() {
  		return (IServer)jbViewer.getInput();
  	}
  	
  	public void refreshJBTree(Object obj) {
  		final Object obj2 = obj;
  		Display.getDefault().asyncExec(new Runnable() {
  			public void run() {
  				try {
  					// If it's null, refresh the whole thing
  					if( obj2 == null ) { 
  						Object[] expanded = JBossServerView.this.jbViewer.getExpandedElements();
  						JBossServerView.this.jbViewer.refresh();
  						JBossServerView.this.jbViewer.setExpandedElements(expanded);
  					} else {
  						Object[] expanded = JBossServerView.this.jbViewer.getExpandedElements();
  						JBossServerView.this.jbViewer.refresh(obj2);
  						JBossServerView.this.jbViewer.setExpandedElements(expanded);
  					}
  				} catch (Exception e) {
  					// ignore
  				}
  			}
  		});
  	}
  	
  	public void addListeners() {
  		
  		/*
  		 * Handles the selection of the server viewer which is embedded in my sashform
  		 */
  		
  		tableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
  			public void selectionChanged(SelectionChangedEvent event) {
  				Object current = jbViewer.getInput();
  				Object selection = ((TreeSelection)event.getSelection()).getFirstElement();
  				Object server = selection;
  				if( selection instanceof ModuleServer ) {
  					server = ((ModuleServer)selection).server;
  				}
  
  				if( selection == null ) return;
  				
  				if( server != jbViewer.getInput()) {
  					jbViewer.setInput(server);
  					jbViewer.expandToLevel(2);
  				} else {
  					// This is entirely too cludgy but it works
  					ISelection sel = jbViewer.getSelection();
  					Object[] expanded = jbViewer.getExpandedElements();
  					jbViewer.setInput(server);
  					jbViewer.expandToLevel(2);
  					Object[] alsoExpanded = jbViewer.getExpandedElements();
  					ArrayList tmp = new ArrayList();
  					tmp.addAll(Arrays.asList(expanded));
  					tmp.addAll(Arrays.asList(alsoExpanded));
  					jbViewer.setExpandedElements(tmp.toArray());
  					jbViewer.setSelection(sel);
  				}
  			} 
  			
  		});
  	}
  	protected void doMenuStuff(Composite parent) {
  		MenuManager menuManager = new MenuManager("#PopupMenu"); 
  		menuManager.setRemoveAllWhenShown(true);
  		final Shell shell = jbTreeTable.getShell();
  		menuManager.addMenuListener(new IMenuListener() {
  			public void menuAboutToShow(IMenuManager mgr) {
  				jbViewer.fillSelectedContextMenu(shell, mgr);
  				mgr.add(new Separator());
  				jbViewer.fillJBContextMenu(shell, mgr);
  			}
  		});
  		Menu menu = menuManager.createContextMenu(parent);
  		jbTreeTable.setMenu(menu);
  	}
  	
  	/**
  	 * Save / Load some state  (width / height of boxes)
  	 */
  	public void init(IViewSite site, IMemento memento) throws PartInitException {
  		super.init(site, memento);
  		ServerUIPlugin.getPreferences().setShowOnActivity(false);
  		int sum = 0;
  		sashRows = new int[2];
  		for (int i = 0; i < sashRows.length; i++) {
  			sashRows[i] = 50;
  			if (memento != null) {
  				Integer in = memento.getInteger(TAG_SASHFORM_HEIGHT + i);
  				if (in != null && in.intValue() > 5)
  					sashRows[i] = in.intValue();
  			}
  			sum += sashRows[i];
  		}
  	}
  
  	public void saveState(IMemento memento) {
  		super.saveState(memento);
  		int[] weights = form.getWeights();
  		for (int i = 0; i < weights.length; i++) {
  			if (weights[i] != 0)
  				memento.putInteger(TAG_SASHFORM_HEIGHT + i, weights[i]);
  		}
  	}
  
  	
  	
  	public Object getAdapter(Class adaptor) {
  		if( adaptor == IPropertySheetPage.class) {
  			return jbViewer.getPropertySheet();
  		}
  		return super.getAdapter(adaptor);
  	}
  	
      public void dispose() {
      	super.dispose();
      	jbViewer.dispose();
      }
  
  
  
  }
  
  
  1.1      date: 2006/11/10 00:30:23;  author: rawb;  state: Exp;jbosside/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/StrippedServerView.java
  
  Index: StrippedServerView.java
  ===================================================================
  package org.jboss.ide.eclipse.as.ui.views.server;
  
  import org.eclipse.debug.core.ILaunchManager;
  import org.eclipse.debug.ui.IDebugUIConstants;
  import org.eclipse.debug.ui.IDebugView;
  import org.eclipse.jface.action.Action;
  import org.eclipse.jface.action.IAction;
  import org.eclipse.jface.action.IContributionManager;
  import org.eclipse.jface.action.IMenuListener;
  import org.eclipse.jface.action.IMenuManager;
  import org.eclipse.jface.action.MenuManager;
  import org.eclipse.jface.viewers.ISelectionProvider;
  import org.eclipse.jface.viewers.IStructuredSelection;
  import org.eclipse.jface.viewers.StructuredSelection;
  import org.eclipse.jface.viewers.Viewer;
  import org.eclipse.swt.SWT;
  import org.eclipse.swt.events.SelectionAdapter;
  import org.eclipse.swt.events.SelectionEvent;
  import org.eclipse.swt.layout.GridData;
  import org.eclipse.swt.widgets.Composite;
  import org.eclipse.swt.widgets.Display;
  import org.eclipse.swt.widgets.Menu;
  import org.eclipse.swt.widgets.Shell;
  import org.eclipse.swt.widgets.Tree;
  import org.eclipse.swt.widgets.TreeColumn;
  import org.eclipse.swt.widgets.TreeItem;
  import org.eclipse.ui.IMemento;
  import org.eclipse.ui.IViewSite;
  import org.eclipse.ui.IWorkbenchPage;
  import org.eclipse.ui.IWorkbenchPart;
  import org.eclipse.ui.IWorkbenchWindow;
  import org.eclipse.ui.PartInitException;
  import org.eclipse.ui.PlatformUI;
  import org.eclipse.ui.part.ViewPart;
  import org.eclipse.wst.server.core.IServer;
  import org.eclipse.wst.server.core.internal.Trace;
  import org.eclipse.wst.server.ui.internal.ContextIds;
  import org.eclipse.wst.server.ui.internal.ImageResource;
  import org.eclipse.wst.server.ui.internal.Messages;
  import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
  import org.eclipse.wst.server.ui.internal.actions.NewServerWizardAction;
  import org.eclipse.wst.server.ui.internal.view.servers.ModuleSloshAction;
  import org.eclipse.wst.server.ui.internal.view.servers.PublishAction;
  import org.eclipse.wst.server.ui.internal.view.servers.RestartAction;
  import org.eclipse.wst.server.ui.internal.view.servers.StartAction;
  import org.eclipse.wst.server.ui.internal.view.servers.StopAction;
  import org.jboss.ide.eclipse.as.ui.JBossServerUISharedImages;
  import org.jboss.ide.eclipse.as.ui.dialogs.TwiddleDialog;
  
  public class StrippedServerView extends ViewPart {
  	private static final String TAG_COLUMN_WIDTH = "columnWidth";
  
  	protected int[] cols;
  
  	protected Tree treeTable;
  	protected ServerTableViewer tableViewer;
  
  	// actions on a server
  	protected Action[] actions;
  	protected MenuManager restartMenu;
  	
  	protected Action newServerAction, twiddleAction;
  
  	/**
  	 * ServersView constructor comment.
  	 */
  	public StrippedServerView() {
  		super();
  	}
  
  	/**
  	 * createPartControl method comment.
  	 * 
  	 * @param parent a parent composite
  	 */
  	public void createPartControl(Composite parent) {
  		treeTable = new Tree(parent, SWT.SINGLE | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | SWT.NONE);
  		treeTable.setHeaderVisible(true);
  		treeTable.setLinesVisible(false);
  		treeTable.setLayoutData(new GridData(GridData.FILL_BOTH));
  		treeTable.setFont(parent.getFont());
  		PlatformUI.getWorkbench().getHelpSystem().setHelp(treeTable, ContextIds.VIEW_SERVERS);
  		
  		// add columns
  		TreeColumn column = new TreeColumn(treeTable, SWT.SINGLE);
  		column.setText(Messages.viewServer);
  		column.setWidth(cols[0]);
  		
  		TreeColumn column2 = new TreeColumn(treeTable, SWT.SINGLE);
  		column2.setText(Messages.viewStatus);
  		column2.setWidth(cols[1]);
  		
  //		TreeColumn column3 = new TreeColumn(treeTable, SWT.SINGLE);
  //		column3.setText(Messages.viewSync);
  //		column3.setWidth(cols[2]);
  		
  		tableViewer = new ServerTableViewer(this, treeTable);
  		initializeActions(tableViewer);
  		
  		treeTable.addSelectionListener(new SelectionAdapter() {
  			public void widgetSelected(SelectionEvent event) {
  				try {
  				} catch (Exception e) {
  					getViewSite().getActionBars().getStatusLineManager().setMessage(null, "");
  				}
  			}
  			public void widgetDefaultSelected(SelectionEvent event) {
  				try {
  					TreeItem item = treeTable.getSelection()[0];
  					Object data = item.getData();
  					if (!(data instanceof IServer))
  						return;
  					IServer server = (IServer) data;
  					ServerUIPlugin.editServer(server);
  				} catch (Exception e) {
  					Trace.trace(Trace.SEVERE, "Could not open server", e);
  				}
  			}
  		});
  		
  		MenuManager menuManager = new MenuManager("#PopupMenu");
  		menuManager.setRemoveAllWhenShown(true);
  		final Shell shell = treeTable.getShell();
  		menuManager.addMenuListener(new IMenuListener() {
  			public void menuAboutToShow(IMenuManager mgr) {
  				fillContextMenu(shell, mgr);
  			}
  		});
  		Menu menu = menuManager.createContextMenu(parent);
  		treeTable.setMenu(menu);
  		getSite().registerContextMenu(menuManager, tableViewer);
  		getSite().setSelectionProvider(tableViewer);
  	}
  
  	public void init(IViewSite site, IMemento memento) throws PartInitException {
  		super.init(site, memento);
  		cols = new int[2];
  		for (int i = 0; i < 2; i++) {
  			cols[i] = 100;
  			if (memento != null) {
  				Integer in = memento.getInteger(TAG_COLUMN_WIDTH + i);
  				if (in != null && in.intValue() > 5)
  					cols[i] = in.intValue();
  			}
  		}
  	}
  
  	public void saveState(IMemento memento) {
  		TreeColumn[] tc = treeTable.getColumns();
  		for (int i = 0; i < 2; i++) {
  			int width = tc[i].getWidth();
  			if (width != 0)
  				memento.putInteger(TAG_COLUMN_WIDTH + i, width);
  		}
  	}
  
  	protected void selectServerProcess(Object process) {
  		IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow() ;
  		if (window != null) {
  			IWorkbenchPage page = window.getActivePage();
  			if (page != null) {
  				IWorkbenchPart part = page.findView(IDebugUIConstants.ID_DEBUG_VIEW);
  				if (part != null) {
  					IDebugView view = (IDebugView)part.getAdapter(IDebugView.class);
  					if (view != null) {
  						Viewer viewer = view.getViewer();
  						if (viewer != null) {
  							viewer.setSelection(new StructuredSelection(process));
  						}
  					}
  				}
  			}
  		}
  	}
  
  	/**
  	 * Initialize actions
  	 * 
  	 * @param provider a selection provider
  	 */
  	public void initializeActions(ISelectionProvider provider) {
  		Shell shell = getSite().getShell();
  
  		// create the debug action
  		Action debugAction = new StartAction(shell, provider, "debug", ILaunchManager.DEBUG_MODE);
  		debugAction.setToolTipText(Messages.actionDebugToolTip);
  		debugAction.setText(Messages.actionDebug);
  		debugAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START_DEBUG));
  		debugAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START_DEBUG));
  		debugAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START_DEBUG));
  	
  		// create the start action
  		Action runAction = new StartAction(shell, provider, "start", ILaunchManager.RUN_MODE);
  		runAction.setToolTipText(Messages.actionStartToolTip);
  		runAction.setText(Messages.actionStart);
  		runAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START));
  		runAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START));
  		runAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START));
  		
  		// create the profile action
  		Action profileAction = new StartAction(shell, provider, "profile", ILaunchManager.PROFILE_MODE);
  		profileAction.setToolTipText(Messages.actionProfileToolTip);
  		profileAction.setText(Messages.actionProfile);
  		profileAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START_PROFILE));
  		profileAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START_PROFILE));
  		profileAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START_PROFILE));
  	
  		// create the restart menu
  		restartMenu = new MenuManager(Messages.actionRestart);
  		
  		Action restartAction = new RestartAction(shell, provider, "restartDebug", ILaunchManager.DEBUG_MODE);
  		restartAction.setToolTipText(Messages.actionDebugToolTip);
  		restartAction.setText(Messages.actionDebug);
  		restartAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START_DEBUG));
  		restartAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START_DEBUG));
  		restartAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START_DEBUG));
  		restartMenu.add(restartAction);
  		
  		restartAction = new RestartAction(shell, provider, "restartRun", ILaunchManager.RUN_MODE);
  		restartAction.setToolTipText(Messages.actionRestartToolTip);
  		restartAction.setText(Messages.actionStart);
  		restartAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START));
  		restartAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START));
  		restartAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START));
  		restartMenu.add(restartAction);
  		
  		restartAction = new RestartAction(shell, provider, "restartProfile", ILaunchManager.PROFILE_MODE);
  		restartAction.setToolTipText(Messages.actionRestartToolTip);
  		restartAction.setText(Messages.actionProfile);
  		restartAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START_PROFILE));
  		restartAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START_PROFILE));
  		restartAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START_PROFILE));
  		restartMenu.add(restartAction);
  		
  		// create the restart action
  		restartAction = new RestartAction(shell, provider, "restart");
  		restartAction.setToolTipText(Messages.actionRestartToolTip);
  		restartAction.setText(Messages.actionRestart);
  		restartAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_RESTART));
  		restartAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_RESTART));
  		restartAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_RESTART));
  
  		// create the stop action
  		Action stopAction = new StopAction(shell, provider, "stop");
  		stopAction.setToolTipText(Messages.actionStopToolTip);
  		stopAction.setText(Messages.actionStop);
  		stopAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_STOP));
  		stopAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_STOP));
  		stopAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_STOP));
  
  		// create the publish action
  		Action publishAction = new PublishAction(shell, provider, "publish");
  		publishAction.setToolTipText(Messages.actionPublishToolTip);
  		publishAction.setText(Messages.actionPublish);
  		publishAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_PUBLISH));
  		publishAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_PUBLISH));
  		publishAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_PUBLISH));
  		
  		// create the module slosh dialog action
  		Action addModuleAction = new ModuleSloshAction(shell, provider, "modules");
  		addModuleAction.setToolTipText(Messages.actionModifyModulesToolTip);
  		addModuleAction.setText(Messages.actionModifyModules);
  		addModuleAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ETOOL_MODIFY_MODULES));
  		addModuleAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CTOOL_MODIFY_MODULES));
  		addModuleAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DTOOL_MODIFY_MODULES));
  		
  		actions = new Action[7];
  		actions[0] = debugAction;
  		actions[1] = runAction;
  		actions[2] = profileAction;
  		actions[3] = restartAction;
  		actions[4] = stopAction;
  		actions[5] = publishAction;
  		actions[6] = addModuleAction;
  		
  		// add toolbar buttons
  		IContributionManager cm = getViewSite().getActionBars().getToolBarManager();
  		for (int i = 0; i < actions.length - 1; i++) {
  			cm.add(actions[i]);
  		}
  		
  		newServerAction = new Action() {
  			public void run() {
  				IAction newServerAction = new NewServerWizardAction();
  				newServerAction.run();
  			}
  		};
  		newServerAction.setText("New Server");
  		newServerAction.setImageDescriptor(JBossServerUISharedImages.getImageDescriptor(JBossServerUISharedImages.GENERIC_SERVER_IMAGE));
  		
  		twiddleAction = new Action() {
  			public void run() {
  				Display.getDefault().asyncExec(new Runnable() {
  					public void run() {
  						TwiddleDialog dialog = new TwiddleDialog(tableViewer.getTree().getShell(), 
  								(IStructuredSelection)tableViewer.getSelection());
  						dialog.open();
  					} 
  				} );
  			}
  		};
  		twiddleAction.setText("Twiddle Server");
  		twiddleAction.setImageDescriptor(JBossServerUISharedImages.getImageDescriptor(JBossServerUISharedImages.TWIDDLE_IMAGE));
  	}
  
  	protected void fillContextMenu(Shell shell, IMenuManager menu) {
  	}
  
  	/**
  	 * 
  	 */
  	public void setFocus() {
  		if (treeTable != null)
  			treeTable.setFocus();
  	}
  }
  
  
  1.1      date: 2006/11/10 00:30:23;  author: rawb;  state: Exp;jbosside/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/ServerTableViewer.java
  
  Index: ServerTableViewer.java
  ===================================================================
  package org.jboss.ide.eclipse.as.ui.views.server;
  
  /*******************************************************************************
   * Copyright (c) 2003, 2005 IBM Corporation and others.
   * All rights reserved. This program and the accompanying materials
   * are made available under the terms of the Eclipse Public License v1.0
   * which accompanies this distribution, and is available at
   * http://www.eclipse.org/legal/epl-v10.html
   * 
   * Contributors:
   *     IBM Corporation - Initial API and implementation
   *******************************************************************************/
  
  import java.util.ArrayList;
  import java.util.List;
  
  import org.eclipse.core.runtime.IStatus;
  import org.eclipse.jface.action.IMenuManager;
  import org.eclipse.jface.action.Separator;
  import org.eclipse.jface.viewers.ILabelProviderListener;
  import org.eclipse.jface.viewers.ISelection;
  import org.eclipse.jface.viewers.IStructuredContentProvider;
  import org.eclipse.jface.viewers.IStructuredSelection;
  import org.eclipse.jface.viewers.ITreeContentProvider;
  import org.eclipse.jface.viewers.LabelProviderChangedEvent;
  import org.eclipse.jface.viewers.TreeViewer;
  import org.eclipse.jface.viewers.Viewer;
  import org.eclipse.jface.viewers.ViewerSorter;
  import org.eclipse.swt.events.DisposeEvent;
  import org.eclipse.swt.graphics.Image;
  import org.eclipse.swt.widgets.Display;
  import org.eclipse.swt.widgets.Shell;
  import org.eclipse.swt.widgets.Tree;
  import org.eclipse.ui.IActionBars;
  import org.eclipse.ui.actions.ActionFactory;
  import org.eclipse.wst.server.core.IPublishListener;
  import org.eclipse.wst.server.core.IServer;
  import org.eclipse.wst.server.core.IServerLifecycleListener;
  import org.eclipse.wst.server.core.IServerListener;
  import org.eclipse.wst.server.core.IServerType;
  import org.eclipse.wst.server.core.ServerCore;
  import org.eclipse.wst.server.core.ServerEvent;
  import org.eclipse.wst.server.core.internal.Server;
  import org.eclipse.wst.server.core.util.PublishAdapter;
  import org.eclipse.wst.server.ui.internal.Trace;
  import org.eclipse.wst.server.ui.internal.provisional.UIDecoratorManager;
  import org.eclipse.wst.server.ui.internal.view.servers.ServerAction;
  import org.eclipse.wst.server.ui.internal.view.servers.ServerActionHelper;
  import org.eclipse.wst.server.ui.internal.view.servers.ServerTableLabelProvider;
  import org.jboss.ide.eclipse.as.core.server.JBossServer;
  /**
   * Tree view showing servers and their associations.
   * This is for the TOP window
   */
  public class ServerTableViewer extends TreeViewer {
  	protected static final String ROOT = "root";
  
  	protected IServerLifecycleListener serverResourceListener;
  	protected IPublishListener publishListener;
  	protected IServerListener serverListener;
  
  	protected static Object deletedElement = null;
  
  	// servers that are currently publishing and starting
  	protected static List publishing = new ArrayList();
  	protected static List starting = new ArrayList();
  	
  	protected ServerTableLabelProvider2 labelProvider;
  	//protected ISelectionListener dsListener;
  
  	protected StrippedServerView view;
  	
  	protected class ServerTableLabelProvider2 extends ServerTableLabelProvider {
  		private int myCount = 0;
  		protected Image getStateImage(IServerType serverType, int state, String mode) {
  			return UIDecoratorManager.getUIDecorator(serverType).getStateImage(state, mode, myCount);
  		}
  		protected String getStateLabel(IServerType serverType, int state, String mode) {
  			return UIDecoratorManager.getUIDecorator(serverType).getStateLabel(state, mode, myCount);
  		}
  		protected void animate() {
  			myCount ++;
  			if (myCount > 2)
  				myCount = 0;
  		}
  
  	}
  	
  	public class TrimmedServerContentProvider implements IStructuredContentProvider, ITreeContentProvider {
  		public Object[] getElements(Object element) {
  			//return JBossServerCore.getIServerJBossServers();
  			return ServerCore.getServers();
  		}
  
  		public void inputChanged(Viewer theViewer, Object oldInput, Object newInput) {
  			// do nothing
  		}
  		
  		public void dispose() {
  			// do nothing
  		}
  
  		public Object[] getChildren(Object element) {
  			return new Object[0];
  		}
  
  		public Object getParent(Object element) {
  			return null;
  		}
  
  		public boolean hasChildren(Object element) {
  				return false;
  		}
  	}
  
  	protected Thread thread = null;
  	protected boolean stopThread = false;
  	
  	protected void startThread() {
  		stopThread = false;
  		if (thread != null)
  			return;
  		
  		thread = new Thread("Servers View Animator") {
  			public void run() {
  				while (!stopThread) {
  					try {
  						labelProvider.animate();
  						final Object[] rootElements = ((ITreeContentProvider)getContentProvider()).getElements(null); 
  						Display.getDefault().asyncExec(new Runnable() {
  							public void run() {
  								if (getTree() != null && !getTree().isDisposed())
  									update(rootElements, null);
  							}
  						});
  						Thread.sleep(250);
  					} catch (Exception e) {
  						Trace.trace(Trace.FINEST, "Error in animated server view", e);
  					}
  					thread = null;
  				}
  			}
  		};
  		thread.setDaemon(true);
  		thread.start();
  	}
  
  	protected void stopThread() {
  		stopThread = true;
  	}
  
  	/**
  	 * ServerTableViewer constructor comment.
  	 * 
  	 * @param view the view 
  	 * @param tree the tree
  	 */
  	public ServerTableViewer(final StrippedServerView view, final Tree tree) {
  		super(tree);
  		this.view = view;
  		
  		setContentProvider(new TrimmedServerContentProvider());
  		labelProvider = new ServerTableLabelProvider2();
  		labelProvider.addListener(new ILabelProviderListener() {
  			public void labelProviderChanged(LabelProviderChangedEvent event) {
  				Object[] obj = event.getElements();
  				if (obj == null)
  					refresh(true);
  				else {
  					int size = obj.length;
  					for (int i = 0; i < size; i++)
  						refresh(obj[i], true);
  				}
  			}
  		});
  		setLabelProvider(labelProvider);
  		setSorter(new ViewerSorter() {
  			// empty
  		});
  		
  		setInput(ROOT);
  		
  		addListeners();
  		
  		IActionBars actionBars = view.getViewSite().getActionBars();
  		actionBars.setGlobalActionHandler(ActionFactory.DELETE.getId(), new ServerAction(getControl().getShell(), this, "Delete it!", ServerActionHelper.ACTION_DELETE));
  	}
  
  	protected void addListeners() {
  		serverResourceListener = new IServerLifecycleListener() {
  			public void serverAdded(IServer server) {
  				addServer(server);
  				server.addServerListener(serverListener);
  				((Server) server).addPublishListener(publishListener);
  			}
  			public void serverChanged(IServer server) {
  				refreshServer(server);
  			}
  			public void serverRemoved(IServer server) {
  				removeServer(server);
  				server.removeServerListener(serverListener);
  				((Server) server).removePublishListener(publishListener);
  			}
  		};
  		ServerCore.addServerLifecycleListener(serverResourceListener);
  		
  		publishListener = new PublishAdapter() {
  			public void publishStarted(IServer server) {
  				handlePublishChange(server, true);
  			}
  			
  			public void publishFinished(IServer server, IStatus status) {
  				handlePublishChange(server, false);
  			}
  		};
  		
  		serverListener = new IServerListener() {
  			public void serverChanged(ServerEvent event) {
  				if (event == null) {
  					return;
  				}
  				int eventKind = event.getKind();
  				IServer server = event.getServer();
  				if ((eventKind & ServerEvent.SERVER_CHANGE) != 0) {
  					// server change event
  					if ((eventKind & ServerEvent.STATE_CHANGE) != 0) {
  						refreshServer(server);
  						int state = event.getState();
  						String id = server.getId();
  						if (state == IServer.STATE_STARTING || state == IServer.STATE_STOPPING) {
  							if (!starting.contains(id)) {
  								if (starting.isEmpty())
  									startThread();
  								starting.add(id);
  							}
  						} else {
  							if (starting.contains(id)) {
  								starting.remove(id);
  								if (starting.isEmpty())
  									stopThread();
  							}
  						}
  					} else
  						refreshServer(server);
  				} else if ((eventKind & ServerEvent.MODULE_CHANGE) != 0) {
  					// module change event
  					if ((eventKind & ServerEvent.STATE_CHANGE) != 0 || (eventKind & ServerEvent.PUBLISH_STATE_CHANGE) != 0) {
  						refreshServer(server);
  					}
  				}
  			}
  		};
  		
  		// add listeners to servers
  		IServer[] servers = ServerCore.getServers();
  		if (servers != null) {
  			int size = servers.length;
  			for (int i = 0; i < size; i++) {
  				servers[i].addServerListener(serverListener);
  				((Server) servers[i]).addPublishListener(publishListener);
  			}
  		}
  	}
  	
  	protected void refreshServer(final IServer server) {
  		Display.getDefault().asyncExec(new Runnable() {
  			public void run() {
  				try {
  					refresh(server);
  					ISelection sel = ServerTableViewer.this.getSelection();
  					ServerTableViewer.this.setSelection(sel);
  				} catch (Exception e) {
  					// ignore
  				}
  			}
  		});
  	}
  
  	protected void handleDispose(DisposeEvent event) {
  		stopThread();
  		//if (dsListener != null)
  		//	view.getViewSite().getPage().removeSelectionListener(dsListener);
  		
  		ServerCore.removeServerLifecycleListener(serverResourceListener);
  		
  		// remove listeners from server
  		IServer[] servers = ServerCore.getServers();
  		if (servers != null) {
  			int size = servers.length;
  			for (int i = 0; i < size; i++) {
  				servers[i].removeServerListener(serverListener);
  				((Server) servers[i]).removePublishListener(publishListener);
  			}
  		}
  	
  		super.handleDispose(event);
  	}
  
  	/**
  	 * Called when the publish state changes.
  	 * @param server org.eclipse.wst.server.core.IServer
  	 */
  	protected void handlePublishChange(IServer server, boolean isPublishing) {
  		String serverId = server.getId();
  		if (isPublishing)
  			publishing.add(serverId);
  		else
  			publishing.remove(serverId);
  	
  		refreshServer(server);
  	}
  	
  	/**
  	 * 
  	 */
  	protected void handleServerModulesChanged(IServer server2) {
  		if (server2 == null)
  			return;
  
  		IServer[] servers = ServerCore.getServers();
  		if (servers != null) {
  			int size = servers.length;
  			for (int i = 0; i < size; i++) {
  				if (server2.equals(servers[i]))
  					refresh(servers[i]);
  			}
  		}
  	}
  	
  	/**
  	 * Called when an element is added.
  	 * @param server org.eclipse.wst.server.core.IServer
  	 */
  	protected void handleServerResourceAdded(IServer server) {
  		add(null, server);
  	}
  	
  	/**
  	 * Called when an element is changed.
  	 * @param server org.eclipse.wst.server.core.IServer
  	 */
  	protected void handleServerResourceChanged(IServer server) {
  		refresh(server);
  	}
  		
  	/**
  	 * Called when an element is removed.
  	 * @param server org.eclipse.wst.server.core.IServer
  	 */
  	protected void handleServerResourceRemoved(IServer server) {
  		remove(server);
  
  		String serverId = server.getId();
  		publishing.remove(serverId);
  
  		view.getViewSite().getActionBars().getStatusLineManager().setMessage(null, null);
  	}
  	
  	protected void addServer(final IServer server) {
  		Display.getDefault().asyncExec(new Runnable() {
  			public void run() {
  				add(ROOT, server);
  			}
  		});
  	}
  	
  	protected void removeServer(final IServer server) {
  		Display.getDefault().asyncExec(new Runnable() {
  			public void run() {
  				remove(server);
  			}
  		});
  	}	
  }
  
  
  1.1      date: 2006/11/10 00:30:23;  author: rawb;  state: Exp;jbosside/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/JBossServerTableViewer.java
  
  Index: JBossServerTableViewer.java
  ===================================================================
  package org.jboss.ide.eclipse.as.ui.views.server;
  
  import java.util.ArrayList;
  import java.util.Properties;
  
  import org.eclipse.core.runtime.CoreException;
  import org.eclipse.debug.core.ILaunchConfiguration;
  import org.eclipse.debug.ui.DebugUITools;
  import org.eclipse.jface.action.Action;
  import org.eclipse.jface.action.IMenuManager;
  import org.eclipse.jface.action.Separator;
  import org.eclipse.jface.viewers.ISelection;
  import org.eclipse.jface.viewers.IStructuredSelection;
  import org.eclipse.jface.viewers.ITreeContentProvider;
  import org.eclipse.jface.viewers.LabelProvider;
  import org.eclipse.jface.viewers.TreeViewer;
  import org.eclipse.jface.viewers.Viewer;
  import org.eclipse.swt.SWT;
  import org.eclipse.swt.graphics.Image;
  import org.eclipse.swt.widgets.Composite;
  import org.eclipse.swt.widgets.Control;
  import org.eclipse.swt.widgets.Display;
  import org.eclipse.swt.widgets.Shell;
  import org.eclipse.swt.widgets.Tree;
  import org.eclipse.ui.IActionBars;
  import org.eclipse.ui.IWorkbenchPart;
  import org.eclipse.ui.part.PageBook;
  import org.eclipse.ui.views.properties.IPropertySheetPage;
  import org.eclipse.wst.server.core.IServer;
  import org.eclipse.wst.server.core.IServerLifecycleListener;
  import org.eclipse.wst.server.core.ServerCore;
  import org.eclipse.wst.server.core.internal.Server;
  import org.eclipse.wst.server.core.internal.Trace;
  import org.eclipse.wst.server.ui.ServerUICore;
  import org.jboss.ide.eclipse.as.core.JBossServerCore;
  import org.jboss.ide.eclipse.as.core.server.JBossServer;
  import org.jboss.ide.eclipse.as.ui.JBossServerUIPlugin;
  import org.jboss.ide.eclipse.as.ui.JBossServerUISharedImages;
  import org.jboss.ide.eclipse.as.ui.Messages;
  import org.jboss.ide.eclipse.as.ui.views.server.extensions.PropertySheetFactory;
  import org.jboss.ide.eclipse.as.ui.views.server.extensions.ServerViewProvider;
  import org.jboss.ide.eclipse.as.ui.views.server.extensions.PropertySheetFactory.ISimplePropertiesHolder;
  import org.jboss.ide.eclipse.as.ui.views.server.extensions.PropertySheetFactory.SimplePropertiesPropertySheetPage;
  
  public class JBossServerTableViewer extends TreeViewer {
  
  	protected TableViewerPropertySheet propertySheet;
  	
  	protected Action disableCategoryAction;
  	public JBossServerTableViewer(Tree tree) {
  		super(tree);
  		setContentProvider(new ContentProviderDelegator());
  		setLabelProvider(new LabelProviderDelegator());
  		propertySheet = new TableViewerPropertySheet();
  		createActions();
  		ServerCore.addServerLifecycleListener(new IServerLifecycleListener() {
  
  			public void serverAdded(IServer server) {
  			}
  
  			public void serverChanged(IServer server) {
  			}
  
  			public void serverRemoved(IServer server) {
  				final IServer server2 = server;
  				Display.getDefault().asyncExec(new Runnable() {
  					public void run() {
  						Object o = getInput();
  						if( server2.equals(o)) {
  							setInput(null);
  						}
  					}
  				});
  			} 
  		});
  	}
  
  	protected void createActions() {
  		disableCategoryAction = new Action() {
  			public void run() {
  				Display.getDefault().asyncExec(new Runnable() {
  					public void run() {
  						Object selected = getSelectedElement();
  						if( selected instanceof ServerViewProvider) {
  							((ServerViewProvider)selected).setEnabled(false);
  							refresh();
  						}
  					} 
  				} );
  			}
  		};
  		disableCategoryAction.setText(Messages.DisableCategoryAction);
  	}
  	
  	public static class ContentWrapper {
  		private Object o;
  		private ServerViewProvider provider;
  		
  		public ContentWrapper(Object o, ServerViewProvider provider) {
  			this.o = o;
  			this.provider = provider;
  		}
  
  		public Object getElement() {
  			return o;
  		}
  
  		public ServerViewProvider getProvider() {
  			return provider;
  		}
  		
  		public boolean equals(Object other) {
  			if( other == null ) return false;
  			if( other instanceof ContentWrapper ) {
  				return ((ContentWrapper)other).getElement().equals(o); 
  			}
  			return false;
  		}
  		
  		public int hashCode() {
  			return o.hashCode();
  		}
  	}
  	
  	protected class LabelProviderDelegator extends LabelProvider {
  		public String getText(Object obj) {
  			if( obj instanceof JBossServer) {
  				JBossServer server = (JBossServer)obj;
  				String ret = server.getServer().getName(); 
  				return ret;
  			}
  			if( obj instanceof ServerViewProvider) {
  				return ((ServerViewProvider)obj).getName();
  			}
  			
  			if( obj instanceof ContentWrapper ) {
  				ContentWrapper wrapper = (ContentWrapper)obj;
  				return wrapper.getProvider().getDelegate().getLabelProvider().getText(wrapper.getElement());
  			}
  			return obj.toString();
  		}
  		public Image getImage(Object obj) {
  			if( obj instanceof JBossServer ) {
  				return ServerUICore.getLabelProvider().getImage(((JBossServer)obj).getServer());				
  			}
  			if( obj instanceof ServerViewProvider ) {
  				return ((ServerViewProvider)obj).getImage();
  			}
  			
  			if( obj instanceof ContentWrapper ) {
  				Object object2 = ((ContentWrapper)obj).getElement();
  				return ((ContentWrapper)obj).getProvider().getDelegate().getLabelProvider().getImage(object2);
  			}
  			
  			return null;
  		}
  	}
  	protected class ContentProviderDelegator implements ITreeContentProvider {
  		
  		public ContentProviderDelegator() {
  		}
  
  		public ContentWrapper[] wrap( Object[] elements, ServerViewProvider provider ) {
  			ContentWrapper[] wrappers = new ContentWrapper[elements.length];
  			for( int i = 0; i < wrappers.length; i++ ) {
  				wrappers[i] = new ContentWrapper(elements[i], provider);
  			}
  			return wrappers;
  		}
  		
  		public Object[] getElements(Object inputElement) {
  			if( inputElement == null ) return new Object[0];
  			return JBossServerUIPlugin.getDefault().getEnabledViewProviders();
  		}
  
  		public Object[] getChildren(Object parentElement) {
  			try {
  				if( parentElement == null ) return new Object[0];
  
  				if( parentElement instanceof ServerViewProvider) {
  					Object[] ret = ((ServerViewProvider)parentElement).getDelegate().getContentProvider().getChildren(parentElement);
  					return wrap(ret, ((ServerViewProvider)parentElement));
  				}
  				
  				if( parentElement instanceof ContentWrapper ) {
  					ContentWrapper parentWrapper = (ContentWrapper)parentElement;
  					Object[] o = null;
  					try {
  						o = parentWrapper.getProvider().getDelegate().getContentProvider().getChildren(parentWrapper.getElement());
  					} catch( Exception e) {
  					}
  					if( o == null ) 
  						return new Object[0];
  					return wrap(o, parentWrapper.getProvider());
  				}
  			} catch( Exception e ) { e.printStackTrace(); }
  			return new Object[0];
  		}
  
  		public Object getParent(Object element) {
  			return null;
  		}
  
  		public boolean hasChildren(Object element) {
  			return getChildren(element).length > 0 ? true : false;
  		}
  
  		public void dispose() {
  		}
  
  		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
  			ServerViewProvider[] providers = JBossServerUIPlugin.getDefault().getEnabledViewProviders();
  			for( int i = 0; i < providers.length; i++ ) {
  				try {
  					providers[i].getDelegate().getContentProvider().inputChanged(viewer, oldInput, newInput);
  				} catch( Exception e) {
  					e.printStackTrace();
  				}
  			}
  		}
  		
  	}
  
  	public Object getRawElement(Object o) {
  		if( o instanceof ContentWrapper )
  			return ((ContentWrapper)o).getElement();
  		return o;
  	}
  	
  	public ServerViewProvider getParentViewProvider(Object o) {
  		if( o instanceof ContentWrapper ) 
  			return ((ContentWrapper)o).getProvider();
  		return null;
  	}
  	
  	public Object getSelectedElement() {
  		ISelection sel = getSelection();
  		if( sel instanceof IStructuredSelection ) {
  			Object o = ((IStructuredSelection)sel).getFirstElement(); 
  			if( o != null && o instanceof ContentWrapper ) {
  				o = ((ContentWrapper)o).getElement();
  			}
  			return o;
  		}
  		return null;
  	}
  
  	protected void fillSelectedContextMenu(Shell shell, IMenuManager mgr) {
  		ISelection sel = getSelection();
  		if( sel instanceof IStructuredSelection ) {
  			Object selected = ((IStructuredSelection)sel).getFirstElement();
  			if( selected != null ) {
  				ServerViewProvider provider;
  				if( selected instanceof ServerViewProvider ) {
  					provider = (ServerViewProvider)selected;
  				} else {
  					provider = getParentViewProvider(selected);
  				}
  				if( provider != null ) 
  					provider.getDelegate().fillContextMenu(shell, mgr, getRawElement(selected));
  			}
  		}
  
  	}
  
  	
  	protected void fillJBContextMenu(Shell shell, IMenuManager menu) {
  		
  		Object selected = getSelectedElement();
  		
  		if( selected instanceof ServerViewProvider ) {
  			menu.add(disableCategoryAction);
  			menu.add(new Separator());
  		}
  	}
  
  	
  
  	public IPropertySheetPage getPropertySheet() {
  			return propertySheet;
  	}
  	
  	public class TableViewerPropertySheet implements IPropertySheetPage {
  
  		private PageBook book;
  		private ArrayList addedControls = new ArrayList();
  		private SimplePropertiesPropertySheetPage topLevelPropertiesPage;
  		
  		public void createControl(Composite parent) {
  			topLevelPropertiesPage = PropertySheetFactory.createSimplePropertiesSheet(new TopLevelProperties());
  			book = new PageBook(parent, SWT.NONE);
  			addedControls.clear();
  			topLevelPropertiesPage.createControl(book);
  			book.showPage(topLevelPropertiesPage.getControl());
  		}
  
  		public void dispose() {
  		}
  
  		public Control getControl() {
  			return book;
  		}
  		
  		public void setActionBars(IActionBars actionBars) {
  		}
  
  		public void setFocus() {
  		}
  
  		public void selectionChanged(IWorkbenchPart part, ISelection sel) {
  			Object selected = getSelectedObject(sel);
  			if( selected != null ) {
  				
  				IPropertySheetPage page = null;
  				if( selected instanceof ContentWrapper ) {
  					page = getDelegatePage((ContentWrapper)selected);
  				}
  				
  				if( page == null ) {
  					page = topLevelPropertiesPage;
  				}
  				page.selectionChanged(part, sel);
  				book.showPage(page.getControl());
  			}
  		}
  		private IPropertySheetPage getDelegatePage(ContentWrapper wrapper) {
  			ServerViewProvider provider = wrapper.getProvider();
  			IPropertySheetPage returnSheet = null;
  			returnSheet = provider.getDelegate().getPropertySheetPage();
  			if( !addedControls.contains(provider) && returnSheet != null) {
  				returnSheet.createControl(book);
  				addedControls.add(provider);
  			}
  			return returnSheet;
  		}
  		
  		public Object getSelectedObject(ISelection sel) {
  			if( sel instanceof IStructuredSelection ) {
  				IStructuredSelection selection = (IStructuredSelection)sel;
  				Object selected = selection.getFirstElement();
  				return selected;
  			}
  			return null;
  		}
  		
  	}
  	/**
  	 * Properties for the top level elements 
  	 *    (a server or a category / extension point 
  	 * @author rstryker
  	 *
  	 */
  	class TopLevelProperties implements ISimplePropertiesHolder {
  		public Properties getProperties(Object selected) {
  			Properties ret = new Properties();
  			if( selected instanceof ServerViewProvider ) {
  				ServerViewProvider provider = (ServerViewProvider)selected;
  				ret.setProperty(Messages.ExtensionID, provider.getId());
  				ret.setProperty(Messages.ExtensionName, provider.getName());
  				ret.setProperty(Messages.ExtensionDescription, provider.getDescription());
  				ret.setProperty(Messages.ExtensionProviderClass, provider.getDelegateName());
  			}
  			return ret;
  		}
  
  
  		public String[] getPropertyKeys(Object selected) {
  			if( selected instanceof ServerViewProvider) {
  				return new String[] { 
  						Messages.ExtensionName, Messages.ExtensionDescription, 
  						Messages.ExtensionID, Messages.ExtensionProviderClass
  				};
  				
  			}
  			if( selected instanceof JBossServer ) {
  				return new String[] {
  						Messages.ServerRuntimeVersion, Messages.ServerHome, 
  						Messages.ServerConfigurationName, Messages.ServerDeployDir,
  				};
  			}
  			return new String[] {};
  		}
  	}
  
  	public void dispose() {
  		// The Loner
  		propertySheet.dispose();
  		
  		ServerViewProvider[] providers = JBossServerUIPlugin.getDefault().getAllServerViewProviders();
  		for( int i = 0; i < providers.length; i++ ) {
  			providers[i].dispose();
  		}
  	}
  	
  }
  
  
  



More information about the jboss-cvs-commits mailing list