/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.component.model.endpoint.api;
import java.util.List;
import java.util.Map;
import java.util.Set;
import de.rcenvironment.core.component.model.endpoint.api.EndpointMetaDataConstants.Visibility;
import de.rcenvironment.core.datamodel.api.DataType;
/**
* Describes endpoint meta data.
*
* @author Doreen Seider
* @author Sascha Zur
*/
public interface EndpointMetaDataDefinition {
/**
* @return all meta data keys
*/
Set<String> getMetaDataKeys();
/**
* @param key meta data key
* @return name which should appear in the GUI
*/
String getGuiName(String key);
/**
* @param key meta data key
* @return name of the group the key should be in
*/
String getGuiGroup(String key);
/**
* @param key meta data key
* @return position the GUI name should appear at or -1, if key is null
*/
int getGuiPosition(String key);
/**
* @param key meta data key
* @return activation filter: meta data value set under which the meta datum is active in the GUI
*/
Map<String, List<String>> getGuiActivationFilter(String key);
/**
* @param key meta data key
* @return visibility filter: meta data value set under which the meta datum is shown in the GUI
*/
Map<String, List<String>> getGuiVisibilityFilter(String key);
/**
* @param key meta data key
* @return possible values for this meta data. "*" if every alphanumeric value is possible
*/
List<String> getPossibleValues(String key);
/**
* @param key meta data key
* @return GUI names of possible values for this meta data.
*/
List<String> getGuiNamesOfPossibleValues(String key);
/**
* @param key meta data key
* @return default meta data value or <code>null</code> if no default is defined
*/
String getDefaultValue(String key);
/**
* @param key meta data key
* @return data type of given meta datum
*/
String getDataType(String key);
/**
* @param key meta data key
* @param dataType {@link DataType} to check for
* @return <code>true</code> if meta datum is defined for given {@link DataType}, otherwise <code>false</code>
*/
boolean isDefinedForDataType(String key, DataType dataType);
/**
* @param key meta data key
* @return comma separated list of validations for the meta datum
*/
String getValidation(String key);
/**
* @param key meta data key
* @return visibility level of meta datum
*/
Visibility getVisibility(String key);
/**
* @param key meta data key to get activation filter for
* @return action filter as map or <code>null</code> if no activation filter was defined
*/
Map<String, List<String>> getActivationFilter(String key);
/**
* @param key meta data key
* @return true if the metadata with the given key should be persisted in the data management.
*/
boolean isPersistent(String key);
}