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

org.apache.struts.action.ActionMessages Maven / Gradle / Ivy

Go to download

Base project: http://central.maven.org/maven2/struts/struts/1.2.9/ This version of Struts doesn't throw java.io.NotSerializableException when the application server wants to persist sessions and makes renderFocusJavascript return valid xml

The newest version!
/*
 * $Id: ActionMessages.java 54929 2004-10-16 16:38:42Z germuska $ 
 *
 * Copyright 2001-2004 The Apache Software Foundation.
 * 
 * Licensed 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.struts.action;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.HashMap;
import java.util.List;

/**
 * 

A class that encapsulates messages. Messages can be either global * or they are specific to a particular bean property.

* *

Each individual message is described by an ActionMessage * object, which contains a message key (to be looked up in an appropriate * message resources database), and up to four placeholder arguments used for * parametric substitution in the resulting message.

* *

IMPLEMENTATION NOTE - It is assumed that these objects * are created and manipulated only within the context of a single thread. * Therefore, no synchronization is required for access to internal * collections.

* * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ * @since Struts 1.1 */ public class ActionMessages implements Serializable { /** *

Compares ActionMessageItem objects.

*/ private static final Comparator actionItemComparator = new Comparator() { public int compare(Object o1, Object o2) { return ((ActionMessageItem) o1).getOrder() - ((ActionMessageItem) o2).getOrder(); } }; // ----------------------------------------------------- Manifest Constants /** *

The "property name" marker to use for global messages, as opposed to * those related to a specific property.

*/ public static final String GLOBAL_MESSAGE = "org.apache.struts.action.GLOBAL_MESSAGE"; // ----------------------------------------------------- Instance Variables /** *

Have the messages been retrieved from this object?

* *

The controller uses this property to determine if session-scoped * messages can be removed.

* * @since Struts 1.2 */ protected boolean accessed = false; /** *

The accumulated set of ActionMessage objects (represented * as an ArrayList) for each property, keyed by property name.

*/ protected HashMap messages = new HashMap(); /** *

The current number of the property/key being added. This is used * to maintain the order messages are added.

*/ protected int iCount = 0; // --------------------------------------------------------- Public Methods /** *

Create an empty ActionMessages object.

*/ public ActionMessages() { super(); } /** *

Create an ActionMessages object initialized with the given * messages.

* * @param messages The messages to be initially added to this object. * This parameter can be null. * @since Struts 1.1 */ public ActionMessages(ActionMessages messages) { super(); this.add(messages); } /** *

Add a message to the set of messages for the specified property. An * order of the property/key is maintained based on the initial addition * of the property/key.

* * @param property Property name (or ActionMessages.GLOBAL_MESSAGE) * @param message The message to be added */ public void add(String property, ActionMessage message) { ActionMessageItem item = (ActionMessageItem) messages.get(property); List list = null; if (item == null) { list = new ArrayList(); item = new ActionMessageItem(list, iCount++, property); messages.put(property, item); } else { list = item.getList(); } list.add(message); } /** *

Adds the messages from the given ActionMessages object to * this set of messages. The messages are added in the order they are returned from * the properties method. If a message's property is already in the current * ActionMessages object, it is added to the end of the list for that * property. If a message's property is not in the current list it is added to the end * of the properties.

* * @param messages The ActionMessages object to be added. * This parameter can be null. * @since Struts 1.1 */ public void add(ActionMessages messages) { if (messages == null) { return; } // loop over properties Iterator props = messages.properties(); while (props.hasNext()) { String property = (String) props.next(); // loop over messages for each property Iterator msgs = messages.get(property); while (msgs.hasNext()) { ActionMessage msg = (ActionMessage) msgs.next(); this.add(property, msg); } } } /** *

Clear all messages recorded by this object.

*/ public void clear() { messages.clear(); } /** *

Return true if there are no messages recorded * in this collection, or false otherwise.

* * @since Struts 1.1 */ public boolean isEmpty(){ return (messages.isEmpty()); } /** *

Return the set of all recorded messages, without distinction * by which property the messages are associated with. If there are * no messages recorded, an empty enumeration is returned.

*/ public Iterator get() { this.accessed = true; if (messages.isEmpty()) { return Collections.EMPTY_LIST.iterator(); } ArrayList results = new ArrayList(); ArrayList actionItems = new ArrayList(); for (Iterator i = messages.values().iterator(); i.hasNext();) { actionItems.add(i.next()); } // Sort ActionMessageItems based on the initial order the // property/key was added to ActionMessages. Collections.sort(actionItems, actionItemComparator); for (Iterator i = actionItems.iterator(); i.hasNext();) { ActionMessageItem ami = (ActionMessageItem) i.next(); for (Iterator messages = ami.getList().iterator(); messages.hasNext();) { results.add(messages.next()); } } return results.iterator(); } /** *

Return the set of messages related to a specific property. * If there are no such messages, an empty enumeration is returned.

* * @param property Property name (or ActionMessages.GLOBAL_MESSAGE) */ public Iterator get(String property) { this.accessed = true; ActionMessageItem item = (ActionMessageItem) messages.get(property); if (item == null) { return (Collections.EMPTY_LIST.iterator()); } else { return (item.getList().iterator()); } } /** *

Returns true if the get() or * get(String) methods are called.

* * @return true if the messages have been accessed one or more * times. * @since Struts 1.2 */ public boolean isAccessed() { return this.accessed; } /** *

Return the set of property names for which at least one message has * been recorded. If there are no messages, an empty Iterator is returned. * If you have recorded global messages, the String value of * ActionMessages.GLOBAL_MESSAGE will be one of the returned * property names.

*/ public Iterator properties() { if (messages.isEmpty()) { return Collections.EMPTY_LIST.iterator(); } ArrayList results = new ArrayList(); ArrayList actionItems = new ArrayList(); for (Iterator i = messages.values().iterator(); i.hasNext();) { actionItems.add(i.next()); } // Sort ActionMessageItems based on the initial order the // property/key was added to ActionMessages. Collections.sort(actionItems, actionItemComparator); for (Iterator i = actionItems.iterator(); i.hasNext();) { ActionMessageItem ami = (ActionMessageItem) i.next(); results.add(ami.getProperty()); } return results.iterator(); } /** *

Return the number of messages recorded for all properties (including * global messages). NOTE - it is more efficient to call * isEmpty if all you care about is whether or not there are * any messages at all.

*/ public int size() { int total = 0; for (Iterator i = messages.values().iterator(); i.hasNext();) { ActionMessageItem ami = (ActionMessageItem) i.next(); total += ami.getList().size(); } return (total); } /** *

Return the number of messages associated with the specified property.

* * @param property Property name (or ActionMessages.GLOBAL_MESSAGE) */ public int size(String property) { ActionMessageItem item = (ActionMessageItem) messages.get(property); return (item == null) ? 0 : item.getList().size(); } /** *

Returns a String representation of this ActionMessages' * property name=message list mapping.

* @see java.lang.Object#toString() */ public String toString() { return this.messages.toString(); } /** *

This class is used to store a set of messages associated with a * property/key and the position it was initially added to list.

*/ protected class ActionMessageItem implements Serializable { /** *

The list of ActionMessages.

*/ protected List list = null; /** *

The position in the list of messages.

*/ protected int iOrder = 0; /** *

The property associated with ActionMessage.

*/ protected String property = null; public ActionMessageItem(List list, int iOrder, String property) { this.list = list; this.iOrder = iOrder; this.property = property; } public List getList() { return list; } public void setList(List list) { this.list = list; } public int getOrder() { return iOrder; } public void setOrder(int iOrder) { this.iOrder = iOrder; } public String getProperty() { return property; } public void setProperty(String property) { this.property = property; } public String toString() { return this.list.toString(); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy