package org.gbif.occurrence.cli.dataset.service; import org.gbif.common.messaging.DefaultMessagePublisher; import org.gbif.common.messaging.MessageListener; import org.gbif.occurrence.cli.dataset.DeleteDatasetListener; import org.gbif.occurrence.cli.dataset.InterpretDatasetListener; import org.gbif.occurrence.cli.dataset.ParseDatasetListener; import org.gbif.occurrence.persistence.api.OccurrenceKeyPersistenceService; import org.gbif.occurrence.persistence.guice.OccurrencePersistenceModule; import java.util.Set; import com.beust.jcommander.internal.Sets; import com.google.common.util.concurrent.AbstractIdleService; import com.google.inject.Guice; import com.google.inject.Injector; /** * Handles messages to parse a dataset (from xml/json to verbatim) and to interpret a dataset (from verbatim to * interpreted). Eventually should also handle deletions (which live in the delete package for now). */ public class DatasetMutationService extends AbstractIdleService { private final DatasetMutationConfiguration config; private Set<MessageListener> listeners = Sets.newHashSet(); public DatasetMutationService(DatasetMutationConfiguration config) { this.config = config; } @Override protected void startUp() throws Exception { Injector inj = Guice.createInjector(new OccurrencePersistenceModule(config.hbase)); config.ganglia.start(); OccurrenceKeyPersistenceService keyService = inj.getInstance(OccurrenceKeyPersistenceService.class); MessageListener listener = new MessageListener(config.messaging.getConnectionParameters()); listener.listen(config.deleteDatasetQueueName, config.msgPoolSize, new DeleteDatasetListener(keyService, new DefaultMessagePublisher(config.messaging.getConnectionParameters()))); listeners.add(listener); listener = new MessageListener(config.messaging.getConnectionParameters()); listener.listen(config.interpretDatasetQueueName, config.msgPoolSize, new InterpretDatasetListener(keyService, new DefaultMessagePublisher(config.messaging.getConnectionParameters()))); listeners.add(listener); listener = new MessageListener(config.messaging.getConnectionParameters()); listener.listen(config.parseDatasetQueueName, config.msgPoolSize, new ParseDatasetListener(keyService, new DefaultMessagePublisher(config.messaging.getConnectionParameters()))); listeners.add(listener); } @Override protected void shutDown() throws Exception { for (MessageListener listener : listeners) { if (listener != null) { listener.close(); } } } }