[jboss-cvs] jbosside/core/plugins/org.jboss.ide.eclipse.packages.ui/src/main/org/jboss/ide/eclipse/archives/ui/views ...

Robert Stryker rob.stryker at jboss.com
Wed Apr 18 12:52:16 EDT 2007


  User: rawb    
  Date: 07/04/18 12:52:16

  Added:       core/plugins/org.jboss.ide.eclipse.packages.ui/src/main/org/jboss/ide/eclipse/archives/ui/views  
                        PackagesMenuHandler.java ProjectArchivesView.java
  Log:
  refactored to archive rather than package, a la max
  
  Revision  Changes    Path
  1.1      date: 2007/04/18 16:52:16;  author: rawb;  state: Exp;jbosside/core/plugins/org.jboss.ide.eclipse.packages.ui/src/main/org/jboss/ide/eclipse/archives/ui/views/PackagesMenuHandler.java
  
  Index: PackagesMenuHandler.java
  ===================================================================
  package org.jboss.ide.eclipse.archives.ui.views;
  
  import java.util.Arrays;
  
  import org.eclipse.core.runtime.NullProgressMonitor;
  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.dialogs.Dialog;
  import org.eclipse.jface.dialogs.IInputValidator;
  import org.eclipse.jface.dialogs.InputDialog;
  import org.eclipse.jface.resource.ImageDescriptor;
  import org.eclipse.jface.viewers.IStructuredSelection;
  import org.eclipse.jface.viewers.TreeViewer;
  import org.eclipse.jface.wizard.WizardDialog;
  import org.eclipse.swt.widgets.Menu;
  import org.eclipse.ui.ISharedImages;
  import org.eclipse.ui.IWorkbenchPartSite;
  import org.eclipse.ui.PlatformUI;
  import org.jboss.ide.eclipse.archives.core.model.IArchive;
  import org.jboss.ide.eclipse.archives.core.model.IArchiveFileSet;
  import org.jboss.ide.eclipse.archives.core.model.IArchiveFolder;
  import org.jboss.ide.eclipse.archives.core.model.IArchiveNode;
  import org.jboss.ide.eclipse.archives.core.model.internal.ArchivesModel;
  import org.jboss.ide.eclipse.archives.ui.ExtensionManager;
  import org.jboss.ide.eclipse.archives.ui.NodeContribution;
  import org.jboss.ide.eclipse.archives.ui.PackageNodeFactory;
  import org.jboss.ide.eclipse.archives.ui.PackagesSharedImages;
  import org.jboss.ide.eclipse.archives.ui.PackagesUIMessages;
  import org.jboss.ide.eclipse.archives.ui.actions.NewJARAction;
  import org.jboss.ide.eclipse.archives.ui.actions.NewPackageAction;
  import org.jboss.ide.eclipse.archives.ui.providers.PackagesContentProvider.WrappedProject;
  import org.jboss.ide.eclipse.archives.ui.wizards.FilesetWizard;
  import org.jboss.ide.eclipse.archives.ui.wizards.NewJARWizard;
  
  /**
   * Manages the actions associated with the view
   * @author rstryker
   *
   */
  public class PackagesMenuHandler {
  	public static final String NEW_PACKAGE_MENU_ID = "org.jboss.ide.eclipse.archives.ui.newPackageMenu";
  	public static final String NODE_CONTEXT_MENU_ID = "org.jboss.ide.eclipse.archives.ui.nodeContextMenu";
  	public static final String NEW_PACKAGE_ADDITIONS = "newPackageAdditions";
  
  	private MenuManager newPackageManager, contextMenuManager;
  	private NodeContribution[]  nodePopupMenuContributions;
  	private NewPackageAction[] newPackageActions;
  	private Menu treeContextMenu;
  	private TreeViewer packageTree;
  	
  	private Action editAction, deleteAction, newFolderAction, newFilesetAction;
  	private NewJARAction newJARAction;
  //	private BuildPackagesAction buildAllAction, buildPackageAction;
  
  	public PackagesMenuHandler(TreeViewer viewer) {
  		this.packageTree = viewer;
  
  		// load from extensions 
  		newPackageActions = ExtensionManager.findNewArchiveActions();
  		nodePopupMenuContributions = ExtensionManager.findNodePopupMenuContributions();
  		Arrays.sort(nodePopupMenuContributions);
  
  		
  		createActions();
  		createMenu();
  		createContextMenu();
  	}
  
  	/**
  	 * Creates the primary menu as well as adds the package actions to it
  	 *
  	 */
  	private void createMenu () {
  		newPackageManager = new MenuManager(PackagesUIMessages.ProjectPackagesView_newPackageMenu_label, NEW_PACKAGE_MENU_ID);
  		addNewPackageActions(newPackageManager);
  	}
  
  	private void createContextMenu () {
  		contextMenuManager = new MenuManager(NODE_CONTEXT_MENU_ID); //$NON-NLS-1$
  		contextMenuManager.setRemoveAllWhenShown(true);
  		contextMenuManager.addMenuListener(new IMenuListener () {
  			public void menuAboutToShow(IMenuManager manager) {
  				IStructuredSelection selection = (IStructuredSelection) packageTree.getSelection();
  				if (selection != null && !selection.isEmpty()) {
  					Object element = selection.getFirstElement();
  					
  					if (element instanceof WrappedProject) {
  						newJARAction.setEnabled(true);
  						manager.add(newPackageManager);
  					} else if( element instanceof IArchiveNode ){
  						IArchiveNode node = (IArchiveNode)element;
  						
  						if (node.getNodeType() == IArchiveNode.TYPE_ARCHIVE
  								|| node.getNodeType() == IArchiveNode.TYPE_ARCHIVE_FOLDER)
  						{	
  							newJARAction.setEnabled(true);
  							manager.add(newPackageManager);
  							
  							manager.add(newFolderAction);
  							manager.add(newFilesetAction);
  							manager.add(new Separator());
  						}
  						
  						if (node.getNodeType() == IArchiveNode.TYPE_ARCHIVE) {
  							editAction.setText(PackagesUIMessages.ProjectPackagesView_editPackageAction_label); //$NON-NLS-1$
  							deleteAction.setText(PackagesUIMessages.ProjectPackagesView_deletePackageAction_label); //$NON-NLS-1$
  							editAction.setImageDescriptor(PackagesSharedImages.getImageDescriptor(PackagesSharedImages.IMG_PACKAGE_EDIT));
  //							manager.add(buildPackageAction);
  						} else if (node.getNodeType() == IArchiveNode.TYPE_ARCHIVE_FOLDER) {
  							editAction.setText(PackagesUIMessages.ProjectPackagesView_editFolderAction_label); //$NON-NLS-1$
  							deleteAction.setText(PackagesUIMessages.ProjectPackagesView_deleteFolderAction_label); //$NON-NLS-1$
  							editAction.setImageDescriptor(platformDescriptor(ISharedImages.IMG_OBJ_FOLDER));
  						} else if (node.getNodeType() == IArchiveNode.TYPE_ARCHIVE_FILESET) {
  							editAction.setText(PackagesUIMessages.ProjectPackagesView_editFilesetAction_label); //$NON-NLS-1$
  							deleteAction.setText(PackagesUIMessages.ProjectPackagesView_deleteFilesetAction_label); //$NON-NLS-1$
  							editAction.setImageDescriptor(PackagesSharedImages.getImageDescriptor(PackagesSharedImages.IMG_MULTIPLE_FILES));
  						}
  						manager.add(editAction);
  						manager.add(deleteAction);
  						addContextMenuContributions(node);
  					}
  				} else {
  					manager.add(newPackageManager);
  				}
  			}
  		});
  		
  		treeContextMenu = contextMenuManager.createContextMenu(packageTree.getTree());
  		packageTree.getTree().setMenu(treeContextMenu);
  		
  		getSite().registerContextMenu(NEW_PACKAGE_MENU_ID, newPackageManager, packageTree);
  	}
  
  	protected void createActions() {
  		newJARAction = new NewJARAction();
  		newJARAction.setEnabled(false);
  		
  		newFolderAction = new Action(PackagesUIMessages.ProjectPackagesView_newFolderAction_label, platformDescriptor(ISharedImages.IMG_OBJ_FOLDER)) { //$NON-NLS-1$
  			public void run () {
  				createFolder();
  			}
  		};
  		
  		newFilesetAction = new Action(PackagesUIMessages.ProjectPackagesView_newFilesetAction_label, PackagesSharedImages.getImageDescriptor(PackagesSharedImages.IMG_MULTIPLE_FILES)) { //$NON-NLS-1$
  			public void run () {
  				createFileset();
  			}
  		};
  		
  		deleteAction = new Action (PackagesUIMessages.ProjectPackagesView_deletePackageAction_label, platformDescriptor(ISharedImages.IMG_TOOL_DELETE)) { //$NON-NLS-1$
  			public void run () {
  				deleteSelectedNode();
  			}	
  		};
  		
  		editAction = new Action (PackagesUIMessages.ProjectPackagesView_editPackageAction_label, PackagesSharedImages.getImageDescriptor(PackagesSharedImages.IMG_PACKAGE_EDIT)) { //$NON-NLS-1$
  			public void run () {
  				editSelectedNode();
  			}
  		};
  
  //		buildAllAction = new BuildPackagesAction();
  //		buildAllAction.init(getViewSite().getWorkbenchWindow());
  //		
  //		buildPackageAction = new BuildPackagesAction();
  //		buildPackageAction.init(getViewSite().getWorkbenchWindow());
  	}
  
  	private void addContextMenuContributions (final IArchiveNode context) {
  
  		for( int i = 0; i < nodePopupMenuContributions.length; i++ ) {
  			try {
  
  				final NodeContribution contribution = nodePopupMenuContributions[i];
  				if ( contribution.getActionDelegate().isEnabledFor(context)) {
  					Action action = new Action () {
  						public String getId() {
  							return contribution.getId();
  						}
  			
  						public ImageDescriptor getImageDescriptor() {
  							return contribution.getIcon();
  						}
  			
  						public String getText() {
  							return contribution.getLabel();
  						}
  			
  						public void run() {
  							contribution.getActionDelegate().run(context);
  						}
  					};
  					contextMenuManager.add(action);
  				}
  			} catch( Exception e) { e.getMessage(); }
  		}
  
  	}
  	
  	
  	/**
  	 * Adds the new package type actions (which come from an extension point)
  	 * to the menu.
  	 * @param manager
  	 */
  	private void addNewPackageActions (IMenuManager manager) {
  		for( int i = 0; i < newPackageActions.length; i++ ) {
  			final NewPackageAction action = newPackageActions[i];
  			
  			Action actionWrapper = new Action () {
  				public String getId() {
  					return action.getId();
  				}
  				
  				public ImageDescriptor getImageDescriptor() {
  					return action.getIconDescriptor();
  				}
  				
  				public String getText() {
  					return action.getLabel();
  				}
  				
  				public void run() {
  					action.getAction().run(this);
  				}
  			};
  			
  			manager.add(actionWrapper);
  		}
  	}
  
  
  	
  	
  	/*
  	 * Methods below are called from the standard actions, 
  	 * the implementations of the action, where the action does its work etc
  	 */
  	
  	private void createFolder ()
  	{
  		IInputValidator validator = new IInputValidator () {
  			public String isValid(String newText) {
  				IArchiveNode selected = getSelectedNode();
  				
  				boolean folderExists = false;
  				IArchiveNode[] folders = selected.getChildren(IArchiveNode.TYPE_ARCHIVE_FOLDER);
  				for (int i = 0; i < folders.length; i++) {
  					IArchiveFolder folder = (IArchiveFolder) folders[i];
  					if (folder.getName().equals(newText)) {
  						folderExists = true; break;
  					}
  				}
  				
  				if (folderExists) {
  					return PackagesUIMessages.bind(
  						PackagesUIMessages.ProjectPackagesView_createFolderDialog_warnFolderExists, newText);
  					
  				}
  				return null;
  			}
  		};
  		
  		InputDialog dialog = new InputDialog(getSite().getShell(),
  			PackagesUIMessages.ProjectPackagesView_createFolderDialog_title,
  			PackagesUIMessages.ProjectPackagesView_createFolderDialog_message, "", validator);
  		
  		int response = dialog.open();
  		if (response == Dialog.OK) {
  			String folderName = dialog.getValue();
  			IArchiveNode selected = getSelectedNode();
  
  			IArchiveFolder folder = PackageNodeFactory.createFolder();
  			folder.setName(folderName);
  			ArchivesModel.instance().attach(selected, folder, new NullProgressMonitor());
  		}
  	}
  	
  	private void createFileset () {
  		try {
  			IArchiveNode selected = getSelectedNode();
  			WizardDialog dialog = new WizardDialog(getSite().getShell(), new FilesetWizard(null, selected));
  			
  			dialog.open();
  		} catch( Exception e ) {
  			e.printStackTrace();
  		}
  	}
  	
  	private void editSelectedNode () {
  		IArchiveNode node = getSelectedNode();
  		if (node != null) {
  			if (node.getNodeType() == IArchiveNode.TYPE_ARCHIVE_FILESET) {
  				IArchiveFileSet fileset = (IArchiveFileSet) node;
  				WizardDialog dialog = new WizardDialog(getSite().getShell(), new FilesetWizard(fileset, node.getParent()));
  				try {
  					dialog.open();
  				} catch( Exception e ) { e.printStackTrace(); }
  			} else if (node.getNodeType() == IArchiveNode.TYPE_ARCHIVE) {
  				IArchive pkg = (IArchive) node;
  				WizardDialog dialog = new WizardDialog(getSite().getShell(), new NewJARWizard(pkg));
  				dialog.open();
  			} else if (node.getNodeType() == IArchiveNode.TYPE_ARCHIVE_FOLDER) {
  				// folder can do the model save here. 
  				IArchiveFolder folder = (IArchiveFolder) node;
  				InputDialog dialog = new InputDialog(getSite().getShell(),
  					PackagesUIMessages.ProjectPackagesView_createFolderDialog_title,
  					PackagesUIMessages.ProjectPackagesView_createFolderDialog_message, folder.getName(), null);
  				
  				int response = dialog.open();
  				if (response == Dialog.OK) {
  					folder.setName(dialog.getValue());
  					ArchivesModel.instance().saveModel(folder.getProject(), new NullProgressMonitor());
  				}
  			} 
  		}
  	}
  	
  	private void deleteSelectedNode () {
  		IArchiveNode node = getSelectedNode();
  		if (node != null) {
  			IArchiveNode parent = (IArchiveNode) node.getParent();
  			parent.removeChild(node);
  			if( parent.getProject() != null ) {
  				ArchivesModel.instance().saveModel(parent.getProject(), new NullProgressMonitor());
  			}
  		}
  	}
  
  	
  	
  	/*
  	 * Utility methods below
  	 */
  
  	private IWorkbenchPartSite getSite() {
  		return ProjectArchivesView.getInstance().getSite();
  	}
  
  	private IArchiveNode getSelectedNode () {
  		IStructuredSelection selection = (IStructuredSelection) ProjectArchivesView.getInstance().getSelection();
  		if (selection != null && !selection.isEmpty()) {
  			Object selected = selection.getFirstElement();
  			if( selected instanceof IArchiveNode ) return ((IArchiveNode)selected);
  		}
  		return null;
  	}
  	
  	private ImageDescriptor platformDescriptor(String desc) {
  		return PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(desc);
  	}
  
  }
  
  
  
  1.1      date: 2007/04/18 16:52:16;  author: rawb;  state: Exp;jbosside/core/plugins/org.jboss.ide.eclipse.packages.ui/src/main/org/jboss/ide/eclipse/archives/ui/views/ProjectArchivesView.java
  
  Index: ProjectArchivesView.java
  ===================================================================
  package org.jboss.ide.eclipse.archives.ui.views;
  
  import java.util.ArrayList;
  import java.util.Arrays;
  
  import org.eclipse.core.resources.IProject;
  import org.eclipse.core.resources.IResource;
  import org.eclipse.core.runtime.IAdaptable;
  import org.eclipse.core.runtime.IProgressMonitor;
  import org.eclipse.jface.viewers.ISelection;
  import org.eclipse.jface.viewers.IStructuredSelection;
  import org.eclipse.jface.viewers.TreeViewer;
  import org.eclipse.jface.wizard.ProgressMonitorPart;
  import org.eclipse.swt.SWT;
  import org.eclipse.swt.events.SelectionEvent;
  import org.eclipse.swt.events.SelectionListener;
  import org.eclipse.swt.layout.FillLayout;
  import org.eclipse.swt.layout.FormAttachment;
  import org.eclipse.swt.layout.FormData;
  import org.eclipse.swt.layout.FormLayout;
  import org.eclipse.swt.layout.GridData;
  import org.eclipse.swt.layout.GridLayout;
  import org.eclipse.swt.layout.RowLayout;
  import org.eclipse.swt.widgets.Composite;
  import org.eclipse.swt.widgets.Label;
  import org.eclipse.swt.widgets.Link;
  import org.eclipse.ui.ISelectionListener;
  import org.eclipse.ui.IWorkbenchPart;
  import org.eclipse.ui.PlatformUI;
  import org.eclipse.ui.part.PageBook;
  import org.eclipse.ui.part.ViewPart;
  import org.jboss.ide.eclipse.archives.core.model.IArchiveModelListener;
  import org.jboss.ide.eclipse.archives.core.model.IArchiveNode;
  import org.jboss.ide.eclipse.archives.core.model.IArchiveNodeDelta;
  import org.jboss.ide.eclipse.archives.core.model.PackagesCore;
  import org.jboss.ide.eclipse.archives.core.model.internal.ArchivesModel;
  import org.jboss.ide.eclipse.archives.ui.ExtensionManager;
  import org.jboss.ide.eclipse.archives.ui.actions.NewPackageAction;
  import org.jboss.ide.eclipse.archives.ui.providers.PackagesContentProvider;
  import org.jboss.ide.eclipse.archives.ui.providers.PackagesLabelProvider;
  
  public class ProjectArchivesView extends ViewPart implements IArchiveModelListener {
  	
  	protected static ProjectArchivesView instance;
  	public static ProjectArchivesView getInstance() {
  		return instance;
  	}
  	
  	
  	protected ISelectionListener selectionListener;
  	public ProjectArchivesView() {
  		instance = this;
  		selectionListener = createSelectionListener();
  		PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService().addSelectionListener(selectionListener);
  		PackagesCore.getInstance().addModelListener(this);
  	}
  	
  	
  	protected ISelectionListener createSelectionListener() {
  		return new ISelectionListener() {
  			public void selectionChanged(IWorkbenchPart part, ISelection selection) {
  				if (!(selection instanceof IStructuredSelection))
  					return;
  				
  				Object element = ((IStructuredSelection)selection).getFirstElement();
  				IProject project = getProject(element);
  				viewSelectionChanged(project);
  			}
  			
  			public IProject getProject (Object element) {
  				if( element instanceof IStructuredSelection)
  					element = ((IStructuredSelection)element).getFirstElement();
  				
  				if (element instanceof IAdaptable) {
  					IAdaptable adaptable = (IAdaptable)element;
  					IResource resource = (IResource) adaptable.getAdapter(IResource.class);
  					if( resource != null )
  						return resource.getProject();
  				}
  				return null;
  			}
  
  		};
  	}
  	
  	
  	// parts
  	private PageBook book;
  	private IProject project;
  	private PackagesContentProvider contentProvider = new PackagesContentProvider();
  	private PackagesLabelProvider labelProvider = new PackagesLabelProvider();
  	private Composite emptyComposite, viewerComposite, loadingPackagesComposite;
  	private IProgressMonitor loadingProgress;
  	private TreeViewer packageViewer;
  	private PackagesMenuHandler menuHandler;
  	public void createPartControl(Composite parent) {
  		book = new PageBook(parent, SWT.NONE);
  		addEmptyComposite(book);
  		addLoadingComposite(book);
  		addViewerComposite(book);
  		menuHandler = new PackagesMenuHandler(packageViewer);
  	}
  	
  	protected void addEmptyComposite(PageBook book) {
  		emptyComposite = new Composite(book, SWT.NONE);
  		emptyComposite.setLayout(new FormLayout());
  		Label l = new Label(emptyComposite, SWT.NONE);
  		l.setText("Project has no packages. Create an Archive");
  		
  		Composite actionsComposite = new Composite(emptyComposite, SWT.NONE);
  		
  		
  		FormData lData = new FormData();
  		lData.left = new FormAttachment(0,5);
  		lData.top = new FormAttachment(0,5);
  		l.setLayoutData(lData);
  		
  		FormData actionsData = new FormData();
  		actionsData.left     = new FormAttachment(0,5);
  		actionsData.top      = new FormAttachment(l,5);
  		actionsData.bottom   = new FormAttachment(100,-5);
  
  		actionsComposite.setLayoutData(actionsData);
  		
  		actionsComposite.setLayout(new GridLayout(1, false));
  		addNewPackageActions(actionsComposite);
  		
  	}
  		
  	
  	private void addNewPackageActions (Composite composite) {
  		NewPackageAction[] actions = ExtensionManager.findNewArchiveActions();
  		for (int i = 0; i < actions.length; i++) {
  			final NewPackageAction action = actions[i];
  			
  			Composite linkComposite = new Composite(composite, SWT.NONE);
  			linkComposite.setLayout(createGridLayoutWithNoMargins(2));
  			linkComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
  			
  			new Label(linkComposite, SWT.NONE).setImage(action.getIcon());
  			
  			Link actionLink = new Link(linkComposite, SWT.NONE);
  			actionLink.setText("<a href=\"create\">" + action.getLabel() + "</a>");
  			actionLink.addSelectionListener(new SelectionListener () {
  				public void widgetDefaultSelected(SelectionEvent e) {
  					widgetSelected(e);
  				}
  				
  				public void widgetSelected(SelectionEvent e) {
  					action.getAction().run(null);
  				}
  			});
  		}
  	}
  	
  	private GridLayout createGridLayoutWithNoMargins (int columns) {
  		GridLayout layout = new GridLayout(columns, false);
  		layout.marginBottom = layout.marginHeight = layout.marginLeft = 0;
  		layout.marginRight = layout.marginTop = layout.marginWidth = 0;
  		
  		return layout;
  	}
  
  	protected void addLoadingComposite(PageBook book) {
  		loadingPackagesComposite = new Composite(book, SWT.NONE);
  		loadingPackagesComposite.setLayout(new RowLayout(SWT.HORIZONTAL));
  		loadingProgress = new ProgressMonitorPart(loadingPackagesComposite, null);
  
  	}
  	protected void addViewerComposite(PageBook book) {
  		viewerComposite = new Composite(book, SWT.NONE);
  		viewerComposite.setLayout(new FillLayout());
  		packageViewer = new TreeViewer(viewerComposite, SWT.NONE);
  		packageViewer.setContentProvider(contentProvider);
  		packageViewer.setLabelProvider(labelProvider);
  	}
  	
  	
  	public void setFocus() {
  	}
  	public void viewSelectionChanged(IProject project) {
  		if( project == null ) {
  			this.project = null;
  			packageViewer.setInput(null);
  			return;
  		}
  		
  		if( project.equals(packageViewer.getInput())) 
  			return;
  		
  		if( PackagesCore.packageFileExists(project) ) { 
  			if( PackagesCore.projectRegistered(project))
  				book.showPage(viewerComposite);
  			else {
  				this.project = project;
  				book.showPage(loadingPackagesComposite);
  				registerProject(project);
  				return;
  			}
  		} else { 
  			book.showPage(emptyComposite);
  		}
  		
  		this.project = project;
  		packageViewer.setInput(ArchivesModel.instance().getRoot(project));
  	}
  	
  	public IProject getCurrentProject() {
  		return project;
  	}
  	
  	protected void registerProject(final IProject project) {
  		getSite().getShell().getDisplay().asyncExec(new Runnable () {
  			public void run () {
  				ArchivesModel.instance().registerProject(project, loadingProgress);
  				book.showPage(viewerComposite);
  				packageViewer.setInput(ArchivesModel.instance().getRoot(project));
  			}
  		});
  	}
  	
  	public IStructuredSelection getSelection() {
  		return (IStructuredSelection)packageViewer.getSelection();
  	}
  
  
  	public void modelChanged(IArchiveNodeDelta delta) {
  		final IArchiveNode[] topChanges;
  		if( delta.getKind() == IArchiveNodeDelta.DESCENDENT_CHANGED) 
  			topChanges = getChanges(delta);
  		else if( delta.getKind() == IArchiveNodeDelta.NO_CHANGE)
  			topChanges = new IArchiveNode[]{};
  		else
  			topChanges = new IArchiveNode[]{delta.getPostNode()};
  		
  		// now go through and refresh them
  		getSite().getShell().getDisplay().asyncExec(new Runnable () {
  			public void run () {
  				for( int i = 0; i < topChanges.length; i++ ) {
  					packageViewer.refresh(topChanges[i]);
  				}
  			}
  		});
  
  	}
  	protected IArchiveNode[] getChanges(IArchiveNodeDelta delta) {
  		
  		IArchiveNodeDelta[] children = delta.getAffectedChildren();
  		ArrayList list = new ArrayList();
  		for( int i = 0; i < children.length; i++ ) {
  			if( children[i].getKind() == IArchiveNodeDelta.DESCENDENT_CHANGED) 
  				list.addAll(Arrays.asList(getChanges(children[i])));
  			else
  				list.add(children[i].getPostNode());
  		}
  		return (IArchiveNode[]) list.toArray(new IArchiveNode[list.size()]);
  	}
  }
  
  
  



More information about the jboss-cvs-commits mailing list