Package org.springframework.ide.eclipse.roo.ui.internal.actions

Source Code of org.springframework.ide.eclipse.roo.ui.internal.actions.OpenRooShellForProjectsAction$RooProjectLabelProvider

/*******************************************************************************
*  Copyright (c) 2012 VMware, Inc.
*  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:
*      VMware, Inc. - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.roo.ui.internal.actions;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.DecoratingLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.CheckedTreeSelectionDialog;
import org.eclipse.ui.model.WorkbenchLabelProvider;
import org.springframework.ide.eclipse.core.SpringCoreUtils;
import org.springframework.ide.eclipse.roo.core.RooCoreActivator;
import org.springframework.ide.eclipse.roo.core.model.IRooInstall;
import org.springframework.ide.eclipse.roo.ui.RooUiActivator;
import org.springframework.ide.eclipse.roo.ui.internal.RooShellView;


/**
* An action to open a Roo Shell tab for a group of projects
* @author Christian Dupuis
* @since 2.1.0
*/
public class OpenRooShellForProjectsAction extends Action {

  private final RooShellView view;

  public OpenRooShellForProjectsAction(RooShellView view) {
    super("Open Roo Shell", RooUiActivator.getImageDescriptor("icons/full/obj16/new_console_obj.gif"));
    this.view = view;
  }

  @Override
  public void run() {
    RooProjectSelectionDialog dialog = new RooProjectSelectionDialog(view.getSite().getShell());
    if (dialog.open() == Dialog.OK) {
      for (IProject project : dialog.getSelectedProjects()) {
        view.openShell(project);
      }
    }
  }

  private class RooProjectSelectionDialog extends CheckedTreeSelectionDialog {

    public RooProjectSelectionDialog(Shell parent) {
      super(parent, new DecoratingLabelProvider(new RooProjectLabelProvider(), PlatformUI.getWorkbench()
          .getDecoratorManager().getLabelDecorator()), new RooProjectTreeContentProvider());
      setTitle("Roo Shell Project Selection");
      setMessage("Open Roo Shells for the following projects:");
      setInput(ResourcesPlugin.getWorkspace().getRoot());
    }

    public IProject[] getSelectedProjects() {
      Object[] result = getResult();
      ArrayList<IProject> projects = new ArrayList<IProject>();
      for (Object project : result) {
        projects.add((IProject) project);
      }
      return projects.toArray(new IProject[0]);
    }

  }

  private class RooProjectTreeContentProvider implements ITreeContentProvider {

    public void dispose() {
    }

    public Object[] getChildren(Object parentElement) {
      return new Object[0];
    }

    public Object[] getElements(Object inputElement) {
      if (inputElement instanceof IWorkspaceRoot) {
        Set<IProject> projects = new HashSet<IProject>();
        for (IProject project : ((IWorkspaceRoot) inputElement).getProjects()) {
          if (!view.getOpenProjects().contains(project) && project.isAccessible() && project.isOpen()
              && SpringCoreUtils.hasNature(project, RooCoreActivator.NATURE_ID)) {
            projects.add(project);
          }
        }
        return projects.toArray(new IProject[projects.size()]);
      }
      return new Object[0];
    }

    public Object getParent(Object element) {
      return null;
    }

    public boolean hasChildren(Object element) {
      return getChildren(element).length > 0;
    }

    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
    }
  }

  private class RooProjectLabelProvider extends WorkbenchLabelProvider {
    @Override
    protected String decorateText(String input, Object element) {
      if (element instanceof IProject) {
        IRooInstall install = RooCoreActivator.getDefault().getInstallManager()
            .getRooInstall((IProject) element);
        if (install != null) {
          return input + " [" + install.getName() + "]";
        }
      }
      return super.decorateText(input, element);
    }

  }
}
TOP

Related Classes of org.springframework.ide.eclipse.roo.ui.internal.actions.OpenRooShellForProjectsAction$RooProjectLabelProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.