Package org.onebusaway.webapp.gwt.where_library.view.constraints

Source Code of org.onebusaway.webapp.gwt.where_library.view.constraints.SetInitialSearchLocationPopupPanel

/**
* Copyright (C) 2011 Brian Ferris <bdferris@onebusaway.org>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*         http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onebusaway.webapp.gwt.where_library.view.constraints;

import org.onebusaway.users.client.model.UserBean;
import org.onebusaway.webapp.gwt.where_library.UserContext;

import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.JsArray;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.CloseHandler;
import com.google.gwt.maps.client.geocode.Geocoder;
import com.google.gwt.maps.client.geocode.LocationCallback;
import com.google.gwt.maps.client.geocode.Placemark;
import com.google.gwt.maps.client.geom.LatLng;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DeferredCommand;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.SubmitButton;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.FormPanel.SubmitEvent;
import com.google.gwt.user.client.ui.FormPanel.SubmitHandler;

public class SetInitialSearchLocationPopupPanel {

  private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);

  private Geocoder _geocoder = new Geocoder();

  @UiField
  PopupPanel _popupPanel;

  @UiField
  FormPanel _formPanel;

  @UiField
  TextBox _textBox;
 
  @UiField
  SubmitButton _submitButton;

  @UiField
  Button _cancelButton;

  @UiField
  FlowPanel _errorPanel;

  private UserBean _user;

  public SetInitialSearchLocationPopupPanel() {
    uiBinder.createAndBindUi(this);

    _errorPanel.setVisible(false);

    _formPanel.getElement().setId("setLocationForm");
    _formPanel.addSubmitHandler(new SubmitHandler() {

      @Override
      public void onSubmit(SubmitEvent event) {
        event.cancel();
        _errorPanel.setVisible(false);
        String value = _textBox.getText();
        value = value.trim();
        if (value.length() > 0) {
          queryLocation(value);
        }
      }
    });
   
    _submitButton.getElement().setId("setLocationButton");

    _cancelButton.addClickHandler(new ClickHandler() {
      @Override
      public void onClick(ClickEvent arg0) {
        _popupPanel.hide();
      }
    });
  }

  public void addCloseHandler(CloseHandler<PopupPanel> closeHandler) {
    _popupPanel.addCloseHandler(closeHandler);
  }

  public void show() {
    _popupPanel.show();
    DeferredCommand.addCommand(new Command() {
      @Override
      public void execute() {
        _popupPanel.center();
      }
    });
  }

  public UserBean getUser() {
    return _user;
  }

  private void queryLocation(String value) {
    _geocoder.getLocations(value, new LocationHandler());
  }

  private void setError(String error) {
    _errorPanel.clear();
    _errorPanel.setVisible(true);
    _errorPanel.add(new Label(error));
  }

  private class LocationHandler implements LocationCallback {
    @Override
    public void onSuccess(JsArray<Placemark> locations) {

      if (locations.length() > 0) {

        Placemark placemark = locations.get(0);
        LatLng p = placemark.getPoint();

        String name = placemark.getAddress();
        double lat = p.getLatitude();
        double lon = p.getLongitude();

        UserContext context = UserContext.getContext();
        context.setDefaultSearchLocationForCurrentUser(name, lat, lon, false,
            new UserHandler());
      } else {
        setError("We could not find that location");
      }
    }

    @Override
    public void onFailure(int statusCode) {
      setError("We could not find that location");
    }
  }

  private class UserHandler implements AsyncCallback<UserBean> {

    @Override
    public void onSuccess(UserBean user) {
      System.out.println("updated user");
      _user = user;
      _popupPanel.hide();
    }

    @Override
    public void onFailure(Throwable arg0) {
      _popupPanel.hide();
    }
  }

  interface MyUiBinder extends
      UiBinder<PopupPanel, SetInitialSearchLocationPopupPanel> {
  }

}
TOP

Related Classes of org.onebusaway.webapp.gwt.where_library.view.constraints.SetInitialSearchLocationPopupPanel

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.