/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.components.evaluationmemory.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 CommonComponentHistoryDataItem} implementation for the Evaluation Memory component. * * @author Doreen Seider */ public class EvaluationMemoryComponentHistoryDataItem extends CommonComponentHistoryDataItem { private static final long serialVersionUID = -5443884702114523764L; private static final String FORMAT_VERSION_1 = "1"; private static final String CURRENT_FORMAT_VERSION = FORMAT_VERSION_1; private static final String MEMORY_FILE_PATH = "mfp"; private static final String MEMORY_FILE_REFERENCE = "mfr"; private String memoryFilePath; private String memoryFileReference; private String identifier; public EvaluationMemoryComponentHistoryDataItem(String identifier) { this.identifier = identifier; } @Override public String getFormatVersion() { return StringUtils.escapeAndConcat(super.getFormatVersion(), CURRENT_FORMAT_VERSION); } public void setMemoryFilePath(String memoryFilePath) { this.memoryFilePath = memoryFilePath; } public String getMemoryFilePath() { return memoryFilePath; } public void setMemoryFileReference(String memoryFileReference) { this.memoryFileReference = memoryFileReference; } public String getMemoryFileReference() { return memoryFileReference; } @Override public String serialize(TypedDatumSerializer serializer) throws IOException { String data = super.serialize(serializer); ObjectMapper mapper = JsonUtils.getDefaultObjectMapper(); JsonNode rootNode; try { rootNode = mapper.readTree(data); } catch (JsonProcessingException e) { throw new IOException(e); } ((ObjectNode) rootNode).put(MEMORY_FILE_PATH, memoryFilePath); ((ObjectNode) rootNode).put(MEMORY_FILE_REFERENCE, memoryFileReference); return rootNode.toString(); } /** * @param historyData text representation of {@link EvaluationMemoryComponentHistoryDataItem} * @param serializer {@link TypedDatumSerializer} instance * @param identifier represents component id * @return new {@link EvaluationMemoryComponentHistoryDataItem} object * @throws IOException on error */ public static EvaluationMemoryComponentHistoryDataItem fromString(String historyData, TypedDatumSerializer serializer, String identifier) throws IOException { EvaluationMemoryComponentHistoryDataItem historyDataItem = new EvaluationMemoryComponentHistoryDataItem(identifier); CommonComponentHistoryDataItem.initializeCommonHistoryDataFromString(historyDataItem, historyData, serializer); readReferenceFromString(historyData, historyDataItem); return historyDataItem; } private static void readReferenceFromString(String historyData, EvaluationMemoryComponentHistoryDataItem historyDataItem) throws IOException { ObjectMapper mapper = JsonUtils.getDefaultObjectMapper(); JsonNode rootNode; try { rootNode = mapper.readTree(historyData); } catch (JsonProcessingException e) { throw new IOException(e); } historyDataItem.memoryFilePath = ((ObjectNode) rootNode).get(MEMORY_FILE_PATH).getTextValue(); historyDataItem.memoryFileReference = ((ObjectNode) rootNode).get(MEMORY_FILE_REFERENCE).getTextValue(); } @Override public String getIdentifier() { return identifier; } @Override public void setIdentifier(String identifier) { this.identifier = identifier; } }