/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.components.switchcmp.execution; import java.io.IOException; import org.codehaus.jackson.JsonNode; import org.codehaus.jackson.JsonProcessingException; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.ObjectWriter; import org.codehaus.jackson.node.ObjectNode; import de.rcenvironment.components.switchcmp.common.SwitchComponentConstants; import de.rcenvironment.core.component.api.ComponentConstants; 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.utils.common.JsonUtils; /** * * Implementation of {@link PersistentComponentDescriptionUpdater}. * * @author David Scholz * @author Hendrik Abbenhaus */ public class SwitchPersistentComponentDescriptionUpdater implements PersistentComponentDescriptionUpdater { private static final String V1_1 = "1.1"; private static final String STATIC_INPUTS = "staticInputs"; private static final String DYNAMIC_INPUTS = "dynamicInputs"; private static final String REQUIRED_IF_CONNCECTED = "RequiredIfConnected"; private static final String NOT_REQUIRED = "NotRequired"; private static final String REQUIRED = "Required"; private static ObjectMapper mapper = JsonUtils.getDefaultObjectMapper(); @Override public String[] getComponentIdentifiersAffectedByUpdate() { return SwitchComponentConstants.COMPONENT_IDS; } @Override public int getFormatVersionsAffectedByUpdate(String persistentComponentDescriptionVersion, boolean silent) { int versionsToUpdate = PersistentDescriptionFormatVersion.NONE; if (silent && persistentComponentDescriptionVersion != null && persistentComponentDescriptionVersion.compareTo(V1_1) < 0) { versionsToUpdate = versionsToUpdate | PersistentDescriptionFormatVersion.AFTER_VERSION_THREE; } return versionsToUpdate; } @Override public PersistentComponentDescription performComponentDescriptionUpdate(int formatVersion, PersistentComponentDescription description, boolean silent) throws IOException { if (silent) { if (formatVersion == PersistentDescriptionFormatVersion.AFTER_VERSION_THREE && description.getComponentVersion().compareTo(V1_1) < 0) { description = updateToComponentVersion11(description); } } return description; } private PersistentComponentDescription updateToComponentVersion11(PersistentComponentDescription description) throws JsonProcessingException, IOException { JsonNode node = mapper.readTree(description.getComponentDescriptionAsString()); ObjectWriter writer = mapper.writerWithDefaultPrettyPrinter(); JsonNode staticInputs = node.get(STATIC_INPUTS); if (staticInputs != null) { for (JsonNode endpoint : staticInputs) { ObjectNode metaData = (ObjectNode) endpoint.get("metadata"); if (metaData != null){ metaData.put(ComponentConstants.INPUT_METADATA_KEY_INPUT_EXECUTION_CONSTRAINT, REQUIRED); } } } JsonNode dynamicInputs = node.get(DYNAMIC_INPUTS); if (dynamicInputs != null) { for (JsonNode endpoint : dynamicInputs) { ObjectNode metaData = (ObjectNode) endpoint.get("metadata"); String currentConstraint = metaData.get(ComponentConstants.INPUT_METADATA_KEY_INPUT_EXECUTION_CONSTRAINT).getTextValue(); if (currentConstraint.equals(NOT_REQUIRED)){ metaData.put(ComponentConstants.INPUT_METADATA_KEY_INPUT_EXECUTION_CONSTRAINT, REQUIRED_IF_CONNCECTED); } } } description = new PersistentComponentDescription(writer.writeValueAsString(node)); description.setComponentVersion(V1_1); return description; } }