package nl.tno.sensorstorm.impl; import java.util.List; import nl.tno.sensorstorm.api.particles.MetaParticle; import nl.tno.sensorstorm.api.processing.Operation; import nl.tno.sensorstorm.particlemapper.ParticleMapper; import backtype.storm.Config; import backtype.storm.tuple.Fields; // TODO explain this class public class MetaParticleUtil { public static final String METADATA_FIELDS = "metadata.fields"; @SuppressWarnings("unchecked") public static Fields getMetaParticleFields(Config conf) { if (conf.containsKey(METADATA_FIELDS)) { return new Fields((List<String>) conf.get(METADATA_FIELDS)); } else { return new Fields(new String[0]); } } /** * This one is for the bolts */ @SuppressWarnings("unchecked") public static Fields registerMetaParticleFieldsFromOperationClass( Config conf, Class<? extends Operation> operationClass) { Fields metaParticleFields = null; if (conf.containsKey(METADATA_FIELDS)) { metaParticleFields = new Fields( (List<String>) conf.get(METADATA_FIELDS)); } Fields fields = ParticleMapper.mergeFields(metaParticleFields, getMetaParticleOutputFieldsFromOperationClass(operationClass)); conf.put(METADATA_FIELDS, fields.toList()); return fields; } /** * This one is for the spout */ @SuppressWarnings("unchecked") public static Fields registerMetaParticleFieldsFromMetaParticleClass( Config conf, Class<? extends MetaParticle> metaParticleClass) { Fields metaParticleFields = null; if (conf.containsKey(METADATA_FIELDS)) { metaParticleFields = new Fields( (List<String>) conf.get(METADATA_FIELDS)); } Fields fields = ParticleMapper.mergeFields(metaParticleFields, ParticleMapper.getFields(metaParticleClass)); conf.put(METADATA_FIELDS, fields.toList()); return fields; } public static Fields getMetaParticleOutputFieldsFromOperationClass( Class<? extends Operation> operationClass) { List<Class<? extends MetaParticle>> outputMetaParticles = OperationManager .getOutputMetaParticles(operationClass); Fields fields = null; for (Class<? extends MetaParticle> p : outputMetaParticles) { Fields newfields = ParticleMapper.getFields(p); if (fields == null) { fields = newfields; } else { fields = ParticleMapper.mergeFields(fields, newfields); } } return fields; } }