blob: eccbbf5654501f311cfd1ca47cc823a493785d55 [file] [log] [blame]
package org.eclipse.emf.refactor.smells.runtime.ui;
import java.util.LinkedList;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.ENamedElement;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EOperation;
import org.eclipse.emf.refactor.smells.runtime.core.EObjectGroup;
import org.eclipse.emf.refactor.smells.runtime.core.ModelSmellResult;
import org.eclipse.emf.refactor.smells.runtime.core.ResultModel;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
public class ResultModelTreeViewerLabelProvider implements ILabelProvider {
@Override
public void addListener(ILabelProviderListener listener) { }
@Override
public void dispose() { }
@Override
public boolean isLabelProperty(Object element, String property) {
return false;
}
@Override
public void removeListener(ILabelProviderListener listener) { }
@Override
public Image getImage(Object element) {
if(element instanceof ResultModel)
return PlatformUI.getWorkbench().getSharedImages().getImage(org.eclipse.ui.ide.IDE.SharedImages.IMG_OBJ_PROJECT );
if(element instanceof ModelSmellResult)
return PlatformUI.getWorkbench().getSharedImages().getImage(org.eclipse.ui.ide.IDE.SharedImages.IMG_OBJ_PROJECT );
if(element instanceof EObjectGroup)
return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER);
if(element instanceof EObject)
return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
return null;
}
@SuppressWarnings({ "deprecation" })
@Override
public String getText(Object element) {
if(element instanceof LinkedList<?>) {
// LinkedList<ResultModel> resultModels = (LinkedList<ResultModel>)element;
return "All results";
}
if(element instanceof ResultModel){
int smellcount = 0;
for(ModelSmellResult result : ((ResultModel)element).getModelSmellResults()){
// for(EObjectGroup group : result.getEObjectGroups()){
// smellcount++;
// }
smellcount += result.getEObjectGroups().size();
}
if(smellcount == 1){
return ((ResultModel)element).getDate().toLocaleString() + " (" + smellcount + " occurence of a smell)";
}else
return ((ResultModel)element).getDate().toLocaleString() + " (" + smellcount + " occurences of smells)";
}
if(element instanceof ModelSmellResult){
String areaLabel;
int resultElementCount = ((ModelSmellResult)element).getEObjectGroups().size();
if(resultElementCount == 1)
areaLabel = "area";
else
areaLabel = "areas";
return
((ModelSmellResult)element).getModelSmell().getName() + " (" + resultElementCount + " " + areaLabel + " identified)";
//((ModelSmellResult)element).getModelSmell().getName() + " (" + ((ModelSmellResult)element).getModelSmell().getDescription() +") (" + resultElementCount + " " + areaLabel + " identified)";
}
if(element instanceof EObjectGroup){
String label = "{";
for(EObject object : ((EObjectGroup)element).getEObjects()){
label += getEObjectLabel(object) + ", ";
}
if(label.endsWith(", ") && label.length() >= 2)
label = label.substring(0, label.length() - 2);
label += "}";
return label;
}
if(element instanceof EObject){
EObject eObject = (EObject)element;
return getEObjectLabel(eObject);
}
return "";
}
private String getEObjectLabel(EObject eObject){
String name = null;
String label = null;
String id = null;
for(EAttribute attribute : eObject.eClass().getEAllAttributes()){
if (attribute.getName().equalsIgnoreCase("name")) {
name = (String) eObject.eGet(attribute);
break;
}
}
for(EOperation operation : eObject.eClass().getEAllOperations()){
try{
if(operation.getName().equals("getName") && name == null)
name = (String)eObject.eInvoke(operation, null);
if(operation.getName().equals("getLabel") && label == null)
label = (String)eObject.eInvoke(operation, null);
if(operation.getName().equals("getID") && id == null)
id = (String)eObject.eInvoke(operation, null);
if(operation.getName().equals("getId") && id == null)
id = (String)eObject.eInvoke(operation, null);
} catch (Exception e) {
}
}
if(name != null && !name.isEmpty())
return name;
if(label != null && !label.isEmpty())
return label;
if(id != null && !id.isEmpty())
return id;
if(eObject instanceof ENamedElement)
if(((ENamedElement) eObject).getName() != null && !((ENamedElement) eObject).getName().equals(""))
return ((ENamedElement)eObject).getName();
else
return eObject.toString();
else
return eObject.toString();
}
}