com.centretown.parts.client.application.ApplicationPresenter.java Source code

Java tutorial

Introduction

Here is the source code for com.centretown.parts.client.application.ApplicationPresenter.java

Source

/**
 * Copyright 2014 Centretown Software (Dave Marsh)
 *
 * 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.centretown.parts.client.application;

import com.centretown.parts.shared.dto.CurrentUserDto;
import com.centretown.parts.shared.rest.UserRoles;
import com.google.gwt.event.shared.GwtEvent.Type;
import com.google.gwt.http.client.URL;
import com.google.gwt.http.client.UrlBuilder;
import com.google.gwt.user.client.Window;
import com.google.inject.Inject;
import com.google.web.bindery.event.shared.EventBus;
import com.gwtplatform.mvp.client.HasUiHandlers;
import com.gwtplatform.mvp.client.Presenter;
import com.gwtplatform.mvp.client.PresenterWidget;
import com.gwtplatform.mvp.client.View;
import com.gwtplatform.mvp.client.annotations.ContentSlot;
import com.gwtplatform.mvp.client.annotations.ProxyStandard;
import com.gwtplatform.mvp.client.proxy.Proxy;
import com.gwtplatform.mvp.client.proxy.RevealContentHandler;

public class ApplicationPresenter extends Presenter<ApplicationPresenter.MyView, ApplicationPresenter.MyProxy>
        implements ApplicationUiHandlers {
    @ProxyStandard
    public interface MyProxy extends Proxy<ApplicationPresenter> {
    }

    public interface MyView extends View, HasUiHandlers<ApplicationUiHandlers> {
        void displayLoginLink();

        void displayLogoutLink();

        void displayCurrentUser(String nickname);

        void displayUsers();

        void setLoginLink(String link);
    }

    @ContentSlot
    public static final Type<RevealContentHandler<?>> SLOT_MAIN = new Type<RevealContentHandler<?>>();
    @ContentSlot
    public static final Type<RevealContentHandler<?>> SLOT_SEARCH = new Type<RevealContentHandler<?>>();

    private CurrentUserDto currentUserDto;

    @Inject
    public ApplicationPresenter(EventBus eventBus, MyView view, MyProxy proxy, CurrentUserDto currentUserDto) {
        super(eventBus, view, proxy, RevealType.Root);
        this.currentUserDto = currentUserDto;
        getView().setUiHandlers(this);
    }

    @Override
    protected void onBind() {
        super.onBind();
    }

    @Override
    protected void onReveal() {
        super.onReveal();
        displayLogin();
    }

    @Override
    public void setInSlot(Object slot, PresenterWidget<?> content) {
        super.setInSlot(slot, content);
    }

    private void displayLogin() {
        if (currentUserDto.isLoggedIn()) {
            getView().displayCurrentUser(currentUserDto.getNickname());
            getView().displayLogoutLink();
            if (currentUserDto.hasRole(UserRoles.ADMIN)) {
                getView().displayUsers();
            }
        } else {
            getView().displayLoginLink();
        }
    }

    private String replaceReturnPath(String url) {
        UrlBuilder builder = Window.Location.createUrlBuilder();
        return url.replace("%2F", URL.encode(builder.buildString()));
    }

    @Override
    public void onLogin() {
        String link = (currentUserDto.isLoggedIn()) ? replaceReturnPath(currentUserDto.getLogoutUrl())
                : replaceReturnPath(currentUserDto.getLoginUrl());
        getView().setLoginLink(link);
    }
}