/*******************************************************************************
* Copyright 2005-2007, CHISEL Group, University of Victoria, Victoria, BC, Canada.
* 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:
* The Chisel Group, University of Victoria
*******************************************************************************/
package ca.uvic.chisel.diver.sequencediagrams.sc.java.editors;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jdt.core.Flags;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IMember;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jface.viewers.IColorProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.model.WorkbenchLabelProvider;
import org.eclipse.zest.custom.sequence.widgets.Lifeline;
import org.eclipse.zest.custom.uml.viewers.IStylingSequenceLabelProvider;
import ca.uvic.chisel.diver.sequencediagrams.sc.java.model.JavaMessage;
import ca.uvic.chisel.diver.sequencediagrams.sc.java.model.JavaObject;
import ca.uvic.chisel.javasketch.ui.ISketchColorConstants;
/**
* Provides labels for the sequence viewer.
* @author Del Myers
*/
public class JavaSequenceLabelProvider implements IStylingSequenceLabelProvider, IColorProvider {
private WorkbenchLabelProvider provider = new WorkbenchLabelProvider();
/**
* This is the only method that is additional to the standard JFace label providers.
* In this implementation, classes are
*/
public String getStereoType(Object element) {
if (!(element instanceof IAdaptable)) {
return null;
}
IJavaElement javaElement = (IJavaElement) ((IAdaptable)element).getAdapter(IJavaElement.class);
if (javaElement instanceof IType) {
try {
if (((IType)javaElement).isInterface()) {
return "interface";
} else if (Flags.isAbstract(((IType)javaElement).getFlags())) {
return "abstract";
}
} catch (JavaModelException e) {
}
}
return null;
}
public void addListener(ILabelProviderListener listener) {
// TODO Auto-generated method stub
}
public void dispose() {
provider.dispose();
}
public boolean isLabelProperty(Object element, String property) {
// TODO Auto-generated method stub
return true;
}
public void removeListener(ILabelProviderListener listener) {
// TODO Auto-generated method stub
}
public Color getBackground(Object element) {
if (element instanceof IAdaptable) {
IJavaElement javaElement = (IJavaElement) ((IAdaptable)element).getAdapter(IJavaElement.class);
if (javaElement instanceof IMember) {
try {
int flags = ((IMember)javaElement).getFlags();
if (Flags.isAbstract(flags) || Flags.isInterface(flags)) {
return Display.getCurrent().getSystemColor(SWT.COLOR_GRAY);
}
if (javaElement instanceof IMethod) {
if (Flags.isPrivate(flags)) {
return ISketchColorConstants.PRIVATE_BG;
} else if (Flags.isProtected(flags)) {
return ISketchColorConstants.PROTECTED_BG;
} else if (Flags.isPackageDefault(flags)) {
return ISketchColorConstants.LIGHT_BLUE;
} else if (Flags.isPublic(flags)) {
return ISketchColorConstants.PUBLIC_BG;
}
}
} catch (JavaModelException e) {
//just return null
}
} else if (javaElement instanceof IPackageFragment) {
return ISketchColorConstants.PRIVATE_BG;
}
}
return null;
}
public Color getForeground(Object element) {
if (element instanceof JavaMessage) {
if (((JavaMessage)element).isException()){
return ISketchColorConstants.ERROR_FG;
}
}
return null;
}
public Image getImage(Object element) {
if (element instanceof IAdaptable) {
IJavaElement javaElement = (IJavaElement) ((IAdaptable)element).getAdapter(IJavaElement.class);
if (javaElement != null) {
return provider.getImage(javaElement);
}
}
return null;
}
public String getText(Object element) {
if (element instanceof IAdaptable) {
IJavaElement javaElement = (IJavaElement) ((IAdaptable)element).getAdapter(IJavaElement.class);
if (javaElement != null) {
return provider.getText(javaElement);
} else if (element instanceof JavaObject) {
return "USER";
}
}
return element.toString();
}
public int getLifelineStyle(Object element) {
if (element instanceof IAdaptable) {
IJavaElement javaElement = (IJavaElement) ((IAdaptable)element).getAdapter(IJavaElement.class);
if (javaElement instanceof IPackageFragment) {
return Lifeline.PACKAGE;
} else if (javaElement == null) {
//it's a user type
return Lifeline.ACTOR;
}
}
return -1;
}
public int getMessageLineStyle(Object element) {
return -1;
}
public int getMessageSourceStyle(Object element) {
return -1;
}
public int getMessageTargetStyle(Object element) {
return -1;
}
}