/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.components.outputwriter.execution;
import java.io.IOException;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.ObjectWriter;
import org.codehaus.jackson.node.ObjectNode;
import de.rcenvironment.components.outputwriter.common.OutputWriterComponentConstants;
import de.rcenvironment.core.component.update.api.PersistentComponentDescription;
import de.rcenvironment.core.component.update.api.PersistentDescriptionFormatVersion;
import de.rcenvironment.core.component.update.spi.PersistentComponentDescriptionUpdater;
import de.rcenvironment.core.component.workflow.model.api.WorkflowDescriptionPersistenceHandler;
import de.rcenvironment.core.utils.common.JsonUtils;
/**
* Implementation of {@link PersistentComponentDescriptionUpdater}.
*
* @author Doreen Seider
*/
public class OutputWriterPersistentComponentDescriptionUpdater implements PersistentComponentDescriptionUpdater {
private static final String V1_1 = "1.1";
private static final String V2_0 = "2.0";
private static final String CURRENT_VERSION = V2_0;
@Override
public String[] getComponentIdentifiersAffectedByUpdate() {
return new String[] { OutputWriterComponentConstants.COMPONENT_ID };
}
@Override
public int getFormatVersionsAffectedByUpdate(String persistentComponentDescriptionVersion, boolean silent) {
int update = PersistentDescriptionFormatVersion.NONE;
if (!silent && persistentComponentDescriptionVersion != null
&& persistentComponentDescriptionVersion.compareTo(CURRENT_VERSION) < 0) {
update = update | PersistentDescriptionFormatVersion.AFTER_VERSION_THREE;
}
return update;
}
@Override
public PersistentComponentDescription performComponentDescriptionUpdate(int formatVersion, PersistentComponentDescription description,
boolean silent) throws IOException {
if (!silent) {
switch (formatVersion) {
case PersistentDescriptionFormatVersion.AFTER_VERSION_THREE:
if (description.getComponentVersion().compareTo(V1_1) < 0) {
description = updateFromV10ToV11(description);
}
if (description.getComponentVersion().compareTo(V2_0) < 0) {
description = updateFromV11ToV20(description);
}
break;
default:
break;
}
}
return description;
}
private PersistentComponentDescription updateFromV10ToV11(PersistentComponentDescription description)
throws JsonParseException, IOException {
final String affectedConfigFieldName = "OWWritePath";
ObjectMapper mapper = JsonUtils.getDefaultObjectMapper();
JsonNode node = mapper.readTree(description.getComponentDescriptionAsString());
ObjectNode configurationsNode = (ObjectNode) node.get(WorkflowDescriptionPersistenceHandler.CONFIGURATION);
if (configurationsNode != null && configurationsNode.has(affectedConfigFieldName)) {
configurationsNode.remove(affectedConfigFieldName);
configurationsNode.put(affectedConfigFieldName, "${targetRootFolder}");
}
ObjectWriter writer = mapper.writerWithDefaultPrettyPrinter();
description = new PersistentComponentDescription(writer.writeValueAsString(node));
description.setComponentVersion(V1_1);
return description;
}
private PersistentComponentDescription updateFromV11ToV20(PersistentComponentDescription description)
throws JsonParseException, IOException {
//No update required, just update version
description.setComponentVersion(V2_0);
return description;
}
}