/******************************************************************************* * Copyright (c) 2007, 2009 Wind River 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: * Wind River Systems - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.dsf.ui.viewmodel.properties; import java.util.Map; import org.eclipse.core.runtime.IStatus; import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate; /** * This is a base class for a label attribute used in generating label * information based on properties of an element. There are currently * four types of attributes: text, image, font, and color, and a given * attribute can be either enabled or disabled based on the element * properties. * <p/> * Clients are intended to override this class and its extensions to * implement the {@link LabelAttribute#isEnabled(Map)} and * {@link LabelAttribute#getPropertyNames()} methods as needed. Clients can * also override how the attribute settings are stored, for example in * order to use a preference. * * @see PropertiesBasedLabelProvider * @see LabelColumnInfo * * @since 1.0 */ abstract public class LabelAttribute { public static final String[] EMPTY_PROPERTY_NAMES_ARRAY = new String[0]; /** * @since 2.0 */ private String[] fPropertyNames = EMPTY_PROPERTY_NAMES_ARRAY; public LabelAttribute() { this(EMPTY_PROPERTY_NAMES_ARRAY); } /** * @since 2.0 */ public LabelAttribute(String[] propertyNames) { setPropertyNames(propertyNames); } protected void setPropertyNames(String[] propertyNames) { fPropertyNames = propertyNames; } /** * Returns the properties that are needed by this attribute in order to * determine whether this attribute is enabled and/or for the actual * attribute itself. * @return Array of names of properties for the element properties provider. */ public String[] getPropertyNames() { return fPropertyNames; } /** * Returns whether this attribute is enabled for an element which has * the given properties. The default implementation checks if all the * label's attributes are present in the properties map. * * @param status Result of the properties update. * @param properties Properties supplied by a property update. * @return true if this attribute is enabled. * * @since 2.0 */ public boolean isEnabled(IStatus status, Map<String, Object> properties) { for (String propertyName : getPropertyNames()) { if (!checkProperty(propertyName, status, properties)) { return false; } } return true; } /** * Checks the status of the given property in the given properties map. The * default implementation returns <code>true</code> if the given property * exists and is not null. * * @param propertyName Name of the property to check. * @param status Result of the properties update. * @param properties Properties map following an update. * @return <code>true</code> if the property exists in the given map and * its value is not null. * * @since 2.0 */ protected boolean checkProperty(String propertyName, IStatus status, Map<String, Object> properties) { return properties.get(propertyName) != null; } /** * Updates the label with this attribute. * * @param update Label update object to write to. * @param columnIndex Column index to write at. * @param status Result of the property update. * @param properties Property values map. It is guaranteed to contain all * the properties that this attribute requested through * {@link getPropertyNames()}. * * @since 2.0 */ abstract public void updateAttribute(ILabelUpdate update, int columnIndex, IStatus status, Map<String, Object> properties); }