package org.sigmah.client.ui.notif;
/*
* #%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.Collection;
import java.util.HashMap;
import java.util.Map;
import org.sigmah.client.event.EventBus;
import org.sigmah.client.page.RequestParameter;
import org.sigmah.client.ui.zone.Zone;
import org.sigmah.client.util.ClientUtils;
import org.sigmah.client.util.MessageType;
/**
* Displays messages, notifications.
*
* N10N: Notifications.
*
* @author Tom Miette (tmiette@ideia.fr)
*/
public final class N10N {
private N10N() {
// Provides only static methods.
}
// CSS styles names
private static final String CSS_MESSAGE = "notif-message";
private static final String CSS_FIRST = "notif-first";
public static final String CSS_LIST = "notif-list";
/**
* Utility method to create a map with the given args.
*
* @param html
* the key.
* @param items
* the value.
* @return the map.
*/
private static <C extends Collection<String>> Map<String, C> map(final String html, final C items) {
final HashMap<String, C> map = new HashMap<String, C>();
map.put(html, items);
return map;
}
/**
* Utility method to build a HTML message from the given map.
*
* @param items
* The message map.
* @return The HTML message.
*/
private static <C extends Collection<String>> String buildHTML(final Map<String, C> items) {
final StringBuilder sb = new StringBuilder();
if (items != null && !items.isEmpty()) {
boolean first = true;
for (final Map.Entry<String, C> item : items.entrySet()) {
sb.append("<div class=\"").append(CSS_MESSAGE);
if (first) {
sb.append(" ").append(CSS_FIRST);
}
sb.append("\">");
final boolean hasItems = ClientUtils.isNotEmpty(item.getValue());
if (hasItems) {
sb.append("<span class=\"").append(CSS_LIST).append("\">");
} else {
sb.append("<span>");
}
sb.append(item.getKey());
sb.append("</span>");
if (hasItems) {
sb.append("<ul class=\"").append(CSS_LIST).append("\">");
for (final String s : item.getValue()) {
if (item == null) {
continue;
}
sb.append("<li>");
sb.append(s);
sb.append("</li>");
}
sb.append("</ul>");
}
sb.append("</div>");
first = false;
}
}
return sb.toString();
}
// --
// -- MESSAGES.
// --
// Error.
public static void error(final String html) {
error(null, html);
}
public static void error(final String title, final String html) {
error(title, html, null);
}
public static void error(final String html, final Collection<String> items) {
error(null, html, items);
}
public static void error(final String title, final String html, final Collection<String> items) {
error(title, map(html, items));
}
public static <C extends Collection<String>> void error(final Map<String, C> items) {
error(null, items);
}
public static <C extends Collection<String>> void error(final String title, final Map<String, C> items) {
message(title, items, MessageType.ERROR);
}
// Warn.
public static void warn(final String html) {
warn(null, html);
}
public static void warn(final String title, final String html) {
warn(title, html, null);
}
public static void warn(final String html, final Collection<String> items) {
warn(null, html, items);
}
public static void warn(final String title, final String html, final Collection<String> items) {
warn(title, map(html, items));
}
public static <C extends Collection<String>> void warn(final Map<String, C> items) {
warn(null, items);
}
public static <C extends Collection<String>> void warn(final String title, final Map<String, C> items) {
message(title, items, MessageType.WARNING);
}
// Info.
public static void info(final String html) {
info(null, html);
}
public static void info(final String title, final String html) {
info(title, html, null);
}
public static void info(final String html, final Collection<String> items) {
info(null, html, items);
}
public static void info(final String title, final String html, final Collection<String> items) {
info(title, map(html, items));
}
public static <C extends Collection<String>> void info(final Map<String, C> items) {
info(null, items);
}
public static <C extends Collection<String>> void info(final String title, final Map<String, C> items) {
message(title, items, MessageType.INFO);
}
// Valid.
public static void valid(final String html) {
valid(null, html);
}
public static void valid(final String title, final String html) {
valid(title, html, null);
}
public static void valid(final String html, final Collection<String> items) {
valid(null, html, items);
}
public static void valid(final String title, final String html, final Collection<String> items) {
valid(title, map(html, items));
}
public static <C extends Collection<String>> void valid(final Map<String, C> items) {
valid(null, items);
}
public static <C extends Collection<String>> void valid(final String title, final Map<String, C> items) {
message(title, items, MessageType.VALID);
}
// Generic.
public static void message(final String html, final MessageType type) {
message(null, html, type);
}
public static void message(final String title, final String html, final MessageType type) {
message(title, html, null, type);
}
public static void message(final String html, final Collection<String> items, final MessageType type) {
message(null, html, items, type);
}
public static void message(final String title, final String html, final Collection<String> items, final MessageType type) {
message(title, map(html, items), type);
}
public static <C extends Collection<String>> void message(final Map<String, C> items, final MessageType type) {
message(null, items, type);
}
public static <C extends Collection<String>> void message(final String title, final Map<String, C> items, final MessageType type) {
Messages.show(title, buildHTML(items), (type != null ? type : MessageType.DEFAULT));
}
// --
// -- NOTIFICATIONS.
// --
// Error.
public static void errorNotif(final String html) {
errorNotif(null, html);
}
public static void errorNotif(final String title, final String html) {
errorNotif(title, html, null);
}
public static void errorNotif(final String html, final Collection<String> items) {
errorNotif(null, html, items);
}
public static void errorNotif(final String title, final String html, final Collection<String> items) {
errorNotif(title, map(html, items));
}
public static <C extends Collection<String>> void errorNotif(final Map<String, C> items) {
errorNotif(null, items);
}
public static <C extends Collection<String>> void errorNotif(final String title, final Map<String, C> items) {
notification(title, items, MessageType.ERROR);
}
// Warn.
public static void warnNotif(final String html) {
warnNotif(null, html);
}
public static void warnNotif(final String title, final String html) {
warnNotif(title, html, null);
}
public static void warnNotif(final String html, final Collection<String> items) {
warnNotif(null, html, items);
}
public static void warnNotif(final String title, final String html, final Collection<String> items) {
warnNotif(title, map(html, items));
}
public static <C extends Collection<String>> void warnNotif(final Map<String, C> items) {
warnNotif(null, items);
}
public static <C extends Collection<String>> void warnNotif(final String title, final Map<String, C> items) {
notification(title, items, MessageType.WARNING);
}
// Info.
public static void infoNotif(final String html) {
infoNotif(null, html);
}
public static void infoNotif(final String title, final String html) {
infoNotif(title, html, null);
}
public static void infoNotif(final String html, final Collection<String> items) {
infoNotif(null, html, items);
}
public static void infoNotif(final String title, final String html, final Collection<String> items) {
infoNotif(title, map(html, items));
}
public static <C extends Collection<String>> void infoNotif(final Map<String, C> items) {
infoNotif(null, items);
}
public static <C extends Collection<String>> void infoNotif(final String title, final Map<String, C> items) {
notification(title, items, MessageType.INFO);
}
// Valid.
public static void validNotif(final String html) {
validNotif(null, html);
}
public static void validNotif(final String title, final String html) {
validNotif(title, html, null);
}
public static void validNotif(final String html, final Collection<String> items) {
validNotif(null, html, items);
}
public static void validNotif(final String title, final String html, final Collection<String> items) {
validNotif(title, map(html, items));
}
public static <C extends Collection<String>> void validNotif(final Map<String, C> items) {
validNotif(null, items);
}
public static <C extends Collection<String>> void validNotif(final String title, final Map<String, C> items) {
notification(title, items, MessageType.VALID);
}
// Offline.
public static void offlineNotif(final String title, final String html) {
offlineNotif(title, html, null, null);
}
public static void offlineNotif(final String title, final String html, EventBus eventBus) {
offlineNotif(title, html, null, eventBus);
}
public static void offlineNotif(final String title, final String html, final Collection<String> items, EventBus eventBus) {
offlineNotif(title, map(html, items), eventBus);
}
public static <C extends Collection<String>> void offlineNotif(final String title, final Map<String, C> items, EventBus eventBus) {
notification(title, items, MessageType.OFFLINE);
if(eventBus != null) {
eventBus.updateZoneRequest(Zone.OFFLINE_BANNER.requestWith(RequestParameter.SHOW_BRIEFLY, true));
}
}
// Generic.
public static void notification(final String html, final MessageType type) {
notification(null, html, type);
}
public static void notification(final String title, final String html, final MessageType type) {
notification(title, html, null, type);
}
public static void notification(final String html, final Collection<String> items, final MessageType type) {
notification(null, html, items, type);
}
public static void notification(final String title, final String html, final Collection<String> items, final MessageType type) {
notification(title, map(html, items), type);
}
public static <C extends Collection<String>> void notification(final Map<String, C> items, final MessageType type) {
notification(null, items, type);
}
public static <C extends Collection<String>> void notification(final String title, final Map<String, C> items, final MessageType type) {
Notifications.show(title, buildHTML(items), (type != null ? type : MessageType.DEFAULT));
}
// --
// -- CONFIRMATIONS.
// --
// Question.
public static void confirmation(final String html, ConfirmCallback yesCallback) {
confirmation(null, html, yesCallback);
}
public static void confirmation(final String title, final String html, ConfirmCallback yesCallback) {
confirmation(title, html, yesCallback, null);
}
public static void confirmation(final String html, final ConfirmCallback yesCallback, ConfirmCallback noCallback) {
confirmation(null, html, yesCallback, noCallback);
}
public static void confirmation(final String title, final String html, ConfirmCallback yesCallback, ConfirmCallback noCallback) {
confirmation(title, html, null, yesCallback, noCallback);
}
public static void confirmation(final String html, final Collection<String> items, ConfirmCallback yesCallback) {
confirmation(null, html, items, yesCallback);
}
public static void confirmation(final String title, final String html, final Collection<String> items, ConfirmCallback yesCallback) {
confirmation(title, html, items, yesCallback, null);
}
public static void confirmation(final String html, final Collection<String> items, ConfirmCallback yesCallback, ConfirmCallback noCallback) {
confirmation(null, html, items, yesCallback, noCallback);
}
public static void confirmation(final String title, final String html, final Collection<String> items, ConfirmCallback yesCallback, ConfirmCallback noCallback) {
confirmation(title, map(html, items), yesCallback, noCallback);
}
public static <C extends Collection<String>> void confirmation(final Map<String, C> items, ConfirmCallback yesCallback) {
confirmation(null, items, yesCallback);
}
public static <C extends Collection<String>> void confirmation(final String title, final Map<String, C> items, ConfirmCallback yesCallback) {
confirmation(title, items, yesCallback, null);
}
public static <C extends Collection<String>> void confirmation(final Map<String, C> items, ConfirmCallback yesCallback, ConfirmCallback noCallback) {
confirmation(null, items, yesCallback, noCallback);
}
public static <C extends Collection<String>> void confirmation(final String title, final Map<String, C> items, ConfirmCallback yesCallback,
ConfirmCallback noCallback) {
Confirm.show(title, buildHTML(items), yesCallback, noCallback);
}
}