package proj.zoie.store; import java.io.IOException; import java.util.Collection; import java.util.Comparator; import org.apache.log4j.Logger; import proj.zoie.api.LifeCycleCotrolledDataConsumer; import proj.zoie.api.ZoieException; public class ZoieStoreConsumer<D> implements LifeCycleCotrolledDataConsumer<D> { private static final Logger logger = Logger.getLogger(ZoieStoreConsumer.class); private final ZoieStore _store; private final ZoieStoreSerializer<D> _serializer; public ZoieStoreConsumer(ZoieStore store, ZoieStoreSerializer<D> serializer) { _store = store; _serializer = serializer; } @Override public void consume(Collection<proj.zoie.api.DataConsumer.DataEvent<D>> data) throws ZoieException { for (DataEvent<D> datum : data) { String version = datum.getVersion(); D obj = datum.getData(); try { byte[] bytes = _serializer.toBytes(obj); long id = _serializer.getUid(obj); _store.put(id, bytes, version); } catch (Exception e) { logger.error(e.getMessage(), e); } } } public void flushEvents() throws ZoieException { try { _store.commit(); } catch (Exception e) { throw new ZoieException(e.getMessage(), e); } } @Override public String getVersion() { return _store.getVersion(); } @Override public Comparator<String> getVersionComparator() { throw new UnsupportedOperationException("not supported"); } @Override public void start() { try { _store.open(); } catch (Exception e) { logger.error(e.getMessage(), e); } } @Override public void stop() { try { _store.close(); } catch (IOException e) { logger.error(e.getMessage(), e); } } }