com.redhat.rhn.domain.action.config.ConfigUploadActionFormatter.java Source code

Java tutorial

Introduction

Here is the source code for com.redhat.rhn.domain.action.config.ConfigUploadActionFormatter.java

Source

/**
 * Copyright (c) 2009--2010 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.domain.action.config;

import com.redhat.rhn.common.localization.LocalizationService;
import com.redhat.rhn.domain.action.ActionFormatter;
import com.redhat.rhn.domain.config.ConfigChannel;
import com.redhat.rhn.domain.config.ConfigFileName;
import com.redhat.rhn.frontend.html.HtmlTag;

import org.apache.commons.lang.StringEscapeUtils;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * ConfigUploadActionFormatter
 * @version $Rev$
 */
public class ConfigUploadActionFormatter extends ActionFormatter {

    /**
     * Create a new config upload action formatter
     * @param actionIn The action.
     */
    public ConfigUploadActionFormatter(ConfigUploadAction actionIn) {
        super(actionIn);
    }

    /**
     * Creates an html display for the config upload action notes.
     * Shows the destination channels followed by the filenames.
     * @return The html notes string
     */
    protected String getNotesBody() {
        StringBuffer buffy = new StringBuffer();
        ConfigUploadAction action = (ConfigUploadAction) getAction();

        /* display the list of destination config channels and then
         * the list of config file names. These aren't exactly mutually
         * exclusive lists; some filenames could go to certain channels
         * and not others, but it would be difficult to show those
         * relationships, it can't happen scheduled from the web UI,
         * and these really are *just* notes.
         */
        displayChannels(buffy, action.getRhnActionConfigChannel());
        displayFileNames(buffy, action.getRhnActionConfigFileName());
        return buffy.toString();
    }

    private String renderChannel(ConfigChannel channel) {
        HtmlTag a = new HtmlTag("a");
        a.setAttribute("href", "/rhn/configuration/ChannelOverview.do?ccid=" + channel.getId().toString());
        a.addBody(StringEscapeUtils.escapeHtml(channel.getDisplayName()));
        return a.render();
    }

    private String renderHeading(String transKey) {
        HtmlTag strong = new HtmlTag("strong");
        strong.addBody(LocalizationService.getInstance().getMessage(transKey));
        return (strong.render() + "<br />");
    }

    private String renderFileName(ConfigFileName name) {
        //paths can have pretty much any character including newlines,
        //spaces, and control characters. Escaping html here is only
        //going to work happily for file names that make some kind of sense.
        return (StringEscapeUtils.escapeHtml(name.getPath()) + "<br />");
    }

    private void displayChannels(StringBuffer buffy, Set channelSet) {
        /* most of the time, there is only going to be one channel because it
         * will usually be one server's sandbox channel.
         * Therefore, deal with one channel as a special case
         * I say this because as I write this, there is no way through the web UI
         * to schedule a config upload action for multiple servers.
         */
        if (channelSet.size() == 1) {
            ConfigChannel channel = ((ConfigChannelAssociation) channelSet.toArray()[0]).getConfigChannel();

            //Display will be:
            //Destination Configuration Channel: blah
            //where blah is the channel display name with link

            buffy.append(LocalizationService.getInstance().getMessage("config.upload.onechannel",
                    renderChannel(channel)));
            buffy.append("<br />");
        } else if (channelSet.size() > 1) {

            buffy.append(renderHeading("config.upload.channels"));

            Iterator channels = channelSet.iterator();
            //since you can only upload files into local channels (only sandbox right now),
            //there shouldn't be multiple entries of the same channel.
            while (channels.hasNext()) {
                ConfigChannel channel = ((ConfigChannelAssociation) channels.next()).getConfigChannel();
                buffy.append(renderChannel(channel));
                buffy.append("<br />");
            }
        }
        //else don't display desination info (invalid config upload action!)
    }

    private void displayFileNames(StringBuffer buffy, Set fileNameSet) {
        buffy.append(renderHeading("config.upload.filenames"));

        //There could be multiple config file name actions per file name
        //(one per system).  Therefore, we will keep track of ones we have
        // already displayed.
        Set dealtWith = new HashSet();
        Iterator filenames = fileNameSet.iterator();
        while (filenames.hasNext()) {
            ConfigFileName path = ((ConfigFileNameAssociation) filenames.next()).getConfigFileName();
            if (!dealtWith.contains(path.getId())) {
                buffy.append(renderFileName(path));
                dealtWith.add(path.getId());
            }
        }
    }

}