001 package com.hammurapi.eventbus;
002
003 import java.util.Collections;
004 import java.util.Map;
005 import java.util.Set;
006
007 import com.hammurapi.extract.ComparisonResult;
008 import com.hammurapi.extract.Extractor;
009
010 /**
011 * Extracts event from handle. This is a helper class to construct bus stores.
012 * @author Pavel Vlasov
013 *
014 * @param <V>
015 * @param <P>
016 * @param <C>
017 * @param <K>
018 */
019 public class HandleExtractor<E, P extends Comparable<P>, C, K, H extends EventBus.Handle<E,P,C>, S extends EventStore<E,P,C,H,S>> implements Extractor<H,E,S> {
020
021 private static Set<Integer> ZERO_IDX = Collections.singleton(0);
022
023 @Override
024 public Set<Integer> parameterIndices() {
025 return ZERO_IDX;
026 }
027
028 @Override
029 public boolean isContextDependent() {
030 return false;
031 }
032
033 @Override
034 public E extract(S context, Map<S, Map<Extractor<H, ? super E, S>, ? super E>> cache, H... obj) {
035 return obj[0].getEvent();
036 }
037
038 @Override
039 public ComparisonResult compareTo(Extractor<H, E, S> other) {
040 return other.getClass().equals(getClass()) ? ComparisonResult.EQUAL_NM : ComparisonResult.NOT_EQUAL_NM ;
041 }
042
043 @Override
044 public double getCost() {
045 return 0;
046 }
047
048 }