/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.component.integration.cpacs; 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.component.datamanagement.api.ComponentHistoryDataItem; import de.rcenvironment.core.component.integration.IntegrationHistoryDataItem; import de.rcenvironment.core.datamodel.api.TypedDatumSerializer; import de.rcenvironment.core.utils.common.JsonUtils; /** * Implementation of {@link ComponentHistoryDataItem} for integrated CPACS tools. * * @author Jan Flink */ public class CpacsIntegrationHistoryDataItem extends IntegrationHistoryDataItem { private static final String KEY_CPACS_WITH_VARIABLES_FILE_REFERENCE = "cpacsWithVariables"; private static final String KEY_TOOL_INPUT_FILE_REFERENCE = "toolInput"; private static final String KEY_TOOL_INPUT_FILENAME = "toolInputFilename"; private static final String KEY_TOOL_INPUT_WITHOUT_TOOLSPECIFIC_FILE_REFERENCE = "toolInputWithoutToolspecific"; private static final String KEY_TOOL_OUTPUT_FILE_REFERENCE = "toolOutput"; private static final String KEY_TOOL_OUTPUT_FILENAME = "toolOutputFilename"; private static final long serialVersionUID = 7762053749921116711L; private String cpacsWithVariablesFileReference; private String tIFileReference; private String tOFileReference; private String toolInputWithoutToolspecificFileReference; private String tIFilename; private String tOFilename; public CpacsIntegrationHistoryDataItem(String identifier) { super(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); } catch (JsonProcessingException e) { throw new IOException(e); } if (cpacsWithVariablesFileReference != null) { ((ObjectNode) rootNode).put(KEY_CPACS_WITH_VARIABLES_FILE_REFERENCE, cpacsWithVariablesFileReference); } if (tIFileReference != null) { ((ObjectNode) rootNode).put(KEY_TOOL_INPUT_FILE_REFERENCE, tIFileReference); } if (tIFilename != null) { ((ObjectNode) rootNode).put(KEY_TOOL_INPUT_FILENAME, tIFilename); } if (tOFileReference != null) { ((ObjectNode) rootNode).put(KEY_TOOL_OUTPUT_FILE_REFERENCE, tOFileReference); } if (tOFilename != null) { ((ObjectNode) rootNode).put(KEY_TOOL_OUTPUT_FILENAME, tOFilename); } if (toolInputWithoutToolspecificFileReference != null) { ((ObjectNode) rootNode).put(KEY_TOOL_INPUT_WITHOUT_TOOLSPECIFIC_FILE_REFERENCE, toolInputWithoutToolspecificFileReference); } if (workingDirectory != null) { ((ObjectNode) rootNode).put(WORKING_DIRECTORY, workingDirectory); } 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 CpacsIntegrationHistoryDataItem fromString(String historyData, TypedDatumSerializer serializer, String identifier) throws IOException { CpacsIntegrationHistoryDataItem historyDataItem = new CpacsIntegrationHistoryDataItem(identifier); historyDataItem.workingDirectory = IntegrationHistoryDataItem.fromString(historyData, serializer, identifier).getWorkingDirectory(); CommonComponentHistoryDataItem.initializeCommonHistoryDataFromString(historyDataItem, historyData, serializer); CpacsIntegrationHistoryDataItem.readXMLFileReferencesFromString(historyData, historyDataItem); return historyDataItem; } private static void readXMLFileReferencesFromString(String historyData, CpacsIntegrationHistoryDataItem historyDataItem) throws IOException { ObjectMapper mapper = JsonUtils.getDefaultObjectMapper(); JsonNode rootNode; try { rootNode = mapper.readTree(historyData); } catch (JsonProcessingException e) { throw new IOException(e); } if (((ObjectNode) rootNode).get(KEY_CPACS_WITH_VARIABLES_FILE_REFERENCE) != null) { historyDataItem.cpacsWithVariablesFileReference = ((ObjectNode) rootNode).get(KEY_CPACS_WITH_VARIABLES_FILE_REFERENCE).getTextValue(); } if (((ObjectNode) rootNode).get(KEY_TOOL_INPUT_FILE_REFERENCE) != null) { historyDataItem.tIFileReference = ((ObjectNode) rootNode).get(KEY_TOOL_INPUT_FILE_REFERENCE).getTextValue(); } if (((ObjectNode) rootNode).get(KEY_TOOL_INPUT_FILENAME) != null) { historyDataItem.tIFilename = ((ObjectNode) rootNode).get(KEY_TOOL_INPUT_FILENAME).getTextValue(); } if (((ObjectNode) rootNode).get(KEY_TOOL_OUTPUT_FILE_REFERENCE) != null) { historyDataItem.tOFileReference = ((ObjectNode) rootNode).get(KEY_TOOL_OUTPUT_FILE_REFERENCE).getTextValue(); } if (((ObjectNode) rootNode).get(KEY_TOOL_OUTPUT_FILENAME) != null) { historyDataItem.tOFilename = ((ObjectNode) rootNode).get(KEY_TOOL_OUTPUT_FILENAME).getTextValue(); } if (((ObjectNode) rootNode).get(KEY_TOOL_INPUT_WITHOUT_TOOLSPECIFIC_FILE_REFERENCE) != null) { historyDataItem.toolInputWithoutToolspecificFileReference = ((ObjectNode) rootNode).get(KEY_TOOL_INPUT_WITHOUT_TOOLSPECIFIC_FILE_REFERENCE).getTextValue(); } } public String getCpacsWithVariablesFileReference() { return cpacsWithVariablesFileReference; } public void setCpacsWithVariablesFileReference(String xmlWithVariablesFileReference) { this.cpacsWithVariablesFileReference = xmlWithVariablesFileReference; } public String getToolInputFileReference() { return tIFileReference; } /** * Sets filename and file reference id of tool input. * * @param toolInputFilename The tool input filename. * @param toolInputFileReference The tool input file reference id. */ public void setToolInputFile(String toolInputFilename, String toolInputFileReference) { this.tIFilename = toolInputFilename; this.tIFileReference = toolInputFileReference; } public String getToolOutputFileReference() { return tOFileReference; } /** * Sets filename and file reference id of tool output. * * @param toolOutputFilename The tool output filename. * @param toolOutputFileReference The tool output file refernce id. */ public void setToolOutputFile(String toolOutputFilename, String toolOutputFileReference) { this.tOFilename = toolOutputFilename; this.tOFileReference = toolOutputFileReference; } public void setToolInputWithoutToolspecificFileReference(String toolInputWithoutToolspecificFileReference) { this.toolInputWithoutToolspecificFileReference = toolInputWithoutToolspecificFileReference; } public String getToolInputWithoutToolspecificFileReference() { return toolInputWithoutToolspecificFileReference; } public String getToolInputFilename() { return tIFilename; } public String getToolOutputFilename() { return tOFilename; } }