/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.gui.workflow.integration.cpacs; import java.io.IOException; import java.io.ObjectInputStream; import java.io.Serializable; import de.rcenvironment.core.component.integration.cpacs.CpacsIntegrationHistoryDataItem; import de.rcenvironment.core.component.integration.cpacs.CpacsToolIntegrationConstants; import de.rcenvironment.core.datamodel.api.TypedDatumSerializer; import de.rcenvironment.core.datamodel.api.TypedDatumService; import de.rcenvironment.core.gui.datamanagement.browser.spi.ComponentHistoryDataItemSubtreeBuilder; import de.rcenvironment.core.gui.datamanagement.browser.spi.DMBrowserNode; import de.rcenvironment.core.gui.datamanagement.browser.spi.DMBrowserNodeType; import de.rcenvironment.core.gui.workflow.integration.IntegrationHistoryDataItemSubtreeBuilder; import de.rcenvironment.core.utils.common.StringUtils; import de.rcenvironment.core.utils.incubator.ServiceRegistry; import de.rcenvironment.core.utils.incubator.ServiceRegistryAccess; /** * Implementation of {@link ComponentHistoryDataItemSubtreeBuilder} for integrated CPACS tools. * * @author Jan Flink */ public class CpacsIntegrationHistoryDataItemSubtreeBuilder extends IntegrationHistoryDataItemSubtreeBuilder { private static final String STRING_TOOLINPUT = "Tool Input: %s"; private static final String STRING_TOOLOUTPUT = "Tool Output: %s"; private static final String STRING_DEFAULT_TOOLINPUT_FILENAME = "toolInput.xml"; private static final String STRING_DEFAULT_TOOLOUTPUT_FILENAME = "toolOutput.xml"; private static final String STRING_WITHOUT_TOOLSPECIFIC_FILENAME = "without_toolspec.xml"; private static final String STRING_WITH_VARIABLES_FILENAME = "with_dyn_inputs.xml"; private DMBrowserNode intermediateInputsNode; @Override public String[] getSupportedHistoryDataItemIdentifier() { return new String[] { CpacsToolIntegrationConstants.CPACS_COMPONENT_ID_PREFIX.replace(".", "\\.") + ".*" }; } @Override public Serializable deserializeHistoryDataItem(ObjectInputStream ois) throws IOException, ClassNotFoundException { return (Serializable) ois.readObject(); } @Override public void buildInitialHistoryDataItemSubtree(Serializable historyDataItem, DMBrowserNode parent) { super.buildInitialHistoryDataItemSubtree(historyDataItem, parent); ServiceRegistryAccess registryAccess = ServiceRegistry.createAccessFor(this); TypedDatumSerializer serializer = registryAccess.getService(TypedDatumService.class).getSerializer(); if (historyDataItem instanceof String) { CpacsIntegrationHistoryDataItem historyData; try { historyData = CpacsIntegrationHistoryDataItem.fromString((String) historyDataItem, serializer, ""); } catch (IOException e) { throw new IllegalArgumentException(e); } if (historyData.getCpacsWithVariablesFileReference() != null || historyData.getToolInputWithoutToolspecificFileReference() != null) { intermediateInputsNode = DMBrowserNode.addNewChildNode("Intermediate Inputs", DMBrowserNodeType.IntermediateInputsFolder, parent); if (historyData.getCpacsWithVariablesFileReference() != null) { DMBrowserNode cpacsWithVariablesNode = DMBrowserNode.addNewLeafNode(StringUtils.format("XML w/ dyn. inputs: %s", STRING_WITH_VARIABLES_FILENAME), DMBrowserNodeType.DMFileResource, intermediateInputsNode); cpacsWithVariablesNode.setAssociatedFilename(STRING_WITH_VARIABLES_FILENAME); cpacsWithVariablesNode.setDataReferenceId(historyData.getCpacsWithVariablesFileReference()); } if (historyData.getToolInputWithoutToolspecificFileReference() != null) { DMBrowserNode toolInputWithoutToolSpecificNode = DMBrowserNode.addNewLeafNode( StringUtils.format("Tool Input w/o static tool specifics: %s", STRING_WITHOUT_TOOLSPECIFIC_FILENAME), DMBrowserNodeType.DMFileResource, intermediateInputsNode); toolInputWithoutToolSpecificNode.setAssociatedFilename(STRING_WITHOUT_TOOLSPECIFIC_FILENAME); toolInputWithoutToolSpecificNode.setDataReferenceId(historyData.getToolInputWithoutToolspecificFileReference()); } } if (historyData.getToolInputFileReference() != null || historyData.getToolOutputFileReference() != null) { DMBrowserNode toolFilesNode = DMBrowserNode.addNewChildNode("Tool Input/Output", DMBrowserNodeType.ToolInputOutputFolder, parent); if (historyData.getToolInputFileReference() != null) { String toolInputFileName = historyData.getToolInputFilename(); if (toolInputFileName == null) { toolInputFileName = STRING_DEFAULT_TOOLINPUT_FILENAME; } DMBrowserNode toolInputNode = DMBrowserNode.addNewLeafNode(StringUtils.format(STRING_TOOLINPUT, toolInputFileName), DMBrowserNodeType.DMFileResource, toolFilesNode); toolInputNode.setAssociatedFilename(toolInputFileName); toolInputNode.setDataReferenceId(historyData.getToolInputFileReference()); } if (historyData.getToolOutputFileReference() != null) { String toolOutputFileName = historyData.getToolOutputFilename(); if (toolOutputFileName == null) { toolOutputFileName = STRING_DEFAULT_TOOLOUTPUT_FILENAME; } DMBrowserNode toolOutputNode = DMBrowserNode.addNewLeafNode(StringUtils.format(STRING_TOOLOUTPUT, toolOutputFileName), DMBrowserNodeType.DMFileResource, toolFilesNode); toolOutputNode.setAssociatedFilename(toolOutputFileName); toolOutputNode.setDataReferenceId(historyData.getToolOutputFileReference()); } } } } }