Package org.testng.eclipse.ui.util

Source Code of org.testng.eclipse.ui.util.TestSelectionDialog$FileLabelProvider

/*******************************************************************************
* Copyright (c) 2000, 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
*     IBM Corporation - initial API and implementation
*******************************************************************************/
package org.testng.eclipse.ui.util;

import org.eclipse.core.internal.resources.File;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.ui.JavaElementLabelProvider;
import org.eclipse.jface.viewers.ILabelDecorator;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.TwoPaneElementSelector;
import org.eclipse.ui.model.WorkbenchLabelProvider;
import org.testng.eclipse.TestNGPlugin;
import org.testng.eclipse.launch.TestNGLaunchConfigurationConstants.LaunchType;
import org.testng.eclipse.launch.components.Filters;
import org.testng.eclipse.util.ResourceUtil;
import org.testng.eclipse.util.TestSearchEngine;

import java.lang.reflect.InvocationTargetException;
import java.text.MessageFormat;

/**
* A dialog to select a test class or a test suite from a list of types.
*/
public class TestSelectionDialog extends TwoPaneElementSelector {

  private IJavaProject m_project;
  private Object[] m_input;
  private Filters.ITypeFilter m_filter;
  private LaunchType m_testngType;

  private static class PackageRenderer extends JavaElementLabelProvider {
    public PackageRenderer() {
      super(JavaElementLabelProvider.SHOW_PARAMETERS
          | JavaElementLabelProvider.SHOW_POST_QUALIFIED
          | JavaElementLabelProvider.SHOW_ROOT);
    }

    public Image getImage(Object element) {
      Image result = null;
      if (element instanceof IType) {
        result = super.getImage(((IType) element).getPackageFragment());
      } else if (element instanceof File) {
        result = super.getImage(element);
      }

      return result;
    }

    public String getText(Object element) {
      String result = element.toString();
      if (element instanceof IType) {
        result = super.getText(((IType) element).getPackageFragment());
      } else if (element instanceof File) {
        result = ((File) element).getName();
      }

      return result;
    }
  }

  public static TestSelectionDialog createSuiteSelectionDialog(
      final Shell shell, final IJavaProject jproject,
      final Object[] resources) {
    TestSelectionDialog result = new TestSelectionDialog(shell,
        LaunchType.SUITE, jproject,
        new FileLabelProvider(FileLabelProvider.SHOW_LABEL),
        new FileLabelProvider(FileLabelProvider.SHOW_LABEL_PATH),
        resources, null);
    result.setMessage(ResourceUtil
        .getString("TestNGMainTab.testdialog.selectSuite")); //$NON-NLS-1$

    return result;
  }

  public static TestSelectionDialog createTestTypeSelectionDialog(
      final Shell shell, final IJavaProject jproject,
      final Object[] types, final Filters.ITypeFilter filter) {
    return createJavaElementDialog (shell, jproject, types,
        LaunchType.CLASS,
        "TestNGMainTab.testdialog.selectTestClass", filter);
  }

  public static TestSelectionDialog createPackageSelectionDialog(
      final Shell shell, final IJavaProject jproject, final Object[] types) {
    return createJavaElementDialog (shell, jproject, types,
        LaunchType.PACKAGE,
        "TestNGMainTab.testdialog.selectPackage", null);
  }
 
  public static TestSelectionDialog createMethodSelectionDialog(
      final Shell shell, final IJavaProject jproject, final Object[] types) {
    return createJavaElementDialog (shell, jproject, types,
        LaunchType.METHOD,
        "TestNGMainTab.testdialog.selectMethod", null);
  }
 
 
  private static TestSelectionDialog createJavaElementDialog(final Shell shell,
      final IJavaProject jproject, final Object[] types,
      final LaunchType testngType, final String title, final Filters.ITypeFilter filter
      ) {
    TestSelectionDialog result = new TestSelectionDialog(shell,
        testngType, jproject,
        new JavaElementLabelProvider(
            JavaElementLabelProvider.SHOW_BASICS
                | JavaElementLabelProvider.SHOW_OVERLAY_ICONS),
        new PackageRenderer(), types, filter);
    result.setMessage(ResourceUtil
        .getString(title));
    return result;
   
   
  }

  private TestSelectionDialog(final Shell shell, final LaunchType type,
      final IJavaProject jproject, final ILabelProvider mainProvider,
      final ILabelProvider detailsProvider, final Object[] input,
      final Filters.ITypeFilter filter) {
    super(shell, mainProvider, detailsProvider);

    m_testngType = type;
    m_project = jproject;
    m_input = input;
    m_filter = filter;
  }

