com.gsr.myschool.front.client.web.application.inscription.InscriptionPresenter.java Source code

Java tutorial

Introduction

Here is the source code for com.gsr.myschool.front.client.web.application.inscription.InscriptionPresenter.java

Source

/**
 * Copyright 2012 Nuvola Inc.
 *
 * 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 com.gsr.myschool.front.client.web.application.inscription;

import com.github.gwtbootstrap.client.ui.constants.AlertType;
import com.google.gwt.user.client.Window;
import com.google.inject.Inject;
import com.google.web.bindery.event.shared.EventBus;
import com.gsr.myschool.common.client.proxy.DossierProxy;
import com.gsr.myschool.common.client.request.ReceiverImpl;
import com.gsr.myschool.common.client.request.ReportRequestBuilder;
import com.gsr.myschool.common.client.security.LoggedInGatekeeper;
import com.gsr.myschool.common.client.security.SecurityUtils;
import com.gsr.myschool.common.client.widget.messages.CloseDelay;
import com.gsr.myschool.common.client.widget.messages.Message;
import com.gsr.myschool.common.client.widget.messages.event.MessageEvent;
import com.gsr.myschool.common.shared.exception.InscriptionClosedException;
import com.gsr.myschool.common.shared.type.Authority;
import com.gsr.myschool.front.client.place.NameTokens;
import com.gsr.myschool.front.client.request.FrontRequestFactory;
import com.gsr.myschool.front.client.resource.message.MessageBundle;
import com.gsr.myschool.front.client.web.application.ApplicationPresenter;
import com.gsr.myschool.front.client.web.application.inscription.event.DossierSubmitEvent;
import com.gsr.myschool.front.client.web.application.inscription.popup.ConfirmationInscriptionPresenter;
import com.gwtplatform.mvp.client.HasUiHandlers;
import com.gwtplatform.mvp.client.Presenter;
import com.gwtplatform.mvp.client.View;
import com.gwtplatform.mvp.client.annotations.NameToken;
import com.gwtplatform.mvp.client.annotations.ProxyStandard;
import com.gwtplatform.mvp.client.annotations.UseGatekeeper;
import com.gwtplatform.mvp.client.proxy.PlaceManager;
import com.gwtplatform.mvp.client.proxy.PlaceRequest;
import com.gwtplatform.mvp.client.proxy.ProxyPlace;

import java.util.List;

public class InscriptionPresenter extends Presenter<InscriptionPresenter.MyView, InscriptionPresenter.MyProxy>
        implements InscriptionUiHandlers, DossierSubmitEvent.DossierSubmitHandler {
    public interface MyView extends View, HasUiHandlers<InscriptionUiHandlers> {
        void setData(List<DossierProxy> data);

        void setInscriptionStatusOpened(Boolean opened);

        void setFiliereGeneralesOpened(Boolean opened);

        void setAlertMessage(Boolean visible, Boolean type);
    }

    @ProxyStandard
    @NameToken(NameTokens.inscription)
    @UseGatekeeper(LoggedInGatekeeper.class)
    public interface MyProxy extends ProxyPlace<InscriptionPresenter> {
    }

    private final FrontRequestFactory requestFactory;
    private final PlaceManager placeManager;
    private final SecurityUtils securityUtils;
    private final MessageBundle messageBundle;
    private final ConfirmationInscriptionPresenter confirmationInscriptionPresenter;

    private DossierProxy submittedDossier;

    @Inject
    public InscriptionPresenter(final EventBus eventBus, final MyView view, final MyProxy proxy,
            final FrontRequestFactory requestFactory, final PlaceManager placeManager,
            final SecurityUtils securityUtils, final MessageBundle messageBundle,
            final ConfirmationInscriptionPresenter confirmationInscriptionPresenter) {
        super(eventBus, view, proxy, ApplicationPresenter.TYPE_SetMainContent);

        this.requestFactory = requestFactory;
        this.placeManager = placeManager;
        this.securityUtils = securityUtils;
        this.messageBundle = messageBundle;
        this.confirmationInscriptionPresenter = confirmationInscriptionPresenter;

        getView().setUiHandlers(this);
    }

    @Override
    public void addNewInscription() {
        requestFactory.inscriptionService().createNewInscription().fire(new ReceiverImpl<DossierProxy>() {
            @Override
            public void onSuccess(DossierProxy newDossier) {
                PlaceRequest placeRequest = new PlaceRequest(NameTokens.getEditInscription());
                placeRequest = placeRequest.with("id", newDossier.getId().toString());
                placeManager.revealPlace(placeRequest);
            }

            @Override
            public void onException(String type) {
                if (InscriptionClosedException.class.getName().equals(type)) {
                    Message message = new Message.Builder(messageBundle.inscriptionClosed()).style(AlertType.ERROR)
                            .closeDelay(CloseDelay.NEVER).build();
                    MessageEvent.fire(this, message);
                    checkStatusInscriptions();
                    loadAllInscriptions();
                }
            }
        });
    }

    @Override
    public void previewInscription(DossierProxy dossier) {
        PlaceRequest placeRequest = new PlaceRequest(NameTokens.getInscriptionDetail());
        placeRequest = placeRequest.with("id", dossier.getId().toString());
        placeManager.revealPlace(placeRequest);
    }

    @Override
    public void editInscription(DossierProxy dossier) {
        PlaceRequest placeRequest = new PlaceRequest(NameTokens.getEditInscription());
        placeRequest = placeRequest.with("id", dossier.getId().toString());
        placeManager.revealPlace(placeRequest);
    }

    @Override
    public void deleteInscription(DossierProxy dossier) {
        if (Window.confirm(messageBundle.deleteInscriptionConf())) {
            requestFactory.inscriptionService().deleteInscription(dossier.getId()).fire(new ReceiverImpl<Void>() {
                @Override
                public void onSuccess(Void response) {
                    Message message = new Message.Builder(messageBundle.deleteInscriptionSuccess())
                            .style(AlertType.SUCCESS).closeDelay(CloseDelay.DEFAULT).build();
                    MessageEvent.fire(this, message);
                    loadAllInscriptions();
                }
            });
        }
    }

    @Override
    public void submitInscription(DossierProxy dossier) {
        submittedDossier = dossier;
        confirmationInscriptionPresenter.setSource(this);
        addToPopupSlot(confirmationInscriptionPresenter);
    }

    @Override
    public void printInscription(DossierProxy dossier) {
        ReportRequestBuilder requestBuilder = new ReportRequestBuilder();
        requestBuilder.buildData(dossier.getId().toString());
        requestBuilder.sendRequest();
    }

    @Override
    public void onDossierSubmit(DossierSubmitEvent event) {
        if (event.getAgreement()) {
            Long dossierId = submittedDossier.getId();
            requestFactory.inscriptionService()
                    .submitInscription(dossierId,
                            securityUtils.isSuperUser()
                                    || securityUtils.hasAuthority(Authority.ROLE_USER_VIP.name()))
                    .fire(new ReceiverImpl<List<String>>() {
                        @Override
                        public void onSuccess(List<String> response) {
                            if (response.isEmpty()) {
                                Message message = new Message.Builder(messageBundle.inscriptionSubmitSuccess())
                                        .style(AlertType.SUCCESS).closeDelay(CloseDelay.NEVER).build();
                                MessageEvent.fire(this, message);
                                loadAllInscriptions();
                            } else {
                                for (String error : response) {
                                    Message message = new Message.Builder(error).style(AlertType.ERROR)
                                            .closeDelay(CloseDelay.NEVER).build();
                                    MessageEvent.fire(this, message);
                                }
                            }
                        }

                        @Override
                        public void onException(String type) {
                            if (InscriptionClosedException.class.getName().equals(type)) {
                                Message message = new Message.Builder(messageBundle.inscriptionClosed())
                                        .style(AlertType.ERROR).closeDelay(CloseDelay.NEVER).build();
                                MessageEvent.fire(this, message);
                                checkStatusInscriptions();
                                loadAllInscriptions();
                            }
                        }
                    });
        }
    }

    @Override
    protected void onReveal() {
        checkStatusInscriptions();
        loadAllInscriptions();
    }

    @Override
    protected void onBind() {
        addRegisteredHandler(DossierSubmitEvent.getType(), this);
    }

    private void loadAllInscriptions() {
        requestFactory.inscriptionService().findAllDossiers().fire(new ReceiverImpl<List<DossierProxy>>() {
            @Override
            public void onSuccess(List<DossierProxy> result) {
                getView().setData(result);
            }
        });
    }

    private void checkStatusInscriptions() {
        requestFactory.inscriptionService().statusInscriptionOpened().fire(new ReceiverImpl<Boolean>() {
            @Override
            public void onSuccess(final Boolean response) {
                getView().setInscriptionStatusOpened(response);
                requestFactory.inscriptionService().statusFilieresGeneralesOpened()
                        .fire(new ReceiverImpl<Boolean>() {
                            @Override
                            public void onSuccess(Boolean aBoolean) {
                                getView().setFiliereGeneralesOpened(aBoolean);
                                getView().setAlertMessage(!response || !aBoolean, response);
                            }
                        });
            }
        });
    }
}