org.datacleaner.extension.sendjmsmessage.SendMessageToJMSQueueAnalyzer Maven / Gradle / Ivy
package org.datacleaner.extension.sendjmsmessage;
import java.io.InputStream;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.regex.Matcher;
import javax.inject.Named;
import org.apache.metamodel.util.FileHelper;
import org.apache.metamodel.util.Func;
import org.apache.metamodel.util.Resource;
import org.datacleaner.api.Analyzer;
import org.datacleaner.api.Categorized;
import org.datacleaner.api.Close;
import org.datacleaner.api.ComponentContext;
import org.datacleaner.api.Concurrent;
import org.datacleaner.api.Configured;
import org.datacleaner.api.Description;
import org.datacleaner.api.ExecutionLogMessage;
import org.datacleaner.api.Initialize;
import org.datacleaner.api.InputColumn;
import org.datacleaner.api.InputRow;
import org.datacleaner.api.MappedProperty;
import org.datacleaner.api.Provided;
import org.datacleaner.api.Validate;
import org.datacleaner.components.categories.WriteSuperCategory;
import org.datacleaner.components.convert.ConvertToStringTransformer;
import com.google.common.base.Strings;
/**
* Analyzer for sending messages to JMS queue.
*
*/
@Concurrent(true)
@Named("Send message to JMS queue")
@Description("Sends messages using a template file in which values can be dynamically merged into the message.")
@Categorized(superCategory = WriteSuperCategory.class)
public class SendMessageToJMSQueueAnalyzer implements Analyzer {
private static final String PROPERTY_INPUT_COLUMNS = "Values";
private static final String PROPERTY_FIELD_NAMES = "Fields";
@Configured(PROPERTY_INPUT_COLUMNS)
InputColumn>[] values;
@Configured(PROPERTY_FIELD_NAMES)
@MappedProperty(PROPERTY_INPUT_COLUMNS)
String[] fields;
@Configured
InputColumn> idColumn;
@Configured(value = "Broker url", order = 100)
String brokerUrl;
@Configured(value = "JMS queue name", order = 101)
String jmsQueueName;
@Configured(value = "Message template", required = true)
Resource messageTemplate;
@Configured
String templateEncoding = "UTF-8";
@Configured
boolean includeTemplateAsHeader = true;
@Provided
ComponentContext _componentContext;
private String _messageTemplateString;
private JMSMessageToQueueSender _jmsMessageSender;
private AtomicInteger _successCount;
private AtomicInteger _skipCount;
private Collection _failures;
/**
* Performs validation.
*/
@Validate
public void validate() {
if (messageTemplate == null) {
throw new IllegalStateException("Message template needs to be provided");
}
}
/**
* Initialize
*/
@Initialize
public void init() {
_messageTemplateString = loadTemplate(messageTemplate);
try {
_jmsMessageSender = new JMSMessageToQueueSender(brokerUrl, jmsQueueName);
} catch (Exception e) {
throw new IllegalStateException("JMS sender could not be initialized", e);
}
_successCount = new AtomicInteger();
_skipCount = new AtomicInteger();
_failures = new ConcurrentLinkedQueue();
}
private String loadTemplate(Resource res) {
if (res == null) {
return null;
}
return res.read(new Func() {
@Override
public String eval(InputStream is) {
return FileHelper.readInputStreamAsString(is, templateEncoding);
}
});
}
/**
* {@inheritDoc}
*/
@Override
public void run(InputRow row, int distinctCount) {
final List © 2015 - 2025 Weber Informatics LLC | Privacy Policy