All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.wicketstuff.jquery.jgrowl.JGrowlFeedbackPanel Maven / Gradle / Ivy

package org.wicketstuff.jquery.jgrowl;

import org.apache.wicket.Component;
import org.apache.wicket.feedback.FeedbackMessage;
import org.apache.wicket.feedback.IFeedbackMessageFilter;
import org.apache.wicket.markup.head.CssHeaderItem;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.request.resource.PackageResourceReference;
import org.apache.wicket.resource.JQueryResourceReference;
import org.wicketstuff.jquery.Options;

/**
 * A feedback panel that shows feedback messages with JGrowl
 * (http://www.stanlemon.net/projects/jgrowl.html)
 * 
 * @author martin-g
 */
public class JGrowlFeedbackPanel extends FeedbackPanel {

	private static final long serialVersionUID = 1L;

	/**
	 * The settings for the different feedback levels
	 * 
	 * Full list of supported settings at:
	 * http://www.stanlemon.net/projects/jgrowl.html#options
	 */

	private Options errorOptions;
	private Options warningOptions;
	private Options fatalOptions;
	private Options infoOptions;
	private Options successOptions;
	private Options debugOptions;

	/**
	 * @see org.apache.wicket.Component#Component(String)
	 */
	public JGrowlFeedbackPanel(final String id) {
		this(id, null);
	}

	/**
	 * @see org.apache.wicket.Component#Component(String)
	 * 
	 * @param id
	 * @param filter
	 */
	public JGrowlFeedbackPanel(final String id, IFeedbackMessageFilter filter) {
		super(id, filter);

		// this feedback panel is intended to be used in JavaScript environment
		// (AJAX)
		setOutputMarkupId(true);

		// needed to not escape apostrophes
		setEscapeModelStrings(false);
	}

	/**
	 * Generates a component that is used to display the message inside the
	 * feedback panel. This component must handle being attached to
	 * span tags.
	 * 
	 * By default a {@link Label} is used.
	 * 
	 * Note that the created component is expected to respect feedback panel's
	 * {@link #getEscapeModelStrings()} value
	 * 
	 * @param id
	 *            parent id
	 * @param message
	 *            feedback message
	 * @return component used to display the message
	 */
	@Override
	protected Component newMessageDisplayComponent(final String id,
			final FeedbackMessage message) {
		final JGrowlFeedbackMessage jgrowlFeedbackMessage = new JGrowlFeedbackMessage(
				message) {
			private static final long serialVersionUID = 1L;

			@Override
			protected Options newFatalOptions() {
				return fatalOptions;
			}

			@Override
			protected Options newErrorOptions() {
				return errorOptions;
			}

			@Override
			protected Options newWarningOptions() {
				return warningOptions;
			}

			@Override
			protected Options newInfoOptions() {
				return infoOptions;
			}

			@Override
			protected Options newSuccessOptions() {
				return successOptions;
			}

			@Override
			protected Options newDebugOptions() {
				return debugOptions;
			}
		};

		final String jgrowlJavaScript = jgrowlFeedbackMessage.toJavaScript();

		final Label label = new Label(id, jgrowlJavaScript);
		label.setEscapeModelStrings(JGrowlFeedbackPanel.this
				.getEscapeModelStrings());
		return label;
	}

	@Override
	public void renderHead(final IHeaderResponse response) {

		response.render(CssHeaderItem
				.forReference(new PackageResourceReference(
						JGrowlFeedbackPanel.class, "res/jquery.jgrowl.css")));
		response.render(JavaScriptHeaderItem
				.forReference(JQueryResourceReference.get()));
		response.render(JavaScriptHeaderItem
				.forReference(new PackageResourceReference(
						JGrowlFeedbackPanel.class, "res/jquery.jgrowl.js")));
	}

	public JGrowlFeedbackPanel setErrorMessageOptions(final Options errorOptions) {
		this.errorOptions = errorOptions;

		return this;
	}

	public JGrowlFeedbackPanel setFatalMessageOptions(final Options fatalOptions) {
		this.fatalOptions = fatalOptions;

		return this;
	}

	public JGrowlFeedbackPanel setWarningMessageOptions(
			final Options warningOptions) {
		this.warningOptions = warningOptions;

		return this;
	}

	public JGrowlFeedbackPanel setInfoMessageOptions(final Options infoOptions) {
		this.infoOptions = infoOptions;

		return this;
	}

	public JGrowlFeedbackPanel setSuccessMessageOptions(final Options successOptions) {
		this.successOptions = successOptions;

		return this;
	}

	public JGrowlFeedbackPanel setDebugMessageOptions(final Options debugOptions) {
		this.debugOptions = debugOptions;

		return this;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy