/*
* 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.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.codehaus.jackson.annotate.JsonIgnore;
import de.rcenvironment.core.component.api.ComponentConstants;
import de.rcenvironment.core.component.model.configuration.api.PlaceholdersMetaDataDefinition;
/**
* Implementation of {@link PlaceholdersMetaDataDefinition}.
*
* @author Doreen Seider
*/
public class PlaceholdersMetaDataDefinitionImpl implements Serializable, PlaceholdersMetaDataDefinition {
private static final int DEFAULT_POSITION = 1;
private static final long serialVersionUID = 1821211107072929401L;
private static final String KEY_KEY = "key";
private static final String KEY_GUI_NAME = "guiName";
private static final String KEY_GUI_POSITION = "guiPosition";
private static final String KEY_DECODE = "decode";
private static final String DYNAMIC = "*";
private List<Object> rawPlaceholdersDef = new ArrayList<Object>();
private final Map<String, Object> placeholdersDef = new HashMap<String, Object>();
private boolean hasDynamicPlaceholder = false;
/**
* @param incPlaceholdersDef raw placeholders definition to set
*/
public void setPlaceholderMetaDataDefinition(List<Object> incPlaceholdersDef) {
this.rawPlaceholdersDef = incPlaceholdersDef;
for (Object obj : rawPlaceholdersDef) {
String placeholderKey = (String) ((Map<String, Object>) obj).get(KEY_KEY);
this.placeholdersDef.put(placeholderKey, obj);
hasDynamicPlaceholder = hasDynamicPlaceholder | placeholderKey.equals(DYNAMIC);
}
}
/**
* @param placeholdersDefs placeholders definitions to set
*/
@JsonIgnore
public void setPlaceholderMetaDataDefinition(Set<PlaceholdersMetaDataDefinitionImpl> placeholdersDefs) {
for (PlaceholdersMetaDataDefinitionImpl def : placeholdersDefs) {
placeholdersDef.putAll(def.placeholdersDef);
hasDynamicPlaceholder = hasDynamicPlaceholder | def.hasDynamicPlaceholder;
rawPlaceholdersDef = def.rawPlaceholdersDef;
}
}
@JsonIgnore
@Override
public String getGuiName(String key) {
if (placeholdersDef.containsKey(key)) {
return (String) ((Map<String, Object>) placeholdersDef.get(key)).get(KEY_GUI_NAME);
}
return null;
}
@JsonIgnore
@Override
public int getGuiPosition(String key) {
if (placeholdersDef.containsKey(key)) {
return Integer.valueOf((String) ((Map<String, Object>) placeholdersDef.get(key)).get(KEY_GUI_POSITION));
}
return DEFAULT_POSITION;
}
@JsonIgnore
@Override
public String getDataType(String key) {
if (placeholdersDef.containsKey(key)) {
return (String) ((Map<String, Object>) placeholdersDef.get(key)).get(ComponentConstants.KEY_DATATYPE);
} else if (hasDynamicPlaceholder) {
return (String) ((Map<String, Object>) placeholdersDef.get(DYNAMIC)).get(ComponentConstants.KEY_DATATYPE);
}
return null;
}
@JsonIgnore
@Override
public boolean decode(String key) {
if (placeholdersDef.containsKey(key)) {
return Boolean.valueOf((String) ((Map<String, Object>) placeholdersDef.get(key)).get(KEY_DECODE));
} else if (hasDynamicPlaceholder) {
return Boolean.valueOf((String) ((Map<String, Object>) placeholdersDef.get(DYNAMIC)).get(KEY_DECODE));
}
return false;
}
public List<Object> getPlaceholdersMetaDataDefinition() {
return rawPlaceholdersDef;
}
}