Java tutorial
/** * Copyright (c) 2009-2011, The HATS Consortium. All rights reserved. * This file is licensed under the terms of the Modified BSD License. */ package org.absmodels.abs.plugin.debug.views.debugview; import static org.absmodels.abs.plugin.debug.DebugUtils.getDebugger; import static org.absmodels.abs.plugin.debug.DebugUtils.getSchedulerRef; import static org.absmodels.abs.plugin.util.Constants.STYLER_BLACK; import static org.absmodels.abs.plugin.util.Constants.STYLER_GREY; import static org.absmodels.abs.plugin.util.Images.*; import java.util.List; import org.absmodels.abs.plugin.debug.model.Objects; import org.absmodels.abs.plugin.debug.model.Tasks; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.StyledCellLabelProvider; import org.eclipse.jface.viewers.StyledString; import org.eclipse.jface.viewers.ViewerCell; import org.eclipse.swt.graphics.Image; import abs.backend.java.debugging.COGInfo; import abs.backend.java.debugging.DebugModel; import abs.backend.java.debugging.TaskState; import abs.backend.java.observing.COGView; import abs.backend.java.observing.MethodView; import abs.backend.java.observing.ObjectView; import abs.backend.java.observing.TaskStackFrameView; import abs.backend.java.observing.TaskView; /** * StyledLabelProvider for the TreeViewer of the DebugView. This class provides colored labels and icons * for the debug tree reflecting the state of tasks, COGs and other elements of the debugged program. * @author tfischer */ public class DebugTreeStyledLabelProvider extends StyledCellLabelProvider implements ILabelProvider { public DebugTreeStyledLabelProvider() { super(StyledCellLabelProvider.COLORS_ON_SELECTION); } @Override public Image getImage(Object element) { DebugModel model = getDebugger().getModel(); if (element instanceof DebugModel) { return DEBUGGER_PROGRAM; } else if (element instanceof COGView) { if (((COGView) element).getScheduler().getSchedulableTasks().size() > 0) { return DEBUGGER_COG; } else { return DEBUGGER_COG_INACTIVE; } } else if (element instanceof TaskView) { if (model.getTaskInfo((TaskView) element).getState() == TaskState.READY) { return DEBUGGER_TASK_READY; } else if (model.getTaskInfo((TaskView) element).getState() == TaskState.SUSPENDED) { return DEBUGGER_TASK_SUSPENDED; } else if (model.getTaskInfo((TaskView) element).getState() == TaskState.RUNNING) { return DEBUGGER_TASK_RUNNING; } else if (model.getTaskInfo((TaskView) element).getState() == TaskState.FINISHED) { return DEBUGGER_TASK_FINISHED; } else if (model.getTaskInfo((TaskView) element).getState() == TaskState.DEADLOCKED) { return DEBUGGER_TASK_DEADLOCKED; } else if (model.getTaskInfo((TaskView) element).getState() == TaskState.ASSERTION_FAILED) { return DEBUGGER_TASK_ASSERTION_FAILED; } else if (model.getTaskInfo((TaskView) element).getState() == TaskState.EXCEPTION) { return DEBUGGER_TASK_EXCEPTION; } else if (model.getTaskInfo((TaskView) element).getState() == TaskState.BLOCKED) { return DEBUGGER_TASK_BLOCKED; } else { return null; } } else if (element instanceof Tasks) { if (((Tasks) element).getCOG().getScheduler().getSchedulableTasks().size() > 0) { return DEBUGGER_TASKS; } else { return DEBUGGER_TASKS_INACTIVE; } } else if (element instanceof TaskStackFrameView) { return DEBUGGER_STACK_FRAME; } else if (element instanceof Objects) { return DEBUGGER_OBJECTS; } else if (element instanceof ObjectView) { return DEBUGGER_OBJECT; } else { return null; } } @Override public String getText(Object element) { return getLabel(element).toString(); } @Override public void update(ViewerCell cell) { Object obj = cell.getElement(); StyledString styledString = getLabel(obj); cell.setText(styledString.toString()); cell.setStyleRanges(styledString.getStyleRanges()); cell.setImage(getImage(obj)); super.update(cell); } private COGInfo getCOGInfo(COGView cog) { return getDebugger().getModel().getCOGInfo(cog); } private ObjectView getInitialObject(COGView cog) { return getCOGInfo(cog).getInitialObject(); } private StyledString getLabel(Object element) { if (element instanceof TaskView) { String s = "Task " + ((TaskView) element).getID() + " (" + ((TaskView) element).getMethodName() + ")"; List<TaskView> schedulableTasks = getSchedulerRef().getSchedulableTasks(); if (schedulableTasks != null) { for (TaskView taskView : schedulableTasks) { if (taskView.getID() == ((TaskView) element).getID()) { return new StyledString(s, STYLER_BLACK); } } } return new StyledString(s, STYLER_GREY); } else if (element instanceof COGView) { COGView cog = (COGView) element; String s = "COG " + cog.getID() + " (" + getInitialObject(cog).getClassName() + " " + getInitialObject(cog).getID() + ")"; //for color of the string, check if there is a task that can be stepped if (cog.getScheduler().getSchedulableTasks().size() > 0) { return new StyledString(s, STYLER_BLACK); } else { return new StyledString(s, STYLER_GREY); } } else if (element instanceof Tasks) { String s = "Tasks (" + getCOGInfo(((Tasks) element).getCOG()).getTasks().size() + ")"; //for color of the string, check if there is a task that can be stepped if (((Tasks) element).getCOG().getScheduler().getSchedulableTasks().size() > 0) { return new StyledString(s, STYLER_BLACK); } else { return new StyledString(s, STYLER_GREY); } } else if (element instanceof Objects) { return new StyledString("Objects (" + ((Objects) element).getObjects().size() + ")", STYLER_BLACK); } else if (element instanceof TaskStackFrameView) { TaskStackFrameView tsv = ((TaskStackFrameView) element); MethodView mv = tsv.getMethod(); return new StyledString("StackFrame (" + mv.toString() + ")", STYLER_BLACK); } else if (element instanceof ObjectView) { ObjectView obj = (ObjectView) element; return new StyledString(obj.getClassName() + " " + obj.getID(), STYLER_BLACK); } else if (element instanceof DebugModel) { return new StyledString(getDebugger().getProjectName(), STYLER_BLACK); } else { return new StyledString("UnknownObject", STYLER_GREY); } } }