/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.component.model.endpoint.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.apache.commons.logging.LogFactory; import org.codehaus.jackson.annotate.JsonIgnore; import de.rcenvironment.core.component.api.ComponentConstants; import de.rcenvironment.core.component.model.configuration.api.ConfigurationDefinitionConstants; import de.rcenvironment.core.component.model.endpoint.api.EndpointDefinitionConstants; import de.rcenvironment.core.component.model.endpoint.api.EndpointMetaDataConstants; import de.rcenvironment.core.component.model.endpoint.api.EndpointMetaDataConstants.Visibility; import de.rcenvironment.core.component.model.endpoint.api.EndpointMetaDataDefinition; import de.rcenvironment.core.datamodel.api.DataType; import de.rcenvironment.core.utils.common.StringUtils; /** * Implementation of {@link EndpointMetaDataDefinition}. * * @author Doreen Seider * @author Sascha Zur */ public class EndpointMetaDataDefinitionImpl implements Serializable, EndpointMetaDataDefinition { private static final long serialVersionUID = 1277591939597311465L; private static final int MINUS_ONE = -1; private static final String KEY_POSSIBLEVALUES = "possibleValues"; private static final String KEY_GUINAMESOFPOSSIBLEVALUES = "guiNamesOfPossibleValues"; private static final String KEY_VALIDATION = "validation"; private static final String KEY_GUI_ACTIVATION_FILTER = "guiActivationFilter"; private static final String DEFAULT_GROUP = ""; private static final String KEY_ENDPOINT_DATATYPES = "endpointDataTypes"; private static final String KEY_PERSISTENT = "persistent"; private static final Object KEY_GUI_VISIBILITY_FILTER = "guiVisibilityFilter"; // <meta data key, <meta data prop key, meta data prop value>> private Map<String, Map<String, Object>> rawMetaData; private Map<String, Map<String, Object>> rawMetaDataExtension; private Map<String, Map<String, Object>> combinedRawMetaData; private Map<String, List<DataType>> endpointDataTypes = new HashMap<String, List<DataType>>(); @JsonIgnore @Override public Set<String> getMetaDataKeys() { return Collections.unmodifiableSet(combinedRawMetaData.keySet()); } @JsonIgnore @Override public String getGuiName(String key) { return (String) combinedRawMetaData.get(key).get(EndpointDefinitionConstants.KEY_GUI_NAME); } @JsonIgnore @Override public String getGuiGroup(String key) { if (combinedRawMetaData.get(key).get(EndpointDefinitionConstants.KEY_GUIGROUP) != null) { return (String) combinedRawMetaData.get(key).get(EndpointDefinitionConstants.KEY_GUIGROUP); } return DEFAULT_GROUP; } @JsonIgnore @Override public int getGuiPosition(String key) { if (combinedRawMetaData.get(key).get(EndpointDefinitionConstants.KEY_GUI_POSITION) != null) { return Integer.valueOf((String) combinedRawMetaData.get(key).get(EndpointDefinitionConstants.KEY_GUI_POSITION)); } return MINUS_ONE; } @SuppressWarnings("unchecked") @JsonIgnore @Override public Map<String, List<String>> getGuiActivationFilter(String key) { return (Map<String, List<String>>) combinedRawMetaData.get(key).get(KEY_GUI_ACTIVATION_FILTER); } @SuppressWarnings("unchecked") @JsonIgnore @Override public Map<String, List<String>> getGuiVisibilityFilter(String key) { return (Map<String, List<String>>) combinedRawMetaData.get(key).get(KEY_GUI_VISIBILITY_FILTER); } @SuppressWarnings("unchecked") @JsonIgnore @Override public List<String> getPossibleValues(String key) { return (List<String>) combinedRawMetaData.get(key).get(KEY_POSSIBLEVALUES); } @SuppressWarnings("unchecked") @JsonIgnore @Override public List<String> getGuiNamesOfPossibleValues(String key) { if (combinedRawMetaData.get(key).containsKey(KEY_GUINAMESOFPOSSIBLEVALUES)) { return (List<String>) combinedRawMetaData.get(key).get(KEY_GUINAMESOFPOSSIBLEVALUES); } else { return getPossibleValues(key); } } @JsonIgnore @Override public String getDefaultValue(String key) { if ((String) combinedRawMetaData.get(key).get(ComponentConstants.KEY_DEFAULT_VALUE) != null) { return (String) combinedRawMetaData.get(key).get(ComponentConstants.KEY_DEFAULT_VALUE); } return ""; } @JsonIgnore @Override public String getDataType(String key) { if (combinedRawMetaData.get(key).get(ComponentConstants.KEY_DATATYPE) != null) { return (String) combinedRawMetaData.get(key).get(ComponentConstants.KEY_DATATYPE); } return EndpointMetaDataConstants.TYPE_TEXT; } @JsonIgnore @Override public boolean isDefinedForDataType(String key, DataType dataType) { if (!combinedRawMetaData.get(key).containsKey(KEY_ENDPOINT_DATATYPES)) { return true; } else { return endpointDataTypes.get(key).contains(dataType); } } @JsonIgnore @Override public String getValidation(String key) { return (String) combinedRawMetaData.get(key).get(KEY_VALIDATION); } @JsonIgnore @Override public Visibility getVisibility(String key) { if (combinedRawMetaData.get(key).get(EndpointDefinitionConstants.KEY_VISIBILITY) != null) { return Visibility.valueOf((String) combinedRawMetaData.get(key).get(EndpointDefinitionConstants.KEY_VISIBILITY)); } return Visibility.userConfigurable; } @JsonIgnore @Override @SuppressWarnings("unchecked") public Map<String, List<String>> getActivationFilter(String key) { return (Map<String, List<String>>) combinedRawMetaData.get(key).get(ConfigurationDefinitionConstants.JSON_KEY_ACTIVATION_FILTER); } /** * @param metaData raw meta data definition */ @SuppressWarnings("unchecked") public void setRawMetaData(Map<String, Map<String, Object>> metaData) { rawMetaData = metaData; combinedRawMetaData = new HashMap<>(rawMetaData); for (String key : metaData.keySet()) { if (metaData.get(key).containsKey(KEY_ENDPOINT_DATATYPES)) { List<DataType> dataTypes = new ArrayList<DataType>(); for (String type : (List<String>) metaData.get(key).get(KEY_ENDPOINT_DATATYPES)) { dataTypes.add(DataType.valueOf(type)); } endpointDataTypes.put(key, dataTypes); } } } /** * @param metaDataExtension raw meta data extension definition */ public void setRawMetaDataExtensions(Map<String, Map<String, Object>> metaDataExtension) { rawMetaDataExtension = metaDataExtension; for (String key : metaDataExtension.keySet()) { if (!rawMetaData.containsKey(key)) { combinedRawMetaData.put(key, metaDataExtension.get(key)); } else { LogFactory.getLog(getClass()).warn(StringUtils.format("Meta data key '%s' is already defined and will be ignored", key)); } } } public Map<String, Map<String, Object>> getRawMetaData() { return rawMetaData; } public Map<String, Map<String, Object>> getRawMetaDataExtension() { return rawMetaDataExtension; } @JsonIgnore @Override public boolean isPersistent(String key) { if (combinedRawMetaData.get(key) != null && combinedRawMetaData.get(key).containsKey(KEY_PERSISTENT)) { return Boolean.parseBoolean((String) combinedRawMetaData.get(key).get(KEY_PERSISTENT)); } return false; } }