1 /**********************************************************************
2  Copyright (c) 2000, 2002 IBM Corp. and others.
3  All rights reserved. This program and the accompanying materials
4  are made available under the terms of the Common Public License v1.0
5  which accompanies this distribution, and is available at
6  http://www.eclipse.org/legal/cpl-v10.html
7 
8  Contributors:
9  IBM Corporation - Initial implementation
10  Vicente Fernando - www.alfersoft.com.ar
11  **********************************************************************/
12 package net.sourceforge.phpdt.internal.debug.ui;
13 
14 import java.util.HashMap;
15 
16 import net.sourceforge.phpdt.internal.debug.core.breakpoints.PHPLineBreakpoint;
17 import net.sourceforge.phpdt.internal.debug.core.model.IPHPDebugTarget;
18 import net.sourceforge.phpdt.internal.debug.core.model.PHPStackFrame;
19 import net.sourceforge.phpdt.internal.debug.core.model.PHPThread;
20 import net.sourceforge.phpdt.internal.debug.core.model.PHPValue;
21 import net.sourceforge.phpdt.internal.debug.core.model.PHPVariable;
22 
23 import org.eclipse.core.resources.IFile;
24 import org.eclipse.core.resources.IMarker;
25 import org.eclipse.core.runtime.CoreException;
26 import org.eclipse.debug.core.DebugPlugin;
27 import org.eclipse.debug.core.model.IBreakpoint;
28 import org.eclipse.debug.core.model.IValue;
29 import org.eclipse.debug.ui.DebugUITools;
30 import org.eclipse.debug.ui.IDebugModelPresentation;
31 import org.eclipse.debug.ui.IDebugUIConstants;
32 import org.eclipse.debug.ui.IValueDetailListener;
33 import org.eclipse.jface.viewers.LabelProvider;
34 import org.eclipse.swt.graphics.Image;
35 import org.eclipse.ui.IEditorDescriptor;
36 import org.eclipse.ui.IEditorInput;
37 import org.eclipse.ui.IEditorRegistry;
38 import org.eclipse.ui.PlatformUI;
39 import org.eclipse.ui.part.FileEditorInput;
40 
41 /**
42  * @see IDebugModelPresentation
43  */
44 public class PHPDebugModelPresentation extends LabelProvider implements
45 		IDebugModelPresentation {
46 
47 	protected HashMap fAttributes = new HashMap(3);
48 
PHPDebugModelPresentation()49 	public PHPDebugModelPresentation() {
50 		super();
51 	}
52 
53 	/**
54 	 * @see IDebugModelPresentation#getEditorId(IEditorInput, Object)
55 	 */
getEditorId(IEditorInput input, Object inputObject)56 	public String getEditorId(IEditorInput input, Object inputObject) {
57 		IEditorRegistry registry = PlatformUI.getWorkbench()
58 				.getEditorRegistry();
59 		IEditorDescriptor descriptor = registry.getDefaultEditor(input
60 				.getName());
61 		if (descriptor != null)
62 			return descriptor.getId();
63 
64 		return null;
65 	}
66 
67 	/**
68 	 * @see IDebugModelPresentation#setAttribute(String, Object)
69 	 */
setAttribute(String id, Object value)70 	public void setAttribute(String id, Object value) {
71 		if (value == null) {
72 			return;
73 		}
74 		fAttributes.put(id, value);
75 	}
76 
77 	/**
78 	 * @see IDebugModelPresentation#getEditorInput(Object)
79 	 */
getEditorInput(Object item)80 	public IEditorInput getEditorInput(Object item) {
81 
82 		if (item instanceof PHPLineBreakpoint) {
83 			IBreakpoint bp = (IBreakpoint) item;
84 			IMarker ma = bp.getMarker();
85 			//IFile eclipseFile = PHPDebugUiPlugin.getWorkspace().getRoot()
86 			//		.getFileForLocation(ma.getResource().getLocation());
87 			IFile eclipseFile = PHPDebugUiPlugin.getWorkspace().getRoot()
88 					.getFile(ma.getResource().getFullPath());
89 			if (eclipseFile == null) {
90 				return null;
91 			}
92 			return new FileEditorInput(eclipseFile);
93 		}
94 		return null;
95 	}
96 
97 	/**
98 	 * @see IDebugModelPresentation#getImage(Object)
99 	 */
getImage(Object element)100 	public Image getImage(Object element) {
101 		if (element instanceof PHPLineBreakpoint) {
102 			return DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_BREAKPOINT);
103 		} else if (element instanceof IMarker) {
104 			return DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_BREAKPOINT);
105 		} else if (element instanceof PHPStackFrame
106 				|| element instanceof PHPThread
107 				|| element instanceof IPHPDebugTarget) {
108 			return getDebugElementImage(element);
109 		} else if (element instanceof PHPVariable) {
110 			return getVariableImage((PHPVariable) element);
111 		} else if (element instanceof PHPValue) {
112 			return getValueImage((PHPValue) element);
113 		}
114 		return DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_BREAKPOINT);
115 	}
116 
getVariableImage(PHPVariable phpVar)117 	private Image getVariableImage(PHPVariable phpVar) {
118 		/*
119 		 * if (phpVar != null) { if (phpVar.isLocal()) return
120 		 * DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_VARIABLE); if
121 		 * (phpVar.isHashValue()) return
122 		 * DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_VARIABLE); }
123 		 */
124 		return DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_VARIABLE);
125 	}
126 
getValueImage(PHPValue phpVar)127 	private Image getValueImage(PHPValue phpVar) {
128 		if (phpVar != null) {
129 			return DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_VARIABLE);
130 		}
131 		return DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_VARIABLE);
132 	}
133 
134 	/**
135 	 * @see IDebugModelPresentation#getText(Object)
136 	 */
getText(Object element)137 	public String getText(Object element) {
138 		try {
139 			if (element instanceof PHPLineBreakpoint) {
140 				return getBreakpointText((IBreakpoint) element);
141 			} else if (element instanceof PHPVariable) {
142 				PHPVariable phpVar = (PHPVariable) element;
143 				return phpVar.toString();
144 			}
145 		} catch (CoreException e) {
146 			return PHPDebugUiMessages
147 					.getString("PHPDebugModelPresentation.<not responding>"); //$NON-NLS-1$
148 		}
149 		return null;
150 	}
151 
152 	/**
153 	 * @see IDebugModelPresentation#computeDetail(IValue, IValueDetailListener)
154 	 */
computeDetail(IValue value, IValueDetailListener listener)155 	public void computeDetail(IValue value, IValueDetailListener listener) {
156 		return;
157 	}
158 
getBreakpoint(IMarker marker)159 	protected IBreakpoint getBreakpoint(IMarker marker) {
160 		return DebugPlugin.getDefault().getBreakpointManager().getBreakpoint(
161 				marker);
162 	}
163 
getBreakpointText(IBreakpoint breakpoint)164 	protected String getBreakpointText(IBreakpoint breakpoint)
165 			throws CoreException {
166 		if (breakpoint instanceof PHPLineBreakpoint) {
167 			return getLineBreakpointText((PHPLineBreakpoint) breakpoint);
168 		}
169 		return ""; //$NON-NLS-1$
170 	}
171 
getLineBreakpointText(PHPLineBreakpoint breakpoint)172 	protected String getLineBreakpointText(PHPLineBreakpoint breakpoint)
173 			throws CoreException {
174 		StringBuffer label = new StringBuffer();
175 
176 		label.append(breakpoint.getMarker().getResource().getFullPath());
177 		label.append(" ["); //$NON-NLS-1$
178 		label.append(PHPDebugUiMessages
179 				.getString("PHPDebugModelPresentation.line")); //$NON-NLS-1$
180 		label.append(' ');
181 		label.append(breakpoint.getLineNumber());
182 		label.append(']');
183 
184 		if (breakpoint.getHitCount() > 0) {
185 			label.append(" [skip count ");
186 			label.append(breakpoint.getHitCount());
187 			label.append(']');
188 		}
189 
190 		if (breakpoint.isConditionEnabled()) {
191 			label.append(" [conditional]");
192 		}
193 
194 		return label.toString();
195 	}
196 
197 	/**
198 	 * Returns the image associated with the given element or <code>null</code>
199 	 * if none is defined.
200 	 */
getDebugElementImage(Object element)201 	protected Image getDebugElementImage(Object element) {
202 		Image image = null;
203 		if (element instanceof PHPThread) {
204 			PHPThread thread = (PHPThread) element;
205 			if (thread.isSuspended()) {
206 				image = DebugUITools
207 						.getImage(IDebugUIConstants.IMG_OBJS_THREAD_SUSPENDED);
208 			} else if (thread.isTerminated()) {
209 				image = DebugUITools
210 						.getImage(IDebugUIConstants.IMG_OBJS_THREAD_TERMINATED);
211 			} else {
212 				image = DebugUITools
213 						.getImage(IDebugUIConstants.IMG_OBJS_THREAD_RUNNING);
214 			}
215 		} else if (element instanceof PHPStackFrame) {
216 			image = DebugUITools
217 					.getImage(IDebugUIConstants.IMG_OBJS_STACKFRAME);
218 		} else if (element instanceof IPHPDebugTarget) {
219 			IPHPDebugTarget debugTarget = (IPHPDebugTarget) element;
220 			if (debugTarget.isTerminated()) {
221 				image = DebugUITools
222 						.getImage(IDebugUIConstants.IMG_OBJS_DEBUG_TARGET_TERMINATED);
223 			} else {
224 				image = DebugUITools
225 						.getImage(IDebugUIConstants.IMG_OBJS_DEBUG_TARGET);
226 			}
227 		}
228 		return image;
229 	}
230 }
231