  /*
   * @see Window#open()
   */
  public int open() {
    if (null == m_input) {
      switch (m_testngType) {
      case CLASS:
        m_input = new IType[0];

        try {
          m_input = TestSearchEngine.findTests(
              new Object[] { m_project }, m_filter);
        } catch (InterruptedException e) {
          return CANCEL;
        } catch (InvocationTargetException e) {
          TestNGPlugin.log(e.getTargetException());

          return CANCEL;
        }
        break;
      case SUITE:
        m_input = new IFile[0];
        try {
          m_input = TestSearchEngine
              .findSuites(new Object[] { m_project });
        } catch (InterruptedException e) {
          return CANCEL;
        } catch (InvocationTargetException e) {
          TestNGPlugin.log(e.getTargetException());

          return CANCEL;
        }
        break;
      case PACKAGE:
        m_input = new IType[0];

        try {
          m_input = TestSearchEngine.findPackages(
              new Object[] { m_project });
        } catch (InterruptedException e) {
          return CANCEL;
        } catch (InvocationTargetException e) {
          TestNGPlugin.log(e.getTargetException());

          return CANCEL;
        }
        break;
      default:
        throw new IllegalArgumentException(
            "testng type not yet implemented: " + m_testngType);
      }

    }
    setElements(m_input);

    return super.open();
  }

  private static class FileLabelProvider extends LabelProvider {
    public static final int SHOW_LABEL = 1;
    public static final int SHOW_LABEL_PATH = 2;
    public static final int SHOW_PATH_LABEL = 3;
    public static final int SHOW_PATH = 4;

    private static final String fgSeparatorFormat = "{0} - {1}"; //$NON-NLS-1$

    private WorkbenchLabelProvider fLabelProvider;
    private ILabelDecorator fDecorator;

    private int fOrder;
    private String[] fArgs = new String[2];

    public FileLabelProvider(int orderFlag) {
      fDecorator = PlatformUI.getWorkbench().getDecoratorManager()
          .getLabelDecorator();
      fLabelProvider = new WorkbenchLabelProvider();
      fOrder = orderFlag;
    }

    public void setOrder(int orderFlag) {
      fOrder = orderFlag;
    }

    public String getText(Object element) {
      if (!(element instanceof IResource)) {
        return ""; //$NON-NLS-1$
      }

      IResource resource = (IResource) element;
      String text = null;

      if ((resource == null) || !resource.exists()) {
        text = ResourceUtil
            .getString("SearchResultView.removed_resource"); //$NON-NLS-1$
      } else {
        IPath path = resource.getFullPath().removeLastSegments(1);
        if (path.getDevice() == null) {
          path = path.makeRelative();
        }
        if ((fOrder == SHOW_LABEL) || (fOrder == SHOW_LABEL_PATH)) {
          text = fLabelProvider.getText(resource);
          if ((path != null) && (fOrder == SHOW_LABEL_PATH)) {
            fArgs[0] = text;
            fArgs[1] = path.toString();
            text = MessageFormat.format(fgSeparatorFormat, fArgs);
          }
        } else {
          if (path != null) {
            text = path.toString();
          } else {
            text = ""; //$NON-NLS-1$
          }
          if (fOrder == SHOW_PATH_LABEL) {
            fArgs[0] = text;
            fArgs[1] = fLabelProvider.getText(resource);
            text = MessageFormat.format(fgSeparatorFormat, fArgs);
          }
        }
      }

      // Do the decoration
      if (fDecorator != null) {
        String decoratedText = fDecorator.decorateText(text, resource);
        if (decoratedText != null) {
          return decoratedText;
        }
      }

      return text;
    }

    public Image getImage(Object element) {
      if (!(element instanceof IResource)) {
        return null; //$NON-NLS-1$
      }

      IResource resource = (IResource) element;
      Image image = fLabelProvider.getImage(resource);
      if (fDecorator != null) {
        Image decoratedImage = fDecorator
            .decorateImage(image, resource);
        if (decoratedImage != null) {
          return decoratedImage;
        }
      }

      return image;
    }

    public void dispose() {
      super.dispose();
      fLabelProvider.dispose();
    }

    public boolean isLabelProperty(Object element, String property) {
      return fLabelProvider.isLabelProperty(element, property);
    }

  }

}
TOP

Related Classes of org.testng.eclipse.ui.util.TestSelectionDialog$FileLabelProvider

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.