/*******************************************************************************
* Copyright (c) 2012 Pivotal Software, Inc.
* 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:
* Pivotal Software, Inc. - initial API and implementation
*******************************************************************************/
package org.grails.ide.eclipse.explorer.providers;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IResource;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
import org.grails.ide.eclipse.core.GrailsCoreActivator;
import org.grails.ide.eclipse.core.internal.GrailsNature;
import org.grails.ide.eclipse.core.internal.GrailsResourceUtil;
import org.grails.ide.eclipse.core.internal.plugins.GrailsProjectStructureTypes;
import org.grails.ide.eclipse.explorer.elements.GrailsDependencyPluginFolder;
import org.grails.ide.eclipse.explorer.elements.ILogicalFolder;
import org.grails.ide.eclipse.explorer.types.GrailsContainerTypeManager;
/**
* Label and icon provider for Grails logical folders for the common navigator
* @author Nieraj Singh
* @author Andy Clement
*/
public class GrailsNavigatorLabelProvider extends LabelProvider {
public Image getImage(Object element) {
if (element instanceof GrailsDependencyPluginFolder) {
GrailsDependencyPluginFolder dependencyPluginFolder = (GrailsDependencyPluginFolder) element;
if (dependencyPluginFolder.isInPlacePlugin()) {
return GrailsContainerTypeManager
.getInstance()
.getOverlayedImage(
dependencyPluginFolder.getType(),
GrailsContainerTypeManager.LOCAL_PLUGIN_OVERLAY);
}
}
if (element instanceof ILogicalFolder) {
GrailsProjectStructureTypes type = ((ILogicalFolder) element).getType();
if (type != null) {
return GrailsContainerTypeManager.getInstance().getIcon(
type);
}
} else if (element instanceof IPackageFragmentRoot) {
IPackageFragmentRoot root = (IPackageFragmentRoot) element;
if (GrailsResourceUtil.isReimagedGrailsSourceFolder(root)) {
try {
IResource resource = root.getCorrespondingResource();
if (resource instanceof IFolder) {
IFolder folder = (IFolder) resource;
GrailsProjectStructureTypes type = GrailsResourceUtil
.getGrailsContainerType(folder);
if (type != null) {
return GrailsContainerTypeManager.getInstance()
.getIcon(type);
}
}
} catch (JavaModelException e) {
GrailsCoreActivator.log(e);
}
}
} else if (element instanceof IFolder) {
IFolder folder = (IFolder) element;
if (GrailsNature.isGrailsProject(folder.getProject())
&& GrailsResourceUtil
.isReimagedGrailsProjectFileFolder(folder)) {
GrailsProjectStructureTypes type = GrailsResourceUtil
.getGrailsContainerType(folder);
if (type != null) {
return GrailsContainerTypeManager.getInstance()
.getIcon(type);
}
}
}
return null;
}
public String getText(Object element) {
if (element instanceof ILogicalFolder) {
ILogicalFolder logicalFolder = (ILogicalFolder) element;
String name = logicalFolder.getName();
if (name == null) {
GrailsProjectStructureTypes type = logicalFolder.getType();
if (type != null) {
name = type.getDisplayName();
}
}
return name;
} else if (element instanceof IPackageFragmentRoot) {
IPackageFragmentRoot root = (IPackageFragmentRoot) element;
if (GrailsResourceUtil.isReimagedGrailsSourceFolder(root)) {
try {
IResource resource = root.getCorrespondingResource();
if (resource instanceof IFolder) {
IFolder folder = (IFolder) resource;
GrailsProjectStructureTypes type = GrailsResourceUtil
.getGrailsContainerType(folder);
if (type != null) {
return type.getDisplayName();
}
}
} catch (JavaModelException e) {
GrailsCoreActivator.log(e);
}
} else if (GrailsResourceUtil
.isGrailsDependencyPackageFragmentRoot(root)) {
return GrailsResourceUtil.convertRootName(root
.getElementName());
}
} else if (element instanceof IFolder) {
IFolder folder = (IFolder) element;
if (GrailsNature.isGrailsProject(folder.getProject())
&& GrailsResourceUtil
.isReimagedGrailsProjectFileFolder(folder)) {
GrailsProjectStructureTypes type = GrailsResourceUtil
.getGrailsContainerType(folder);
if (type != null) {
return type.getDisplayName();
}
}
}
return null;
}
}