/******************************************************************************* * Copyright (c) 2012 Original authors 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: * Original authors and others - initial API and implementation ******************************************************************************/ package org.eclipse.nebula.widgets.nattable.config; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.nebula.widgets.nattable.style.ConfigAttribute; import org.eclipse.nebula.widgets.nattable.style.DefaultDisplayModeOrdering; import org.eclipse.nebula.widgets.nattable.style.DisplayMode; import org.eclipse.nebula.widgets.nattable.style.IDisplayModeOrdering; public class ConfigRegistry implements IConfigRegistry { // Map<configAttributeType, Map<displayMode, Map<configLabel, value>>> Map<ConfigAttribute<?>, Map<String, Map<String, ?>>> configRegistry = new HashMap<ConfigAttribute<?>, Map<String, Map<String, ?>>>(); @Override public <T> T getConfigAttribute(ConfigAttribute<T> configAttribute, String targetDisplayMode, String... configLabels) { return getConfigAttribute(configAttribute, targetDisplayMode, Arrays.asList(configLabels)); } @Override @SuppressWarnings("unchecked") public <T> T getConfigAttribute(ConfigAttribute<T> configAttribute, String targetDisplayMode, List<String> configLabels) { T attributeValue = null; Map<String, Map<String, ?>> displayModeConfigAttributeMap = this.configRegistry .get(configAttribute); if (displayModeConfigAttributeMap != null) { for (String displayMode : this.displayModeOrdering .getDisplayModeOrdering(targetDisplayMode)) { Map<String, T> configAttributeMap = (Map<String, T>) displayModeConfigAttributeMap .get(displayMode); if (configAttributeMap != null) { for (String configLabel : configLabels) { attributeValue = configAttributeMap.get(configLabel); if (attributeValue != null) { return attributeValue; } } // default config type attributeValue = configAttributeMap.get(null); if (attributeValue != null) { return attributeValue; } } } } return attributeValue; } @Override @SuppressWarnings("unchecked") public <T> T getSpecificConfigAttribute(ConfigAttribute<T> configAttribute, String displayMode, String configLabel) { T attributeValue = null; Map<String, Map<String, ?>> displayModeConfigAttributeMap = this.configRegistry .get(configAttribute); if (displayModeConfigAttributeMap != null) { Map<String, T> configAttributeMap = (Map<String, T>) displayModeConfigAttributeMap .get(displayMode); if (configAttributeMap != null) { attributeValue = configAttributeMap.get(configLabel); if (attributeValue != null) { return attributeValue; } } } return attributeValue; } @Override public <T> void registerConfigAttribute(ConfigAttribute<T> configAttribute, T attributeValue) { registerConfigAttribute(configAttribute, attributeValue, DisplayMode.NORMAL); } @Override public <T> void registerConfigAttribute(ConfigAttribute<T> configAttribute, T attributeValue, String displayMode) { registerConfigAttribute(configAttribute, attributeValue, displayMode, null); } @Override @SuppressWarnings("unchecked") public <T> void registerConfigAttribute(ConfigAttribute<T> configAttribute, T attributeValue, String displayMode, String configLabel) { Map<String, Map<String, ?>> displayModeConfigAttributeMap = this.configRegistry .get(configAttribute); if (displayModeConfigAttributeMap == null) { displayModeConfigAttributeMap = new HashMap<String, Map<String, ?>>(); this.configRegistry.put(configAttribute, displayModeConfigAttributeMap); } Map<String, T> configAttributeMap = (Map<String, T>) displayModeConfigAttributeMap .get(displayMode); if (configAttributeMap == null) { configAttributeMap = new HashMap<String, T>(); displayModeConfigAttributeMap.put(displayMode, configAttributeMap); } configAttributeMap.put(configLabel, attributeValue); }; @Override public <T> void unregisterConfigAttribute( ConfigAttribute<T> configAttributeType) { unregisterConfigAttribute(configAttributeType, DisplayMode.NORMAL); } @Override public <T> void unregisterConfigAttribute( ConfigAttribute<T> configAttributeType, String displayMode) { unregisterConfigAttribute(configAttributeType, displayMode, null); } @Override @SuppressWarnings("unchecked") public <T> void unregisterConfigAttribute( ConfigAttribute<T> configAttributeType, String displayMode, String configLabel) { Map<String, Map<String, ?>> displayModeConfigAttributeMap = this.configRegistry .get(configAttributeType); if (displayModeConfigAttributeMap != null) { Map<String, T> configAttributeMap = (Map<String, T>) displayModeConfigAttributeMap .get(displayMode); if (configAttributeMap != null) { configAttributeMap.remove(configLabel); } } } // Display mode ordering ////////////////////////////////////////////////// IDisplayModeOrdering displayModeOrdering = new DefaultDisplayModeOrdering(); @Override public IDisplayModeOrdering getDisplayModeOrdering() { return this.displayModeOrdering; } public void setDisplayModeOrdering(IDisplayModeOrdering displayModeOrdering) { this.displayModeOrdering = displayModeOrdering; } }