/*******************************************************************************
 * Copyright (c) 2006 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.wst.common.ui.internal.search.dialogs;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.actions.ActionDelegate;
import org.eclipse.wst.common.core.search.scope.SearchScope;

public class Test extends ActionDelegate
{
  public void run(IAction action)
  {
    try
    {
      ComponentSearchListDialogConfiguration configuration = new ComponentSearchListDialogConfiguration();
      configuration.setListLabelText("List:");
      configuration.setFilterLabelText("Filter:");
      configuration.setSearchListProvider(searchListProvider);
      configuration.setDescriptionProvider(new BaseComponentDescriptionProvider("foo"));
      Shell shell = Display.getCurrent().getActiveShell();
      ComponentSearchListDialog dialog = new ComponentSearchListDialog(shell, "test", configuration);
      dialog.setBlockOnOpen(true);
      dialog.create();
      dialog.open();
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
  }
  class BaseComponentDescriptionProvider extends LabelProvider implements IComponentDescriptionProvider
  {
    String prefix;

    BaseComponentDescriptionProvider(String prefix)
    {
      this.prefix = prefix;
    }

    public IFile getFile(Object component)
    {
      return null;
    }

    public ILabelProvider getLabelProvider()
    {
      return this;
    }

    public String getName(Object component)
    {
      String string = (String) component;
      return string.substring(prefix.length() + 1);
    }

    public String getQualifier(Object component)
    {
      return prefix;
    }

    public String getText(Object element)
    {
      return getName(element);
    }

    public boolean isApplicable(Object component)
    {
      if (component instanceof String)
      {
        return ((String) component).startsWith(prefix);
      }
      return false;
    }

	public Image getFileIcon(Object component) {
		return null;
	}
  }
  
  IComponentSearchListProvider searchListProvider = new IComponentSearchListProvider()
  {
    public void populateComponentList(IComponentList list, SearchScope scope, IProgressMonitor pm)
    {
      list.add("foo:" + "Hello!");
      list.add("foo:" + "Hey!");
      list.add("foo:" + "How-are-you?");
      list.add("foo:" + "What-is-that-smell?");
    }
  };
}
