/*******************************************************************************
* Copyright (c) 2008, 2010 QNX Software Systems and others.
*
* 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:
* QNX Software Systems - Initial API and implementation
* QNX Software Systems - catchpoints - bug 226689
*******************************************************************************/
package org.eclipse.cdt.debug.ui.breakpoints;
import org.eclipse.cdt.debug.core.DebugCoreMessages;
import org.eclipse.cdt.debug.core.model.ICBreakpoint;
import org.eclipse.cdt.debug.core.model.ICEventBreakpoint;
import org.eclipse.cdt.debug.internal.ui.CDebugModelPresentation;
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdapterFactory;
import org.eclipse.debug.internal.ui.model.elements.BreakpointLabelProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
import com.ibm.icu.text.MessageFormat;
/**
* Factory for event breakpoint label provider
*/
public class CEventBreakpointsLabelProviderFactory implements IAdapterFactory {
private static ILabelProvider fLabelProvider = new LabelProvider() {
@Override
public String getText(Object element) {
if (element instanceof ICEventBreakpoint) {
try {
ICEventBreakpoint breakpoint = (ICEventBreakpoint) element;
ICBreakpointsUIContribution bscs[] = CBreakpointUIContributionFactory.getInstance()
.getBreakpointUIContributions(breakpoint);
if (bscs.length == 0)
return null;
StringBuffer buffer = new StringBuffer();
for (ICBreakpointsUIContribution con : bscs) {
Object attValue = breakpoint.getMarker().getAttribute(con.getId());
if (con.getId().equals(ICEventBreakpoint.EVENT_TYPE_ID)) {
buffer.append(con.getLabelForValue((String) attValue));
continue;
}
if (attValue != null && attValue.toString().length() > 0) {
buffer.append(" ["); //$NON-NLS-1$
buffer.append(con.getLabel());
buffer.append(": "); //$NON-NLS-1$
if (attValue instanceof String)
buffer.append(con.getLabelForValue((String) attValue));
else
buffer.append(attValue);
buffer.append(']');
}
}
appendIgnoreCount(breakpoint, buffer);
appendCondition(breakpoint, buffer);
return buffer.toString();
} catch (CoreException e) {
CDebugUIPlugin.log(e);
}
}
return null;
}
/**
* Returns null. We do not provide the image because it would require
* duplicating centralized code in {@link CDebugModelPresentation},
* particularly the code that determines the proper overlays. This
* adapter is actually only called from within CDebugModelPresentation
* and we know it will do the right thing for an event breakpoint if we
* return null here.
*
* @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object)
*/
@Override
public Image getImage(Object element) {
return null;
}
};
protected static StringBuffer appendIgnoreCount(ICBreakpoint breakpoint, StringBuffer label) throws CoreException {
int ignoreCount = breakpoint.getIgnoreCount();
if (ignoreCount > 0) {
label.append(' ');
label.append(MessageFormat.format(
DebugCoreMessages.getString("CDebugUtils.3"), new String[] { Integer.toString(ignoreCount) })); //$NON-NLS-1$
}
return label;
}
protected static void appendCondition(ICBreakpoint breakpoint, StringBuffer buffer) throws CoreException {
String condition = breakpoint.getCondition();
if (condition != null && condition.length() > 0) {
buffer.append(' ');
buffer.append(MessageFormat
.format(DebugCoreMessages.getString("CDebugUtils.4"), new String[] { condition })); //$NON-NLS-1$
}
}
private static IElementLabelProvider fElementLabelProvider = new BreakpointLabelProvider();
/* (non-Javadoc)
* @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, java.lang.Class)
*/
@SuppressWarnings("rawtypes")
public Object getAdapter(Object adaptableObject, Class adapterType) {
if (adapterType.equals(IElementLabelProvider.class)) {
if (adaptableObject instanceof ICEventBreakpoint) {
return fElementLabelProvider;
}
}
if (adapterType.equals(ILabelProvider.class)) {
if (adaptableObject instanceof ICEventBreakpoint) {
return fLabelProvider;
}
}
return null;
}
/* (non-Javadoc)
* @see org.eclipse.core.runtime.IAdapterFactory#getAdapterList()
*/
@SuppressWarnings("rawtypes")
public Class[] getAdapterList() {
return new Class[] { IElementLabelProvider.class, ILabelProvider.class };
}
}