
fi.evolver.basics.spring.messaging.sender.TriggerSender Maven / Gradle / Ivy
package fi.evolver.basics.spring.messaging.sender;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import fi.evolver.basics.spring.job.ResultState;
import fi.evolver.basics.spring.log.MessageLogService;
import fi.evolver.basics.spring.log.entity.MessageLog.Direction;
import fi.evolver.basics.spring.messaging.SendResult;
import fi.evolver.basics.spring.messaging.entity.Message;
import fi.evolver.basics.spring.messaging.util.SendUtils;
import fi.evolver.basics.spring.triggerable.TriggerService;
import fi.evolver.basics.spring.triggerable.TriggerableException;
import fi.evolver.utils.GzipUtils;
import fi.evolver.utils.arg.Arg;
@Component
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public class TriggerSender implements Sender {
private static final String PROPERTY_BODY_PARAMETER_NAME = "BodyParameterName";
private final MessageLogService messageLogService;
private final TriggerService triggerService;
@Autowired
public TriggerSender(MessageLogService messageLogService, TriggerService triggerService) {
this.messageLogService = messageLogService;
this.triggerService = triggerService;
}
@Override
public SendResult send(Message message, URI uri) {
LocalDateTime start = LocalDateTime.now();
String className = uri.toString().replaceAll("^trigger:(//)?", "").replaceAll("\\?.*", "").replaceAll("#.*", "");
ResultState state = null;
String body = null;
try {
body = GzipUtils.unzip(message.getCompressedData(), StandardCharsets.UTF_8);
String bodyParameterName = message.getMessageTargetConfig().getProperty(PROPERTY_BODY_PARAMETER_NAME).orElse("Input");
Map parameters = new LinkedHashMap<>();
parameters.putAll(SendUtils.replaceTags(message.getMessageTargetConfig().getPrefixedProperties(""), message));
parameters.putAll(message.getMetadata());
parameters.put(bodyParameterName, body);
Map args = Arg.parseStringValues(triggerService.getArgs(className), parameters);
state = triggerService.trigger(className, args);
return SendResult.success();
}
catch (TriggerableException e) {
return SendResult.error("Running %s failed: %s", className, e.getMessage());
}
finally {
messageLogService.logZippedMessage(
start,
message.getMessageType(),
"trigger",
uri.toString(),
messageLogService.getApplicationName(),
message.getTargetSystem(),
Direction.OUTBOUND,
body != null ? body.length() : 0,
message.getCompressedData(),
Collections.emptyMap(),
0,
null,
Collections.emptyMap(),
state != null && state.getState() != null && state.getState().isSuccess() ? "OK" : "FAILED",
state != null ? state.getMessage() : null,
SendUtils.mapMetadata(message.getMetadata()));
}
}
@Override
public Set getSupportedProtocols() {
return Set.of("trigger");
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy