/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.component.model.configuration.impl;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import de.rcenvironment.core.component.api.ComponentConstants;
import de.rcenvironment.core.component.model.configuration.api.ConfigurationDefinition;
import de.rcenvironment.core.component.model.configuration.api.ConfigurationDefinitionConstants;
import de.rcenvironment.core.component.model.configuration.api.ConfigurationMetaDataDefinition;
import de.rcenvironment.core.component.model.configuration.api.PlaceholdersMetaDataDefinition;
import de.rcenvironment.core.component.model.configuration.api.ReadOnlyConfiguration;
/**
* Implementation of {@link ConfigurationDefinition}.
*
* @author Doreen Seider
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public class ConfigurationDefinitionImpl implements Serializable, ConfigurationDefinition {
private static final long serialVersionUID = -3257767738643151923L;
private List<Object> rawConfigurationDef = new ArrayList<Object>();
private List<Object> rawPlaceholderMetaDataDef = new ArrayList<Object>();
private List<Object> rawConfigurationMetaDataDef = new ArrayList<Object>();
private Map<String, String> rawReadOnlyConfiguration = new HashMap<String, String>();
private Map<String, Object> rawActivationFilter = new HashMap<>();
@JsonIgnore
private Map<String, Object> configurationDef = new HashMap<String, Object>();
@JsonIgnore
private PlaceholdersMetaDataDefinition placeholderMetaDataDef = new PlaceholdersMetaDataDefinitionImpl();
@JsonIgnore
private ConfigurationMetaDataDefinition configurationMetaDataDef = new ConfigurationMetaDataDefinitionImpl();
@JsonIgnore
private ReadOnlyConfiguration readOnlyConfiguration = new ReadOnlyConfigurationImpl();
/**
* @param configurationDefs {@link ConfigurationDefinition} objects to merge and set
*/
@JsonIgnore
public void setConfigurationDefinitions(Set<ConfigurationDefinition> configurationDefs) {
for (ConfigurationDefinition def : configurationDefs) {
rawConfigurationDef.addAll(((ConfigurationDefinitionImpl) def).rawConfigurationDef);
rawPlaceholderMetaDataDef.addAll(((ConfigurationDefinitionImpl) def).rawPlaceholderMetaDataDef);
rawConfigurationMetaDataDef.addAll(((ConfigurationDefinitionImpl) def).rawConfigurationMetaDataDef);
rawReadOnlyConfiguration.putAll(((ConfigurationDefinitionImpl) def).rawReadOnlyConfiguration);
}
setRawConfigurationDefinition(rawConfigurationDef);
setRawPlaceholderMetaDataDefinition(rawPlaceholderMetaDataDef);
setRawConfigurationMetaDataDefinition(rawConfigurationMetaDataDef);
setRawReadOnlyConfiguration(rawReadOnlyConfiguration);
}
@JsonIgnore
@Override
public Set<String> getConfigurationKeys() {
return Collections.unmodifiableSet(configurationDef.keySet());
}
/**
* @param key configuration key
* @return default value or <code>null</code> if no one is defined
*/
@JsonIgnore
@Override
public String getDefaultValue(String key) {
return (String) ((Map<String, Object>) configurationDef.get(key)).get(ComponentConstants.KEY_DEFAULT_VALUE);
}
/**
* @param key configuration key
* @return activation filter for key or <code>null</code> if no one is defined
*/
@JsonIgnore
public Map<String, List<String>> getActivationFilter(String key) {
return (Map<String, List<String>>) ((Map<String, Object>) configurationDef.get(key))
.get(ConfigurationDefinitionConstants.JSON_KEY_ACTIVATION_FILTER);
}
/**
* @param configuration current configuration
* @return <code>true</code> if configuration is active and must be considered, otherwise <code>false</code>
*/
@JsonIgnore
public boolean isActive(Map<String, String> configuration) {
if (rawActivationFilter != null) {
for (String key : rawActivationFilter.keySet()) {
if (configuration.get(key) == null || !((List<Object>) rawActivationFilter.get(key)).contains(configuration.get(key))) {
return false;
}
}
}
return true;
}
/**
* Get complete declarative configuration entry from given key.
*
* @param key to get configuration from
* @return all information about the configuration
*/
@JsonIgnore
public Object getConfigurationEntry(String key) {
return configurationDef.get(key);
}
@JsonIgnore
@Override
public ReadOnlyConfiguration getReadOnlyConfiguration() {
return readOnlyConfiguration;
}
@JsonIgnore
@Override
public PlaceholdersMetaDataDefinition getPlaceholderMetaDataDefinition() {
return placeholderMetaDataDef;
}
@JsonIgnore
@Override
public ConfigurationMetaDataDefinition getConfigurationMetaDataDefinition() {
return configurationMetaDataDef;
}
public List<Object> getRawConfigurationDefinition() {
return rawConfigurationDef;
}
public List<Object> getRawPlaceholderMetaDataDefinition() {
return rawPlaceholderMetaDataDef;
}
public List<Object> getRawConfigurationMetaDataDefinition() {
return rawConfigurationMetaDataDef;
}
public Map<String, String> getRawReadOnlyConfiguration() {
return rawReadOnlyConfiguration;
}
public Map<String, Object> getRawActivationFilter() {
return rawActivationFilter;
}
/**
* @param incConfigurationDef raw configuration definition
*/
public void setRawConfigurationDefinition(List<Object> incConfigurationDef) {
rawConfigurationDef = incConfigurationDef;
for (Object obj : rawConfigurationDef) {
configurationDef.put((String) ((Map<String, Object>) obj).get(ConfigurationDefinitionConstants.KEY_CONFIGURATION_KEY), obj);
}
}
/**
* @param incPlaceholderMetaDataDef raw placeholders definition
*/
public void setRawPlaceholderMetaDataDefinition(List<Object> incPlaceholderMetaDataDef) {
rawPlaceholderMetaDataDef = incPlaceholderMetaDataDef;
placeholderMetaDataDef = new PlaceholdersMetaDataDefinitionImpl();
((PlaceholdersMetaDataDefinitionImpl) placeholderMetaDataDef).setPlaceholderMetaDataDefinition(incPlaceholderMetaDataDef);
}
/**
* @param incConfigurationMetaDataDef raw placeholder meta data definition
*/
public void setRawConfigurationMetaDataDefinition(List<Object> incConfigurationMetaDataDef) {
rawConfigurationMetaDataDef = incConfigurationMetaDataDef;
configurationMetaDataDef = new ConfigurationMetaDataDefinitionImpl();
((ConfigurationMetaDataDefinitionImpl) configurationMetaDataDef).setConfigurationMetaDataDefinition(incConfigurationMetaDataDef);
}
/**
* @param incReadOnlyConfiguration raw read-only configuration meta data definition
*/
public void setRawReadOnlyConfiguration(Map<String, String> incReadOnlyConfiguration) {
rawReadOnlyConfiguration = incReadOnlyConfiguration;
readOnlyConfiguration = new ReadOnlyConfigurationImpl();
((ReadOnlyConfigurationImpl) readOnlyConfiguration).setConfiguration(incReadOnlyConfiguration);
}
/**
* @param incActivationFiler raw activation filter definition
*/
public void setRawActivationFilter(Map<String, Object> incActivationFiler) {
rawActivationFilter = incActivationFiler;
}
}