content: /*******************************************************************************
   * Copyright (c) 2000, 2009 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
   *     Matt Chapman, mpchapman@gmail.com - 89977 Make JDT .java agnostic
   *******************************************************************************/
  
  package org.eclipse.wst.jsdt.internal.ui.wizards.buildpaths.newsourcepage;
  
  import java.util.ArrayList;
  import java.util.List;
  
  import org.eclipse.jface.action.IMenuManager;
  import org.eclipse.jface.action.Separator;
  import org.eclipse.jface.action.ToolBarManager;
  import org.eclipse.jface.operation.IRunnableContext;
  import org.eclipse.jface.viewers.IStructuredSelection;
  import org.eclipse.swt.SWT;
  import org.eclipse.swt.widgets.ToolBar;
  import org.eclipse.ui.PlatformUI;
  import org.eclipse.wst.jsdt.internal.corext.buildpath.IBuildpathModifierListener;
  import org.eclipse.wst.jsdt.internal.ui.actions.CompositeActionGroup;
  import org.eclipse.wst.jsdt.internal.ui.util.ViewerPane;
  
  /**
   * Action group for the dialog package explorer shown on the second page
   * of the new java project wizard.
   */
  public class DialogPackageExplorerActionGroup extends CompositeActionGroup {
  	
  	private DialogPackageExplorer fDialogPackageExplorer;
  	
  	private final AddFolderToBuildpathAction fAddFolderToBuildpathAction;
  	private final RemoveFromBuildpathAction fRemoveFromBuildpathAction;
  	private final ExcludeFromBuildpathAction fExcludeFromBuildpathAction;
  	private final IncludeToBuildpathAction fIncludeToBuildpathAction;
  	private final EditFilterAction fEditFilterAction;
  	private final ClasspathModifierDropDownAction fDropDownAction;
  	private final CreateLinkedSourceFolderAction fCreateLinkedSourceFolderAction;
  	private final CreateSourceFolderAction fCreateSourceFolderAction;
  	private final ResetAllAction fResetAllAction;
      
      /**
       * Constructor which creates the operations and based on this 
       * operations the actions.
       * 
       * @param provider a information provider to pass necessary information 
       * to the operations
       * @param context 
       * @param dialogPackageExplorer the package explorer for which to contribute the actions to
       * @param page the page showing the package explorer
       */
      public DialogPackageExplorerActionGroup(HintTextGroup provider, IRunnableContext context, DialogPackageExplorer dialogPackageExplorer, final NewSourceContainerWorkbookPage page) {
          super();
  		
          fDialogPackageExplorer= dialogPackageExplorer;
          
          if (context == null)
          	context= PlatformUI.getWorkbench().getProgressService();
          
          fAddFolderToBuildpathAction= new AddFolderToBuildpathAction(context, fDialogPackageExplorer) {
          	public void run() {
          	    super.run();
          	}
          };
  		fDialogPackageExplorer.addSelectionChangedListener(fAddFolderToBuildpathAction);
  		
  		fRemoveFromBuildpathAction= new RemoveFromBuildpathAction(context, fDialogPackageExplorer) {
          	public void run() {
          	    super.run();
          	}
          };
  		fDialogPackageExplorer.addSelectionChangedListener(fRemoveFromBuildpathAction);
          
  		fExcludeFromBuildpathAction= new ExcludeFromBuildpathAction(context, fDialogPackageExplorer) {
          	public void run() {
          	    super.run();
          	}
          };
  		fDialogPackageExplorer.addSelectionChangedListener(fExcludeFromBuildpathAction);
  		
  		fIncludeToBuildpathAction= new IncludeToBuildpathAction(context, fDialogPackageExplorer) {
          	public void run() {
          	    super.run();
          	}
          };
  		fDialogPackageExplorer.addSelectionChangedListener(fIncludeToBuildpathAction);
  		
  			fEditFilterAction= new EditFilterAction(context, fDialogPackageExplorer) {
  	        	public void run() {
  	        	    super.run();
  	        	}
  	        };
  			fDialogPackageExplorer.addSelectionChangedListener(fEditFilterAction);
          
          fDropDownAction= new ClasspathModifierDropDownAction();
  		fDropDownAction.addAction(fEditFilterAction);
  		fDialogPackageExplorer.addPostSelectionChangedListener(fDropDownAction);
          
          fCreateLinkedSourceFolderAction= new CreateLinkedSourceFolderAction2(provider, context, fDialogPackageExplorer) {
          	public void run() {
          	    super.run();
          	}
          	
          	/**
          	 * {@inheritDoc}
          	 */
          	protected List getSelectedElements() {
          		ArrayList result= new ArrayList();
          		result.add(page.getJavaScriptProject());
          		return result;
          	}
  
          	/**
          	 * {@inheritDoc}
          	 */
          	protected boolean canHandle(IStructuredSelection selection) {
          		return true;
          	}
          };
          
          fCreateSourceFolderAction= new CreateSourceFolderAction2(provider, context, fDialogPackageExplorer) {
          	public void run() {
          	    super.run();
          	}
          	
          	/**
          	 * {@inheritDoc}
          	 */
          	protected List getSelectedElements() {
          		ArrayList result= new ArrayList();
          		result.add(page.getJavaScriptProject());
          		return result;
          	}
  
          	/**
          	 * {@inheritDoc}
          	 */
          	protected boolean canHandle(IStructuredSelection selection) {
          		return true;
          	}
          };
  		
  		fResetAllAction= new ResetAllAction(provider, context, fDialogPackageExplorer);
      }
      
      /* (non-Javadoc)
       * @see org.eclipse.wst.jsdt.internal.ui.actions.CompositeActionGroup#dispose()
       */
      public void dispose() {
          super.dispose();
          
          fDialogPackageExplorer.removeSelectionChangedListener(fAddFolderToBuildpathAction);
          fDialogPackageExplorer.removeSelectionChangedListener(fRemoveFromBuildpathAction);
          fDialogPackageExplorer.removeSelectionChangedListener(fExcludeFromBuildpathAction);
  		fDialogPackageExplorer.removeSelectionChangedListener(fIncludeToBuildpathAction);
  		fDialogPackageExplorer.removeSelectionChangedListener(fEditFilterAction);
  		fDialogPackageExplorer.removePostSelectionChangedListener(fDropDownAction);
          fDialogPackageExplorer= null;
      }
      
      public void addBuildpathModifierListener(IBuildpathModifierListener listener) {
      	fAddFolderToBuildpathAction.addBuildpathModifierListener(listener);
      	fRemoveFromBuildpathAction.addBuildpathModifierListener(listener);
      	fExcludeFromBuildpathAction.addBuildpathModifierListener(listener);
      	fIncludeToBuildpathAction.addBuildpathModifierListener(listener);
      	fEditFilterAction.addBuildpathModifierListener(listener);
      	fCreateLinkedSourceFolderAction.addBuildpathModifierListener(listener);
      	fCreateSourceFolderAction.addBuildpathModifierListener(listener);
      }
      
  	public void removeBuildpathModifierListener(IBuildpathModifierListener listener) {
  		fAddFolderToBuildpathAction.removeBuildpathModifierListener(listener);
      	fRemoveFromBuildpathAction.removeBuildpathModifierListener(listener);
      	fExcludeFromBuildpathAction.removeBuildpathModifierListener(listener);
      	fIncludeToBuildpathAction.removeBuildpathModifierListener(listener);
      	fEditFilterAction.removeBuildpathModifierListener(listener);
      	fCreateLinkedSourceFolderAction.removeBuildpathModifierListener(listener);
      	fCreateSourceFolderAction.removeBuildpathModifierListener(listener);
      }
          
      /**
       * Create a toolbar manager for a given 
       * <code>ViewerPane</code>
       * 
       * @param pane the pane to create the <code>
       * ToolBarManager</code> for.
       * @return the created <code>ToolBarManager</code>
       */
      public ToolBarManager createLeftToolBarManager(ViewerPane pane) {
          ToolBarManager tbm= pane.getToolBarManager();
          
          tbm.add(fAddFolderToBuildpathAction);
          tbm.add(fRemoveFromBuildpathAction);
          tbm.add(new Separator());
          tbm.add(fExcludeFromBuildpathAction);
          tbm.add(fIncludeToBuildpathAction);
          tbm.add(new Separator());
          tbm.add(fDropDownAction);
          
          tbm.update(true);
          return tbm;
      }
      
      /**
       * Create a toolbar manager for a given 
       * <code>ViewerPane</code>
       * 
       * @param pane the pane to create the help toolbar for
       * @return the created <code>ToolBarManager</code>
       */
      public ToolBarManager createLeftToolBar(ViewerPane pane) {
          ToolBar tb= new ToolBar(pane, SWT.FLAT);
          pane.setTopRight(tb);
          ToolBarManager tbm= new ToolBarManager(tb);
          
          tbm.add(fCreateLinkedSourceFolderAction);
          tbm.add(fCreateSourceFolderAction);
          tbm.add(fResetAllAction);
          tbm.add(new HelpAction());
          
          tbm.update(true);
          return tbm;
      }
          
      /**
       * Fill the context menu with the available actions
       * 
       * @param menu the menu to be filled up with actions
       */
      public void fillContextMenu(IMenuManager menu) {
      	
      	if (fAddFolderToBuildpathAction.isEnabled())
      		menu.add(fAddFolderToBuildpathAction);
      	
      	if (fRemoveFromBuildpathAction.isEnabled())
      		menu.add(fRemoveFromBuildpathAction);
      	
      	if (fExcludeFromBuildpathAction.isEnabled())
      		menu.add(fExcludeFromBuildpathAction);
      		
      	if (fIncludeToBuildpathAction.isEnabled())
      		menu.add(fIncludeToBuildpathAction);
      	
      	if (fEditFilterAction.isEnabled())
      		menu.add(fEditFilterAction);
      	
      	if (fCreateLinkedSourceFolderAction.isEnabled())
      		menu.add(fCreateLinkedSourceFolderAction);
      	
      	if (fCreateSourceFolderAction.isEnabled())
      		menu.add(fCreateSourceFolderAction);
      	
          super.fillContextMenu(menu);
      }
      
  	public BuildpathModifierAction[] getHintTextGroupActions() {
  		List result= new ArrayList();
  		
      	if (fCreateSourceFolderAction.isEnabled())
      		result.add(fCreateSourceFolderAction);
      	
      	if (fCreateLinkedSourceFolderAction.isEnabled())
      		result.add(fCreateLinkedSourceFolderAction);
      	
      	if (fEditFilterAction.isEnabled())
      		result.add(fEditFilterAction);
      	
      	if (fExcludeFromBuildpathAction.isEnabled())
      		result.add(fExcludeFromBuildpathAction);
      		
      	if (fIncludeToBuildpathAction.isEnabled())
      		result.add(fIncludeToBuildpathAction);
      	
  		if (fAddFolderToBuildpathAction.isEnabled())
      		result.add(fAddFolderToBuildpathAction);
      	
      	if (fRemoveFromBuildpathAction.isEnabled())
      		result.add(fRemoveFromBuildpathAction);
      
  	    return (BuildpathModifierAction[])result.toArray(new BuildpathModifierAction[result.size()]);
      }
  
  	public ResetAllAction getResetAllAction() {
  		return fResetAllAction;
      }
  }
  