/******************************************************************************* * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * *******************************************************************************/ package com.liferay.ide.project.ui; import com.liferay.ide.core.LiferayNature; import java.net.URL; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.IDecoration; import org.eclipse.jface.viewers.ILightweightLabelDecorator; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.wst.common.project.facet.core.FacetedProjectFramework; /** * @author Greg Amerson * @author Terry Jia */ public class LiferayPluginProjectDecorator extends LabelProvider implements ILightweightLabelDecorator { private static final String EXT_FACET = "liferay.ext"; //$NON-NLS-1$ private static final String HOOK_FACET = "liferay.hook"; //$NON-NLS-1$ private static final String ICON_DIR = "icons/ovr"; //$NON-NLS-1$ private static final String LAYOUTTPL_FACET = "liferay.layouttpl"; //$NON-NLS-1$ private static ImageDescriptor LIFERAY; /* The constants are duplicated here to avoid plugin loading. */ private static final String PORTLET_FACET = "liferay.portlet"; //$NON-NLS-1$ private static final String THEME_FACET = "liferay.theme"; //$NON-NLS-1$ private static final String WEB_FACET = "liferay.web"; //$NON-NLS-1$ /** * This gets a .gif from the icons folder. */ private static ImageDescriptor getImageDescriptor( String key ) { ImageDescriptor imageDescriptor = null; if( key != null ) { String gif = "/" + key + ".png"; //$NON-NLS-1$ //$NON-NLS-2$ IPath path = new Path( ICON_DIR ).append( gif ); URL gifImageURL = FileLocator.find( Platform.getBundle( ProjectUI.PLUGIN_ID ), path, null ); if( gifImageURL != null ) { imageDescriptor = ImageDescriptor.createFromURL( gifImageURL ); } } return imageDescriptor; } private static ImageDescriptor getLiferay() { if( LIFERAY == null ) { LIFERAY = getImageDescriptor( "liferay_decoration" ); } return LIFERAY; } public void decorate( Object element, IDecoration decoration ) { if( element instanceof IProject ) { IProject project = (IProject) element; ImageDescriptor overlay = null; if( hasFacet( project, PORTLET_FACET ) ) { overlay = getLiferay(); } else if( hasFacet( project, HOOK_FACET ) ) { overlay = getLiferay(); } else if( hasFacet( project, EXT_FACET ) ) { overlay = getLiferay(); } else if( hasFacet( project, LAYOUTTPL_FACET ) ) { overlay = getLiferay(); } else if( hasFacet( project, THEME_FACET ) ) { overlay = getLiferay(); } else if( hasFacet( project, WEB_FACET ) ) { overlay = getLiferay(); } else if ( hasNature( project, LiferayNature.NATURE_ID ) ) { overlay = getLiferay(); } if( overlay != null ) { // next two lines dangerous! // DecorationContext ctx = (DecorationContext) decoration.getDecorationContext(); // ctx.putProperty( IDecoration.ENABLE_REPLACE, true ); decoration.addOverlay( overlay, IDecoration.TOP_RIGHT ); } } } private boolean hasNature( IProject project, String id ) { try { return project.hasNature( id ); } catch( CoreException e ) { return false; } } private boolean hasFacet( IProject project, String facet ) { try { return FacetedProjectFramework.hasProjectFacet( project, facet ); } catch( CoreException e ) { ProjectUI.logError( e ); return false; } } }