/******************************************************************************* * Copyright (c) 2008 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 java.lang.reflect.Constructor; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; import org.eclipse.cdt.debug.ui.CDebugUIPlugin; import org.eclipse.cdt.debug.ui.preferences.ReadOnlyFieldEditor; import org.eclipse.jface.preference.FieldEditor; import org.eclipse.swt.widgets.Composite; class DefaultCBreakpointUIContribution implements ICBreakpointsUIContribution { private String attLabel; private String attId; private String fieldEditorClassName; private String markerType; private String modelId; private String attType; private Map<String, String> valueLabels = new LinkedHashMap<String, String>(); private Map<String, String> conditions = new HashMap<String, String>(); public String getId() { return attId; } public String getLabel() { return attLabel; } public String getDebugModelId() { return modelId; } static private Class[] fieldSignature = new Class[] { String.class, String.class, Composite.class }; public FieldEditor getFieldEditor(String name, String labelText, Composite parent) { String className = fieldEditorClassName; if (fieldEditorClassName == null) { className = ReadOnlyFieldEditor.class.getName(); } try { Class cclass = Class.forName(className); Constructor constructor = cclass.getConstructor(fieldSignature); FieldEditor editor = (FieldEditor) constructor.newInstance(name, labelText, parent); if (editor instanceof ICBreakpointsUIContributionUser) { ((ICBreakpointsUIContributionUser)editor).setContribution(this); } return editor; } catch (Exception e) { // cannot happened, would have happened when loading extension CDebugUIPlugin.log(e); return null; } } public String getLabelForValue(String value) { if (valueLabels.containsKey(value)) return valueLabels.get(value); return value; } public String getMarkerType() { return markerType; } public String[] getPossibleValues() { Set<String> set = valueLabels.keySet(); return set.toArray(new String[set.size()]); } public String getType() { return attType; } public boolean isApplicable(Map properties) { for (Object key : properties.keySet()) { String value = conditions.get(key); if (value != null) { String realValue = (String) properties.get(key); if (!value.equals(realValue)) { return false; } } } return true; } public void setLabel(String attLabel) { this.attLabel = attLabel; } public void setId(String attId) { this.attId = attId; } public void setControlClass(String controlClass) { this.fieldEditorClassName = controlClass; } public void setMarkerType(String markerId) { this.markerType = markerId; } public void setDebugModelId(String modelId) { this.modelId = modelId; } public void setType(String attType) { this.attType = attType; } public void addValue(String value, String valueLabel) { valueLabels.put(value, valueLabel); }; public void addContionEquals(String property, String value) { conditions.put(property, value); } public void setVisible(boolean visible) { // TODO Auto-generated method stub } public Map<String, String> getConditions() { return conditions; } public void addContionsAll(Map<String, String> conditions2) { conditions.putAll(conditions2); } @Override public String toString() { return attId + " " + attLabel; //$NON-NLS-1$ } public String getFieldEditorClassName() { return fieldEditorClassName; } }