/***************************************************************************** * Copyright (c) 2006-2008 g-Eclipse Consortium * 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 * * Initial development of the original code was made for the * g-Eclipse project founded by European Union * project number: FP6-IST-034327 http://www.geclipse.eu/ * * Contributors: * Mathias Stuempert - initial API and implementation * Nikolaos Tsioutsias *****************************************************************************/ package eu.geclipse.ui.providers; import java.net.URL; import java.util.Hashtable; import org.eclipse.core.resources.IResource; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.StyledString; import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.model.WorkbenchLabelProvider; import eu.geclipse.core.model.IGridApplication; import eu.geclipse.core.model.IGridComputing; import eu.geclipse.core.model.IGridContainer; import eu.geclipse.core.model.IGridElement; import eu.geclipse.core.model.IGridJob; import eu.geclipse.core.model.IGridJobDescription; import eu.geclipse.core.model.IGridService; import eu.geclipse.core.model.IGridStorage; import eu.geclipse.core.model.IVirtualOrganization; import eu.geclipse.core.model.IWrappedElement; import eu.geclipse.core.model.impl.ContainerMarker; import eu.geclipse.core.model.impl.ContainerMarker.MarkerType; import eu.geclipse.info.model.GridGlueService; import eu.geclipse.ui.internal.Activator; /** * Label provider implementation to be used by any Grid model view. */ public class GridModelLabelProvider extends LabelProvider implements IStyledLabelProvider { /** * The info marker image path. */ public static final String INFO_MARKER = "icons/obj16/info_obj.gif"; //$NON-NLS-1$ /** * The error marker image path. */ public static final String ERROR_MARKER = "icons/obj16/ihigh_obj.gif"; //$NON-NLS-1$ private static final String APPLICATION_ELEMENT = "icons/obj16/application_obj.gif"; //$NON-NLS-1$ private static Hashtable< String, Image > images = new Hashtable< String, Image >(); private Image computingImage; private Image jobImage; private Image jobDescriptionImage; private Image serviceImage; private Image serviceUnsupportedImage; private Image storageImage; private Image voImage; private Image virtualContainerImage; private Image virtualElementImage; private ILabelProvider workbenchLabelProvider = WorkbenchLabelProvider.getDecoratingWorkbenchLabelProvider(); /** * Construct a new <code>GridModelLabelProvider</code>. */ public GridModelLabelProvider() { // empty implementation } /* (non-Javadoc) * @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object) */ @Override public Image getImage( final Object element ) { Image result = null; if ( element instanceof IGridElement ) { result = getImage( ( IGridElement ) element ); } else { result = super.getImage( element ); } return result; } /* (non-Javadoc) * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object) */ @Override public String getText( final Object element ) { String resultText = null; if ( element instanceof IGridJob ) { resultText = ( ( IGridJob ) element ).getJobName(); } else if ( element instanceof IGridElement ) { resultText = ( ( IGridElement ) element ).getName(); } else { resultText = element.toString(); } return resultText; } private Image getImage( final IGridElement element ) { Image result = null; if ( element.isVirtual() ) { result = getVirtualElementImage( element ); } else { result = getRealElementImage( element ); } return result; } private Image getRealElementImage( final IGridElement element ) { Image result = null; if ( element instanceof IGridJob ) { result = getJobImage(); } else if ( element instanceof IGridJobDescription ) { result = getJobDescriptionImage(); } else { IResource resource = element.getResource(); result = this.workbenchLabelProvider.getImage( resource ); } return result; } private Image getVirtualElementImage( final IGridElement element ) { Image result = null; if ( element instanceof IVirtualOrganization ) { result = getVoImage(); } else if ( element instanceof IGridApplication ) { result = getImage( APPLICATION_ELEMENT ); } else if ( element instanceof IGridComputing ) { result = getComputingImage(); } else if ( element instanceof IGridStorage ) { result = getStorageImage(); } else if ( element instanceof IGridService ) { if ( element instanceof IWrappedElement ) { IGridElement wrappedElement = ( ( IWrappedElement ) element ).getWrappedElement(); if ( wrappedElement instanceof GridGlueService ) { boolean isSupported = ( ( GridGlueService ) wrappedElement ).getGlueService().isSupported(); if ( isSupported ) { result = getServiceImage(); } else { result = getUnsupportedServiceImage(); } } else { result = getServiceImage(); } } else { result = getServiceImage(); } } else if ( element instanceof IGridContainer ) { result = getVirtualContainerImage(); } else if ( element instanceof ContainerMarker ) { result = getContainerMarkerImage( ( ContainerMarker ) element ); } else { result = getVirtualElementImage(); } return result; } private Image getContainerMarkerImage( final ContainerMarker marker ) { Image result = null; ContainerMarker.MarkerType type = marker.getType(); if ( type == MarkerType.INFO ) { result = getImage( INFO_MARKER ); } else if ( type == MarkerType.ERROR ) { result = getImage( ERROR_MARKER ); } return result; } private Image getJobImage() { if( this.jobImage == null ) { this.jobImage = Activator.getDefault().getImageRegistry().get( "job" ); //$NON-NLS-1$ } return this.jobImage; } private Image getJobDescriptionImage() { if ( this.jobDescriptionImage == null ) { this.jobDescriptionImage = Activator.getDefault().getImageRegistry().get( "jobdescription" ); //$NON-NLS-1$ } return this.jobDescriptionImage; } private Image getVirtualContainerImage() { if ( this.virtualContainerImage == null ) { this.virtualContainerImage = Activator.getDefault().getImageRegistry().get( "virtualfolder" ); //$NON-NLS-1$ } return this.virtualContainerImage; } private Image getVirtualElementImage() { if ( this.virtualElementImage == null ) { this.virtualElementImage = Activator.getDefault().getImageRegistry().get( "virtualfile" ); //$NON-NLS-1$ } return this.virtualElementImage; } /** * Get an image that represents a virtual organisation. * * @return The image for a VO. */ private Image getVoImage() { if ( this.voImage == null ) { this.voImage = Activator.getDefault().getImageRegistry().get( "vo" ); //$NON-NLS-1$ } return this.voImage; } /** * Get an image that represents an {@link IGridService}. * * @return The image for a Grid service. */ private Image getServiceImage() { if( this.serviceImage == null ) { this.serviceImage = Activator.getDefault() .getImageRegistry() .get( "service" ); //$NON-NLS-1$ } return this.serviceImage; } private Image getUnsupportedServiceImage() { if ( this.serviceUnsupportedImage == null ) { this.serviceUnsupportedImage = Activator.getDefault() .getImageRegistry() .get( "service_unsupported" ); //$NON-NLS-1$ } return this.serviceUnsupportedImage; } /** * Get an image that represents an {@link IGridStorage}. * * @return The image for a Grid storage. */ private Image getStorageImage() { if ( this.storageImage == null ) { this.storageImage = Activator.getDefault() .getImageRegistry() .get( "storage" ); //$NON-NLS-1$ } return this.storageImage; } /** * Get an image that represents an {@link IGridComputing}. * * @return The image for a Grid computing. */ private Image getComputingImage() { if ( this.computingImage == null ) { this.computingImage = Activator.getDefault() .getImageRegistry() .get( "computing" ); //$NON-NLS-1$ } return this.computingImage; } private static Image getImage( final String path ) { Image image = images.get( path ); if ( image == null ) { image = loadImage( path ); images.put( path, image ); } return image; } private static Image loadImage( final String path ) { URL url = Activator.getDefault().getBundle().getEntry( path ); ImageDescriptor descriptor = ImageDescriptor.createFromURL( url ); return descriptor.createImage(); } public StyledString getStyledText( final Object element ) { String text = getText( element ); if ( text == null ) { text = ""; //$NON-NLS-1$ } return new StyledString( text ); } }