/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.component.datamanagement.api;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.node.ObjectNode;
import de.rcenvironment.core.datamodel.api.TypedDatumSerializer;
import de.rcenvironment.core.utils.common.JsonUtils;
/**
* It encapsulates the common component data such as inputs and outputs (by inheriting), or exit code and log files.
*
* @author Doreen Seider
*/
public abstract class CommonComponentHistoryDataItem extends DefaultComponentHistoryDataItem {
protected static final String FORMAT_VERSION_1 = "1";
protected static final String CURRENT_FORMAT_VERSION = FORMAT_VERSION_1;
protected static final String FORMAT_VERSION = "f_v";
protected static final String EXIT_CODE = "exit";
private static final long serialVersionUID = 3747244536714110690L;
protected Map<String, String> logs = new HashMap<>();
protected Integer exitCode;
public String getFormatVersion() {
return CURRENT_FORMAT_VERSION;
}
@Override
public String serialize(TypedDatumSerializer serializer) throws IOException {
ObjectMapper mapper = JsonUtils.getDefaultObjectMapper();
ObjectNode rootNode = mapper.createObjectNode();
rootNode.put(FORMAT_VERSION, getFormatVersion());
if (exitCode != null) {
rootNode.put(EXIT_CODE, exitCode);
}
return rootNode.toString();
}
protected ObjectNode getLogsAsJsonObjectNode(Map<String, String> logRefs, ObjectMapper mapper) {
ObjectNode logsObjectNode = mapper.createObjectNode();
for (String logFileName : logRefs.keySet()) {
logsObjectNode.put(logFileName, logRefs.get(logFileName));
}
return logsObjectNode;
}
protected static void initializeCommonHistoryDataFromString(CommonComponentHistoryDataItem historyDataItem,
String historyData, TypedDatumSerializer serializer) throws IOException {
DefaultComponentHistoryDataItem.initializeDefaultHistoryDataFromString(historyDataItem, historyData, serializer);
historyDataItem.exitCode = CommonComponentHistoryDataItem.getExitCodeFromString(historyData);
}
protected static Integer getExitCodeFromString(String exitCodeString) throws IOException {
ObjectMapper mapper = JsonUtils.getDefaultObjectMapper();
try {
JsonNode tree = mapper.readTree(exitCodeString);
if (tree.get(EXIT_CODE) != null) {
return tree.get(EXIT_CODE).asInt();
}
} catch (JsonProcessingException e) {
throw new IOException(e);
}
return null;
}
public void setExitCode(int exitCode) {
this.exitCode = exitCode;
}
/**
* @return exit code or <code>null</code> if no exit code was set
*/
public Integer getExitCode() {
return exitCode;
}
}