package org.aplikator.client.local; import javax.annotation.PostConstruct; import javax.inject.Inject; import java.util.List; import org.aplikator.client.local.command.WelcomeScreen; import org.aplikator.client.local.processes.ProcessInformations; import org.aplikator.client.local.widgets.Messages; import org.aplikator.client.shared.descriptor.ActionDTO; import org.aplikator.client.shared.descriptor.ApplicationDTO; import org.aplikator.client.shared.descriptor.MenuDTO; import org.aplikator.client.shared.rpc.AplikatorErrorCallback; import org.aplikator.client.shared.rpc.AplikatorService; import org.gwtbootstrap3.client.ui.AnchorButton; import org.gwtbootstrap3.client.ui.AnchorListItem; import org.gwtbootstrap3.client.ui.Button; import org.gwtbootstrap3.client.ui.DropDownMenu; import org.gwtbootstrap3.client.ui.Label; import org.gwtbootstrap3.client.ui.ListDropDown; import org.gwtbootstrap3.client.ui.NavbarBrand; import org.gwtbootstrap3.client.ui.NavbarNav; import org.gwtbootstrap3.client.ui.constants.Toggle; import org.gwtbootstrap3.client.ui.html.Div; import org.jboss.errai.common.client.api.RemoteCallback; import org.jboss.errai.enterprise.client.jaxrs.api.RestClient; import org.jboss.errai.ioc.client.api.EntryPoint; import org.jboss.errai.ui.nav.client.local.HistoryWrapper; import org.jboss.errai.ui.nav.client.local.Navigation; import org.jboss.errai.ui.nav.client.local.TransitionTo; import org.slf4j.LoggerFactory; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.SimplePanel; /** * Entry point class of Aplikator application (defines <code>onModuleLoad()</code> ). */ @EntryPoint public class Aplikator { public static final int MAINMENUBAR_HEIGHT = 52; private static final org.slf4j.Logger LOG = LoggerFactory.getLogger(Aplikator.class); public static ApplicationDTO application; private static AplikatorUiBinder ourUiBinder = GWT.create(AplikatorUiBinder.class); @UiField Div mainPanel; @UiField NavbarNav mainMenuHolder; @UiField NavbarBrand homeButton; @UiField AnchorListItem processes; //@UiField //AnchorListItem profile; @UiField Label username; @UiField Button login; @UiField SimplePanel contents; @Inject TransitionTo<WelcomeScreen> homeButtonClicked; @Inject private WelcomeScreen welcomeScreen; @Inject private Navigation navigation; public static String getBaseURL() { String moduleBase = GWT.getModuleBaseURL(); String moduleName = GWT.getModuleName(); return moduleBase.substring(0, moduleBase.lastIndexOf(moduleName)); } /** * Aplikator client entry point method. */ @PostConstruct public final void onModuleLoad() { //PushStateUtil.enablePushState(true); Navigation.setAppContext(""); RestClient.setApplicationRoot(""); //RestClient.setJacksonMarshallingActive(true); GWT.setUncaughtExceptionHandler(new GWT.UncaughtExceptionHandler() { public void onUncaughtException(Throwable e) { LOG.error(e.getMessage(), e); } }); mainPanel = ourUiBinder.createAndBindUi(this); contents.add(navigation.getContentPanel()); RootPanel.get().add(mainPanel); reloadApplication(false); } public void reloadApplication(final boolean forceHome) { RestClient.create(AplikatorService.class, new RemoteCallback<ApplicationDTO>() { @Override public void callback(ApplicationDTO resp) { application = resp; initPanels(); Messages.cleanAll(); if (application.isShowNavigation()) { setupMainMenu(application.getMenus()); } if (application.getDefaultActionToken() != null) { HistoryWrapper.newItem(application.getDefaultActionToken(), true); } else if (forceHome) { homeButtonClicked.go(); } } }, new AplikatorErrorCallback(null) ).getApplication(); } private void initPanels() { homeButton.setText(application.getConfigString("aplikator.brand")); if (application.isShowNavigation()) { homeButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { homeButtonClicked.go(); } }); } processes.setText(application.getConfigString("aplikator.menu.processes")); if (application.getUsername() == null) { username.setText(""); login.setText(application.getConfigString("aplikator.menu.login")); } else { username.setText(application.getUsername()); login.setText(application.getConfigString("aplikator.menu.logout")); } } @UiHandler("processes") public void displayProcesses(ClickEvent event) { ProcessInformations pi = new ProcessInformations(); pi.display(); } @UiHandler("login") public void displayProfile(ClickEvent event) { if (application.getUsername() == null) { HistoryWrapper.newItem("login", true); } else { RestClient.create(AplikatorService.class, new RemoteCallback<Void>() { @Override public void callback(Void response) { reloadApplication(true); } }, new AplikatorErrorCallback() ).logout(); } } private void setupMainMenu(List<MenuDTO> menus) { mainMenuHolder.clear(); for (MenuDTO menu : menus) { ListDropDown menuDropdown = new ListDropDown(); AnchorButton menuButton = new AnchorButton(); menuButton.setText(menu.getLocalizedName()); menuButton.setDataToggle(Toggle.DROPDOWN); DropDownMenu menuItems = new DropDownMenu(); menuDropdown.add(menuButton); menuDropdown.add(menuItems); mainMenuHolder.add(menuDropdown); for (final ActionDTO action : menu.getActions()) { AnchorListItem menuItem = new AnchorListItem(); menuItem.setText(action.getLocalizedName()); menuItem.setHref("#" + action.getToken()); menuItem.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { HistoryWrapper.newItem(action.getToken(), true); } }); menuItems.add(menuItem); } } } interface AplikatorUiBinder extends UiBinder<Div, Aplikator> { } public void displayLoginButton(boolean displayLoginButton) { login.setVisible(displayLoginButton); } }