/** * Copyright © 2014 Instituto Superior Técnico * * This file is part of FenixEdu CMS. * * FenixEdu CMS is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * FenixEdu CMS 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with FenixEdu CMS. If not, see <http://www.gnu.org/licenses/>. */ package org.fenixedu.cms.ui; import java.io.Writer; import java.util.HashMap; import java.util.function.BiConsumer; import org.fenixedu.bennu.core.domain.User; import org.fenixedu.cms.domain.SiteActivity; import org.fenixedu.commons.i18n.LocalizedString; import com.google.gson.JsonElement; import com.google.gson.JsonObject; public class SiteActivityRender { private static HashMap<String, BiConsumer<SiteActivity, Writer>> map = new HashMap<String, BiConsumer<SiteActivity, Writer>>(); public static void render(SiteActivity activity, Writer writer) { JsonElement el = activity.getContent(); String type = el.getAsJsonObject().get("type").getAsString(); if (type != null) { BiConsumer consumer = map.get(type); if (consumer != null) { consumer.accept(activity, writer); } } } public static void attachRenderer(String type, BiConsumer<SiteActivity, Writer> consumer) { map.put(type, consumer); } public static void init() { attachRenderer("siteCreated", SiteActivityRender::siteCreated); attachRenderer("postCreated", SiteActivityRender::postCreated); attachRenderer("postEdited",SiteActivityRender::postEdited); attachRenderer("postDeleted",SiteActivityRender::postDeleted); attachRenderer("siteImported", SiteActivityRender::siteImported); attachRenderer("siteCloned", SiteActivityRender::siteCloned); attachRenderer("pageCreated", SiteActivityRender::pageCreated); attachRenderer("pageEdited",SiteActivityRender::pageEdited); attachRenderer("pageDeleted",SiteActivityRender::pageDeleted); } private static void siteImported(SiteActivity activity, Writer writer) { JsonElement el = activity.getContent(); JsonObject obj = el.getAsJsonObject(); String postName = LocalizedString.fromJson(obj.get("siteName")).getContent(); write(writer, obj.get("user").getAsString(), "imported", postName); } private static void siteCloned(SiteActivity activity, Writer writer) { JsonElement el = activity.getContent(); JsonObject obj = el.getAsJsonObject(); String postName = LocalizedString.fromJson(obj.get("siteName")).getContent(); write(writer, obj.get("user").getAsString(), "cloned", postName); } private static void siteCreated(SiteActivity activity, Writer writer) { JsonElement el = activity.getContent(); JsonObject obj = el.getAsJsonObject(); String postName = LocalizedString.fromJson(obj.get("siteName")).getContent(); write(writer, obj.get("user").getAsString(), "created", postName); } private static void postCreated(SiteActivity activity, Writer writer) { JsonElement el = activity.getContent(); JsonObject obj = el.getAsJsonObject(); String postName = LocalizedString.fromJson(obj.get("postName")).getContent(); write(writer, obj.get("user").getAsString(), "created", postName); } private static void postEdited(SiteActivity activity, Writer writer) { JsonElement el = activity.getContent(); JsonObject obj = el.getAsJsonObject(); String postName = LocalizedString.fromJson(obj.get("postName")).getContent(); write(writer, obj.get("user").getAsString(), "edited", postName); } private static void postDeleted(SiteActivity activity, Writer writer) { JsonElement el = activity.getContent(); JsonObject obj = el.getAsJsonObject(); String postName = LocalizedString.fromJson(obj.get("postName")).getContent(); write(writer, obj.get("user").getAsString(), "deleted", postName); } private static void pageCreated(SiteActivity activity, Writer writer) { JsonElement el = activity.getContent(); JsonObject obj = el.getAsJsonObject(); String postName = LocalizedString.fromJson(obj.get("pageName")).getContent(); write(writer, obj.get("user").getAsString(), "created", postName); } private static void pageEdited(SiteActivity activity, Writer writer) { JsonElement el = activity.getContent(); JsonObject obj = el.getAsJsonObject(); String postName = LocalizedString.fromJson(obj.get("pageName")).getContent(); write(writer, obj.get("user").getAsString(), "edited", postName); } private static void pageDeleted(SiteActivity activity, Writer writer) { JsonElement el = activity.getContent(); JsonObject obj = el.getAsJsonObject(); String postName = LocalizedString.fromJson(obj.get("pageName")).getContent(); write(writer, obj.get("user").getAsString(), "deleted", postName); } private static void write(Writer writer, String username, String action, String content) { try { User user = User.findByUsername(username); writer.write("<a href='#' class='avatar'><img src='"+ user.getProfile().getAvatarUrl() + "?s=32" +"' alt='"+ user.getProfile().getDisplayName()+"' /></a>"); writer.write( "<p>" + "<strong>" + user.getProfile().getDisplayName() + "</strong> " + action + " " + content + " </p>"); } catch (Exception e) { e.printStackTrace(); } } static { // Nastiness init(); } }