jspwiki-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ajaqu...@apache.org
Subject svn commit: r682149 [2/3] - in /incubator/jspwiki: branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/url/ branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/ branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/ branch...
Date Sun, 03 Aug 2008 12:25:26 GMT
Modified: incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/MailUtil.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/MailUtil.java?rev=682149&r1=682148&r2=682149&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/MailUtil.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/MailUtil.java Sun Aug  3 05:25:25 2008
@@ -1,21 +1,22 @@
 /* 
     JSPWiki - a JSP-based WikiWiki clone.
 
-    Copyright (C) 2001-2002 Janne Jalkanen (Janne.Jalkanen@iki.fi)
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation; either version 2.1 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+    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 com.ecyrd.jspwiki.util;
 
@@ -54,8 +55,8 @@
  * this is already taken care of. However, when using JNDI-supplied
  * Session factories, these should be moved, <em>not copied</em>, to a classpath location
  * where the JARs can be shared by both the JSPWiki webapp and the container. For example,
- * Tomcat 5 provides the directory <code><var>$CATALINA_HOME></var>/common/lib</code>
- * for storage of shared JARs; move <code>mail.jar</code> and <code>activation</code>
+ * Tomcat 5 provides the directory <code><var>$CATALINA_HOME</var>/common/lib</code>
+ * for storage of shared JARs; move <code>mail.jar</code> and <code>activation.jar</code>
  * there instead of keeping them in <code>/WEB-INF/lib</code>.</p>
  * <strong>JavaMail configuration</strong>
  * <p>Regardless of the method used for supplying JavaMail sessions (JNDI container-managed
@@ -200,7 +201,7 @@
 
     private static boolean c_useJndi = true;
 
-    public static final String PROP_MAIL_AUTH = "mail.smtp.auth";
+    private static final String PROP_MAIL_AUTH = "mail.smtp.auth";
 
     protected static final Logger log = Logger.getLogger(MailUtil.class);
 
@@ -211,7 +212,9 @@
     protected static final String DEFAULT_MAIL_PORT            = "25";
 
     protected static final String DEFAULT_MAIL_TIMEOUT         = "5000";
-    
+
+    protected static final String DEFAULT_MAIL_CONN_TIMEOUT    = "5000";
+
     protected static final String DEFAULT_SENDER               = "jspwiki@localhost";
 
     protected static final String PROP_MAIL_JNDI_NAME          = "jspwiki.mail.jndiname";
@@ -234,7 +237,8 @@
 
     protected static final String PROP_MAIL_STARTTLS           = "mail.smtp.starttls.enable";
 
-	private static String fromAddress = null;
+    private static String c_fromAddress = null;
+    
     /**
      *  Private constructor prevents instantiation.
      */
@@ -243,7 +247,7 @@
     }
 
     /**
-     * <p>Sends an e-mail to a specified receiver using a  JavaMail Session supplied
+     * <p>Sends an e-mail to a specified receiver using a JavaMail Session supplied
      * by a JNDI mail session factory (preferred) or a locally initialized
      * session based on properties in <code>jspwiki.properties</code>.
      * See the top-level JavaDoc for this class for a description of
@@ -262,11 +266,11 @@
      * @param to the receiver
      * @param subject the subject line of the message
      * @param content the contents of the mail message, as plain text
-     * @throws AddressException
-     * @throws MessagingException
+     * @throws AddressException If the address is invalid
+     * @throws MessagingException If the message cannot be sent.
      */
     public static void sendMessage(WikiEngine engine, String to, String subject, String content)
-    throws AddressException, MessagingException
+        throws AddressException, MessagingException
     {
         Properties props = engine.getWikiProperties();
         Session session = getMailSession(engine);
@@ -276,7 +280,7 @@
         {
             // Create and address the message
             MimeMessage msg = new MimeMessage(session);
-            msg.setFrom(new InternetAddress(fromAddress));
+            msg.setFrom(new InternetAddress(c_fromAddress));
             msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to, false));
             msg.setSubject(subject);
             msg.setText(content, "UTF-8");
@@ -286,7 +290,8 @@
             Transport.send(msg);
             if (log.isInfoEnabled())
             {
-                log.info("Sent e-mail to=" + to + ", subject=\"" + subject + "\", jndi=" + (c_useJndi ? TRUE : FALSE));
+                log.info("Sent e-mail to=" + to + ", subject=\"" + subject + "\", used "
+                         + (c_useJndi ? "JNDI" : "standalone") + " mail session.");
             }
         }
         catch (MessagingException e)
