package org.alien4cloud.tosca.editor.processors.relationshiptemplate.inputs;
import static alien4cloud.utils.AlienUtils.getOrFail;
import org.alien4cloud.tosca.editor.EditionContextManager;
import org.alien4cloud.tosca.editor.operations.relationshiptemplate.inputs.UnsetRelationshipPropertyAsInputOperation;
import org.alien4cloud.tosca.editor.processors.relationshiptemplate.AbstractRelationshipProcessor;
import org.springframework.stereotype.Component;
import org.alien4cloud.tosca.model.definitions.AbstractPropertyValue;
import org.alien4cloud.tosca.model.types.RelationshipType;
import org.alien4cloud.tosca.model.definitions.PropertyDefinition;
import org.alien4cloud.tosca.model.templates.NodeTemplate;
import org.alien4cloud.tosca.model.templates.RelationshipTemplate;
import alien4cloud.tosca.context.ToscaContext;
import alien4cloud.utils.PropertyUtil;
import lombok.extern.slf4j.Slf4j;
/**
* Remove association to an input in the property of a node template's relationship.
*/
@Slf4j
@Component
public class UnsetRelationshipPropertyAsInputProcessor extends AbstractRelationshipProcessor<UnsetRelationshipPropertyAsInputOperation> {
@Override
protected void processRelationshipOperation(UnsetRelationshipPropertyAsInputOperation operation, NodeTemplate nodeTemplate,
RelationshipTemplate relationshipTemplate) {
RelationshipType relationshipType = ToscaContext.get(RelationshipType.class, relationshipTemplate.getType());
PropertyDefinition relationshipPropertyDefinition = getOrFail(relationshipType.getProperties(), operation.getPropertyName(),
"Property {} do not exist for relationship {} of node {}", operation.getPropertyName(), operation.getRelationshipName(),
operation.getNodeName());
AbstractPropertyValue defaultPropertyValue = PropertyUtil.getDefaultPropertyValueFromPropertyDefinition(relationshipPropertyDefinition);
relationshipTemplate.getProperties().put(operation.getPropertyName(), defaultPropertyValue);
log.debug("Remove association from property <{}> of relationship template <{}> of node <{}> to an input of the topology <{}>.",
operation.getPropertyName(), operation.getRelationshipName(), operation.getNodeName(), EditionContextManager.getTopology().getId());
}
}