/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.component.integration; 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.component.datamanagement.api.CommonComponentHistoryDataItem; import de.rcenvironment.core.component.datamanagement.api.ComponentHistoryDataItem; import de.rcenvironment.core.datamodel.api.TypedDatumSerializer; import de.rcenvironment.core.utils.common.JsonUtils; import de.rcenvironment.core.utils.common.StringUtils; /** * {@link ComponentHistoryDataItem} implementation for all integrated components. * * @author Sascha Zur */ public class IntegrationHistoryDataItem extends CommonComponentHistoryDataItem { protected static final String WORKING_DIRECTORY = "workingDirectory"; protected static final String FORMAT_VERSION_1 = "1"; protected static final String CURRENT_FORMAT_VERSION = FORMAT_VERSION_1; private static final long serialVersionUID = 266418465982554055L; protected String workingDirectory; private String identifier; public IntegrationHistoryDataItem(String identifier) { this.identifier = identifier; } @Override public String getFormatVersion() { return StringUtils.escapeAndConcat(super.getFormatVersion(), CURRENT_FORMAT_VERSION); } @Override public String getIdentifier() { return identifier; } @Override public String serialize(TypedDatumSerializer serializer) throws IOException { String commonDataString = super.serialize(serializer); ObjectMapper mapper = JsonUtils.getDefaultObjectMapper(); JsonNode rootNode; try { rootNode = mapper.readTree(commonDataString); ((ObjectNode) rootNode).put(WORKING_DIRECTORY, workingDirectory); } catch (JsonProcessingException e) { throw new IOException(e); } return rootNode.toString(); } /** * @param historyData text representation of {@link IntegrationHistoryDataItem} * @param serializer {@link TypedDatumSerializer} instance * @param identifier for the item * @return new {@link IntegrationHistoryDataItem} object * @throws IOException on error */ public static IntegrationHistoryDataItem fromString(String historyData, TypedDatumSerializer serializer, String identifier) throws IOException { IntegrationHistoryDataItem historyDataItem = new IntegrationHistoryDataItem(identifier); CommonComponentHistoryDataItem.initializeCommonHistoryDataFromString(historyDataItem, historyData, serializer); ObjectMapper mapper = JsonUtils.getDefaultObjectMapper(); try { @SuppressWarnings("unchecked") Map<String, Object> tree = mapper.readValue(historyData, new HashMap<String, Object>().getClass()); if (tree.get(WORKING_DIRECTORY) != null) { historyDataItem.setWorkingDirectory((String) tree.get(WORKING_DIRECTORY)); } } catch (JsonProcessingException e) { throw new IOException(e); } return historyDataItem; } @Override public void setIdentifier(String identifier) { this.identifier = identifier; } public void setWorkingDirectory(String absolutePath) { this.workingDirectory = absolutePath; } public String getWorkingDirectory() { return workingDirectory; } }