/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.components.optimizer.common;
import java.io.IOException;
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.component.datamanagement.api.CommonComponentHistoryDataItem;
import de.rcenvironment.core.datamodel.api.TypedDatumSerializer;
import de.rcenvironment.core.utils.common.JsonUtils;
import de.rcenvironment.core.utils.common.StringUtils;
/**
* {@link de.rcenvironment.core.component.datamanagement.api.n} implementation for the Optimizer
* component.
*
* @author Sascha Zur
*/
public class OptimizerComponentHistoryDataItem extends CommonComponentHistoryDataItem {
protected static final String FORMAT_VERSION_1 = "1";
protected static final String CURRENT_FORMAT_VERSION = FORMAT_VERSION_1;
private static final long serialVersionUID = -2017053187345233310L;
private static final String INPUT_FILE_REFERENCE = "InputFile";
private static final String RESTART_FILE_REFERENCE = "RestartFile";
private static final String RESULT_FILE_REFERENCE = "ResultFile";
private String inputFileReference;
private String restartFileReference;
private String resultFileReference;
@Override
public String getFormatVersion() {
return StringUtils.escapeAndConcat(super.getFormatVersion(), CURRENT_FORMAT_VERSION);
}
@Override
public String getIdentifier() {
return OptimizerComponentConstants.COMPONENT_IDS[0];
}
@Override
public String serialize(TypedDatumSerializer serializer) throws IOException {
String commonDataString = super.serialize(serializer);
ObjectMapper mapper = JsonUtils.getDefaultObjectMapper();
JsonNode rootNode;
try {
rootNode = mapper.readTree(commonDataString);
} catch (JsonProcessingException e) {
throw new IOException(e);
}
((ObjectNode) rootNode).put(INPUT_FILE_REFERENCE, inputFileReference);
((ObjectNode) rootNode).put(RESTART_FILE_REFERENCE, restartFileReference);
((ObjectNode) rootNode).put(RESULT_FILE_REFERENCE, resultFileReference);
return rootNode.toString();
}
/**
* @param historyData text representation of {@link OptimizerComponentHistoryDataItem}
* @param serializer {@link TypedDatumSerializer} instance
* @return new {@link OptimizerComponentHistoryDataItem} object
* @throws IOException on error
*/
public static OptimizerComponentHistoryDataItem fromString(String historyData, TypedDatumSerializer serializer)
throws IOException {
OptimizerComponentHistoryDataItem historyDataItem = new OptimizerComponentHistoryDataItem();
CommonComponentHistoryDataItem.initializeCommonHistoryDataFromString(historyDataItem, historyData, serializer);
historyDataItem.inputFileReference = OptimizerComponentHistoryDataItem.readFileReferenceFromString(INPUT_FILE_REFERENCE,
historyData, historyDataItem);
historyDataItem.restartFileReference = OptimizerComponentHistoryDataItem.readFileReferenceFromString(RESTART_FILE_REFERENCE,
historyData, historyDataItem);
historyDataItem.resultFileReference = OptimizerComponentHistoryDataItem.readFileReferenceFromString(RESULT_FILE_REFERENCE,
historyData, historyDataItem);
return historyDataItem;
}
private static String readFileReferenceFromString(String referenceName, String historyData,
OptimizerComponentHistoryDataItem historyDataItem)
throws IOException {
ObjectMapper mapper = JsonUtils.getDefaultObjectMapper();
JsonNode rootNode;
try {
rootNode = mapper.readTree(historyData);
} catch (JsonProcessingException e) {
throw new IOException(e);
}
if (((ObjectNode) rootNode).has(referenceName)) {
return ((ObjectNode) rootNode).get(referenceName).getTextValue();
}
return null;
}
public void setResultFileReference(String fileReference) {
resultFileReference = fileReference;
}
public String getResultFileReference() {
return resultFileReference;
}
public String getRestartFileReference() {
return restartFileReference;
}
public void setRestartFileReference(String restartFileReference) {
this.restartFileReference = restartFileReference;
}
public void setInputFileReference(String inputFileReference) {
this.inputFileReference = inputFileReference;
}
public String getInputFileReference() {
return inputFileReference;
}
}