/* * RHQ Management Platform * Copyright (C) 2005-2011 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License, version 2, as * published by the Free Software Foundation, and/or the GNU Lesser * General Public License, version 2.1, also as published by the Free * Software Foundation. * * 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 and the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU General Public License * and the GNU Lesser General Public License along with this program; * if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package org.rhq.coregui.client.dashboard.portlets.util; import com.smartgwt.client.types.ContentsType; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.HTMLFlow; import com.smartgwt.client.widgets.HTMLPane; import org.rhq.core.domain.common.EntityContext; import org.rhq.core.domain.common.ProductInfo; import org.rhq.core.domain.configuration.definition.ConfigurationDefinition; import org.rhq.core.domain.configuration.definition.PropertyDefinitionSimple; import org.rhq.core.domain.configuration.definition.PropertySimpleType; import org.rhq.core.domain.dashboard.DashboardPortlet; import org.rhq.coregui.client.CoreGUI; import org.rhq.coregui.client.LinkManager; import org.rhq.coregui.client.Messages; import org.rhq.coregui.client.UserSessionManager; import org.rhq.coregui.client.admin.users.UsersDataSource; import org.rhq.coregui.client.dashboard.ConfigurablePortlet; import org.rhq.coregui.client.dashboard.Portlet; import org.rhq.coregui.client.dashboard.PortletViewFactory; import org.rhq.coregui.client.dashboard.PortletWindow; import org.rhq.coregui.client.util.StringUtility; /** * @author Greg Hinkle */ public class MessagePortlet extends HTMLPane implements ConfigurablePortlet { // A non-displayed, persisted identifier for the portlet public static final String KEY = "Message"; // A default displayed, persisted name for the portlet public static final String NAME = CoreGUI.getMessages().view_portlet_defaultName_message(); protected Messages MSG = CoreGUI.getMessages(); private static final String MESSAGE_PROPERTY = "message"; // private static final String DEFAULT_MESSAGE = MSG.view_dashboardsManager_message_title_details(); private static String DEFAULT_MESSAGE; { ProductInfo productInfo = CoreGUI.get().getProductInfo(); String link1 = LinkManager.getAutodiscoveryQueueLink(); String link2 = LinkManager.getAllResourcesLink(); String link3 = LinkManager.getHelpLink(); DEFAULT_MESSAGE = MSG.view_dashboardsManager_message_title_details(productInfo.getShortName(), link1, link2, link3); } public MessagePortlet() { super(); setContentsType(ContentsType.PAGE); } public void configure(PortletWindow portletWindow, DashboardPortlet storedPortlet) { String contents = storedPortlet.getConfiguration().getSimpleValue(MESSAGE_PROPERTY, null); if (contents != null) { if (UserSessionManager.getSessionSubject().getId() != UsersDataSource.ID_RHQADMIN && !contents.equals(DEFAULT_MESSAGE)) { // To avoid XSS attacks, don't allow non-superusers to enter HTML. // TODO (ips, 04/06/11): Sanitize this, rather than escaping it, once we upgrade to GWT 2.1 or later. contents = StringUtility.escapeHtml(contents); } setContents(contents); } else { setContents(DEFAULT_MESSAGE); } } public Canvas getHelpCanvas() { return new HTMLFlow(MSG.view_portlet_help_message()); } public ConfigurationDefinition getConfigurationDefinition() { ConfigurationDefinition definition = new ConfigurationDefinition(MSG.view_portlet_configure_definitionTitle(), MSG.view_portlet_configure_definitionDesc()); definition.put(new PropertyDefinitionSimple(MESSAGE_PROPERTY, MSG.view_portlet_message_title(), true, PropertySimpleType.LONG_STRING)); return definition; } public static final class Factory implements PortletViewFactory { public static final PortletViewFactory INSTANCE = new Factory(); public final Portlet getInstance(EntityContext context) { return new MessagePortlet(); } } }