/*
* $Id$
*
* Copyright (c) 2000-2012 by Rodney Kinney, Brent Easton
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License (LGPL) as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, copies are available
* at http://www.opensource.org.
*/
package VASSAL.build.module.properties;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.JToolBar;
import VASSAL.build.AbstractConfigurable;
import VASSAL.build.Buildable;
import VASSAL.build.GameModule;
import VASSAL.build.module.documentation.HelpFile;
import VASSAL.configure.Configurer;
import VASSAL.tools.TemporaryToolBar;
import VASSAL.tools.ToolBarComponent;
/**
* Dummy component that acts as a simple container for GlobalProperty components
*
* @author rkinney
*
*/
public class GlobalProperties extends AbstractConfigurable implements MutablePropertiesContainer, ToolBarComponent, PropertySource {
private TemporaryToolBar tempToolbar = new TemporaryToolBar();
private PropertySource propertySource;
private Map<String,MutableProperty> initialValues =
new HashMap<String,MutableProperty>();
private MutablePropertiesContainer parent;
public String[] getAttributeDescriptions() {
return new String[0];
}
public Class<?>[] getAttributeTypes() {
return new Class<?>[0];
}
public String[] getAttributeNames() {
return new String[0];
}
public Configurer getConfigurer() {
return null;
}
public static String getConfigureTypeName() {
return "Global Properties";
}
public void setAttribute(String key, Object value) {
}
public String getAttributeValueString(String key) {
return null;
}
public void removeFrom(Buildable parent) {
}
public HelpFile getHelpFile() {
return HelpFile.getReferenceManualPage("GlobalProperties.htm");
}
public Class<?>[] getAllowableConfigureComponents() {
return new Class<?>[] {GlobalProperty.class};
}
public void addTo(Buildable parent) {
this.parent = (MutablePropertiesContainer) parent;
for (Map.Entry<String,MutableProperty> e : initialValues.entrySet()) {
this.parent.addMutableProperty(e.getKey(), e.getValue());
}
tempToolbar.setDelegate((ToolBarComponent) parent);
propertySource = (PropertySource) parent;
GameModule.getGameModule().addCommandEncoder(
new ChangePropertyCommandEncoder(this));
}
public void addMutableProperty(String key, MutableProperty p) {
if (parent == null) {
initialValues.put(key,p);
}
else {
parent.addMutableProperty(key, p);
}
}
public MutableProperty removeMutableProperty(String key) {
if (parent == null) {
return initialValues.remove(key);
}
else {
return parent.removeMutableProperty(key);
}
}
public JToolBar getToolBar() {
return tempToolbar.getToolBar();
}
public Object getProperty(Object key) {
return propertySource == null ? null : propertySource.getProperty(key);
}
public Object getLocalizedProperty(Object key) {
return propertySource == null ? null : propertySource.getLocalizedProperty(key);
}
public GlobalProperty getMutableProperty(String name) {
GlobalProperty property = null;
for (GlobalProperty prop : getComponentsOf(GlobalProperty.class)) {
if (prop.getConfigureName().equals(name)) {
property = prop;
}
}
return property;
}
/*
* Null i18n key prefix for this component
*/
public String getI18nPrefix() {
return "";
}
public MutablePropertiesContainer getParent() {
return parent;
}
/**
* Use the identity of the owning container (i.e. Module, map or zone)
*/
public String getMutablePropertiesContainerId() {
return parent.getMutablePropertiesContainerId();
}
public List<String> getPropertyNames() {
ArrayList<String> l = new ArrayList<String>();
for (GlobalProperty prop : getComponentsOf(GlobalProperty.class)) {
l.add(prop.getConfigureName());
}
return l;
}
}