Java tutorial
/** * 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); } }