Package com.codecademy.eventhub.index

Source Code of com.codecademy.eventhub.index.EventIndex$Factory

package com.codecademy.eventhub.index;

import com.codecademy.eventhub.list.DmaIdList;
import com.codecademy.eventhub.list.IdList;

import java.io.Closeable;
import java.io.IOException;
import java.util.SortedMap;

public class EventIndex implements Closeable {
  private final String directory;
  private final DmaIdList.Factory dmaIdListFactor;
  // from date string to IdList of eventId
  private final SortedMap<String, IdList> eventIdListMap;

  public EventIndex(String directory, DmaIdList.Factory dmaIdListFactor,
      SortedMap<String, IdList> eventIdListMap) {
    this.directory = directory;
    this.dmaIdListFactor = dmaIdListFactor;
    this.eventIdListMap = eventIdListMap;
  }

  public void enumerateEventIds(String startDate, String endDate, Callback callback) {
    for (IdList idList : eventIdListMap.subMap(startDate, endDate).values()) {
      IdList.Iterator eventIdIterator = idList.iterator();
      while (eventIdIterator.hasNext()) {
        callback.onEventId(eventIdIterator.next());
      }
    }
  }

  public void addEvent(long eventId, String date) {
    IdList idList = eventIdListMap.get(date);
    if (idList == null) {
      idList = dmaIdListFactor.build(getEventIdListFilename(directory, date));
      eventIdListMap.put(date, idList);
    }
    idList.add(eventId);
  }

  @Override
  public void close() throws IOException {
    for (IdList idList : eventIdListMap.values()) {
      idList.close();
    }
  }

  public static String getEventIdListFilename(String directory, String date) {
    return String.format("%s/%s.ser", directory, date);
  }

  public interface Factory {
    EventIndex build(String eventType);
  }

  public interface Callback {
    void onEventId(long eventId);
  }
}
TOP

Related Classes of com.codecademy.eventhub.index.EventIndex$Factory

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.