Package com.changestuffs.client.widget.products

Source Code of com.changestuffs.client.widget.products.ProductsPresenter$SearcherTimer

package com.changestuffs.client.widget.products;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import com.changestuffs.client.core.lookfor.LookforPresenter.Parameters;
import com.changestuffs.client.place.NameTokens;
import com.changestuffs.client.resources.CurrentUser;
import com.changestuffs.shared.actions.LookForAction;
import com.changestuffs.shared.actions.LookForResult;
import com.changestuffs.shared.constants.Tags;
import com.changestuffs.shared.dto.IArticlesDto;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.user.client.Random;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.inject.Inject;
import com.google.web.bindery.event.shared.EventBus;
import com.gwtplatform.dispatch.shared.DispatchAsync;
import com.gwtplatform.mvp.client.HasUiHandlers;
import com.gwtplatform.mvp.client.PresenterWidget;
import com.gwtplatform.mvp.client.View;
import com.gwtplatform.mvp.client.proxy.PlaceManager;
import com.gwtplatform.mvp.client.proxy.PlaceRequest;

public class ProductsPresenter extends
    PresenterWidget<ProductsPresenter.MyView> implements ProductsUiHandler {

  private final CurrentUser user;
  private final PlaceManager placeManager;
  private final SearcherTimer timer = new SearcherTimer();
  private Iterator<Map.Entry<String, IArticlesDto>> iterator;
  private final Map<String, IArticlesDto> filteredMap = new HashMap<String, IArticlesDto>();
  private final DispatchAsync dispatcher;
  private Tags tagEnum;
 
  public interface MyView extends View, HasUiHandlers<ProductsUiHandler> {
    void addResults(Map<String, IArticlesDto> articles);
    void clearSearcher();
    void clearCloud();
  }

  @Inject
  public ProductsPresenter(final DispatchAsync dispatcher, final PlaceManager placeManager, final EventBus eventBus, final MyView view, final CurrentUser user) {
    super(eventBus, view);
    getView().setUiHandlers(this);
    this.placeManager = placeManager;
    this.user = user;
    this.dispatcher = dispatcher;
  }

  @Override
  public void handleKeypressTextBox(String value) {
    if (user.getSearchMap().get(tagEnum) != null) {
      GWT.log("Key pressed, looking for: " + value);
      timer.cancel();
      getView().clearCloud();
      filteredMap.clear();
      iterator = user.getSearchMap().get(tagEnum).getArticles().entrySet()
          .iterator();
      timer.text = value;
      timer.schedule(0);
      timer.scheduleRepeating(1);
    }
  }

  @Override
  public void handleClickName(String idHash) {
    GWT.log("Revealing id=" + idHash);
    PlaceRequest request = new PlaceRequest.Builder()
        .nameToken(placeManager.getCurrentPlaceRequest().getNameToken())
        .with(Parameters.id.name(), idHash).build();
    // Update browser first, and the reveal
    placeManager.updateHistory(request, true);
    placeManager.revealPlace(request, false);
  }
 
  public void retireveFromServer(final Tags tag) {
    dispatcher.execute(new LookForAction(tag, null),
        new AsyncCallback<LookForResult>() {

          @Override
          public void onFailure(Throwable caught) {
            GWT.log("Some error", caught);
          }

          @Override
          public void onSuccess(LookForResult result) {
            Tags localtag = tag;
            tagEnum = localtag;
            user.getSearchMap().put(localtag, result);
            getView().clearCloud();
            getView().addResults(result.getArticles());
            watchRandomProduct(result);
          }
        });
  }
 
  private void watchRandomProduct(LookForResult result){
    List<String> ids = new ArrayList<String>(result.getArticles().keySet());
    int randomIndex = Random.nextInt(ids.size());
    PlaceRequest request = new PlaceRequest.Builder()
    .nameToken(NameTokens.getLookfor()).with(Parameters.id.name(), ids.get(randomIndex)).build();
    placeManager.revealPlace(request);
  }
 
  private class SearcherTimer extends Timer {

    private String text;

    @Override
    public void run() {
      if (iterator.hasNext()) {
        Entry<String, IArticlesDto> entry = iterator.next();
        if (entry.getValue().getName().toLowerCase().contains(text.toLowerCase())) {
          filteredMap.put(entry.getKey(), entry.getValue());
        }
      } else {
        getView().addResults(filteredMap);
        cancel();
        GWT.log("Search finished");
      }
    }

  }
 
}
TOP

Related Classes of com.changestuffs.client.widget.products.ProductsPresenter$SearcherTimer

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.