package org.sigmah.client.ui.presenter; /* * #%L * Sigmah * %% * Copyright (C) 2010 - 2016 URD * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Map; import org.sigmah.client.inject.Injector; import org.sigmah.client.page.Page; import org.sigmah.client.page.PageRequest; import org.sigmah.client.page.RequestParameter; import org.sigmah.client.ui.notif.ConfirmCallback; import org.sigmah.client.ui.notif.N10N; import org.sigmah.client.ui.presenter.base.AbstractPagePresenter; import org.sigmah.client.ui.view.MockUpView; import org.sigmah.client.ui.view.base.ViewInterface; import org.sigmah.client.ui.zone.Zone; import org.sigmah.client.util.ClientUtils; import org.sigmah.client.util.MessageType; import org.sigmah.shared.command.result.ValueResult; import org.sigmah.shared.dto.ProjectDTO; import org.sigmah.shared.dto.element.FilesListElementDTO; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.Random; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.IsWidget; import com.google.gwt.user.client.ui.Panel; import com.google.inject.ImplementedBy; import com.google.inject.Inject; import com.google.inject.Singleton; /** * Mock-up presenter. * * @author Tom Miette (tmiette@ideia.fr) */ @Singleton public class MockUpPresenter extends AbstractPagePresenter<MockUpPresenter.View> { /** * View interface. */ @ImplementedBy(MockUpView.class) public static interface View extends ViewInterface { /** * Clears the view. */ void clear(); /** * Adds a new section. * * @param title * The section's title. */ void addSection(String title); /** * Adds an element to the current section. * * @param w * The new element. */ void addWidget(IsWidget w); } /** * Flexible element for file upload. */ private FilesListElementDTO filesListElementDTO; @Inject public MockUpPresenter(final View view, final Injector injector) { super(view, injector); } /** * {@inheritDoc} */ @Override public Page getPage() { return Page.MOCKUP; } /** * {@inheritDoc} */ @Override public void onBind() { Button b; Panel p; // -------------------------------------- // -- Application message. // -------------------------------------- view.addSection("Application message"); p = new FlowPanel(); for (final MessageType t : MessageType.values()) { b = new Button(t.name()); b.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { eventBus.updateZoneRequest(Zone.MESSAGE_BANNER.requestWith(RequestParameter.CONTENT, randomString()).addData(RequestParameter.TYPE, t)); } }); p.add(b); } b = new Button("Hide"); b.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { eventBus.updateZoneRequest(Zone.MESSAGE_BANNER.requestWith(RequestParameter.CONTENT, null).addData(RequestParameter.TYPE, null)); } }); p.add(b); view.addWidget(p); // -------------------------------------- // -- Page message. // -------------------------------------- view.addSection("Page message"); p = new FlowPanel(); for (final MessageType t : MessageType.values()) { b = new Button(t.name()); b.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { displayPageMessage(randomString(), t); } }); p.add(b); } b = new Button("Hide"); b.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { displayPageMessage(null, null); } }); p.add(b); view.addWidget(p); // -------------------------------------- // -- Messages (popup). // -------------------------------------- view.addSection("Messages (popup)"); p = new FlowPanel(); for (final MessageType t : MessageType.values()) { b = new Button(t.name()); b.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { N10N.message(MessageType.getTitle(t), randomString(), t); } }); p.add(b); } b = new Button("List"); b.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { N10N.message("List", randomString(), randomList(3), MessageType.DEFAULT); } }); p.add(b); b = new Button("Map"); b.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { N10N.message("Map", randomMap(3), MessageType.DEFAULT); } }); p.add(b); view.addWidget(p); // -------------------------------------- // -- Notifications. // -------------------------------------- view.addSection("Notifications"); p = new FlowPanel(); for (final MessageType t : MessageType.values()) { b = new Button(t.name()); b.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { N10N.notification(MessageType.getTitle(t), randomString(), t); } }); p.add(b); } b = new Button("List"); b.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { N10N.notification("List", randomString(), randomList(3), MessageType.DEFAULT); } }); p.add(b); b = new Button("Map"); b.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { N10N.notification("Map", randomMap(3), MessageType.DEFAULT); } }); p.add(b); view.addWidget(p); // -------------------------------------- // -- Confirmations. // -------------------------------------- view.addSection("Confirmations"); p = new FlowPanel(); b = new Button("String (2 callbacks)"); b.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { N10N.confirmation(MessageType.getTitle(MessageType.QUESTION), randomString(), yesCallback(), noCallback()); } }); p.add(b); b = new Button("String (1 callback)"); b.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { N10N.confirmation(MessageType.getTitle(MessageType.QUESTION), randomString(), yesCallback()); } }); p.add(b); b = new Button("List"); b.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { N10N.confirmation("List", randomString(), randomList(3), yesCallback(), noCallback()); } }); p.add(b); b = new Button("Map"); b.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { N10N.confirmation("Map", randomMap(3), yesCallback(), noCallback()); } }); p.add(b); view.addWidget(p); // -------------------------------------- // -- Project creations. // -------------------------------------- view.addSection("Project creations"); p = new FlowPanel(); b = new Button("Project"); b.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { final PageRequest request = new PageRequest(Page.CREATE_PROJECT); request.addParameter(RequestParameter.TYPE, CreateProjectPresenter.Mode.PROJECT); eventBus.navigateRequest(request); } }); p.add(b); b = new Button("Test project"); b.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { final PageRequest request = new PageRequest(Page.CREATE_PROJECT); request.addParameter(RequestParameter.TYPE, CreateProjectPresenter.Mode.TEST_PROJECT); eventBus.navigateRequest(request); } }); p.add(b); b = new Button("Funded project"); b.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { final PageRequest request = new PageRequest(Page.CREATE_PROJECT); request.addParameter(RequestParameter.TYPE, CreateProjectPresenter.Mode.FUNDED_BY_ANOTHER_PROJECT); request.addData(RequestParameter.DTO, randomBaseProject()); eventBus.navigateRequest(request); } }); p.add(b); b = new Button("Funding project"); b.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { final PageRequest request = new PageRequest(Page.CREATE_PROJECT); request.addParameter(RequestParameter.TYPE, CreateProjectPresenter.Mode.FUNDING_ANOTHER_PROJECT); request.addData(RequestParameter.DTO, randomBaseProject()); eventBus.navigateRequest(request); } }); p.add(b); view.addWidget(p); // -------------------------------------- // -- File transferts. // -------------------------------------- view.addSection("File transfert"); final ProjectDTO projectDTO = new ProjectDTO(); projectDTO.setId(7776); filesListElementDTO = new FilesListElementDTO(); filesListElementDTO.setService(dispatch); filesListElementDTO.setAuthenticationProvider(injector.getAuthenticationProvider()); filesListElementDTO.setCurrentContainerDTO(projectDTO); filesListElementDTO.setTransfertManager(injector.getTransfertManager()); filesListElementDTO.setEventBus(eventBus); filesListElementDTO.setId(2168); filesListElementDTO.setAmendable(false); filesListElementDTO.setFilledIn(false); filesListElementDTO.setGloballyExportable(false); filesListElementDTO.setHistorable(false); filesListElementDTO.setLabel("Test de l'envoi de fichier"); filesListElementDTO.setLimit(5); filesListElementDTO.setValidates(false); filesListElementDTO.init(); final ValueResult valueResult = null; view.addWidget(filesListElementDTO.getElementComponent(valueResult)); } /** * {@inheritDoc} */ @Override public void onPageRequest(final PageRequest request) { // Refreshing the file list filesListElementDTO.updateComponent(); } /** * Generates an unique random message. * * @return The message. */ private static String randomString() { return ClientUtils.formatDate(ClientUtils.now(), "EEEE, MMMM dd, yyyy - HH:mm:ss,SSS") + Random.nextInt(); } /** * Generates a random list of strings. * * @param size * The size of the list. * @return The list. */ private static Collection<String> randomList(int size) { size = size <= 0 ? 1 : size; final ArrayList<String> l = new ArrayList<String>(size); for (int i = 0; i < size; i++) { l.add(randomString()); } return l; } /** * Generates a random map of strings. * * @param size * The size of the map. * @return The list. */ private static Map<String, Collection<String>> randomMap(int size) { size = size <= 0 ? 1 : size; final HashMap<String, Collection<String>> m = new HashMap<String, Collection<String>>(size); for (int i = 0; i < size; i++) { m.put(randomString(), randomList(size)); } return m; } /** * Builds and returns a default 'YES' callback. * * @return the callback. */ private static ConfirmCallback yesCallback() { return new ConfirmCallback() { @Override public void onAction() { N10N.validNotif("You clicked 'YES'."); } }; } /** * Builds and returns a default 'NO' callback. * * @return the callback. */ private static ConfirmCallback noCallback() { return new ConfirmCallback() { @Override public void onAction() { N10N.errorNotif("You clicked 'NO'."); } }; } /** * Generates a random base project for funding / funded creation modes. * * @return The base project. */ private static ProjectDTO randomBaseProject() { final ProjectDTO p = new ProjectDTO(); p.setName(randomString()); p.setPlannedBudget(1000.0d); return p; } }