org.apache.wicket.feedback.FeedbackMessage.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.wicket.feedback.FeedbackMessage.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.wicket.feedback;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

import org.apache.wicket.Component;
import org.apache.wicket.core.util.string.CssUtils;
import org.apache.wicket.model.IDetachable;

/**
 * Represents a generic message meant for the end-user/ pages.
 * 
 * @author Eelco Hillenius
 * @author Jonathan Locke
 */
public class FeedbackMessage implements IDetachable {
    private static final long serialVersionUID = 1L;

    public static final String UNDEFINED_CSS_CLASS_KEY = CssUtils.key(FeedbackMessage.class, "undefined");

    public static final String DEBUG_CSS_CLASS_KEY = CssUtils.key(FeedbackMessage.class, "debug");

    public static final String INFO_CSS_CLASS_KEY = CssUtils.key(FeedbackMessage.class, "info");

    public static final String SUCCESS_CSS_CLASS_KEY = CssUtils.key(FeedbackMessage.class, "success");

    public static final String WARNING_CSS_CLASS_KEY = CssUtils.key(FeedbackMessage.class, "warning");

    public static final String ERROR_CSS_CLASS_KEY = CssUtils.key(FeedbackMessage.class, "error");

    public static final String FATAL_CSS_CLASS_KEY = CssUtils.key(FeedbackMessage.class, "fatal");

    /**
     * Constant for an undefined level; note that components might decide not to render anything
     * when this level is used.
     */
    public static final int UNDEFINED = 0;

    /** Constant for debug level. */
    public static final int DEBUG = 100;

    /** Constant for info level. */
    public static final int INFO = 200;

    /** Constant for success level (it indicates the outcome of an operation) */
    public static final int SUCCESS = 250;

    /** Constant for warning level. */
    public static final int WARNING = 300;

    /** Constant for error level. */
    public static final int ERROR = 400;

    /** Constant for fatal level. */
    public static final int FATAL = 500;

    /** Levels as strings for debugging. */
    private static final Map<Integer, String> levelStrings = new HashMap<>();

    static {
        levelStrings.put(UNDEFINED, "UNDEFINED");
        levelStrings.put(DEBUG, "DEBUG");
        levelStrings.put(INFO, "INFO");
        levelStrings.put(SUCCESS, "SUCCESS");
        levelStrings.put(WARNING, "WARNING");
        levelStrings.put(ERROR, "ERROR");
        levelStrings.put(FATAL, "FATAL");
    }

    /**
     * The message level; can be used by rendering components. Note that what actually happens with
     * the level indication is totally up to the components that render messages like these. The
     * default level is UNDEFINED.
     */
    private final int level;

    /** The actual message. */
    private final Serializable message;

    /** The reporting component. */
    private Component reporter;

    /** Whether or not this message has been rendered */
    private boolean rendered = false;

    /**
     * Construct using fields.
     * 
     * @param reporter
     *            The message reporter
     * @param message
     *            The actual message. Must not be <code>null</code>.
     * @param level
     *            The level of the message
     */
    public FeedbackMessage(final Component reporter, final Serializable message, final int level) {
        if (message == null) {
            throw new IllegalArgumentException("Parameter message can't be null");
        }
        this.reporter = reporter;
        this.message = message;
        this.level = level;
    }

    /**
     * Gets whether or not this message has been rendered
     * 
     * @return true if this message has been rendered, false otherwise
     */
    public final boolean isRendered() {
        return rendered;
    }

    /**
     * Marks this message as rendered.
     */
    public final void markRendered() {
        rendered = true;
    }

    /**
     * Gets the message level; can be used by rendering components. Note that what actually happens
     * with the level indication is totally up to the components that render feedback messages.
     * 
     * @return The message level indicator.
     */
    public final int getLevel() {
        return level;
    }

    /**
     * Gets the current level as a String
     * 
     * @return The current level as a String
     */
    public String getLevelAsString() {
        return levelStrings.get(getLevel());
    }

    /**
     * Gets the actual message.
     * 
     * @return the message.
     */
    public final Serializable getMessage() {
        return message;
    }

    /**
     * Gets the reporting component.
     * 
     * @return the reporting component.
     */
    public final Component getReporter() {
        return reporter;
    }

    /**
     * Gets whether the current level is DEBUG or up.
     * 
     * @return whether the current level is DEBUG or up.
     */
    public final boolean isDebug() {
        return isLevel(DEBUG);
    }

    /**
     * Gets whether the current level is INFO or up.
     * 
     * @return whether the current level is INFO or up.
     */
    public final boolean isInfo() {
        return isLevel(INFO);
    }

    /**
     * Gets whether the current level is SUCCESS or up.
     * 
     * @return whether the current level is SUCCESS or up.
     */
    public final boolean isSuccess() {
        return isLevel(SUCCESS);
    }

    /**
     * Gets whether the current level is WARNING or up.
     * 
     * @return whether the current level is WARNING or up.
     */
    public final boolean isWarning() {
        return isLevel(WARNING);
    }

    /**
     * Gets whether the current level is ERROR or up.
     * 
     * @return whether the current level is ERROR or up.
     */
    public final boolean isError() {
        return isLevel(ERROR);
    }

    /**
     * Gets whether the current level is FATAL or up.
     * 
     * @return whether the current level is FATAL or up.
     */
    public final boolean isFatal() {
        return isLevel(FATAL);
    }

    /**
     * Returns whether this level is greater than or equal to the given level.
     * 
     * @param level
     *            the level
     * @return whether this level is greater than or equal to the given level
     */
    public final boolean isLevel(int level) {
        return (getLevel() >= level);
    }

    /**
     * Gets whether the current level is UNDEFINED.
     * 
     * @return whether the current level is UNDEFINED.
     */
    public final boolean isUndefined() {
        return (getLevel() == UNDEFINED);
    }

    @Override
    public String toString() {
        return "[FeedbackMessage message = \"" + getMessage() + "\", reporter = "
                + ((getReporter() == null) ? "null" : getReporter().getId()) + ", level = " + getLevelAsString()
                + ']';
    }

    @Override
    public void detach() {
        // no-op
    }
}