/**
* Copyright (c) 2009--2014 Red Hat, Inc.
*
* This software is licensed to you under the GNU General Public License,
* version 2 (GPLv2). There is NO WARRANTY for this software, express or
* implied, including the implied warranties of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
* along with this software; if not, see
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
*
* Red Hat trademarks are not licensed under GPLv2. No permission is
* granted to use or replicate Red Hat trademarks that are incorporated
* in this software or its documentation.
*/
package com.redhat.rhn.frontend.action.renderers;
import java.io.IOException;
import java.util.Arrays;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.redhat.rhn.common.db.datasource.DataResult;
import com.redhat.rhn.common.localization.LocalizationService;
import com.redhat.rhn.frontend.action.renderers.io.CachingResponseWrapper;
import com.redhat.rhn.frontend.dto.SystemOverview;
import com.redhat.rhn.frontend.dto.SystemOverviewComparator;
/**
* General helper for fragment rendering
*
* @version $Rev$
*/
public class RendererHelper {
private static final String FULL_TABLE_HEADER =
"<div class=\"spacewalk-full-table panel panel-default\">" +
"<div class=\"panel-heading\"><h3 class=\"panel-title\">";
private static final String FULL_TABLE_FOOTER = "</div></div>";
private static final String HALF_TABLE_HEADER =
"<div class=\"spacewalk-half-table panel panel-default\">" +
"<div class=\"panel-heading\"><h3 class=\"panel-title\">";
private static final String HALF_TABLE_FOOTER = "</div></div>";
private static final String TABLE_BODY = "</h3></div><div class=\"panel-body\">";
private RendererHelper() {
}
/**
* Sort overview DTOs
* @param dr data result to sort
* @return sorted data result
*/
public static DataResult<SystemOverview> sortOverviews(DataResult<SystemOverview> dr) {
SystemOverview[] overviews = dr.toArray(new SystemOverview[dr.size()]);
if (overviews != null && overviews.length > 0) {
Arrays.sort(overviews, new SystemOverviewComparator());
return new DataResult<SystemOverview>(Arrays.asList(overviews));
}
return dr;
}
/**
* Creates an empty YourRhn table
* @param isHalfTable is it a half table?
* @param tableHeaderKey resource bundle token
* @param tableMessageKey resource bundle token
* @return markup for empty table
*/
public static String makeEmptyTable(boolean isHalfTable,
String tableHeaderKey, String tableMessageKey) {
String header = null;
String footer = null;
String headerText = LocalizationService.getInstance().getMessage(
tableHeaderKey);
String messageText = LocalizationService.getInstance().getMessage(
tableMessageKey);
if (isHalfTable) {
header = HALF_TABLE_HEADER;
footer = HALF_TABLE_FOOTER;
}
else {
header = FULL_TABLE_HEADER;
footer = FULL_TABLE_FOOTER;
}
return header + headerText + TABLE_BODY + messageText + footer;
}
/**
* Sets table style
* @param request incoming request
* @param name style name
*/
public static void setTableStyle(HttpServletRequest request, String name) {
String style = (String) request.getAttribute(FragmentRenderer.NEXT_TABLE_STYLE);
if (style != null && name != null) {
request.setAttribute(name, style);
}
toggleNextTableStyle(request);
}
/**
* Renders a URL and returns the content generated as a string
* @param url content to generate
* @param req incoming request
* @param resp current respnose
* @return rendered content
* @throws ServletException something goes wrong
* @throws IOException something goes wrong
*/
public static String renderRequest(String url, HttpServletRequest req,
HttpServletResponse resp) throws ServletException, IOException {
String retval = null;
RequestDispatcher dispatcher = req.getRequestDispatcher(url);
if (dispatcher != null) {
CachingResponseWrapper wrapper =
new CachingResponseWrapper(resp);
dispatcher.include(req, wrapper);
retval = wrapper.getCachedContent();
if (retval != null) {
retval = retval.trim();
}
}
return retval;
}
private static void toggleNextTableStyle(HttpServletRequest request) {
String tableStyle = (String)
request.getAttribute(FragmentRenderer.NEXT_TABLE_STYLE);
if (tableStyle == null ||
tableStyle.equals("half-table half-table-left")) {
request.setAttribute(FragmentRenderer.NEXT_TABLE_STYLE,
"half-table half-table-right");
}
else {
request.setAttribute(FragmentRenderer.NEXT_TABLE_STYLE,
"half-table half-table-left");
}
}
}