/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.components.outputwriter.gui;
import java.io.IOException;
import org.apache.commons.logging.LogFactory;
import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
import org.codehaus.jackson.annotate.JsonMethod;
import org.codehaus.jackson.map.ObjectMapper;
import de.rcenvironment.components.outputwriter.common.OutputLocation;
import de.rcenvironment.components.outputwriter.common.OutputLocationList;
import de.rcenvironment.components.outputwriter.common.OutputWriterComponentConstants;
import de.rcenvironment.core.component.model.endpoint.api.EndpointDescription;
import de.rcenvironment.core.datamodel.api.EndpointType;
import de.rcenvironment.core.gui.workflow.editor.commands.endpoint.EditDynamicEndpointCommand;
import de.rcenvironment.core.gui.workflow.editor.properties.Refreshable;
import de.rcenvironment.core.utils.common.JsonUtils;
/**
* Command for editing dynamic inputs in the outputWriter component. Also removes the endpoint from its corresponding target, if it is a
* simple data input..
*
* @author Brigitte Boden
*/
public class OutputWriterEditDynamicInputCommand extends EditDynamicEndpointCommand {
// Mapper for parsing the outputlocation json string.
private ObjectMapper mapper;
private String oldJsonString = "";
//The outputLocation affected by the change, if any.
private String outputLocationId;
/**
* Constructor.
*
* @param direction
* @param oldDescription
* @param newDescription
* @param refreshable
*/
public OutputWriterEditDynamicInputCommand(EndpointType direction, EndpointDescription oldDescription,
EndpointDescription newDescription, String outputLocationId, Refreshable... refreshable) {
super(direction, oldDescription, newDescription, refreshable);
mapper = JsonUtils.getDefaultObjectMapper();
mapper.setVisibility(JsonMethod.ALL, Visibility.ANY);
this.outputLocationId = outputLocationId;
}
@Override
public void execute() {
OutputLocationList list;
try {
String inputJsonString = getProperties().getConfigurationDescription().getConfigurationValue(
OutputWriterComponentConstants.CONFIG_KEY_OUTPUTLOCATIONS);
if (inputJsonString != null && !inputJsonString.equals("") && outputLocationId != null && !outputLocationId.equals("")) {
list = mapper.readValue(inputJsonString, OutputLocationList.class);
OutputLocation location = list.getOutputLocationById(outputLocationId);
location.getInputs().remove(oldDesc.getName());
String outputJsonString = mapper.writeValueAsString(list);
getProperties().getConfigurationDescription().setConfigurationValue(
OutputWriterComponentConstants.CONFIG_KEY_OUTPUTLOCATIONS,
outputJsonString);
oldJsonString = inputJsonString;
newDesc.setParentGroupName(OutputWriterComponentConstants.DEFAULT_GROUP);
}
} catch (IOException e) {
LogFactory.getLog(getClass()).debug("Error when writing components to JSON: " + e.getMessage());
}
super.execute();
}
@Override
public void undo() {
getProperties().getConfigurationDescription().setConfigurationValue(OutputWriterComponentConstants.CONFIG_KEY_OUTPUTLOCATIONS,
oldJsonString);
super.undo();
}
}