package nl.tno.timeseries.testapp; import java.util.Map; import java.util.concurrent.atomic.AtomicReference; import nl.tno.sensorstorm.api.annotation.FetcherDeclaration; import nl.tno.sensorstorm.api.particles.DataParticle; import nl.tno.sensorstorm.api.processing.Fetcher; import nl.tno.sensorstorm.config.FetcherConfigManager; import nl.tno.storm.configuration.api.ExternalStormConfiguration; import nl.tno.storm.configuration.api.StormConfigurationException; import backtype.storm.task.TopologyContext; @FetcherDeclaration(outputs = { MyDataParticle.class }) public class MyConfigFetcher implements Fetcher { private static final long serialVersionUID = -4783593429530609215L; long time = 0; enum DataParticleType { l, d, s }; DataParticleType dataParticleType = DataParticleType.l; private final AtomicReference<Double> myvardouble = new AtomicReference<Double>( 0.0); private final AtomicReference<Long> myvarlong = new AtomicReference<Long>( 0L); private final AtomicReference<String> myvarstring = new AtomicReference<String>( ""); @Override public void prepare(@SuppressWarnings("rawtypes") Map stormNativeConfig, ExternalStormConfiguration stormConfiguration, TopologyContext context) { FetcherConfigManager fetcherConfigManager = new FetcherConfigManager( stormConfiguration, "myconfigfetcher"); try { fetcherConfigManager.registerParameter("myvarlong", myvarlong); fetcherConfigManager.registerParameter("myvardouble", myvardouble); fetcherConfigManager.registerParameter("myvarstring", myvarstring); fetcherConfigManager.loadParameters(); } catch (StormConfigurationException e) { System.out.println("Can not load parameters."); } } @Override public void activate() { } @Override public void deactivate() { } @Override public DataParticle fetchParticle() { try { Thread.sleep(100); } catch (InterruptedException e) { } time = time + 1000; switch (dataParticleType) { case l: dataParticleType = DataParticleType.d; return new MyDataParticle<Long>("Channel_1", time, myvarlong.get()); case d: dataParticleType = DataParticleType.s; return new MyDataParticle<Double>("Channel_1", time, myvardouble.get()); case s: dataParticleType = DataParticleType.l; return new MyDataParticle<String>("Channel_1", time, myvarstring.get()); } return null; } }