package org.dresdenocl.debug.ui.resource;
import org.dresdenocl.debug.model.OclDebugValue;
import org.dresdenocl.debug.ui.OclDebugUIPlugin;
import org.dresdenocl.language.ocl.resource.ocl.ui.OclUIPlugin;
import org.eclipse.core.resources.IFile;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.model.ILineBreakpoint;
import org.eclipse.debug.core.model.IStackFrame;
import org.eclipse.debug.core.model.IValue;
import org.eclipse.debug.ui.IDebugModelPresentation;
import org.eclipse.debug.ui.IInstructionPointerPresentation;
import org.eclipse.debug.ui.IValueDetailListener;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.text.source.Annotation;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.part.FileEditorInput;
public class OclDebugModelPresentation implements IDebugModelPresentation,
IInstructionPointerPresentation {
private ImageDescriptor instructionPointerImageDescr;
private Image instructionPointerImage;
public OclDebugModelPresentation() {
super();
instructionPointerImageDescr =
OclDebugUIPlugin.imageDescriptorFromPlugin(OclDebugUIPlugin.PLUGIN_ID,
"icons/instructionpointer_icon_top.gif");
}
@Override
public void addListener(ILabelProviderListener listener) {
}
@Override
public void dispose() {
if (instructionPointerImage != null) {
instructionPointerImage.dispose();
}
}
@Override
public boolean isLabelProperty(Object element, String property) {
return false;
}
@Override
public void removeListener(ILabelProviderListener listener) {
}
@Override
public IEditorInput getEditorInput(Object element) {
System.out.println(element);
if (element instanceof IFile) {
return new FileEditorInput((IFile) element);
}
else if (element instanceof ILineBreakpoint) {
return new FileEditorInput((IFile) ((ILineBreakpoint) element)
.getMarker().getResource());
}
else {
return null;
}
}
@Override
public String getEditorId(IEditorInput input, Object element) {
if (element instanceof IFile || element instanceof ILineBreakpoint) {
return OclUIPlugin.EDITOR_ID;
}
return null;
}
@Override
public void setAttribute(String attribute, Object value) {
System.out.println("OclDebugModelPresentation.getImage: attribute = "
+ attribute + "value = " + value);
}
@Override
public Image getImage(Object element) {
return null;
}
@Override
public String getText(Object element) {
return null;
}
@Override
public void computeDetail(IValue value, IValueDetailListener listener) {
if (value instanceof OclDebugValue) {
OclDebugValue val = (OclDebugValue) value;
try {
listener.detailComputed(value, val.getValueString());
} catch (DebugException e) {
e.printStackTrace();
}
}
}
@Override
public Annotation getInstructionPointerAnnotation(IEditorPart editorPart,
IStackFrame frame) {
// TODO Auto-generated method stub
return null;
}
@Override
public String getInstructionPointerAnnotationType(IEditorPart editorPart,
IStackFrame frame) {
return null;
}
@Override
public Image getInstructionPointerImage(IEditorPart editorPart,
IStackFrame frame) {
if (instructionPointerImage == null) {
instructionPointerImage = instructionPointerImageDescr.createImage();
}
return instructionPointerImage;
}
@Override
public String getInstructionPointerText(IEditorPart editorPart,
IStackFrame frame) {
return frame.toString();
}
}