package net.iubris.ulysses.tasks.search.aware; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import javax.inject.Inject; import net.iubris.diane.aware.location.exceptions.LocationStateException; import net.iubris.diane.searcher.aware.location.exceptions.LocationAwareSearchException; import net.iubris.ulysses.model.Place; import android.location.Location; public class LocationExceptionDefault_UsingMap implements LocationExceptionState { private final SearchAwareTaskLocationStateable searchAwareTask; // private final UIMessageForLocationStateDefaultHandler uiMessageHandler; private final Map<Class<? extends LocationStateException>, UIMessageForLocationStateDefaultHandler> uiMessageForLocationStateDefaultHandlersMap = new HashMap<>() ; @Inject public LocationExceptionDefault_UsingMap(SearchAwareTaskLocationStateable searchAwareTask, // UIMessageForLocationStateDefaultHandler uiMessageHandler, Map<Class<? extends LocationStateException>, UIMessageForLocationStateDefaultHandler> uiMessageForLocationStateDefaultHandlersMap) { this.searchAwareTask = searchAwareTask; // this.uiMessageHandler = uiMessageHandler; this.uiMessageForLocationStateDefaultHandlersMap.putAll(uiMessageForLocationStateDefaultHandlersMap); } @Override public void tryToSearch(Location location, Class<? extends LocationAwareSearchException> extendingLocationAwareSearchExceptionClass) { // searchAwareTask.eventuallyShowErrorMessageOnLocationTooNearException(); // 6 // uiMessageHandler.eventuallyShowErrorMessage(); UIMessageForLocationStateDefaultHandler uiMessageForLocationStateDefaultHandler = uiMessageForLocationStateDefaultHandlersMap.get(extendingLocationAwareSearchExceptionClass); if (uiMessageForLocationStateDefaultHandler!=null) { uiMessageForLocationStateDefaultHandler.eventuallyShowErrorMessage(); } Set<Place> r = new HashSet<Place>(); r.addAll(searchAwareTask.getSearcher().getResult()); r.addAll(searchAwareTask.getLocalizedSearcher().getResult()); ArrayList<Place> result = new ArrayList<Place>(r); searchAwareTask.doOnSuccess(result); } @Override public void completeExecution(Class<? extends LocationAwareSearchException> locationAwareSearchExceptionClass) {/*nothing to complete*/ } }