/*******************************************************************************
* Copyright (c) 2007 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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
*
* Contributor:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.seam.ui.views;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectNature;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.jdt.core.IMember;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.navigator.ICommonContentExtensionSite;
import org.eclipse.ui.navigator.ICommonLabelProvider;
import org.eclipse.ui.navigator.IExtensionStateModel;
import org.jboss.tools.common.java.IJavaSourceReference;
import org.jboss.tools.seam.core.IRole;
import org.jboss.tools.seam.core.ISeamComponent;
import org.jboss.tools.seam.core.ISeamComponentDeclaration;
import org.jboss.tools.seam.core.ISeamElement;
import org.jboss.tools.seam.core.ISeamFactory;
import org.jboss.tools.seam.core.ISeamJavaComponentDeclaration;
import org.jboss.tools.seam.core.ISeamPackage;
import org.jboss.tools.seam.core.ISeamProject;
import org.jboss.tools.seam.core.ISeamScope;
import org.jboss.tools.seam.ui.SeamUiImages;
/**
* @author Viacheslav Kabanovich
*/
public class SeamLabelProvider extends LabelProvider implements ICommonLabelProvider {
private IExtensionStateModel fStateModel;
private AbstractSeamContentProvider contentProvider;
boolean isFlatLayout = true;
boolean isScopeLable = false;
IPropertyChangeListener scopePropertyListener;
IPropertyChangeListener layoutPropertyListener;
JavaElementImageProvider jip = new JavaElementImageProvider();
public void init(ICommonContentExtensionSite commonContentExtensionSite) {
fStateModel = commonContentExtensionSite.getExtensionStateModel();
contentProvider = (AbstractSeamContentProvider) commonContentExtensionSite.getExtension().getContentProvider();
scopePropertyListener = new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
if (ViewConstants.SCOPE_PRESENTATION.equals(event.getProperty())) {
if (event.getNewValue() != null) {
boolean newValue = ((Boolean) event.getNewValue()).booleanValue();
setIsScopeLable(newValue);
}
}
}
};
fStateModel.addPropertyChangeListener(scopePropertyListener);
layoutPropertyListener = new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
if (ViewConstants.PACKAGE_STRUCTURE.equals(event.getProperty())) {
if (event.getNewValue() != null) {
boolean newValue = ((Boolean)event.getNewValue()).booleanValue();
setIsFlatLayout(newValue);
}
}
}
};
fStateModel.addPropertyChangeListener(layoutPropertyListener);
}
void setIsFlatLayout(boolean b) {
isFlatLayout = b;
}
void setIsScopeLable(boolean b) {
isScopeLable = b;
}
@Override
public String getText(Object element) {
if(element instanceof IWorkspaceRoot) {
return ""; //$NON-NLS-1$
} else if(element instanceof ISeamProject) {
return ((IProjectNature)element).getProject().getName();
} else if (element instanceof IProject) {
return ((IProject)element).getName();
} else if(element instanceof ISeamScope) {
return ((ISeamScope)element).getType().getLabel();
} else if(element instanceof ISeamPackage) {
if(isFlatLayout/* ScopePresentationActionProvider.isPackageStructureFlat()*/) {
return ((ISeamPackage)element).getQualifiedName();
} else {
return ((ISeamPackage)element).getName();
}
} else if(element instanceof ISeamComponent) {
ISeamComponent c = (ISeamComponent)element;
String name = c.getName();
int lastIndexOf = name.lastIndexOf('.');
if(lastIndexOf!=-1&&lastIndexOf!=name.length()) {
name = name.substring(lastIndexOf+1); // temp fix for JBIDE-644; shouldn't need to do this here. shold be a method to getShortName or similar but ISeamComponent extends ISeamContextVariable so ended up being weird to do clean.
}
if(isScopeLable /* ScopePresentationActionProvider.isScopePresentedAsLabel()*/) {
name += " (" + ((ISeamScope)c.getParent()).getType().getLabel() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
}
return name;
} else if (element instanceof IRole) {
return "" + ((IRole)element).getName(); //$NON-NLS-1$
} else if (element instanceof ISeamFactory) {
ISeamFactory f = (ISeamFactory)element;
return f.getName() + " - " + f.getSourcePath();
} else if(element instanceof IJavaSourceReference) {
IJavaSourceReference d = (IJavaSourceReference)element;
IMember m = d.getSourceMember();
IType type = (m instanceof IType) ? (IType)m : m.getTypeRoot().findPrimaryType();
if(type.isBinary()) {
IResource r = ((ISeamElement)element).getResource();
String s = (r == null) ? "<no name>" : r.getName(); //$NON-NLS-1$
return s + "/" + type.getFullyQualifiedName(); //$NON-NLS-1$
} else {
return type.getFullyQualifiedName();
}
} else if(element instanceof ISeamComponentDeclaration) {
IResource r = ((ISeamComponentDeclaration)element).getResource();
return r == null ? "???" : r.getName(); //$NON-NLS-1$
}
return element == null ? "" : element.toString();//$NON-NLS-1$
}
@Override
public Image getImage(Object obj) {
if (obj instanceof ISeamProject) {
return SeamUiImages.PROJECT_IMAGE;
} else if (obj instanceof IProject) {
return SeamUiImages.PROJECT_IMAGE;
} else if(obj instanceof ISeamScope) {
return SeamUiImages.SCOPE_IMAGE;
} else if(obj instanceof ISeamPackage) {
return SeamUiImages.PACKAGE_IMAGE;
} else if(obj instanceof ISeamComponent) {
return SeamUiImages.COMPONENT_IMAGE;
} else if(obj instanceof IRole) {
return SeamUiImages.ROLE_IMAGE;
} else if(obj instanceof ISeamFactory) {
return SeamUiImages.FACTORY_IMAGE;
} else if(obj instanceof ISeamJavaComponentDeclaration) {
ISeamJavaComponentDeclaration d = (ISeamJavaComponentDeclaration)obj;
IType type = (IType)d.getSourceMember();
if(type != null) {
if(type.isBinary()) {
return SeamUiImages.JAVA_BINARY_IMAGE;
}
return SeamUiImages.JAVA_IMAGE;
}
return SeamUiImages.JAVA_IMAGE;
} else if(obj instanceof ISeamComponentDeclaration) {
ISeamComponentDeclaration d = (ISeamComponentDeclaration)obj;
IResource r = d.getResource();
if(r != null) return jip.getImageLabel(r, 3);
return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FILE);
}
return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
}
public void restoreState(IMemento memento) {
}
public void saveState(IMemento memento) {
}
public String getDescription(Object anElement) {
return ""; //$NON-NLS-1$
}
@Override
public void dispose() {
super.dispose();
fStateModel.removePropertyChangeListener(layoutPropertyListener);
fStateModel.removePropertyChangeListener(scopePropertyListener);
}
}