@@ -307,19 +312,31 @@
      */
     protected static String getSenderEmailAddress(Session pSession, Properties pProperties)
     {
-        if (fromAddress == null)
+        if( c_fromAddress == null )
         {
-            // First, attempt to get the email address from the JNDI Mail Session.
-            if (pSession != null && c_useJndi)
+            // First, attempt to get the email address from the JNDI Mail
+            // Session.
+            if( pSession != null && c_useJndi )
+            {
+                c_fromAddress = pSession.getProperty( MailUtil.PROP_MAIL_SENDER );
+            }
+            // If unsuccessful, get the email address from the properties or
+            // default.
+            if( c_fromAddress == null )
             {
-                fromAddress = pSession.getProperty(MailUtil.PROP_MAIL_SENDER);
+                c_fromAddress = pProperties.getProperty( PROP_MAIL_SENDER, DEFAULT_SENDER ).trim();
+                if( log.isDebugEnabled() )
+                    log.debug( "Attempt to get the sender's mail address from the JNDI mail session failed, will use \""
+                               + c_fromAddress + "\" (configured via jspwiki.properties or the internal default)." );
             }
-            // If unsuccessful, get the email address from the properties or default.
-            if (fromAddress == null) { 
-                fromAddress = pProperties.getProperty(PROP_MAIL_SENDER, DEFAULT_SENDER).trim();
+            else
+            {
+                if( log.isDebugEnabled() )
+                    log.debug( "Attempt to get the sender's mail address from the JNDI mail session was successful (" + c_fromAddress
+                               + ")." );
             }
         }
-        return fromAddress;
+        return c_fromAddress;
     }
 
     /**
@@ -336,6 +353,8 @@
         if (c_useJndi)
         {
             // Try getting the Session from the JNDI factory first
+            if ( log.isDebugEnabled() )
+                log.debug("Try getting a mail session via JNDI name \"" + jndiName + "\".");
             try
             {
                 result = getJNDIMailSession(jndiName);
@@ -344,12 +363,16 @@
             {
                 // Oops! JNDI factory must not be set up
                 c_useJndi = false;
+                if ( log.isInfoEnabled() )
+                    log.info("Unable to get a mail session via JNDI, will use custom settings at least until next startup.");
             }
         }
 
         // JNDI failed; so, get the Session from the standalone factory
         if (result == null)
         {
+            if ( log.isDebugEnabled() )
+                log.debug("Getting a standalone mail session configured by jspwiki.properties and/or internal default values.");
             result = getStandaloneMailSession(props);
         }
         return result;
@@ -372,6 +395,8 @@
         String port     = props.getProperty( PROP_MAIL_PORT, DEFAULT_MAIL_PORT );
         String account  = props.getProperty( PROP_MAIL_ACCOUNT );
         String password = props.getProperty( PROP_MAIL_PASSWORD );
+        String timeout  = props.getProperty( PROP_MAIL_TIMEOUT, DEFAULT_MAIL_TIMEOUT);
+        String conntimeout = props.getProperty( PROP_MAIL_CONNECTION_TIMEOUT, DEFAULT_MAIL_CONN_TIMEOUT );
         boolean starttls = TextUtil.getBooleanProperty( props, PROP_MAIL_STARTTLS, true);
         
         boolean useAuthentication = account != null && account.length() > 0;
@@ -381,8 +406,8 @@
         // Set JavaMail properties
         mailProps.put( PROP_MAIL_HOST, host );
         mailProps.put( PROP_MAIL_PORT, port );
-        mailProps.put( PROP_MAIL_TIMEOUT, DEFAULT_MAIL_TIMEOUT );
-        mailProps.put( PROP_MAIL_CONNECTION_TIMEOUT, DEFAULT_MAIL_TIMEOUT );
+        mailProps.put( PROP_MAIL_TIMEOUT, timeout );
+        mailProps.put( PROP_MAIL_CONNECTION_TIMEOUT, conntimeout );
         mailProps.put( PROP_MAIL_STARTTLS, starttls ? TRUE : FALSE );
 
         // Add SMTP authentication if required
@@ -401,7 +426,9 @@
 
         if ( log.isDebugEnabled() )
         {
-            String mailServer = host + ":" + port + ", auth=" + ( useAuthentication ? TRUE : FALSE );
+            String mailServer = host + ":" + port + ", account=" + account + ", password not displayed, timeout="
+            + timeout + ", connectiontimeout=" + conntimeout + ", starttls.enable=" + starttls
+            + ", use authentication=" + ( useAuthentication ? TRUE : FALSE );
             log.debug( "JavaMail session obtained from standalone mail factory: " + mailServer );
         }
         return session;
@@ -426,12 +453,12 @@
         }
         catch( NamingException e )
         {
-            log.warn( "JavaMail initialization error: " + e.getMessage() );
+            log.warn( "JNDI mail session initialization error: " + e.getMessage() );
             throw e;
         }
         if ( log.isDebugEnabled() )
         {
-            log.debug( "JavaMail session obtained from JNDI mail factory: " + jndiName );
+            log.debug( "mail session obtained from JNDI mail factory: " + jndiName );
         }
         return session;
     }

Modified: incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/PriorityList.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/PriorityList.java?rev=682149&r1=682148&r2=682149&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/PriorityList.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/PriorityList.java Sun Aug  3 05:25:25 2008
@@ -1,27 +1,27 @@
 /* 
     JSPWiki - a JSP-based WikiWiki clone.
 
-    Copyright (C) 2001-2003 Janne Jalkanen (Janne.Jalkanen@iki.fi)
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation; either version 2.1 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+    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 com.ecyrd.jspwiki.util;
 
 import java.util.AbstractList;
 import java.util.ArrayList;
-import java.util.List;
 
 /**
  *  Builds a simple, priority-based List implementation.  The list
@@ -31,13 +31,12 @@
  *  <p>
  *  Priority is an integer, and the list is sorted in descending order
  *  (that is, 100 is before 10 is before 0 is before -40).
- *
- *  @author Janne Jalkanen
  */
-public class PriorityList<T>
-    extends AbstractList<T>
+@SuppressWarnings("unchecked")
+public class PriorityList
+    extends AbstractList
 {
-    private final List<Item<T>> m_elements = new ArrayList<Item<T>>();
+    private ArrayList<Object> m_elements = new ArrayList<Object>();
 
     /**
      *  This is the default priority, which is used if no priority
@@ -52,13 +51,13 @@
      *  @param o Object to add.
      *  @param priority Priority.
      */
-    public void add( T o, int priority )
+    public void add( Object o, int priority )
     {
         int i = 0;
 
         for( ; i < m_elements.size(); i++ )
         {
-            Item item = m_elements.get(i);
+            Item item = (Item) m_elements.get(i);
 
             if( item.m_priority < priority )
             {
@@ -66,7 +65,7 @@
             }
         }
 
-        Item<T> newItem = new Item<T>();
+        Item newItem = new Item();
         newItem.m_priority = priority;
         newItem.m_object   = o;
 
@@ -79,7 +78,7 @@
      *  @param o Object to add.
      *  @return true, as per the general Collections.add contract.
      */
-    public boolean add( T o )
+    public boolean add( Object o )
     {
         add( o, DEFAULT_PRIORITY );
 
@@ -92,9 +91,9 @@
      *  @param index The index.
      *  @return The object at the list at the position "index".
      */
-    public T get( int index )
+    public Object get( int index )
     {
-        return m_elements.get( index ).m_object;
+        return ((Item)m_elements.get( index )).m_object;
     }
 
     /**
@@ -110,9 +109,9 @@
     /**
      *  Provides a holder for the priority-object 2-tuple.
      */
-    private static class Item<T>
+    private static class Item
     {
         public int     m_priority;
-        public T m_object;
+        public Object  m_object;
     }
 }

Modified: incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/ProviderConverter.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/ProviderConverter.java?rev=682149&r1=682148&r2=682149&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/ProviderConverter.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/ProviderConverter.java Sun Aug  3 05:25:25 2008
@@ -1,21 +1,22 @@
 /* 
     JSPWiki - a JSP-based WikiWiki clone.
 
-    Copyright (C) 2001-2002 Janne Jalkanen (Janne.Jalkanen@iki.fi)
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation; either version 2.1 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+    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 com.ecyrd.jspwiki.util;
 
@@ -39,7 +40,6 @@
  *  It leaves the converted directory in /tmp/converter-tmp/ 
  *  and does not touch the original in any way.
  *  
- *  @author jalkanen
  *
  *  @since
  */
@@ -147,7 +147,7 @@
     }
     
     /**
-     * @param args
+     * @param args Normal arguments.
      */
     public static void main( String[] args )
         throws Exception

Added: incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/Serializer.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/Serializer.java?rev=682149&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/Serializer.java (added)
+++ incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/Serializer.java Sun Aug  3 05:25:25 2008
@@ -0,0 +1,103 @@
+/* 
+    JSPWiki - a JSP-based WikiWiki clone.
+
+    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 com.ecyrd.jspwiki.util;
+
+import java.io.*;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.codec.binary.Base64;
+
+/**
+ *  Provides static helper functions for serializing different objects.
+ *  
+ *  @since 2.8
+ */
+public final class Serializer
+{
+    /**
+     * Prefix used to indicated that a serialized item was encoded with Base64.
+     */
+    protected static final String BASE64_PREFIX = "base64 ";
+
+    /**
+     *  Prevent instantiation.
+     */
+    private Serializer()
+    {}
+    
+    /**
+     * Deserializes a Base64-encoded String into a HashMap. Both the keys and values
+     * must implement {@link java.io.Serializable}.
+     * @param rawString the String contents containing the map to be deserialized
+     * @return the attributes, parsed into a Map
+     * @throws IOException if the contents cannot be parsed for any reason
+     */
+    @SuppressWarnings("unchecked")
+    public static Map<String,? extends Serializable> deserializeFromBase64( String rawString ) throws IOException
+    {
+        // Decode from Base64-encoded String to byte array
+        byte[] decodedBytes = Base64.decodeBase64( rawString.getBytes("UTF-8") );
+        
+        // Deserialize from the input stream to the Map
+        InputStream bytesIn = new ByteArrayInputStream( decodedBytes );
+        ObjectInputStream in = new ObjectInputStream( bytesIn );
+        HashMap<String,Serializable> attributes;
+        try
+        {
+            attributes = (HashMap<String,Serializable>)in.readObject();
+        }
+        catch ( ClassNotFoundException e )
+        {
+            throw new IOException( "Could not deserialiaze user profile attributes. Reason: " + e.getMessage() );
+        }
+        finally
+        {
+            in.close();
+        }
+        return attributes;
+    }
+
+    /**
+     * Serializes a Map and formats it into a Base64-encoded String. For ease of serialization, the Map contents
+     * are first copied into a HashMap, then serialized into a byte array that is encoded as a Base64 String.
+     * @param map the Map to serialize
+     * @return a String representing the serialized form of the Map
+     * @throws IOException If serialization cannot be done
+     */
+    public static String serializeToBase64( Map<String,Serializable> map ) throws IOException
+    {
+        // Load the Map contents into a defensive HashMap
+        HashMap<String,Serializable> serialMap = new HashMap<String,Serializable>();
+        serialMap.putAll( map );
+        
+        // Serialize the Map to an output stream
+        ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
+        ObjectOutputStream out = new ObjectOutputStream( bytesOut );
+        out.writeObject( serialMap );
+        out.close();
+        
+        // Transform to Base64-encoded String
+        byte[] result = Base64.encodeBase64( bytesOut.toByteArray() );
+        return new String( result ) ;
+    }
+
+}

Added: incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/TimedCounterList.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/TimedCounterList.java?rev=682149&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/TimedCounterList.java (added)
+++ incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/TimedCounterList.java Sun Aug  3 05:25:25 2008
@@ -0,0 +1,245 @@
+/*
+    JSPWiki - a JSP-based WikiWiki clone.
+
+    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 com.ecyrd.jspwiki.util;
+
+import java.util.AbstractList;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+/**
+ *  Provides a List in which all items store their addition time. This
+ *  can then be used to clean the list from old items.
+ *  <p>
+ *  This class is thread-safe - all modifications are blocking, but
+ *  reading is non-blocking (unless a write is ongoing).
+ *  
+ *  @param <T> The class you wish to store here
+ *  @since 2.8
+ */
+public class TimedCounterList<T> extends AbstractList<T>
+{
+    private ArrayList<CounterItem<T>> m_list = new ArrayList<CounterItem<T>>();
+    private ReadWriteLock             m_lock = new ReentrantReadWriteLock();
+    
+    /**
+     *  {@inheritDoc}
+     */
+    @Override
+    public T set( int index, T element )
+    {
+        m_lock.writeLock().lock();
+        
+        T t;
+        
+        try
+        {
+            t = m_list.set(index,new CounterItem<T>(element)).m_obj;
+        }
+        finally
+        {
+            m_lock.writeLock().unlock();
+        }
+        
+        return t;
+    }
+    
+    /**
+     *  {@inheritDoc}
+     */
+    @Override
+    public T get( int index )
+    {
+        m_lock.readLock().lock();
+        
+        T t;
+        
+        try
+        {
+            t = m_list.get(index).m_obj;
+        }
+        finally
+        {
+            m_lock.readLock().unlock();
+        }
+        
+        return t;
+    }
+
+    /**
+     *  {@inheritDoc}
+     */
+    @Override
+    public int size()
+    {
+        m_lock.readLock().lock();
+        int size = 0;
+
+        try
+        {
+            size = m_list.size();
+        }
+        finally
+        {
+            m_lock.readLock().unlock();
+        }
+        
+        return size;
+    }
+    
+    /**
+     *  {@inheritDoc}
+     */
+    @Override
+    public void add( int index, T element )
+    {
+        m_lock.writeLock().lock();
+        
+        try
+        {
+            m_list.add(index, new CounterItem<T>(element));
+        }
+        finally
+        {
+            m_lock.writeLock().unlock();
+        }
+    }
+    
+    /**
+     *  {@inheritDoc}
+     */
+    @Override
+    public T remove( int index )
+    {
+        m_lock.writeLock().lock();
+        T t;
+
+        try
+        {
+            t = m_list.remove( index ).m_obj;
+        }
+        finally
+        {
+            m_lock.writeLock().unlock();
+        }
+        
+        return t;
+    }
+
+    /**
+     *  Returns the count how many times this object is available in
+     *  this list, using equals().
+     *  
+     *  @param obj The object to count.
+     *  @return The count of the objects.
+     */
+    public int count( T obj )
+    {
+        int c = 0;
+        m_lock.readLock().lock();
+        
+        try
+        {
+            for( CounterItem i : m_list )
+            {
+                if( i.m_obj.equals( obj ) )
+                {
+                    c++;
+                }
+            }
+        }
+        finally
+        {
+            m_lock.readLock().unlock();
+        }
+        
+        return c;
+    }
+    
+    /**
+     *  Performs a cleanup of all items older than maxage.
+     *  
+     *  @param maxage The maximum age in milliseconds after an item is removed.
+     */
+    public void cleanup( long maxage )
+    {
+        m_lock.writeLock().lock();
+        
+        try
+        {
+            long now = System.currentTimeMillis();
+        
+            for( Iterator<CounterItem<T>> i = m_list.iterator(); i.hasNext(); )
+            {
+                CounterItem<T> ci = i.next();
+            
+                long age = now - ci.m_addTime;
+            
+                if( age > maxage )
+                {
+                    i.remove();
+                }
+            }
+        }
+        finally
+        {
+            m_lock.writeLock().unlock();
+        }
+    }
+    
+    /**
+     *  Returns the time when this particular item was added on the list.
+     *  
+     *  @param index The index of the object.
+     *  @return The addition time in milliseconds (@see System.currentTimeMillis()).
+     */
+    public long getAddTime( int index )
+    {
+        m_lock.readLock().lock();
+        long res = 0;
+        
+        try
+        {
+            res = m_list.get( index ).m_addTime;
+        }
+        finally
+        {
+            m_lock.readLock().unlock();
+        }
+        
+        return res;
+    }
+    
+    private static class CounterItem<E>
+    {
+        private E      m_obj;
+        private long   m_addTime;
+        
+        public CounterItem(E o)
+        {
+            m_addTime = System.currentTimeMillis();
+            m_obj = o;
+        }
+    }
+
+
+}

Modified: incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/WatchDog.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/WatchDog.java?rev=682149&r1=682148&r2=682149&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/WatchDog.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/WatchDog.java Sun Aug  3 05:25:25 2008
@@ -1,22 +1,23 @@
-/*
-  JSPWiki - a JSP-based WikiWiki clone.
+/* 
+    JSPWiki - a JSP-based WikiWiki clone.
 
-  Copyright (C) 2005 Janne Jalkanen (Janne.Jalkanen@iki.fi)
-
-  This program is free software; you can redistribute it and/or modify
-  it under the terms of the GNU Lesser General Public License as published by
-  the Free Software Foundation; either version 2.1 of the License, or
-  (at your option) any later version.
-
-  This program is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU Lesser General Public License for more details.
-
-  You should have received a copy of the GNU Lesser General Public License
-  along with this program; if not, write to the Free Software
-  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-*/
+    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 com.ecyrd.jspwiki.util;
 
 import java.lang.ref.WeakReference;
@@ -44,7 +45,6 @@
  *  the Thread is dead, and will stop itself accordingly.  However, this object
  *  is not automatically released, so you might want to check it out after a while.
  *
- *  @author Janne Jalkanen
  *  @since  2.4.92
  */
 public final class WatchDog
@@ -54,9 +54,11 @@
     private boolean   m_enabled    = true;
     private WikiEngine m_engine;
 
-    private static Logger log = Logger.getLogger(WatchDog.class.getName());
+    private Logger log = Logger.getLogger(WatchDog.class.getName());
 
-    private static HashMap<Integer,WeakReference<WatchDog>> c_kennel = new HashMap<Integer,WeakReference<WatchDog>>();
+    private static HashMap<Integer,WeakReference<WatchDog>> c_kennel = 
+        new HashMap<Integer,WeakReference<WatchDog>>();
+    
     private static WikiBackgroundThread c_watcherThread;
 
     /**
@@ -74,7 +76,7 @@
         Thread t = Thread.currentThread();
         WatchDog wd = null;
 
-        WeakReference<WatchDog> w = c_kennel.get( new Integer(t.hashCode()) );
+        WeakReference<WatchDog> w = c_kennel.get( t.hashCode() );
 
         if( w != null ) wd = w.get();
 
@@ -85,7 +87,7 @@
 
             synchronized( c_kennel )
             {
-                c_kennel.put( new Integer(t.hashCode()), w );
+                c_kennel.put( t.hashCode(), w );
             }
         }
 
@@ -142,9 +144,11 @@
 
         synchronized( c_kennel )
         {
-            for( Map.Entry<Integer,WeakReference<WatchDog>> e : c_kennel.entrySet() )
+            for( Iterator i = c_kennel.entrySet().iterator(); i.hasNext(); )
             {
-                WeakReference w = e.getValue();
+                Map.Entry e = (Map.Entry) i.next();
+
+                WeakReference w = (WeakReference) e.getValue();
 
                 //
                 //  Remove expired as well
@@ -338,8 +342,6 @@
     /**
      *  This is the chief watchdog thread.
      *
-     *  @author jalkanen
-     *
      */
     private static class WatchDogThread extends WikiBackgroundThread
     {
@@ -370,13 +372,17 @@
          */
         public void backgroundTask() throws Exception
         {
+            if( c_kennel == null ) return;
+            
             synchronized( c_kennel )
             {
-                for( Map.Entry<Integer,WeakReference<WatchDog>> entry : c_kennel.entrySet() )
+                for( Iterator i = c_kennel.entrySet().iterator(); i.hasNext(); )
                 {
-                    WeakReference<WatchDog> wr = entry.getValue();
+                    Map.Entry entry = (Map.Entry) i.next();
 
-                    WatchDog w = wr.get();
+                    WeakReference wr = (WeakReference) entry.getValue();
+
+                    WatchDog w = (WatchDog) wr.get();
 
                     if( w != null )
                     {
@@ -399,8 +405,6 @@
 
     /**
      *  A class which just stores the state in our State stack.
-     *
-     *  @author Janne Jalkanen
      */
     private static class State
     {
@@ -428,9 +432,6 @@
 
     /**
      *  This class wraps a Thread so that it can become Watchable.
-     *
-     *  @author Janne Jalkanen
-     *
      */
     private static class ThreadWrapper implements Watchable
     {

Modified: incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/Watchable.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/Watchable.java?rev=682149&r1=682148&r2=682149&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/Watchable.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/Watchable.java Sun Aug  3 05:25:25 2008
@@ -1,21 +1,22 @@
 /* 
     JSPWiki - a JSP-based WikiWiki clone.
 
-    Copyright (C) 2001-2002 Janne Jalkanen (Janne.Jalkanen@iki.fi)
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation; either version 2.1 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+    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 com.ecyrd.jspwiki.util;
 
@@ -23,7 +24,6 @@
  *  A watchdog needs something to watch.  If you wish to be watched,
  *  implement this interface.
  *
- *  @author jalkanen
  */
 public interface Watchable
 {

Modified: incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/WikiBackgroundThread.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/WikiBackgroundThread.java?rev=682149&r1=682148&r2=682149&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/WikiBackgroundThread.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/util/WikiBackgroundThread.java Sun Aug  3 05:25:25 2008
@@ -1,21 +1,22 @@
 /* 
     JSPWiki - a JSP-based WikiWiki clone.
 
-    Copyright (C) 2001-2002 Janne Jalkanen (Janne.Jalkanen@iki.fi)
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation; either version 2.1 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+    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 com.ecyrd.jspwiki.util;
 
@@ -63,6 +64,8 @@
     /**
      * Listens for {@link com.ecyrd.jspwiki.event.WikiEngineEvent#SHUTDOWN}
      * and, if detected, marks the thread for death.
+     * 
+     * @param event {@inheritDoc}
      * @see com.ecyrd.jspwiki.event.WikiEventListener#actionPerformed(com.ecyrd.jspwiki.event.WikiEvent)
      */
     public final void actionPerformed( WikiEvent event )
@@ -80,6 +83,8 @@
     /**
      * Abstract method that performs the actual work for this
      * background thread; subclasses must implement this method.
+     * 
+     * @throws Exception Any exception can be thrown
      */
     public abstract void backgroundTask() throws Exception;
     
@@ -176,6 +181,8 @@
      * Executes a task after shutdown signal was detected.
      * By default, this method does nothing; override it 
      * to implement custom functionality.
+     * 
+     * @throws Exception Any exception can be thrown.
      */
     public void shutdownTask() throws Exception
     {
@@ -186,6 +193,8 @@
      * method starts, but before the {@link #backgroundTask()}
      * task executes. By default, this method does nothing; 
      * override it to implement custom functionality.
+     * 
+     * @throws Exception Any exception can be thrown.
      */
     public void startupTask() throws Exception
     {

Modified: incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/AbstractStep.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/AbstractStep.java?rev=682149&r1=682148&r2=682149&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/AbstractStep.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/AbstractStep.java Sun Aug  3 05:25:25 2008
@@ -1,24 +1,26 @@
-/*
+/* 
     JSPWiki - a JSP-based WikiWiki clone.
 
-    Copyright (C) 2001-2007 Janne Jalkanen (Janne.Jalkanen@iki.fi)
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation; either version 2.1 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+    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 com.ecyrd.jspwiki.workflow;
 
+import java.io.Serializable;
 import java.security.Principal;
 import java.util.*;
 
@@ -45,7 +47,7 @@
 
     private boolean m_completed;
 
-    private final Map<Outcome,Step> m_successors;
+    private final Map<Outcome, Step> m_successors;
 
     private Workflow m_workflow;
 
@@ -76,7 +78,7 @@
         m_errors = new ArrayList<String>();
         m_outcome = Outcome.STEP_CONTINUE;
         m_key = messageKey;
-        m_successors = new LinkedHashMap<Outcome,Step>();
+        m_successors = new LinkedHashMap<Outcome, Step>();
     }
 
     /**
@@ -109,15 +111,16 @@
     /**
      * {@inheritDoc}
      */
-    public final Collection<Outcome> getAvailableOutcomes()
+    public final Collection getAvailableOutcomes()
     {
-        return Collections.unmodifiableCollection( m_successors.keySet() );
+        Set<Outcome> outcomes = m_successors.keySet();
+        return Collections.unmodifiableCollection( outcomes );
     }
 
     /**
      * {@inheritDoc}
      */
-    public final List<String> getErrors()
+    public final List getErrors()
     {
         return Collections.unmodifiableList( m_errors );
     }
@@ -143,11 +146,11 @@
     /**
      * {@inheritDoc}
      */
-    public final Object[] getMessageArguments()
+    public final Serializable[] getMessageArguments()
     {
         if ( m_workflow == null )
         {
-            return new Object[0];
+            return new Serializable[0];
         }
         return m_workflow.getMessageArguments();
     }

Modified: incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/Decision.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/Decision.java?rev=682149&r1=682148&r2=682149&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/Decision.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/Decision.java Sun Aug  3 05:25:25 2008
@@ -1,21 +1,22 @@
-/*
+/* 
     JSPWiki - a JSP-based WikiWiki clone.
 
-    Copyright (C) 2001-2007 Janne Jalkanen (Janne.Jalkanen@iki.fi)
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation; either version 2.1 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+    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 com.ecyrd.jspwiki.workflow;
 
@@ -30,16 +31,16 @@
  * <p>
  * AbstractStep subclass that asks an actor Principal to choose an Outcome on
  * behalf of an owner (also a Principal). The actor "makes the decision" by
- * calling the {@link #decide(Outcome)} method. When this method is called,
- * it will set the Decision's Outcome to the one supplied. If the parent
- * Workflow is in the {@link Workflow#WAITING} state, it will be re-started.
- * Any checked WikiExceptions thrown by the workflow after re-start will be
- * re-thrown to callers.
+ * calling the {@link #decide(Outcome)} method. When this method is called, it
+ * will set the Decision's Outcome to the one supplied. If the parent Workflow
+ * is in the {@link Workflow#WAITING} state, it will be re-started. Any checked
+ * WikiExceptions thrown by the workflow after re-start will be re-thrown to
+ * callers.
  * </p>
  * <p>
- * When a Decision completes, its
- * {@link #isCompleted()} method returns <code>true</code>. It also tells its
- * parent WorkflowManager to remove it from the list of pending tasks by calling
+ * When a Decision completes, its {@link #isCompleted()} method returns
+ * <code>true</code>. It also tells its parent WorkflowManager to remove it
+ * from the list of pending tasks by calling
  * {@link DecisionQueue#remove(Decision)}.
  * </p>
  * <p>
@@ -47,7 +48,8 @@
  * arbitrary key-value pairs called "facts." These facts can be presented by the
  * user interface to show details the actor needs to know about. Facts are added
  * by calling classes to the Decision, in order of expected presentation, by the
- * {@link #addFact(Fact)} method. They can be retrieved, in order, via {@link #getFacts()}.
+ * {@link #addFact(Fact)} method. They can be retrieved, in order, via
+ * {@link #getFacts()}.
  * </p>
  *
  * @author Andrew Jaquith
@@ -64,63 +66,69 @@
     private final List<Fact> m_facts;
 
     /**
-     * Constructs a new Decision for a required "actor" Principal, having a default Outcome.
+     * Constructs a new Decision for a required "actor" Principal, having a
+     * default Outcome.
+     * 
      * @param workflow the parent Workflow object
-     * @param messageKey the i18n message key that represents the message the actor will see
-     * @param actor the Principal (<em>e.g.</em>, a WikiPrincipal, Role, GroupPrincipal) who is
-     * required to select an appropriate Outcome
-     * @param defaultOutcome the Outcome that the user interface will recommend as the
-     * default choice
+     * @param messageKey the i18n message key that represents the message the
+     *            actor will see
+     * @param actor the Principal (<em>e.g.</em>, a WikiPrincipal, Role,
+     *            GroupPrincipal) who is required to select an appropriate
+     *            Outcome
+     * @param defaultOutcome the Outcome that the user interface will recommend
+     *            as the default choice
      */
-    public Decision(Workflow workflow, String messageKey, Principal actor, Outcome defaultOutcome)
+    public Decision( Workflow workflow, String messageKey, Principal actor, Outcome defaultOutcome )
     {
-        super(workflow, messageKey);
+        super( workflow, messageKey );
         m_actor = actor;
         m_defaultOutcome = defaultOutcome;
         m_facts = new ArrayList<Fact>();
-        addSuccessor(defaultOutcome, null);
+        addSuccessor( defaultOutcome, null );
     }
 
     /**
      * Appends a Fact to the list of Facts associated with this Decision.
-     *
-     * @param fact
-     *            the new fact to add
-     */
-    public final void addFact(Fact fact)
-    {
-        m_facts.add(fact);
+     * 
+     * @param fact the new fact to add
+     */
+    public final void addFact( Fact fact )
+    {
+        m_facts.add( fact );
     }
 
     /**
-     * <p>Sets this Decision's outcome, and restarts the parent Workflow if
-     * it is in the {@link Workflow#WAITING} state and this Decision is
-     * its currently active Step. Any checked WikiExceptions thrown by
-     * the workflow after re-start will be re-thrown to callers.</p>
-     * <p>This method cannot be invoked if the Decision is not the
-     * current Workflow step; all other invocations will throw
-     * an IllegalStateException. If the Outcome supplied to this method
-     * is one one of the Outcomes returned by {@link #getAvailableOutcomes()},
-     * an IllegalArgumentException will be thrown.</p>
-     *
-     * @param outcome
-     *            the Outcome of the Decision
-     * @throws WikiException
-     *             if the act of restarting the Workflow throws an exception
+     * <p>
+     * Sets this Decision's outcome, and restarts the parent Workflow if it is
+     * in the {@link Workflow#WAITING} state and this Decision is its currently
+     * active Step. Any checked WikiExceptions thrown by the workflow after
+     * re-start will be re-thrown to callers.
+     * </p>
+     * <p>
+     * This method cannot be invoked if the Decision is not the current Workflow
+     * step; all other invocations will throw an IllegalStateException. If the
+     * Outcome supplied to this method is one one of the Outcomes returned by
+     * {@link #getAvailableOutcomes()}, an IllegalArgumentException will be
+     * thrown.
+     * </p>
+     * 
+     * @param outcome the Outcome of the Decision
+     * @throws WikiException if the act of restarting the Workflow throws an
+     *             exception
      */
-    public void decide(Outcome outcome) throws WikiException
+    public void decide( Outcome outcome ) throws WikiException
     {
-        super.setOutcome(outcome);
+        super.setOutcome( outcome );
 
         // If current workflow is waiting for input, restart it and remove
         // Decision from DecisionQueue
         Workflow w = getWorkflow();
-        if (w.getCurrentState() == Workflow.WAITING && this.equals(w.getCurrentStep()))
+        if( w.getCurrentState() == Workflow.WAITING && this.equals( w.getCurrentStep() ) )
         {
             WorkflowManager wm = w.getWorkflowManager();
-            if (wm != null)
+            if( wm != null )
             {
-                wm.getDecisionQueue().remove(this);
+                wm.getDecisionQueue().remove( this );
             }
             // Restart workflow
             w.restart();
@@ -132,21 +140,22 @@
      * if the current Outcome isn't a completion (which will be true if the
      * {@link #decide(Outcome)} method hasn't been executed yet. This method
      * will also add the Decision to the associated DecisionQueue.
+     * 
      * @return the Outcome of the execution
      * @throws WikiException never
      */
     public Outcome execute() throws WikiException
     {
-        if (getOutcome().isCompletion())
+        if( getOutcome().isCompletion() )
         {
             return getOutcome();
         }
 
         // Put decision in the DecisionQueue
         WorkflowManager wm = getWorkflow().getWorkflowManager();
-        if (wm != null)
+        if( wm != null )
         {
-            wm.getDecisionQueue().add(this);
+            wm.getDecisionQueue().add( this );
         }
 
         // Indicate we are waiting for user input
@@ -165,7 +174,7 @@
      * Returns the default or suggested outcome, which must be one of those
      * returned by {@link #getAvailableOutcomes()}. This method is guaranteed
      * to return a non-<code>null</code> Outcome.
-     *
+     * 
      * @return the default outcome.
      */
     public Outcome getDefaultOutcome()
@@ -176,19 +185,19 @@
     /**
      * Returns the Facts associated with this Decision, in the order in which
      * they were added.
-     *
+     * 
      * @return the list of Facts
      */
-    public final List<Fact> getFacts()
+    public final List getFacts()
     {
-        return Collections.unmodifiableList(m_facts);
+        return Collections.unmodifiableList( m_facts );
     }
 
     /**
      * Returns the unique identifier for this Decision. Normally, this ID is
      * programmatically assigned when the Decision is added to the
      * DecisionQueue.
-     *
+     * 
      * @return the identifier
      */
     public final int getId()
@@ -199,7 +208,7 @@
     /**
      * Returns <code>true</code> if the Decision can be reassigned to another
      * actor. This implementation always returns <code>true</code>.
-     *
+     * 
      * @return the result
      */
     public boolean isReassignable()
@@ -208,31 +217,30 @@
     }
 
     /**
-     * Reassigns the Decision to a new actor (that is, provide an outcome).
-     * If the Decision is not reassignable, this method throws 
-     * an IllegalArgumentException.
-     *
+     * Reassigns the Decision to a new actor (that is, provide an outcome). If
+     * the Decision is not reassignable, this method throws an
+     * IllegalArgumentException.
+     * 
      * @param actor the actor to reassign the Decision to
      */
-    public final synchronized void reassign(Principal actor)
+    public final synchronized void reassign( Principal actor )
     {
-        if (isReassignable())
+        if( isReassignable() )
         {
             m_actor = actor;
         }
         else
         {
-            throw new IllegalArgumentException("Decision cannot be reassigned.");
+            throw new IllegalArgumentException( "Decision cannot be reassigned." );
         }
     }
 
     /**
      * Sets the unique identfier for this Decision.
-     *
-     * @param id
-     *            the identifier
+     * 
+     * @param id the identifier
      */
-    public final void setId(int id)
+    public final void setId( int id )
     {
         m_id = id;
     }

Modified: incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/DecisionQueue.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/DecisionQueue.java?rev=682149&r1=682148&r2=682149&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/DecisionQueue.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/DecisionQueue.java Sun Aug  3 05:25:25 2008
@@ -1,24 +1,26 @@
-/*
+/* 
     JSPWiki - a JSP-based WikiWiki clone.
 
-    Copyright (C) 2001-2007 Janne Jalkanen (Janne.Jalkanen@iki.fi)
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation; either version 2.1 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+    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 com.ecyrd.jspwiki.workflow;
 
+import java.io.Serializable;
 import java.security.Principal;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -34,8 +36,9 @@
  * @author Andrew Jaquith
  * @since 2.5
  */
-public class DecisionQueue
+public class DecisionQueue implements Serializable
 {
+    private static final long serialVersionUID = -7172912793410302533L;
 
     private LinkedList<Decision> m_queue = new LinkedList<Decision>();
 
@@ -56,10 +59,10 @@
      * @param decision
      *            the Decision to add
      */
-    protected synchronized void add(Decision decision)
+    protected synchronized void add( Decision decision )
     {
-        m_queue.addLast(decision);
-        decision.setId(nextId());
+        m_queue.addLast( decision );
+        decision.setId( nextId() );
     }
 
     /**
@@ -72,7 +75,7 @@
      */
     protected Decision[] decisions()
     {
-        return m_queue.toArray(new Decision[m_queue.size()]);
+        return m_queue.toArray( new Decision[m_queue.size()] );
     }
 
     /**
@@ -81,7 +84,7 @@
      */
     protected synchronized void remove(Decision decision)
     {
-        m_queue.remove(decision);
+        m_queue.remove( decision );
     }
 
     /**
@@ -95,29 +98,29 @@
      *            the wiki session
      * @return the collection of Decisions, which may be empty
      */
-    public Collection<Decision> getActorDecisions(WikiSession session)
+    public Collection getActorDecisions(WikiSession session)
     {
         ArrayList<Decision> decisions = new ArrayList<Decision>();
-        if (session.isAuthenticated())
+        if ( session.isAuthenticated() )
         {
             Principal[] principals = session.getPrincipals();
             Principal[] rolePrincipals = session.getRoles();
             for ( Decision decision : m_queue )
             {
                 // Iterate through the Principal set
-                for (int i = 0; i < principals.length; i++)
+                for ( Principal principal : principals )
                 {
-                    if (principals[i].equals(decision.getActor()))
+                    if ( principal.equals( decision.getActor() ) )
                     {
-                        decisions.add(decision);
+                        decisions.add( decision );
                     }
                 }
                 // Iterate through the Role set
-                for (int i = 0; i < rolePrincipals.length; i++)
+                for ( Principal principal : rolePrincipals )
                 {
-                    if (rolePrincipals[i].equals(decision.getActor()))
+                    if ( principal.equals( decision.getActor() ) )
                     {
-                        decisions.add(decision);
+                        decisions.add( decision );
                     }
                 }
             }
@@ -137,12 +140,12 @@
      * @throws WikiException if the succeeding Step cannot start
      * for any reason
      */
-    public void decide(Decision decision, Outcome outcome) throws WikiException
+    public void decide( Decision decision, Outcome outcome ) throws WikiException
     {
-        decision.decide(outcome);
-        if (decision.isCompleted())
+        decision.decide( outcome );
+        if ( decision.isCompleted() )
         {
-            remove(decision);
+            remove( decision );
         }
 
         // TODO: We should fire an event indicating the Outcome, and whether the
@@ -161,12 +164,12 @@
     {
         if (decision.isReassignable())
         {
-            decision.reassign(owner);
+            decision.reassign( owner );
 
             // TODO: We should fire an event indicating the reassignment
             return;
         }
-        throw new IllegalStateException("Reassignments not allowed for this decision.");
+        throw new IllegalStateException( "Reassignments not allowed for this decision." );
     }
 
     /**

Modified: incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/DecisionRequiredException.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/DecisionRequiredException.java?rev=682149&r1=682148&r2=682149&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/DecisionRequiredException.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/DecisionRequiredException.java Sun Aug  3 05:25:25 2008
@@ -1,21 +1,22 @@
-/*
+/* 
     JSPWiki - a JSP-based WikiWiki clone.
 
-    Copyright (C) 2001-2004 Janne Jalkanen (Janne.Jalkanen@iki.fi)
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation; either version 2.1 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+    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 com.ecyrd.jspwiki.workflow;
 
@@ -39,8 +40,8 @@
      * Constructs a new exception.
      * @param message the message
      */
-    public DecisionRequiredException(String message)
+    public DecisionRequiredException( String message )
     {
-        super(message);
+        super( message );
     }
 }

Modified: incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/Fact.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/Fact.java?rev=682149&r1=682148&r2=682149&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/Fact.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/Fact.java Sun Aug  3 05:25:25 2008
@@ -1,39 +1,44 @@
 /* 
     JSPWiki - a JSP-based WikiWiki clone.
 
-    Copyright (C) 2001-2002 Janne Jalkanen (Janne.Jalkanen@iki.fi)
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation; either version 2.1 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+    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 com.ecyrd.jspwiki.workflow;
 
+import java.io.Serializable;
+
 /**
- * Represents a contextual artifact, which can be any Object, useful for making
+ * Represents a contextual artifact, which can be any serializable object, useful for making
  * a Decision. Facts are key-value pairs, where the key is a String (message
- * key) and the value is an arbitrary Object. Generally, the supplied object's
+ * key) and the value is an arbitrary object. Generally, the supplied object's
  * {@link #toString()} method should return a human-readable String. Facts are
  * immutable objects.
  * 
  * @author Andrew Jaquith
  * @since 2.5
  */
-public final class Fact
+public final class Fact implements Serializable
 {
+    private static final long serialVersionUID = -7459432935402796978L;
+
     private final String m_key;
 
-    private final Object m_obj;
+    private final Serializable m_obj;
 
     /**
      * Constructs a new Fact with a supplied message key and value.
@@ -43,7 +48,7 @@
      * @param value
      *            the object to associate with the name
      */
-    public Fact(String messageKey, Object value)
+    public Fact(String messageKey, Serializable value)
     {
         if ( messageKey == null || value == null )
         {
@@ -66,7 +71,7 @@
      * Returns this Fact's value.
      * @return the value object
      */
-    public Object getValue()
+    public Serializable getValue()
     {
         return m_obj;
     }

Modified: incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/NoSuchOutcomeException.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/NoSuchOutcomeException.java?rev=682149&r1=682148&r2=682149&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/NoSuchOutcomeException.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/NoSuchOutcomeException.java Sun Aug  3 05:25:25 2008
@@ -1,21 +1,22 @@
 /* 
     JSPWiki - a JSP-based WikiWiki clone.
 
-    Copyright (C) 2001-2002 Janne Jalkanen (Janne.Jalkanen@iki.fi)
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation; either version 2.1 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+    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 com.ecyrd.jspwiki.workflow;
 
@@ -34,8 +35,8 @@
      * Constructs a new exception.
      * @param message the message
      */
-    public NoSuchOutcomeException(String message)
+    public NoSuchOutcomeException( String message )
     {
-        super(message);
+        super( message );
     }
 }

Modified: incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/Outcome.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/Outcome.java?rev=682149&r1=682148&r2=682149&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/Outcome.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/Outcome.java Sun Aug  3 05:25:25 2008
@@ -1,24 +1,27 @@
 /* 
     JSPWiki - a JSP-based WikiWiki clone.
 
-    Copyright (C) 2001-2002 Janne Jalkanen (Janne.Jalkanen@iki.fi)
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation; either version 2.1 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+    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 com.ecyrd.jspwiki.workflow;
 
+import java.io.Serializable;
+
 /**
  * Resolution of a workflow Step, such as "approve," "deny," "hold," "task
  * error," or other potential resolutions.
@@ -26,32 +29,34 @@
  * @author Andrew Jaquith
  * @since 2.5
  */
-public final class Outcome
+public final class Outcome implements Serializable
 {
 
+    private static final long serialVersionUID = -338361947886288073L;
+
     /** Complete workflow step (without errors) */
-    public static final Outcome STEP_COMPLETE = new Outcome("outcome.step.complete", true);
+    public static final Outcome STEP_COMPLETE = new Outcome( "outcome.step.complete", true );
 
     /** Terminate workflow step (without errors) */
-    public static final Outcome STEP_ABORT = new Outcome("outcome.step.abort", true);
+    public static final Outcome STEP_ABORT = new Outcome( "outcome.step.abort", true );
 
     /** Continue workflow step (without errors) */
-    public static final Outcome STEP_CONTINUE = new Outcome("outcome.step.continue", false);
+    public static final Outcome STEP_CONTINUE = new Outcome( "outcome.step.continue", false );
 
     /** Acknowlege the Decision. */
-    public static final Outcome DECISION_ACKNOWLEDGE = new Outcome("outcome.decision.acknowledge", true);
+    public static final Outcome DECISION_ACKNOWLEDGE = new Outcome( "outcome.decision.acknowledge", true );
 
     /** Approve the Decision (and complete the step). */
-    public static final Outcome DECISION_APPROVE = new Outcome("outcome.decision.approve", true);
+    public static final Outcome DECISION_APPROVE = new Outcome( "outcome.decision.approve", true );
 
     /** Deny the Decision (and complete the step). */
-    public static final Outcome DECISION_DENY = new Outcome("outcome.decision.deny", true);
+    public static final Outcome DECISION_DENY = new Outcome( "outcome.decision.deny", true );
 
     /** Put the Decision on hold (and pause the step). */
-    public static final Outcome DECISION_HOLD = new Outcome("outcome.decision.hold", false);
+    public static final Outcome DECISION_HOLD = new Outcome( "outcome.decision.hold", false );
 
     /** Reassign the Decision to another actor (and pause the step). */
-    public static final Outcome DECISION_REASSIGN = new Outcome("outcome.decision.reassign", false);
+    public static final Outcome DECISION_REASSIGN = new Outcome( "outcome.decision.reassign", false );
 
     private static final Outcome[] OUTCOMES = new Outcome[] { STEP_COMPLETE, STEP_ABORT, STEP_CONTINUE, DECISION_ACKNOWLEDGE,
                                                                DECISION_APPROVE, DECISION_DENY, DECISION_HOLD, DECISION_REASSIGN };
@@ -69,11 +74,11 @@
      *            whether this Outcome should be interpreted as the logical
      *            completion of a Step.
      */
-    private Outcome(String key, boolean completion)
+    private Outcome( String key, boolean completion )
     {
-        if (key == null)
+        if ( key == null )
         {
-            throw new IllegalArgumentException("Key cannot be null.");
+            throw new IllegalArgumentException( "Key cannot be null." );
         }
         m_key = key;
         m_completion = completion;
@@ -110,7 +115,7 @@
      */
     public int hashCode()
     {
-        return m_key.hashCode() * (m_completion ? 1 : 2);
+        return m_key.hashCode() * ( m_completion ? 1 : 2 );
     }
 
     /**
@@ -118,13 +123,13 @@
      * @param obj the object to test
      * @return <code>true</code> if logically equal, <code>false</code> if not
      */
-    public boolean equals(Object obj)
+    public boolean equals( Object obj )
     {
         if (!(obj instanceof Outcome))
         {
             return false;
         }
-        return m_key.equals(((Outcome) obj).getMessageKey());
+        return m_key.equals( ( (Outcome) obj ).getMessageKey() );
     }
 
     /**
@@ -137,19 +142,19 @@
      * @throws NoSuchOutcomeException
      *             if an Outcome matching the key isn't found.
      */
-    public static Outcome forName(String key) throws NoSuchOutcomeException
+    public static Outcome forName( String key ) throws NoSuchOutcomeException
     {
-        if (key != null)
+        if ( key != null )
         {
             for (int i = 0; i < OUTCOMES.length; i++)
             {
-                if (OUTCOMES[i].m_key.equals(key))
+                if ( OUTCOMES[i].m_key.equals( key ) )
                 {
                     return OUTCOMES[i];
                 }
             }
         }
-        throw new NoSuchOutcomeException("Outcome " + key + " not found.");
+        throw new NoSuchOutcomeException( "Outcome " + key + " not found." );
     }
 
     /**

Modified: incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/SimpleDecision.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/SimpleDecision.java?rev=682149&r1=682148&r2=682149&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/SimpleDecision.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/SimpleDecision.java Sun Aug  3 05:25:25 2008
@@ -1,21 +1,22 @@
 /* 
     JSPWiki - a JSP-based WikiWiki clone.
 
-    Copyright (C) 2001-2002 Janne Jalkanen (Janne.Jalkanen@iki.fi)
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation; either version 2.1 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+    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 com.ecyrd.jspwiki.workflow;
 
@@ -32,6 +33,8 @@
 public class SimpleDecision extends Decision
 {
 
+    private static final long serialVersionUID = 8192213077644617341L;
+
     /**
      * Constructs a new SimpleDecision assigned to a specified actor.
      * @param workflow the parent Workflow
@@ -40,12 +43,12 @@
      * @param actor the Principal (<em>e.g.</em>, WikiPrincipal,
      * GroupPrincipal, Role) who will decide
      */
-    public SimpleDecision(Workflow workflow, String messageKey, Principal actor)
+    public SimpleDecision( Workflow workflow, String messageKey, Principal actor )
     {
-        super(workflow, messageKey, actor, Outcome.DECISION_APPROVE);
+        super( workflow, messageKey, actor, Outcome.DECISION_APPROVE );
 
         // Add the other default outcomes
-        super.addSuccessor(Outcome.DECISION_DENY, null);
+        super.addSuccessor( Outcome.DECISION_DENY, null );
     }
 
 }

Modified: incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/SimpleNotification.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/SimpleNotification.java?rev=682149&r1=682148&r2=682149&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/SimpleNotification.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_2_9_STRIPES_BRANCH/src/com/ecyrd/jspwiki/workflow/SimpleNotification.java Sun Aug  3 05:25:25 2008
@@ -1,21 +1,22 @@
 /* 
     JSPWiki - a JSP-based WikiWiki clone.
 
-    Copyright (C) 2001-2002 Janne Jalkanen (Janne.Jalkanen@iki.fi)
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation; either version 2.1 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+    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 com.ecyrd.jspwiki.workflow;
 
@@ -34,6 +35,8 @@
 public final class SimpleNotification extends Decision
 {
 
+    private static final long serialVersionUID = -3392947495169819527L;
+
     /**
      * Constructs a new SimpleNotification object with a supplied message key,
      * associated Workflow, and named actor who must acknowledge the message.
@@ -49,9 +52,9 @@
      * @param actor
      *            the Principal who will acknowledge the message
      */
-    public SimpleNotification(Workflow workflow, String messageKey, Principal actor)
+    public SimpleNotification( Workflow workflow, String messageKey, Principal actor )
     {
-        super(workflow, messageKey, actor, Outcome.DECISION_ACKNOWLEDGE);
+        super( workflow, messageKey, actor, Outcome.DECISION_ACKNOWLEDGE );
     }
     
     /**
@@ -61,7 +64,7 @@
      */
     public void acknowledge() throws WikiException
     {
-        this.decide( Outcome.DECISION_ACKNOWLEDGE );
+        this.decide( Outcome.DECISION_ACKNOWLEDGE  );
     }
 
     /**



Mime
View raw message