Package org.meb.speedway.process

Source Code of org.meb.speedway.process.EventTaskProcessorChain

package org.meb.speedway.process;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ServiceLoader;

import org.meb.speedway.model.common.IntEvent;
import org.meb.speedway.process.model.EventData;

public class EventTaskProcessorChain {

  private static EventTaskProcessorChain instance;
  private List<EventTaskProcessor> processors;

  public synchronized static EventTaskProcessorChain getInstance() {
    if (instance == null) {
      instance = new EventTaskProcessorChain();
    }
    return instance;
  }

  private EventTaskProcessorChain() {
    processors = new ArrayList<EventTaskProcessor>();
    ServiceLoader<EventTaskProcessor> loader = ServiceLoader.load(EventTaskProcessor.class);
    Iterator<EventTaskProcessor> iterator = loader.iterator();
    while (iterator.hasNext()) {
      processors.add(iterator.next());
    }
  }

  public void process(IntEvent eventTask) {
    for (EventTaskProcessor processor : processors) {
      try {
        EventData eventData = processor.process(eventTask);
        if (eventData != null) {
          break;
        }
        // no problem - go to next processor
      } catch (EventTaskProcessException e) {
        e.printStackTrace();
        // no problem - go to next processor
      }
    }
  }
}
TOP

Related Classes of org.meb.speedway.process.EventTaskProcessorChain

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.