/** * (c) 2011, Alejandro Serrano * Released under the terms of the EPL. */ package net.sf.eclipsefp.haskell.browser.views.hoogle; import java.util.ArrayList; import java.util.Map; import net.sf.eclipsefp.haskell.browser.items.Declaration; import net.sf.eclipsefp.haskell.browser.items.HoogleResult; import net.sf.eclipsefp.haskell.browser.items.HoogleResultConstructor; import net.sf.eclipsefp.haskell.browser.items.HoogleResultDeclaration; import net.sf.eclipsefp.haskell.browser.util.ImageCache; import net.sf.eclipsefp.haskell.browser.views.SpecialRoot; import net.sf.eclipsefp.haskell.ui.internal.util.UITexts; import net.sf.eclipsefp.haskell.ui.util.HaskellUIImages; import net.sf.eclipsefp.haskell.ui.util.IImageNames; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.swt.graphics.Image; /** * Label provider for Hoogle results. * @author Alejandro Serrano, JP Moresmau * */ public class HoogleLabelProvider implements ILabelProvider { @Override @SuppressWarnings ( "unchecked" ) public Image getImage( final Object element ) { if (SpecialRoot.NO_DATABASE.equals(element)){ return ImageCache.DATABASE; } else if (SpecialRoot.EMPTY.equals( element )){ return HaskellUIImages.getImage( IImageNames.WARNING_OBJECT ); } else if (SpecialRoot.SEARCHING.equals( element )){ return HaskellUIImages.getImage( IImageNames.SEARCH_OBJECT ); } HoogleResult result = null; if (element instanceof HoogleResult) { result = (HoogleResult)element; } else { Map.Entry<String, Object> entry = (Map.Entry<String, Object>)element; if (entry.getValue() instanceof ArrayList) { result = ( (ArrayList<HoogleResult>)entry.getValue() ).get( 0 ); } else { // If we came here, it means that we are in an element defined in several places return ImageCache.MODULE_CONTENT; } } switch(result.getType()) { case PACKAGE: return ImageCache.PACKAGE; case MODULE: return ImageCache.MODULE; case CONSTRUCTOR: return ImageCache.CONSTRUCTOR; case DECLARATION: Declaration decl = ((HoogleResultDeclaration)result).getDeclaration(); return ImageCache.getImageForDeclaration( decl.getType() ); case KEYWORD: return ImageCache.KEYWORD; } return null; } @Override @SuppressWarnings ( "unchecked" ) public String getText( final Object element ) { HoogleResult result = null; if (SpecialRoot.NO_DATABASE.equals( element) ){ return UITexts.scionBrowserNoDatabaseLoadedOrHoogleNotPresent; } else if (SpecialRoot.SEARCHING.equals( element) ){ return UITexts.browser_hoogleSearching; } else if (SpecialRoot.EMPTY.equals( element) ){ return UITexts.browser_hoogleNoResult; } else if (element instanceof HoogleResult) { result = (HoogleResult)element; switch(result.getType()) { case PACKAGE: case MODULE: case KEYWORD: return result.getName(); case DECLARATION: Declaration decl = ((HoogleResultDeclaration)result).getDeclaration(); return decl.getShownName(); case CONSTRUCTOR: HoogleResultConstructor con = (HoogleResultConstructor)result; return con.getConstructor().getShownName(); } } else { Map.Entry<String, Object> entry = (Map.Entry<String, Object>)element; if (entry.getValue() instanceof ArrayList) { // We are in the root of an element defined in several places return entry.getKey(); } else { // We are in an instance of an element defined several times, // so we need to show the name of the module result = (HoogleResult)entry.getValue(); switch(result.getType()) { case PACKAGE: case MODULE: case KEYWORD: return null; // This should not happen case DECLARATION: HoogleResultDeclaration decl = (HoogleResultDeclaration)result; return decl.getModule(); case CONSTRUCTOR: HoogleResultConstructor con = (HoogleResultConstructor)result; return con.getModule(); } } } return null; } // Listeners: not used @Override public void addListener( final ILabelProviderListener listener ) { // Do nothing } @Override public void dispose() { // Do nothing } @Override public boolean isLabelProperty( final Object element, final String property ) { // Do nothing return false; } @Override public void removeListener( final ILabelProviderListener listener ) { // Do nothing } }