content: /*
   * Copyright (c) 2009 Andrejs Jermakovics.
   * 
   * 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:
   *     Andrejs Jermakovics - initial implementation
   */
  package it.unibz.instasearch.ui;
  
  import it.unibz.instasearch.InstaSearchPlugin;
  
  import java.net.MalformedURLException;
  import java.net.URL;
  
  import org.eclipse.core.resources.IProject;
  import org.eclipse.core.resources.IResource;
  import org.eclipse.core.runtime.IAdaptable;
  import org.eclipse.core.runtime.IStatus;
  import org.eclipse.core.runtime.Status;
  import org.eclipse.jface.dialogs.ErrorDialog;
  import org.eclipse.jface.dialogs.MessageDialog;
  import org.eclipse.swt.graphics.Image;
  import org.eclipse.swt.widgets.Shell;
  import org.eclipse.ui.IEditorPart;
  import org.eclipse.ui.IViewPart;
  import org.eclipse.ui.IWorkbenchPage;
  import org.eclipse.ui.IWorkbenchWindow;
  import org.eclipse.ui.PartInitException;
  import org.eclipse.ui.PlatformUI;
  
  /**
   * Contains UI helper methods
   */
  public class InstaSearchUI
  {
  
  	public static Shell getActiveShell() {
  		if( PlatformUI.getWorkbench().getDisplay() != null )
  			return PlatformUI.getWorkbench().getDisplay().getActiveShell();
  		
  		return null;
  	}
  
  	public static void showMessage(String message) {
  		
  		MessageDialog.openInformation(
  					getActiveShell(),
  					InstaSearchPlugin.getPluginName(),
  					message);
  	}
  
  	public static void showError(Exception ex) {
  		String message = ex.getMessage();
  		
  		if( message == null || "".equals(message) )
  			message = ex.getClass().getName();
  		
  		showError(ex, message);
  	}
  
  	public static void showError(Throwable exception, String message) {
  		Status status = new Status(IStatus.ERROR, InstaSearchPlugin.getPluginId(), message, exception);
  		
  		showError(status, message);
  	}
  	
  	public static void showError(IStatus status, String message) {
  		ErrorDialog.openError(getActiveShell(), InstaSearchPlugin.getPluginName(), message, status);
  				
  		InstaSearchPlugin.log(status);
  	}
  
  	/**
  	 * Opens and shows the search view
  	 * Note: This method must be run from the UI thread
  	 * @return InstaSearchView
  	 */
  	public static InstaSearchView showSearchView() 
  	{
  		IWorkbenchWindow win = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
  		
  		if( win != null && win.getActivePage() != null )
  		{
  			IViewPart view = null;
  			
  			try {
  				view = win.getActivePage().showView(InstaSearchView.ID);
  			} catch(PartInitException e) {
  				InstaSearchPlugin.log(e);
  				return null;
  			}
  			
  			if( view == null ) 
  				return null;
  			
  			if( view instanceof InstaSearchView ) 
  				return (InstaSearchView)view;
  		}
  		
  		return null;
  	}
  	
  	/**
  	 * Checks weather the search view is visible
  	 * Note: This method must be run from the UI thread
  	 * @return InstaSearchView
  	 */
  	public static boolean isSearchViewVisible()
  	{
  		IWorkbenchWindow win = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
  		
  		if( win != null && win.getActivePage() != null )
  		{	
  			IViewPart view = win.getActivePage().findView(InstaSearchView.ID);
  			
  			return win.getActivePage().isPartVisible(view);
  		}
  		
  		return false;
  	}
  	
  	public static void showHomePage() throws MalformedURLException, PartInitException  {
  		URL homePageUrl = new URL(InstaSearchPlugin.getHomePageLocation());
  		PlatformUI.getWorkbench().getBrowserSupport().getExternalBrowser().openURL(homePageUrl);
  	}
  
  	public static IWorkbenchWindow getWorkbenchWindow() {
  		return PlatformUI.getWorkbench().getActiveWorkbenchWindow();
  	}
  
  	public static String getActiveProject() {
  		
  		IEditorPart editor = getActiveEditor();
  		
  		if( editor == null )
  			return null;
  		
  		IAdaptable adaptable = editor.getEditorInput();
  		
  		IProject project = (IProject) adaptable.getAdapter(IProject.class);
  		
  		if (project == null) {
  			IResource resource = (IResource) adaptable.getAdapter(IResource.class);
  			
  			if (resource != null)
  				project = resource.getProject();
  		}
  		
  		if (project != null && project.isAccessible())
  			return project.getName();
  		
  		return null;
  	}
  	
  	/**
  	 * Gets active editor
  	 * Must be run from UI thread
  	 * 
  	 * @return IEditorPart
  	 */
  	public static IEditorPart getActiveEditor() {
  		if( getWorkbenchWindow() == null )
  			return null;
  		
  		IWorkbenchPage activePage= getWorkbenchWindow().getActivePage();
  		if (activePage != null) {
  			IEditorPart activeEditor= activePage.getActiveEditor();
  			return activeEditor;
  		}
  		
  		return null;
  	}
  
  	public static Image getSharedImage(String img) {
  		return PlatformUI.getWorkbench().getSharedImages().getImage(img);
  	}
  }
  