Subversion Repositories SmartDukaan

Rev

Rev 8303 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package in.shop2020.hotspot.dashbaord.client;

import in.shop2020.hotspot.dashbaord.client.event.LoadAlertsEvent;
import in.shop2020.hotspot.dashbaord.client.event.LoadOrderCountsEvent;
import in.shop2020.hotspot.dashbaord.client.event.LoadOrderListEvent;
import in.shop2020.hotspot.dashbaord.client.event.SignOutEvent;
import in.shop2020.hotspot.dashbaord.client.event.SignOutEventHandler;
import in.shop2020.hotspot.dashbaord.client.event.SubmitLoginInfoEvent;
import in.shop2020.hotspot.dashbaord.client.event.SubmitLoginInfoHandler;
import in.shop2020.hotspot.dashbaord.client.inbox.InboxPresenter;
import in.shop2020.hotspot.dashbaord.shared.actions.AuthRequest;
import in.shop2020.hotspot.dashbaord.shared.actions.AuthResponse;
import in.shop2020.hotspot.dashbaord.shared.actions.AuthResponse.NEXT;
import in.shop2020.hotspot.dashbaord.shared.actions.OrderCategory;
import in.shop2020.hotspot.dashbaord.shared.actions.OrderType;

import net.customware.gwt.dispatch.client.DispatchAsync;

import org.enunes.gwt.mvp.client.EventBus;
import org.enunes.gwt.mvp.client.presenter.BasePresenter;
import org.enunes.gwt.mvp.client.presenter.Presenter;

import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.inject.Inject;
import com.google.inject.Provider;

public class MainPresenterImpl extends BasePresenter<MainPresenter.Display> implements MainPresenter{
        
        private final Provider<InboxPresenter> inboxProvider;
        private final LoginDisplayPresenter lPresenter;
        private Presenter<? extends org.enunes.gwt.mvp.client.view.Display> presenter;
        private final DispatchAsync dispatcher;
        
        @Inject
        public MainPresenterImpl(EventBus eventBus, Display display, LoginDisplayPresenter loginpresenter, 
                        Provider<InboxPresenter> inboxProvider, final DispatchAsync dispatcher ) {
                super(eventBus, display);
                this.inboxProvider = inboxProvider;
                lPresenter = loginpresenter;
                lPresenter.bind();
                this.dispatcher = dispatcher;
                display.addContent(loginpresenter.getDisplay());
        }
        
        private void switchPresenter(
                        Presenter<? extends org.enunes.gwt.mvp.client.view.Display> presenter) {

                if (this.presenter != null) {
                        this.presenter.unbind();
                        display.removeContent();
                }

                this.presenter = presenter;

                if (presenter != null) {
                        display.addContent(presenter.getDisplay());
                        this.presenter.bind();
                }

        }
        
        @Override
        public void bind(){
                super.bind();
                registerHandler(eventBus.addHandler(SignOutEvent.getType(), new SignOutEventHandler() {
                        
                        @Override
                        public void doSignout(SignOutEvent event) {
                                signOut();
                        }
                }));
                
                registerHandler(eventBus.addHandler(SubmitLoginInfoEvent.getType(), new SubmitLoginInfoHandler() {
                        
                        @Override
                        public void onSubmitLoginInfo(SubmitLoginInfoEvent event) {
                                
                                dispatcher.execute(new AuthRequest(event.getUserName(), event.getPassword()), new  AsyncCallback<AuthResponse>() {

                                        @Override
                                        public void onFailure(Throwable caught) {
                                                lPresenter.showError("You do not seem in good terms with auth server. It is lost!");
                                        }

                                        @Override
                                        public void onSuccess(AuthResponse result) {
                                                doAuth(result);
                                        }
                                });                             
                        }
                }));
        }
        
        private void doAuth(AuthResponse result){
                if (result.isStatus()){
                        lPresenter.showError("Welcome! "+ result.getUsername() +", "+ result.getMessage());
                        
                        if(result.getNext() == NEXT.INBOX){
                                final InboxPresenter inboxPresenter = inboxProvider.get();
                                inboxPresenter.setUsername(result.getUsername());
                                inboxPresenter.setWarehouseId(result.getWarehouseId());
                                inboxPresenter.setSource(result.getSource());
                                inboxPresenter.setUserType(result.getUserType());
                                inboxPresenter.setBillingType(result.getBillingType());
                                inboxPresenter.setWarehouses(result.getWarehouses());
                                inboxPresenter.setProviders(result.getProviders());
                                inboxPresenter.setStores(result.getStores());
                                inboxPresenter.initialize();
                                
                                //inboxPresenter.refreshOrderList();
                                
                                inboxPresenter.getDisplay().changeGreeting(result.getUsername());
                                switchPresenter(inboxPresenter);
                                eventBus.fireEvent(new LoadOrderListEvent());
                                for(OrderType orderType: OrderType.values()){
                                        eventBus.fireEvent(new LoadOrderCountsEvent(orderType));
                                }
                                for(OrderCategory orderType: OrderCategory.values()){
                                        eventBus.fireEvent(new LoadOrderCountsEvent(orderType));
                                }
                                eventBus.fireEvent(new LoadAlertsEvent(true, false, 1));
                        }
                        
                }
                else 
                        lPresenter.showError("Who are you man! Have we met before? ");
        }
        
        private void signOut(){
                
                lPresenter.reset();
                switchPresenter(lPresenter);
        }
        
        @Override
        public void unbind() {
                super.unbind();
                if (presenter != null) {
                        presenter.unbind();
                }
        }
}