portals-jetspeed-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From a..@apache.org
Subject svn commit: r725977 [30/48] - in /portals/jetspeed-2/portal/trunk: ./ app-servers/security/jboss/src/java/META-INF/jboss-secsvc/ app-servers/security/jboss/src/java/org/apache/jetspeed/appservers/security/jboss/ applications/jetspeed/src/main/javascrip...
Date Fri, 12 Dec 2008 12:07:04 GMT
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-statistics/src/test/java/org/apache/jetspeed/statistics/TestStatistics.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-statistics/src/test/java/org/apache/jetspeed/statistics/TestStatistics.java?rev=725977&r1=725976&r2=725977&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-statistics/src/test/java/org/apache/jetspeed/statistics/TestStatistics.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-statistics/src/test/java/org/apache/jetspeed/statistics/TestStatistics.java Fri Dec 12 04:06:29 2008
@@ -1,340 +1,340 @@
-/*
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jetspeed.statistics;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.security.Principal;
-import java.sql.Connection;
-import java.sql.DatabaseMetaData;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.List;
-import java.util.Properties;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.apache.jetspeed.components.util.DatasourceEnabledSpringTestCase;
-import org.apache.jetspeed.mockobjects.request.MockRequestContext;
-import org.apache.jetspeed.om.portlet.PortletDefinition;
-import org.apache.jetspeed.om.portlet.impl.PortletApplicationDefinitionImpl;
-import org.apache.jetspeed.request.RequestContext;
-import org.apache.jetspeed.statistics.impl.StatisticsQueryCriteriaImpl;
-
-import com.mockrunner.mock.web.MockHttpServletRequest;
-import com.mockrunner.mock.web.MockHttpServletResponse;
-import com.mockrunner.mock.web.MockHttpSession;
-
-/**
- * TestStatistics
- * 
- * @author <a href="mailto:taylor@apache.org">David Sean Taylor </a>
- * @author <a href="mailto:chris@bluesunrise.com">Chris Schaefer </a>
- * @version $Id: $
- */
-public class TestStatistics extends DatasourceEnabledSpringTestCase
-{
-	String USERNAME = "anotherFaker";
-
-    private PortalStatistics statistics = null;
-
-    /**
-     * Start the tests.
-     * 
-     * @param args
-     *            the arguments. Not used
-     */
-    public static void main(String args[])
-    {
-        junit.awtui.TestRunner.main(new String[]
-        { TestStatistics.class.getName()});
-
-    }
-
-    protected void setUp() throws Exception
-    {
-        super.setUp();
-        
-        this.statistics = (PortalStatistics) scm.getComponent("PortalStatistics");
-        assertNotNull("statistics not found ", statistics);
-    }
-
-    public void clearDBs()
-    {
-        try
-        {
-            DatabaseMetaData dmd = statistics.getDataSource().getConnection().getMetaData();        
-            System.out.println("Oh... just for reference we're running against "+dmd.getDatabaseProductName());
-            System.out.println("with the driver = "+dmd.getDriverName());
-            System.out.println("   with the url = "+dmd.getURL());
-            
-            Connection con = statistics.getDataSource().getConnection();
-
-            PreparedStatement psmt = con
-                    .prepareStatement("DELETE FROM USER_STATISTICS");
-            psmt.execute();
-            psmt.close();
-            psmt = con.prepareStatement("DELETE FROM PAGE_STATISTICS");
-            psmt.execute();
-            psmt.close();
-            psmt = con.prepareStatement("DELETE FROM PORTLET_STATISTICS");
-            psmt.execute();
-            psmt.close();
-            if (con != null) con.close();
-        } catch (SQLException e)
-        {
-            fail("problem with database connection:" + e.toString());
-        }
-    }
-
-    public int count(String query)
-    {
-        int val = -1;
-        try
-        {
-            Connection con = statistics.getDataSource().getConnection();
-
-            PreparedStatement psmt = con.prepareStatement(query);
-            ResultSet rs = psmt.executeQuery();
-
-            if (rs.next())
-            {
-                val = rs.getInt(1);
-            }
-            psmt.close();
-            if (con != null) con.close();
-        } catch (SQLException e)
-        {
-            fail("problem with database connection:" + e.toString());
-        }
-        return val;
-    }
-
-    public int countPages()
-    {
-        return count("SELECT count(*) from PAGE_STATISTICS");
-    }
-
-    public int countPortlets()
-    {
-        return count("SELECT count(*) from PORTLET_STATISTICS");
-    }
-
-    public int countUsers()
-    {
-        return count("SELECT count(*) from USER_STATISTICS");
-    }
-
-    public static Test suite()
-    {
-        // All methods starting with "test" will be executed in the test suite.
-        return new TestSuite(TestStatistics.class);
-    }
-
-    public void testPortletStatistics() throws Exception
-    {
-        System.out.println("testing one of each ");
-        statistics.forceFlush();
-        clearDBs();
-
-        assertNotNull("statistics service is null", statistics);
-
-        RequestContext request = initRequestContext();
-        PortletApplicationDefinitionImpl app = new PortletApplicationDefinitionImpl();
-        app.setName("MyApp");
-        PortletDefinition portlet = app.addPortlet("TestPortlet");
-        long elapsedTime = 123;
-        statistics.logPortletAccess(request, portlet.getUniqueName(), "401",
-                elapsedTime);
-        statistics.logPageAccess(request, "401", elapsedTime);
-        statistics.logUserLogin(request, elapsedTime);
-
-        assertEquals("number of users incorrect", 1, statistics
-                .getNumberOfCurrentUsers());
-
-        List l = statistics.getListOfLoggedInUsers();
-        assertNotNull("list returned is null", l);
-        assertEquals("wrong number of users in list", 1, l.size());
-
-//        statistics.logUserLogout("123.234.145.156", "SuperFakeyUser",
-//                elapsedTime);
-        statistics.logUserLogout("123.234.145.156", USERNAME,
-                elapsedTime);
-
-        statistics.forceFlush();
-
-        assertEquals("number of users incorrect", statistics
-                .getNumberOfCurrentUsers(), 0);
-
-        int x = 1;
-        int pages = this.countPages();
-        int users = this.countUsers();
-        int portlets = this.countPortlets();
-        assertEquals("User Log count incorrect ", 2 * x, users);
-        assertEquals("Portlet Log count incorrect ", x, portlets);
-        assertEquals("Page Log count incorrect ", x, pages);
-
-    }
-
-    public void testLotsOfPortletStatistics() throws Exception
-    {
-        System.out.println("testing Multiple portlet stats");
-        statistics.forceFlush();
-        clearDBs();
-
-        int x = 37;
-        assertNotNull("statistics service is null", statistics);
-        for (int i = 0; i < x; i++)
-        {
-            RequestContext request = initRequestContext();
-            PortletApplicationDefinitionImpl app = new PortletApplicationDefinitionImpl();
-            app.setName("MyApp");
-            PortletDefinition portlet = app.addPortlet("TestPortlet");
-            long elapsedTime = 123 + i;
-            //System.out.println("logging something, number "+i);
-            statistics.logPortletAccess(request, portlet.getUniqueName(),
-                    "401", elapsedTime);
-            statistics.logPageAccess(request, "401", elapsedTime);
-            statistics.logUserLogin(request, elapsedTime);
-            assertEquals("number of users incorrect", 1, statistics
-                    .getNumberOfCurrentUsers());
-            List l = statistics.getListOfLoggedInUsers();
-            assertNotNull("list returned is null", l);
-            assertEquals("wrong number of users in list", 1, l.size());
-
-//            statistics.logUserLogout("123.234.145.156", "SuperFakeyUser",
-//                    elapsedTime);
-            statistics.logUserLogout("123.234.145.156", USERNAME,
-                    elapsedTime);
-            try
-            {
-                Thread.sleep(200);
-            } catch (InterruptedException ie)
-            {
-            }
-        }
-
-        statistics.forceFlush();
-
-        assertEquals("number of users incorrect", statistics
-                .getNumberOfCurrentUsers(), 0);
-
-        int pages = this.countPages();
-        int users = this.countUsers();
-        int portlets = this.countPortlets();
-        assertEquals("User Log count incorrect ", 2 * x, users);
-        assertEquals("Portlet Log count incorrect ", x, portlets);
-        assertEquals("Page Log count incorrect ", x, pages);
-
-    }
-
-    
-    public void testQuerySystem() throws Exception
-    {
-        System.out.println("testing Query System");
-        StatisticsQueryCriteria sqc = new StatisticsQueryCriteriaImpl();
-        sqc.setQueryType(PortalStatistics.QUERY_TYPE_USER);
-        int desired = 5;
-        sqc.setListsize(""+desired);
-        sqc.setSorttype("count");
-        sqc.setSortorder("desc");
-        AggregateStatistics as = statistics.queryStatistics(sqc);
-        assertNotNull(as);
-        System.out.println("user = " + as);
-        int size = as.getStatlist().size();
-        assertTrue( (size <=desired));
-
-        sqc.setQueryType(PortalStatistics.QUERY_TYPE_PORTLET);
-        sqc.setListsize(""+desired);
-        sqc.setSorttype("count");
-        sqc.setSortorder("desc");
-        as = statistics.queryStatistics(sqc);
-        assertNotNull(as);
-        System.out.println("portlet = " + as);
-        size = as.getStatlist().size();
-        assertTrue( (size <=desired));
-
-        sqc.setQueryType(PortalStatistics.QUERY_TYPE_PAGE);
-        sqc.setListsize(""+desired);
-        sqc.setSorttype("count");
-        sqc.setSortorder("desc");
-        as = statistics.queryStatistics(sqc);
-        assertNotNull(as);
-        System.out.println("page = " + as);
-        size = as.getStatlist().size();
-        assertTrue( (size <=desired));
-
-    }
-
-    private RequestContext initRequestContext()
-    {
-        MockHttpServletRequest request = new MockHttpServletRequest();
-        MockHttpServletResponse response = new MockHttpServletResponse();
-        MockHttpSession session = new MockHttpSession();
-
-        request.setUserPrincipal(new Principal(){ public String getName(){ return USERNAME; } });
-
-        request.setRemoteAddr("123.234.145.156");
-        request.setSession(session);
-        request.setServerName("www.sporteportal.com");
-        request.setScheme("http");
-        request.setContextPath("/jetspeed");
-        request.setServletPath("/portal");
-        request.setPathInfo("/news/default-page.psml");
-        request.setRequestURI("/jetspeed/portal/news/default-page.psml");
-        request.setMethod("GET");
-        RequestContext rc = new MockRequestContext(request, response);
-        return rc;
-    }
-
-    protected Properties getInitProperties()
-    {
-        Properties props = new Properties();
-        try 
-        {
-            InputStream is = this.getClass().getClassLoader().getResourceAsStream("jetspeed.properties");
-            if (is != null)
-                props.load(is);
-        } catch (FileNotFoundException e) 
-        {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        } 
-        catch (IOException e) 
-        {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
-        return props;
-    }
-    
-    protected String[] getConfigurations()
-    {
-        return new String[]
-        { "statistics.xml", "transaction.xml", "boot/datasource.xml"};
-    }
-
-    protected String[] getBootConfigurations()
-    {
-        return new String[]
-        { "boot/datasource.xml"};
-    }
-    
-}
+ * 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.jetspeed.statistics;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.Principal;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+import java.util.Properties;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.apache.jetspeed.components.util.DatasourceEnabledSpringTestCase;
+import org.apache.jetspeed.mockobjects.request.MockRequestContext;
+import org.apache.jetspeed.om.portlet.PortletDefinition;
+import org.apache.jetspeed.om.portlet.impl.PortletApplicationDefinitionImpl;
+import org.apache.jetspeed.request.RequestContext;
+import org.apache.jetspeed.statistics.impl.StatisticsQueryCriteriaImpl;
+
+import com.mockrunner.mock.web.MockHttpServletRequest;
+import com.mockrunner.mock.web.MockHttpServletResponse;
+import com.mockrunner.mock.web.MockHttpSession;
+
+/**
+ * TestStatistics
+ * 
+ * @author <a href="mailto:taylor@apache.org">David Sean Taylor </a>
+ * @author <a href="mailto:chris@bluesunrise.com">Chris Schaefer </a>
+ * @version $Id: $
+ */
+public class TestStatistics extends DatasourceEnabledSpringTestCase
+{
+	String USERNAME = "anotherFaker";
+
+    private PortalStatistics statistics = null;
+
+    /**
+     * Start the tests.
+     * 
+     * @param args
+     *            the arguments. Not used
+     */
+    public static void main(String args[])
+    {
+        junit.awtui.TestRunner.main(new String[]
+        { TestStatistics.class.getName()});
+
+    }
+
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+        
+        this.statistics = (PortalStatistics) scm.getComponent("PortalStatistics");
+        assertNotNull("statistics not found ", statistics);
+    }
+
+    public void clearDBs()
+    {
+        try
+        {
+            DatabaseMetaData dmd = statistics.getDataSource().getConnection().getMetaData();        
+            System.out.println("Oh... just for reference we're running against "+dmd.getDatabaseProductName());
+            System.out.println("with the driver = "+dmd.getDriverName());
+            System.out.println("   with the url = "+dmd.getURL());
+            
+            Connection con = statistics.getDataSource().getConnection();
+
+            PreparedStatement psmt = con
+                    .prepareStatement("DELETE FROM USER_STATISTICS");
+            psmt.execute();
+            psmt.close();
+            psmt = con.prepareStatement("DELETE FROM PAGE_STATISTICS");
+            psmt.execute();
+            psmt.close();
+            psmt = con.prepareStatement("DELETE FROM PORTLET_STATISTICS");
+            psmt.execute();
+            psmt.close();
+            if (con != null) con.close();
+        } catch (SQLException e)
+        {
+            fail("problem with database connection:" + e.toString());
+        }
+    }
+
+    public int count(String query)
+    {
+        int val = -1;
+        try
+        {
+            Connection con = statistics.getDataSource().getConnection();
+
+            PreparedStatement psmt = con.prepareStatement(query);
+            ResultSet rs = psmt.executeQuery();
+
+            if (rs.next())
+            {
+                val = rs.getInt(1);
+            }
+            psmt.close();
+            if (con != null) con.close();
+        } catch (SQLException e)
+        {
+            fail("problem with database connection:" + e.toString());
+        }
+        return val;
+    }
+
+    public int countPages()
+    {
+        return count("SELECT count(*) from PAGE_STATISTICS");
+    }
+
+    public int countPortlets()
+    {
+        return count("SELECT count(*) from PORTLET_STATISTICS");
+    }
+
+    public int countUsers()
+    {
+        return count("SELECT count(*) from USER_STATISTICS");
+    }
+
+    public static Test suite()
+    {
+        // All methods starting with "test" will be executed in the test suite.
+        return new TestSuite(TestStatistics.class);
+    }
+
+    public void testPortletStatistics() throws Exception
+    {
+        System.out.println("testing one of each ");
+        statistics.forceFlush();
+        clearDBs();
+
+        assertNotNull("statistics service is null", statistics);
+
+        RequestContext request = initRequestContext();
+        PortletApplicationDefinitionImpl app = new PortletApplicationDefinitionImpl();
+        app.setName("MyApp");
+        PortletDefinition portlet = app.addPortlet("TestPortlet");
+        long elapsedTime = 123;
+        statistics.logPortletAccess(request, portlet.getUniqueName(), "401",
+                elapsedTime);
+        statistics.logPageAccess(request, "401", elapsedTime);
+        statistics.logUserLogin(request, elapsedTime);
+
+        assertEquals("number of users incorrect", 1, statistics
+                .getNumberOfCurrentUsers());
+
+        List l = statistics.getListOfLoggedInUsers();
+        assertNotNull("list returned is null", l);
+        assertEquals("wrong number of users in list", 1, l.size());
+
+//        statistics.logUserLogout("123.234.145.156", "SuperFakeyUser",
+//                elapsedTime);
+        statistics.logUserLogout("123.234.145.156", USERNAME,
+                elapsedTime);
+
+        statistics.forceFlush();
+
+        assertEquals("number of users incorrect", statistics
+                .getNumberOfCurrentUsers(), 0);
+
+        int x = 1;
+        int pages = this.countPages();
+        int users = this.countUsers();
+        int portlets = this.countPortlets();
+        assertEquals("User Log count incorrect ", 2 * x, users);
+        assertEquals("Portlet Log count incorrect ", x, portlets);
+        assertEquals("Page Log count incorrect ", x, pages);
+
+    }
+
+    public void testLotsOfPortletStatistics() throws Exception
+    {
+        System.out.println("testing Multiple portlet stats");
+        statistics.forceFlush();
+        clearDBs();
+
+        int x = 37;
+        assertNotNull("statistics service is null", statistics);
+        for (int i = 0; i < x; i++)
+        {
+            RequestContext request = initRequestContext();
+            PortletApplicationDefinitionImpl app = new PortletApplicationDefinitionImpl();
+            app.setName("MyApp");
+            PortletDefinition portlet = app.addPortlet("TestPortlet");
+            long elapsedTime = 123 + i;
+            //System.out.println("logging something, number "+i);
+            statistics.logPortletAccess(request, portlet.getUniqueName(),
+                    "401", elapsedTime);
+            statistics.logPageAccess(request, "401", elapsedTime);
+            statistics.logUserLogin(request, elapsedTime);
+            assertEquals("number of users incorrect", 1, statistics
+                    .getNumberOfCurrentUsers());
+            List l = statistics.getListOfLoggedInUsers();
+            assertNotNull("list returned is null", l);
+            assertEquals("wrong number of users in list", 1, l.size());
+
+//            statistics.logUserLogout("123.234.145.156", "SuperFakeyUser",
+//                    elapsedTime);
+            statistics.logUserLogout("123.234.145.156", USERNAME,
+                    elapsedTime);
+            try
+            {
+                Thread.sleep(200);
+            } catch (InterruptedException ie)
+            {
+            }
+        }
+
+        statistics.forceFlush();
+
+        assertEquals("number of users incorrect", statistics
+                .getNumberOfCurrentUsers(), 0);
+
+        int pages = this.countPages();
+        int users = this.countUsers();
+        int portlets = this.countPortlets();
+        assertEquals("User Log count incorrect ", 2 * x, users);
+        assertEquals("Portlet Log count incorrect ", x, portlets);
+        assertEquals("Page Log count incorrect ", x, pages);
+
+    }
+
+    
+    public void testQuerySystem() throws Exception
+    {
+        System.out.println("testing Query System");
+        StatisticsQueryCriteria sqc = new StatisticsQueryCriteriaImpl();
+        sqc.setQueryType(PortalStatistics.QUERY_TYPE_USER);
+        int desired = 5;
+        sqc.setListsize(""+desired);
+        sqc.setSorttype("count");
+        sqc.setSortorder("desc");
+        AggregateStatistics as = statistics.queryStatistics(sqc);
+        assertNotNull(as);
+        System.out.println("user = " + as);
+        int size = as.getStatlist().size();
+        assertTrue( (size <=desired));
+
+        sqc.setQueryType(PortalStatistics.QUERY_TYPE_PORTLET);
+        sqc.setListsize(""+desired);
+        sqc.setSorttype("count");
+        sqc.setSortorder("desc");
+        as = statistics.queryStatistics(sqc);
+        assertNotNull(as);
+        System.out.println("portlet = " + as);
+        size = as.getStatlist().size();
+        assertTrue( (size <=desired));
+
+        sqc.setQueryType(PortalStatistics.QUERY_TYPE_PAGE);
+        sqc.setListsize(""+desired);
+        sqc.setSorttype("count");
+        sqc.setSortorder("desc");
+        as = statistics.queryStatistics(sqc);
+        assertNotNull(as);
+        System.out.println("page = " + as);
+        size = as.getStatlist().size();
+        assertTrue( (size <=desired));
+
+    }
+
+    private RequestContext initRequestContext()
+    {
+        MockHttpServletRequest request = new MockHttpServletRequest();
+        MockHttpServletResponse response = new MockHttpServletResponse();
+        MockHttpSession session = new MockHttpSession();
+
+        request.setUserPrincipal(new Principal(){ public String getName(){ return USERNAME; } });
+
+        request.setRemoteAddr("123.234.145.156");
+        request.setSession(session);
+        request.setServerName("www.sporteportal.com");
+        request.setScheme("http");
+        request.setContextPath("/jetspeed");
+        request.setServletPath("/portal");
+        request.setPathInfo("/news/default-page.psml");
+        request.setRequestURI("/jetspeed/portal/news/default-page.psml");
+        request.setMethod("GET");
+        RequestContext rc = new MockRequestContext(request, response);
+        return rc;
+    }
+
+    protected Properties getInitProperties()
+    {
+        Properties props = new Properties();
+        try 
+        {
+            InputStream is = this.getClass().getClassLoader().getResourceAsStream("jetspeed.properties");
+            if (is != null)
+                props.load(is);
+        } catch (FileNotFoundException e) 
+        {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } 
+        catch (IOException e) 
+        {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        return props;
+    }
+    
+    protected String[] getConfigurations()
+    {
+        return new String[]
+        { "statistics.xml", "transaction.xml", "boot/datasource.xml"};
+    }
+
+    protected String[] getBootConfigurations()
+    {
+        return new String[]
+        { "boot/datasource.xml"};
+    }
+    
+}

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-statistics/src/test/java/org/apache/jetspeed/statistics/TestStatistics.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-web-content/src/main/java/org/apache/jetspeed/portlet/SSOTicketPortlet.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-web-content/src/main/java/org/apache/jetspeed/portlet/sso/SSOProxyPortlet.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-web-content/src/main/java/org/apache/jetspeed/portlet/sso/SSOProxyPortlet.java?rev=725977&r1=725976&r2=725977&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-web-content/src/main/java/org/apache/jetspeed/portlet/sso/SSOProxyPortlet.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-web-content/src/main/java/org/apache/jetspeed/portlet/sso/SSOProxyPortlet.java Fri Dec 12 04:06:29 2008
@@ -4,269 +4,269 @@
  * 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.
-*/
-
-/*Created on: Dec 5, 2005 */
-
-package org.apache.jetspeed.portlet.sso;
-
-import java.io.IOException;
-import java.security.AccessControlContext;
-import java.security.AccessController;
-import javax.portlet.ActionRequest;
-import javax.portlet.ActionResponse;
-import javax.portlet.PortletConfig;
-import javax.portlet.PortletContext;
-import javax.portlet.PortletException;
-import javax.portlet.PortletURL;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
-import javax.security.auth.Subject;
-
-import org.apache.jetspeed.security.JSSubject;
-import org.apache.jetspeed.sso.SSOException;
-import org.apache.jetspeed.sso.SSOProvider;
-import org.apache.portals.bridges.common.ScriptPostProcess;
-import org.apache.portals.bridges.velocity.GenericVelocityPortlet;
-
-/**
- * SSOProxyPortlet
- * This portlet can be used as a bridge to any URL.
- * It acts as a http client and therefore it can store
- * cookies.
- * The main purpose is that the SSOProxy portlet authenticates
- * any SSO credential for the principal user not knowing in advance
- * what URL the user might select. No login prompt will appear for any url
- * in the portlet for that an SSO entry exists and the principal user has permissions.
- * 
- * @author Roger Ruttimann <rogerrut@apache.org>
- *
- */
-public class SSOProxyPortlet extends GenericVelocityPortlet {
-    private PortletContext context;
-    private SSOProvider sso;
-    
-    /* Re-use Proxy client inside the SSO Component */
-    private boolean isAuthenticated = false;
-    
-    /** Default encoding UTF-8*/
-    public String defaultEncoding = "UTF-8";
-    
-    /** Block Size */
-    static final int BLOCK_SIZE = 4096;
-    
-    /** ACTION_PARAMETER_SSOPROXY*/
-    static final String ACTION_PARAMETER_SSOPROXY = "SSOProxy";
-    
-    /** Preference values */
-    /** DestinationURL */
-    static final String DESTINATION_URL = "DestinationURL";
-    
-    /** SSOSite */
-    static final String SSO_SITE = "SSOSite";
-    
-    /** ForceSSORefresh*/
-    static final String FORCE_SSO_REFRESH = "ForceSSORefresh";
-    
-    /** Encoding*/
-    static final String ENCODING = "Encoding";
-    
-    private String destinationURL;
-    private String ssoSite;
-    private String encoding;
-
-    public void init(PortletConfig config) throws PortletException
-    {
-        super.init(config);
-        context = getPortletContext();
-        sso = (SSOProvider)context.getAttribute("cps:SSO");
-        if (null == sso)
-        {
-           throw new PortletException("Failed to find SSO Provider on portlet initialization");
-        }
-        
-    }
-    
-    public void processAction(ActionRequest request, ActionResponse actionResponse)
-    throws PortletException, IOException
-    {
-       	String ssoProxyAction = request.getParameter(ACTION_PARAMETER_SSOPROXY); 
-//       	System.out.println("SSOProxy Action value [" + ssoProxyAction + "]");
-       	
-     	if ( ssoProxyAction != null && ssoProxyAction.length() > 0)
-     		this.destinationURL = ssoProxyAction;
-     	else
-     		this.destinationURL = request.getParameter(DESTINATION_URL);
-     	
-     	
-        this.ssoSite = request.getParameter(SSO_SITE);
-        this.encoding = request.getParameter(ENCODING);
-        if (this.encoding == null)
-        	this.encoding =  this.defaultEncoding;
-
-        // save the prefs
-        super.processAction(request, actionResponse);
-    }
-    
-    public void doView(RenderRequest request, RenderResponse response)
-    throws PortletException, IOException
-    {
-        String forceRefresh = request.getPreferences().getValue(FORCE_SSO_REFRESH, "false");
-
-        if (destinationURL == null || destinationURL.length() == 0)
-        {
-            // No destination configured Switch to configure View
-             request.setAttribute(PARAM_VIEW_PAGE, this.getPortletConfig().getInitParameter(PARAM_EDIT_PAGE));
-            setupPreferencesEdit(request, response);
-            super.doView(request, response);
-            return;
-        }
-        
-//      Set the content type
-        response.setContentType("text/html");
-        
-        /*
-         * Call into the SSO Proxy and process the result page
-         */
-        boolean doRefresh = false;
-        if ( (forceRefresh.compareToIgnoreCase("TRUE") == 0) || this.isAuthenticated == false)
-        	doRefresh = true;
-       
-        try
-        {
-        	StringBuffer page= new StringBuffer();
-            Subject subject = getSubject(); 
-            if (ssoSite == null || ssoSite.length() ==0)
-            	page.append(sso.useSSO(subject, destinationURL,doRefresh));
-            else
-            	page.append(sso.useSSO(subject, destinationURL,ssoSite, doRefresh));
-            
-            // Authentication done at least once
-            this.isAuthenticated = true;
-            /*
-            bis.mark(BLOCK_SIZE);
-            String pageEncoding = getContentCharSet(bis);
-            if (pageEncoding == null)
-            {
-            	pageEncoding = encoding;
-            }
-            
-            Reader read = new InputStreamReader(bis, encoding);
-            
-            
-			char[] bytes = new char[BLOCK_SIZE];
-			
-			int len = read.read(bytes, 0, BLOCK_SIZE);			
-			while (len > 0)
-			{
-				page.append(bytes, 0, len);
-				len = read.read(bytes, 0, BLOCK_SIZE);
-			}
-			
-            //Done
-            read.close();
-            */
-            // Rewrite
-			// Post Process for generated page		
-			PortletURL actionURL = response.createActionURL();
-			ScriptPostProcess processor = new ScriptPostProcess();
-			processor.setInitalPage(page);
-			processor.postProcessPage(actionURL, ACTION_PARAMETER_SSOPROXY);
-			String finalPage = processor.getFinalizedPage();
-			
-			// Write the page
-			response.getWriter().println(finalPage);
-        
-        }
-        catch (SSOException e)
-        {
-        	response.getWriter().println("<P>Error rendering page. Error message<BR>" + e.getMessage() + "</P>");
-        	
-        	this.destinationURL ="";   
-        }          
-    }
-    
-
-    public void doEdit(RenderRequest request, RenderResponse response)
-    throws PortletException, IOException
-    {
-         super.doEdit(request, response);
-    }
-
-    /*
-     * Helper methods
-     */
-    private Subject getSubject()
-    {
-        AccessControlContext context = AccessController.getContext();
-        return JSSubject.getSubject(context);         
-    }
-    
-    /*
-    private String getContentCharSet(InputStream is) throws IOException
-    {
-        if (!is.markSupported())
-        {
-            return null;
-        }
-
-        byte[] buf = new byte[BLOCK_SIZE];
-        try
-        {
-            is.read(buf, 0, BLOCK_SIZE);
-            String content = new String(buf, "ISO-8859-1");
-            String lowerCaseContent = content.toLowerCase();
-            int startIndex = lowerCaseContent.indexOf("<head");
-            if (startIndex == -1)
-            {
-                startIndex = 0;
-            }
-            int endIndex = lowerCaseContent.indexOf("</head");
-            if (endIndex == -1)
-            {
-                endIndex = content.length();
-            }
-            content = content.substring(startIndex, endIndex);
-
-            StringTokenizer st = new StringTokenizer(content, "<>");
-            while (st.hasMoreTokens())
-            {
-                String element = st.nextToken();
-                String lowerCaseElement = element.toLowerCase();
-                if (lowerCaseElement.startsWith("meta") && lowerCaseElement.indexOf("content-type") > 0)
-                {
-                    StringTokenizer est = new StringTokenizer(element, " =\"\';");
-                    while (est.hasMoreTokens())
-                    {
-                        if (est.nextToken().equalsIgnoreCase("charset"))
-                        {
-                            if (est.hasMoreTokens())
-                            {
-                                is.reset();
-                                return est.nextToken();
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        catch (IOException e)
-        {
-        }
-
-        is.reset();
-
-        return null;
+ * 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.
+*/
+
+/*Created on: Dec 5, 2005 */
+
+package org.apache.jetspeed.portlet.sso;
+
+import java.io.IOException;
+import java.security.AccessControlContext;
+import java.security.AccessController;
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletContext;
+import javax.portlet.PortletException;
+import javax.portlet.PortletURL;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+import javax.security.auth.Subject;
+
+import org.apache.jetspeed.security.JSSubject;
+import org.apache.jetspeed.sso.SSOException;
+import org.apache.jetspeed.sso.SSOProvider;
+import org.apache.portals.bridges.common.ScriptPostProcess;
+import org.apache.portals.bridges.velocity.GenericVelocityPortlet;
+
+/**
+ * SSOProxyPortlet
+ * This portlet can be used as a bridge to any URL.
+ * It acts as a http client and therefore it can store
+ * cookies.
+ * The main purpose is that the SSOProxy portlet authenticates
+ * any SSO credential for the principal user not knowing in advance
+ * what URL the user might select. No login prompt will appear for any url
+ * in the portlet for that an SSO entry exists and the principal user has permissions.
+ * 
+ * @author Roger Ruttimann <rogerrut@apache.org>
+ *
+ */
+public class SSOProxyPortlet extends GenericVelocityPortlet {
+    private PortletContext context;
+    private SSOProvider sso;
+    
+    /* Re-use Proxy client inside the SSO Component */
+    private boolean isAuthenticated = false;
+    
+    /** Default encoding UTF-8*/
+    public String defaultEncoding = "UTF-8";
+    
+    /** Block Size */
+    static final int BLOCK_SIZE = 4096;
+    
+    /** ACTION_PARAMETER_SSOPROXY*/
+    static final String ACTION_PARAMETER_SSOPROXY = "SSOProxy";
+    
+    /** Preference values */
+    /** DestinationURL */
+    static final String DESTINATION_URL = "DestinationURL";
+    
+    /** SSOSite */
+    static final String SSO_SITE = "SSOSite";
+    
+    /** ForceSSORefresh*/
+    static final String FORCE_SSO_REFRESH = "ForceSSORefresh";
+    
+    /** Encoding*/
+    static final String ENCODING = "Encoding";
+    
+    private String destinationURL;
+    private String ssoSite;
+    private String encoding;
+
+    public void init(PortletConfig config) throws PortletException
+    {
+        super.init(config);
+        context = getPortletContext();
+        sso = (SSOProvider)context.getAttribute("cps:SSO");
+        if (null == sso)
+        {
+           throw new PortletException("Failed to find SSO Provider on portlet initialization");
+        }
+        
+    }
+    
+    public void processAction(ActionRequest request, ActionResponse actionResponse)
+    throws PortletException, IOException
+    {
+       	String ssoProxyAction = request.getParameter(ACTION_PARAMETER_SSOPROXY); 
+//       	System.out.println("SSOProxy Action value [" + ssoProxyAction + "]");
+       	
+     	if ( ssoProxyAction != null && ssoProxyAction.length() > 0)
+     		this.destinationURL = ssoProxyAction;
+     	else
+     		this.destinationURL = request.getParameter(DESTINATION_URL);
+     	
+     	
+        this.ssoSite = request.getParameter(SSO_SITE);
+        this.encoding = request.getParameter(ENCODING);
+        if (this.encoding == null)
+        	this.encoding =  this.defaultEncoding;
+
+        // save the prefs
+        super.processAction(request, actionResponse);
+    }
+    
+    public void doView(RenderRequest request, RenderResponse response)
+    throws PortletException, IOException
+    {
+        String forceRefresh = request.getPreferences().getValue(FORCE_SSO_REFRESH, "false");
+
+        if (destinationURL == null || destinationURL.length() == 0)
+        {
+            // No destination configured Switch to configure View
+             request.setAttribute(PARAM_VIEW_PAGE, this.getPortletConfig().getInitParameter(PARAM_EDIT_PAGE));
+            setupPreferencesEdit(request, response);
+            super.doView(request, response);
+            return;
+        }
+        
+//      Set the content type
+        response.setContentType("text/html");
+        
+        /*
+         * Call into the SSO Proxy and process the result page
+         */
+        boolean doRefresh = false;
+        if ( (forceRefresh.compareToIgnoreCase("TRUE") == 0) || this.isAuthenticated == false)
+        	doRefresh = true;
+       
+        try
+        {
+        	StringBuffer page= new StringBuffer();
+            Subject subject = getSubject(); 
+            if (ssoSite == null || ssoSite.length() ==0)
+            	page.append(sso.useSSO(subject, destinationURL,doRefresh));
+            else
+            	page.append(sso.useSSO(subject, destinationURL,ssoSite, doRefresh));
+            
+            // Authentication done at least once
+            this.isAuthenticated = true;
+            /*
+            bis.mark(BLOCK_SIZE);
+            String pageEncoding = getContentCharSet(bis);
+            if (pageEncoding == null)
+            {
+            	pageEncoding = encoding;
+            }
+            
+            Reader read = new InputStreamReader(bis, encoding);
+            
+            
+			char[] bytes = new char[BLOCK_SIZE];
+			
+			int len = read.read(bytes, 0, BLOCK_SIZE);			
+			while (len > 0)
+			{
+				page.append(bytes, 0, len);
+				len = read.read(bytes, 0, BLOCK_SIZE);
+			}
+			
+            //Done
+            read.close();
+            */
+            // Rewrite
+			// Post Process for generated page		
+			PortletURL actionURL = response.createActionURL();
+			ScriptPostProcess processor = new ScriptPostProcess();
+			processor.setInitalPage(page);
+			processor.postProcessPage(actionURL, ACTION_PARAMETER_SSOPROXY);
+			String finalPage = processor.getFinalizedPage();
+			
+			// Write the page
+			response.getWriter().println(finalPage);
+        
+        }
+        catch (SSOException e)
+        {
+        	response.getWriter().println("<P>Error rendering page. Error message<BR>" + e.getMessage() + "</P>");
+        	
+        	this.destinationURL ="";   
+        }          
+    }
+    
+
+    public void doEdit(RenderRequest request, RenderResponse response)
+    throws PortletException, IOException
+    {
+         super.doEdit(request, response);
+    }
+
+    /*
+     * Helper methods
+     */
+    private Subject getSubject()
+    {
+        AccessControlContext context = AccessController.getContext();
+        return JSSubject.getSubject(context);         
+    }
+    
+    /*
+    private String getContentCharSet(InputStream is) throws IOException
+    {
+        if (!is.markSupported())
+        {
+            return null;
+        }
+
+        byte[] buf = new byte[BLOCK_SIZE];
+        try
+        {
+            is.read(buf, 0, BLOCK_SIZE);
+            String content = new String(buf, "ISO-8859-1");
+            String lowerCaseContent = content.toLowerCase();
+            int startIndex = lowerCaseContent.indexOf("<head");
+            if (startIndex == -1)
+            {
+                startIndex = 0;
+            }
+            int endIndex = lowerCaseContent.indexOf("</head");
+            if (endIndex == -1)
+            {
+                endIndex = content.length();
+            }
+            content = content.substring(startIndex, endIndex);
+
+            StringTokenizer st = new StringTokenizer(content, "<>");
+            while (st.hasMoreTokens())
+            {
+                String element = st.nextToken();
+                String lowerCaseElement = element.toLowerCase();
+                if (lowerCaseElement.startsWith("meta") && lowerCaseElement.indexOf("content-type") > 0)
+                {
+                    StringTokenizer est = new StringTokenizer(element, " =\"\';");
+                    while (est.hasMoreTokens())
+                    {
+                        if (est.nextToken().equalsIgnoreCase("charset"))
+                        {
+                            if (est.hasMoreTokens())
+                            {
+                                is.reset();
+                                return est.nextToken();
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        catch (IOException e)
+        {
+        }
+
+        is.reset();
+
+        return null;
     }
-    */
-   
-}
+    */
+   
+}

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-web-content/src/main/java/org/apache/jetspeed/portlet/sso/SSOProxyPortlet.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-web-content/src/main/java/org/apache/jetspeed/portlet/webcontent/WebContentHistoryList.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-web-content/src/main/java/org/apache/jetspeed/portlet/webcontent/WebContentHistoryList.java?rev=725977&r1=725976&r2=725977&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-web-content/src/main/java/org/apache/jetspeed/portlet/webcontent/WebContentHistoryList.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-web-content/src/main/java/org/apache/jetspeed/portlet/webcontent/WebContentHistoryList.java Fri Dec 12 04:06:29 2008
@@ -1,124 +1,124 @@
-/*
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jetspeed.portlet.webcontent;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-/**
- * A history of content navigations in the WebContentPortlet
- *
- * @author <a href="mailto:dyoung@phase2systems.com">David L Young</a>
- * @version $Id: $ 
- */
-
-public class WebContentHistoryList extends Object
-    implements Serializable
-{
-    int maxLength;
-    List history;
-    int currentIndex;
-    
-    // Constructors
-
-    public WebContentHistoryList()
-    {
-        this( -1 );
-    }
-    public WebContentHistoryList( int maxLength )
-    {
-        super();
-        
-        this.maxLength = maxLength;
-        this.history = new ArrayList();
-        this.currentIndex = -1;
-    }
-    
-    // Methods
-    
-    public boolean isEmpty()
-    {
-        return this.history.isEmpty();
-    }
-    public boolean hasCurrentPage()
-    {
-        return this.currentIndex >= 0;
-    }
-    public boolean hasPreviousPage()
-    {
-        return !isEmpty() && this.currentIndex-1 >= 0;
-    }
-    public boolean hasNextPage()
-    {
-        return !isEmpty() && this.currentIndex+1 < this.history.size();
-    }
-    
-    public WebContentHistoryPage getCurrentPage()
-    {
-        if (!hasCurrentPage())
-            return null ;
-        return (WebContentHistoryPage)this.history.get(this.currentIndex);
-    }
-    public WebContentHistoryPage getPreviousPage()
-    {
-        if (!hasPreviousPage())
-            return null;
-        this.currentIndex = this.currentIndex-1;
-        return getCurrentPage();
-    }
-    public WebContentHistoryPage getNextPage()
-    {
-        if (!hasNextPage())
-            return null;
-        this.currentIndex = this.currentIndex+1;
-        return getCurrentPage();
-    }
-    
-    public void visitPage(WebContentHistoryPage page)
-    {
-        if (page==null)
-            throw new IllegalArgumentException("WebContentHistoryList.addPage() - non-null page required.");
-        
-        int i = this.history.indexOf(page);
-        if (i >= 0 && i == this.currentIndex) 
-        {
-            // just visiting the current page
-            return;
-        }
-        
-        // otherwise - new page...
-        while (hasNextPage())
-        {
-            // ...visiting a page discards any pages we have visited by going "back"
-            this.history.remove(this.currentIndex+1);
-        }
-        if (i >= 0 && i < history.size())
-        {
-            // ...actually, new visit to an old page, only keep one reference to it
-            this.history.remove(i);
-        }
-        
-        // add in the new page, at the end
-        this.history.add(page);
-        this.currentIndex = this.history.size()-1;
-        
-        // System.out.println("WebContentHistoryList.visitPage() - current index is: "+this.currentIndex+"\nhistory list..."+ArrayUtils.toString(this.history));
-    }
-}
+ * 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.jetspeed.portlet.webcontent;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * A history of content navigations in the WebContentPortlet
+ *
+ * @author <a href="mailto:dyoung@phase2systems.com">David L Young</a>
+ * @version $Id: $ 
+ */
+
+public class WebContentHistoryList extends Object
+    implements Serializable
+{
+    int maxLength;
+    List history;
+    int currentIndex;
+    
+    // Constructors
+
+    public WebContentHistoryList()
+    {
+        this( -1 );
+    }
+    public WebContentHistoryList( int maxLength )
+    {
+        super();
+        
+        this.maxLength = maxLength;
+        this.history = new ArrayList();
+        this.currentIndex = -1;
+    }
+    
+    // Methods
+    
+    public boolean isEmpty()
+    {
+        return this.history.isEmpty();
+    }
+    public boolean hasCurrentPage()
+    {
+        return this.currentIndex >= 0;
+    }
+    public boolean hasPreviousPage()
+    {
+        return !isEmpty() && this.currentIndex-1 >= 0;
+    }
+    public boolean hasNextPage()
+    {
+        return !isEmpty() && this.currentIndex+1 < this.history.size();
+    }
+    
+    public WebContentHistoryPage getCurrentPage()
+    {
+        if (!hasCurrentPage())
+            return null ;
+        return (WebContentHistoryPage)this.history.get(this.currentIndex);
+    }
+    public WebContentHistoryPage getPreviousPage()
+    {
+        if (!hasPreviousPage())
+            return null;
+        this.currentIndex = this.currentIndex-1;
+        return getCurrentPage();
+    }
+    public WebContentHistoryPage getNextPage()
+    {
+        if (!hasNextPage())
+            return null;
+        this.currentIndex = this.currentIndex+1;
+        return getCurrentPage();
+    }
+    
+    public void visitPage(WebContentHistoryPage page)
+    {
+        if (page==null)
+            throw new IllegalArgumentException("WebContentHistoryList.addPage() - non-null page required.");
+        
+        int i = this.history.indexOf(page);
+        if (i >= 0 && i == this.currentIndex) 
+        {
+            // just visiting the current page
+            return;
+        }
+        
+        // otherwise - new page...
+        while (hasNextPage())
+        {
+            // ...visiting a page discards any pages we have visited by going "back"
+            this.history.remove(this.currentIndex+1);
+        }
+        if (i >= 0 && i < history.size())
+        {
+            // ...actually, new visit to an old page, only keep one reference to it
+            this.history.remove(i);
+        }
+        
+        // add in the new page, at the end
+        this.history.add(page);
+        this.currentIndex = this.history.size()-1;
+        
+        // System.out.println("WebContentHistoryList.visitPage() - current index is: "+this.currentIndex+"\nhistory list..."+ArrayUtils.toString(this.history));
+    }
+}

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-web-content/src/main/java/org/apache/jetspeed/portlet/webcontent/WebContentHistoryList.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-web-content/src/main/java/org/apache/jetspeed/portlet/webcontent/WebContentHistoryPage.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-web-content/src/main/java/org/apache/jetspeed/portlet/webcontent/WebContentHistoryPage.java?rev=725977&r1=725976&r2=725977&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-web-content/src/main/java/org/apache/jetspeed/portlet/webcontent/WebContentHistoryPage.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-web-content/src/main/java/org/apache/jetspeed/portlet/webcontent/WebContentHistoryPage.java Fri Dec 12 04:06:29 2008
@@ -1,100 +1,100 @@
-/*
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jetspeed.portlet.webcontent;
-
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.commons.lang.ArrayUtils;
-
-
-/**
- * Information required to re-visit a page in the WebContentPortlet
- *
- * @author <a href="mailto:dyoung@phase2systems.com">David L Young</a>
- * @version $Id: $ 
- */
-
-public class WebContentHistoryPage extends Object
-    implements Serializable
-{
-    private String url;
-    private Map params;
-    private boolean is_post;
-
-    // Constructors
-    
-    public WebContentHistoryPage(String url)
-    {
-        this(url, null, null);
-    }
-    public WebContentHistoryPage(String url, Map params, String method)
-    {
-        super();
-
-        // guarantee non-null, so that equals() is well-behaved
-        if (url==null)
-            throw new IllegalArgumentException("WebContentHistoryPage() - url required");
-        
-        this.url = url;
-        this.params = params != null ? params : new HashMap();
-        this.is_post = method != null && method.equalsIgnoreCase("post");
-    }
-    
-    // Base Class Protocol
-    
-    public boolean equals(Object o)
-    {
-        if (o == null || !(o instanceof WebContentHistoryPage))
-            return false ;
-
-        WebContentHistoryPage page = (WebContentHistoryPage)o;
-        
-        return page.url.equals(this.url) && page.params.equals(this.params) && page.isPost() == this.isPost() ;
-    }
-    public String toString()
-    {
-        StringBuffer buff = new StringBuffer();
-        buff.append( "[" ).append(isPost() ? "POST: " : "GET: ").append( getUrl() ).append( ", " ).append( getParams().size() ).append(" params: {");
-        Iterator iter = getParams().entrySet().iterator();
-        while ( iter.hasNext() )
-        {
-            Map.Entry entry = (Map.Entry)iter.next();
-            buff.append("(").append(entry.getKey()).append(" . ").append(ArrayUtils.toString(entry.getKey())).append(")");
-        }
-        buff.append("}]");
-        return buff.toString();
-    }
-    
-    // Data Access
-    
-    public String getUrl()
-    {
-        return this.url;
-    }
-    public Map getParams()
-    {
-        return this.params;
-    }
-    public boolean isPost()
-    {
-        return this.is_post;
-    }
-}
+ * 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.jetspeed.portlet.webcontent;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.commons.lang.ArrayUtils;
+
+
+/**
+ * Information required to re-visit a page in the WebContentPortlet
+ *
+ * @author <a href="mailto:dyoung@phase2systems.com">David L Young</a>
+ * @version $Id: $ 
+ */
+
+public class WebContentHistoryPage extends Object
+    implements Serializable
+{
+    private String url;
+    private Map params;
+    private boolean is_post;
+
+    // Constructors
+    
+    public WebContentHistoryPage(String url)
+    {
+        this(url, null, null);
+    }
+    public WebContentHistoryPage(String url, Map params, String method)
+    {
+        super();
+
+        // guarantee non-null, so that equals() is well-behaved
+        if (url==null)
+            throw new IllegalArgumentException("WebContentHistoryPage() - url required");
+        
+        this.url = url;
+        this.params = params != null ? params : new HashMap();
+        this.is_post = method != null && method.equalsIgnoreCase("post");
+    }
+    
+    // Base Class Protocol
+    
+    public boolean equals(Object o)
+    {
+        if (o == null || !(o instanceof WebContentHistoryPage))
+            return false ;
+
+        WebContentHistoryPage page = (WebContentHistoryPage)o;
+        
+        return page.url.equals(this.url) && page.params.equals(this.params) && page.isPost() == this.isPost() ;
+    }
+    public String toString()
+    {
+        StringBuffer buff = new StringBuffer();
+        buff.append( "[" ).append(isPost() ? "POST: " : "GET: ").append( getUrl() ).append( ", " ).append( getParams().size() ).append(" params: {");
+        Iterator iter = getParams().entrySet().iterator();
+        while ( iter.hasNext() )
+        {
+            Map.Entry entry = (Map.Entry)iter.next();
+            buff.append("(").append(entry.getKey()).append(" . ").append(ArrayUtils.toString(entry.getKey())).append(")");
+        }
+        buff.append("}]");
+        return buff.toString();
+    }
+    
+    // Data Access
+    
+    public String getUrl()
+    {
+        return this.url;
+    }
+    public Map getParams()
+    {
+        return this.params;
+    }
+    public boolean isPost()
+    {
+        return this.is_post;
+    }
+}

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-web-content/src/main/java/org/apache/jetspeed/portlet/webcontent/WebContentHistoryPage.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-webapp-logging/src/main/java/commons-logging.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-webapp-logging/src/main/java/org/apache/jetspeed/webapp/logging/Log4JConfigurator.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-webapp-logging/src/main/java/org/apache/jetspeed/webapp/logging/Log4JConfigurator.java?rev=725977&r1=725976&r2=725977&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-webapp-logging/src/main/java/org/apache/jetspeed/webapp/logging/Log4JConfigurator.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-webapp-logging/src/main/java/org/apache/jetspeed/webapp/logging/Log4JConfigurator.java Fri Dec 12 04:06:29 2008
@@ -1,107 +1,107 @@
-/*
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jetspeed.webapp.logging;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Properties;
-
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.log4j.Hierarchy;
-import org.apache.log4j.Level;
-import org.apache.log4j.PropertyConfigurator;
-import org.apache.log4j.spi.RootCategory;
-
-public class Log4JConfigurator implements ServletContextListener
-{
-    /** The optional web.xml context parameter name for the Log4J Config File (location). 
-     *  The specified location is interpreted as begin (webapp) context relative.
-     */
-    public static final String LOG4J_CONFIG_FILE = "log4j.config.file";
-
-    /** The default value for the Log4J Config File (location) */
-    public static final String LOG4J_CONFIG_FILE_DEFAULT = "/WEB-INF/log4j.properties";
-
-    /** The optional web.xml context parameter name for the Log4J Config webApplicationRoot (property) */
-    public static final String LOG4J_CONFIG_WEB_APPLICATION_ROOT_KEY = "log4j.config.webApplicationRoot.key";
-
-    /** The default value for the Log4J Config webApplicationRoot (property) */
-    public static final String LOG4J_CONFIG_WEB_APPLICATION_ROOT_KEY_DEFAULT = "webApplicationRoot";
-    
-    private Hierarchy isolatedHierarchy;
-    
-    private static Log log;
-
-    public void contextInitialized(ServletContextEvent event)
-    {
-        String log4JConfigFile = event.getServletContext().getInitParameter(LOG4J_CONFIG_FILE);
-        if ( log4JConfigFile == null || log4JConfigFile.length() == 0 )
-        {
-            log4JConfigFile = LOG4J_CONFIG_FILE_DEFAULT;
-        }
-        String rootPath = event.getServletContext().getRealPath("");
-        InputStream input = event.getServletContext().getResourceAsStream(log4JConfigFile);
-        if ( input != null )
-        {
-            try
-            {
-                Properties p = new Properties();
-                p.load(input);
-                String waRootKey = event.getServletContext().getInitParameter(LOG4J_CONFIG_WEB_APPLICATION_ROOT_KEY);
-                if ( waRootKey == null || waRootKey.length() == 0 )
-                {
-                    waRootKey = LOG4J_CONFIG_WEB_APPLICATION_ROOT_KEY_DEFAULT;
-                }
-                p.setProperty(waRootKey,rootPath);
-                isolatedHierarchy = new Hierarchy(new RootCategory(Level.INFO));
-                new PropertyConfigurator().doConfigure(p,isolatedHierarchy);
-                IsolatedLog4JLogger.setHierarchy(isolatedHierarchy);
-                log = LogFactory.getLog(this.getClass());
-                log.info("IsolatedLog4JLogger configured");
-            }
-            catch (IOException ioe)
-            {
-                event.getServletContext().log("Failed to configure Log4J from "+event.getServletContext().getServletContextName(),ioe);
-            }
-        }
-        else
-        {
-            event.getServletContext().log(event.getServletContext().getServletContextName()+" Log4JConfigurator: "+rootPath+log4JConfigFile+" not found.");
-        }
-    }
-
-    public void contextDestroyed(ServletContextEvent event)
-    {
-        if ( log != null )
-        {
-            log.info("Shutting down IsolatedLog4JLogger");
-            log = null;
-        }
-        // flush Logger cache which might be kept in a shared context if
-        // commons-logging isn't loaded through this ContextClassLoader
-        LogFactory.release(Thread.currentThread().getContextClassLoader());
-        // shutdown Log4J hierarchy (log4J keeps log files locked on Windows otherwise)
-        if (isolatedHierarchy != null)
-        {
-        	isolatedHierarchy.shutdown();
-        }
-    }
-}
+ * 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.jetspeed.webapp.logging;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.log4j.Hierarchy;
+import org.apache.log4j.Level;
+import org.apache.log4j.PropertyConfigurator;
+import org.apache.log4j.spi.RootCategory;
+
+public class Log4JConfigurator implements ServletContextListener
+{
+    /** The optional web.xml context parameter name for the Log4J Config File (location). 
+     *  The specified location is interpreted as begin (webapp) context relative.
+     */
+    public static final String LOG4J_CONFIG_FILE = "log4j.config.file";
+
+    /** The default value for the Log4J Config File (location) */
+    public static final String LOG4J_CONFIG_FILE_DEFAULT = "/WEB-INF/log4j.properties";
+
+    /** The optional web.xml context parameter name for the Log4J Config webApplicationRoot (property) */
+    public static final String LOG4J_CONFIG_WEB_APPLICATION_ROOT_KEY = "log4j.config.webApplicationRoot.key";
+
+    /** The default value for the Log4J Config webApplicationRoot (property) */
+    public static final String LOG4J_CONFIG_WEB_APPLICATION_ROOT_KEY_DEFAULT = "webApplicationRoot";
+    
+    private Hierarchy isolatedHierarchy;
+    
+    private static Log log;
+
+    public void contextInitialized(ServletContextEvent event)
+    {
+        String log4JConfigFile = event.getServletContext().getInitParameter(LOG4J_CONFIG_FILE);
+        if ( log4JConfigFile == null || log4JConfigFile.length() == 0 )
+        {
+            log4JConfigFile = LOG4J_CONFIG_FILE_DEFAULT;
+        }
+        String rootPath = event.getServletContext().getRealPath("");
+        InputStream input = event.getServletContext().getResourceAsStream(log4JConfigFile);
+        if ( input != null )
+        {
+            try
+            {
+                Properties p = new Properties();
+                p.load(input);
+                String waRootKey = event.getServletContext().getInitParameter(LOG4J_CONFIG_WEB_APPLICATION_ROOT_KEY);
+                if ( waRootKey == null || waRootKey.length() == 0 )
+                {
+                    waRootKey = LOG4J_CONFIG_WEB_APPLICATION_ROOT_KEY_DEFAULT;
+                }
+                p.setProperty(waRootKey,rootPath);
+                isolatedHierarchy = new Hierarchy(new RootCategory(Level.INFO));
+                new PropertyConfigurator().doConfigure(p,isolatedHierarchy);
+                IsolatedLog4JLogger.setHierarchy(isolatedHierarchy);
+                log = LogFactory.getLog(this.getClass());
+                log.info("IsolatedLog4JLogger configured");
+            }
+            catch (IOException ioe)
+            {
+                event.getServletContext().log("Failed to configure Log4J from "+event.getServletContext().getServletContextName(),ioe);
+            }
+        }
+        else
+        {
+            event.getServletContext().log(event.getServletContext().getServletContextName()+" Log4JConfigurator: "+rootPath+log4JConfigFile+" not found.");
+        }
+    }
+
+    public void contextDestroyed(ServletContextEvent event)
+    {
+        if ( log != null )
+        {
+            log.info("Shutting down IsolatedLog4JLogger");
+            log = null;
+        }
+        // flush Logger cache which might be kept in a shared context if
+        // commons-logging isn't loaded through this ContextClassLoader
+        LogFactory.release(Thread.currentThread().getContextClassLoader());
+        // shutdown Log4J hierarchy (log4J keeps log files locked on Windows otherwise)
+        if (isolatedHierarchy != null)
+        {
+        	isolatedHierarchy.shutdown();
+        }
+    }
+}

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-webapp-logging/src/main/java/org/apache/jetspeed/webapp/logging/Log4JConfigurator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-webapp-logging/src/main/java/org/apache/jetspeed/webapp/logging/velocity/CommonsLoggingLog4JLogSystem.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: portals/jetspeed-2/portal/trunk/docs/release/JETSPEED-2.0-ANNOUNCEMENT.txt
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/docs/release/JETSPEED-2.0-ANNOUNCEMENT.txt?rev=725977&r1=725976&r2=725977&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/docs/release/JETSPEED-2.0-ANNOUNCEMENT.txt (original)
+++ portals/jetspeed-2/portal/trunk/docs/release/JETSPEED-2.0-ANNOUNCEMENT.txt Fri Dec 12 04:06:29 2008
@@ -1,119 +1,119 @@
-Email destinations:
-
-* jetspeed-dev@portals.apache.org
-* jetspeed-user@portals.apache.org
-* general@portals.apache.org
-* announce@apache.org
-
-Subject: Jetspeed 2.0 Final Released
-
-Message:
-
-The Apache Portals Jetspeed Team is pleased to announce the final release of the Jetspeed 2.0 Open Source Enterprise Portal. This final release is fully-compliant with the Portlet Specification 1.0 (JSR-168).
-Jetspeed-2 has passed the TCK (Test Compatibility Kit) suite and is fully CERTIFIED to the Java Portlet Standard.
-
-The Jetspeed team will be presenting the new 2.0 release at ApacheCon US 2005 on December 10th in San Diego.
-
-Jetspeed is a full implementation of the Java Portlet API. 
-Notable features include security components backed by LDAP and database implementations and some robust administration interfaces. Custom portals can be built and  deployed using the Jetspeed plugin for Maven. Developers can use the Jetspeed PSML language to assemble portlets and the Apache Portals Bridges project to 'bridge' portals with existing technologies including Struts, JSF, PHP, Perl. For GUI designers, Jetspeed comes with several built-in  templates used to decorate portals and portlets. Join the growing community of Jetspeed users and developers at ApacheCon. David Sean Taylor will be  presenting a
-Jetspeed tutorial that shouldn't be missed by anyone interested in the
-technology. 
-
------------------------------ 
- Jetspeed 2.0 Release Notes
-   December 8, 2005
------------------------------
-
-Features of the Final Release Include:
-
-Standardized:
-* Fully compliant with Java Portlet API Standard 1.0 (JSR 168)
-* Passed JSR-168 TCK Compatibility Test Suite
-* J2EE Security based on JAAS Standard, JAAS DB Portal Security Policy
-* LDAP Support for User Authentication
-
-Foundation Component Architecture:
-* Spring-based Components and Scalable Architecture
-* Configurable Pipeline Request Processor
-* Auto Deployment of Portlet Applications
-* Jetspeed Component Java API
-* Jetspeed AJAX XML API
-* PSML: Extended Portlet Site Markup Language
-    - Database Persistent
-    - Content Management Facilities
-    - Security Constraints
-
-Portal Core Features:
-* Declarative Security Constraints and JAAS Database Security Policy
-* Runtime Portlet API Standard Role-based Security
-* Portal Content Management and Navigations: Pages, Menus, Folders, Links
-* Multithreaded Aggregation Engine
-* PSML Folder CMS Navigations, Menus, Links
-* Jetspeed SSO (Single Sign-on)
-* Rules-based Profiler for page and resource location
-* Integrates with most popular databases including
-   - Derby, MySQL, MS SQL, Oracle, Postgres, DB2
-* Client independent capability engine (HTML, XHTML, WML, VML)
-* Internationalization: Localized Portal Resources in 12 Languages
-* Statistics Logging Engine
-* Portlet Registry
-* Full Text Search of Portlet Resources with Lucene
-* User Registration
-* Forgotten Password
-* Rich Login and Password Configuration Management
-
-Administrative Portlets:
-* User, Role, Group, Password, and Profile Management
-* JSR 168 Generic User Attributes Editor
-    - JSR 168 Preferences Editor 
-    -  Site Manager
-    -  SSO Manager
-    -  Portlet Application and Lifecycle Management
-    -  Profiler Administration
-    -  Statistics Reports
-
-Web Framework Support and Sample Portlets:
-* Bridges to other Web Frameworks
-   - JSF, Struts, PHP, Perl, Velocity
-* Sample Portlets
-   - RSS, IFrame, Calendar XSLT, Bookmark, Database Browser
-   - Integration with Display Tags, Spring MVC
-
-Customization Features:
-* Administrative Site Manager
-* Page Customizer
-
-Portal Design Features:
-* Deployment Jetspeed Portlet and Page Skins (Decorators) CSS Components
-* Configurable CSS Page Layouts
-* Easy to Use Velocity Macro Language for Skin and Layout Components
-
-Development Tools
-* Automated Maven Build
-* Jetspeed-2 Maven Plugin for Custom Portal Development
-* AutoDeployment of Portlet Applications, Portal Resources
-* Deployment Tools
-* Plugin Goals integrated with Auto Deployment Feature
-
-Application Servers Supported:
-* Tomcat 5.0.x
-* Tomcat 5.5.x
-* Websphere 5.1, 6.0
-* JBoss 
-
-----------------------------------------------------------------------
-
-The release is available for download from the Apache Download Mirrors:
-
-     http://portals.apache.org/jetspeed-2/download.html
-
-We hope you enjoy using Jetspeed! If you have any questions, please consult:
-
-    * The web site: http://portals.apache.org/jetspeed-2/
-
-    * The jetspeed-user mailing list: http://portals.apache.org/jetspeed-2/mail-lists.html
-
-  For news and information, see:
-
-    * http://portals.apache.org/news.html
-
+Email destinations:
+
+* jetspeed-dev@portals.apache.org
+* jetspeed-user@portals.apache.org
+* general@portals.apache.org
+* announce@apache.org
+
+Subject: Jetspeed 2.0 Final Released
+
+Message:
+
+The Apache Portals Jetspeed Team is pleased to announce the final release of the Jetspeed 2.0 Open Source Enterprise Portal. This final release is fully-compliant with the Portlet Specification 1.0 (JSR-168).
+Jetspeed-2 has passed the TCK (Test Compatibility Kit) suite and is fully CERTIFIED to the Java Portlet Standard.
+
+The Jetspeed team will be presenting the new 2.0 release at ApacheCon US 2005 on December 10th in San Diego.
+
+Jetspeed is a full implementation of the Java Portlet API. 
+Notable features include security components backed by LDAP and database implementations and some robust administration interfaces. Custom portals can be built and  deployed using the Jetspeed plugin for Maven. Developers can use the Jetspeed PSML language to assemble portlets and the Apache Portals Bridges project to 'bridge' portals with existing technologies including Struts, JSF, PHP, Perl. For GUI designers, Jetspeed comes with several built-in  templates used to decorate portals and portlets. Join the growing community of Jetspeed users and developers at ApacheCon. David Sean Taylor will be  presenting a
+Jetspeed tutorial that shouldn't be missed by anyone interested in the
+technology. 
+
+----------------------------- 
+ Jetspeed 2.0 Release Notes
+   December 8, 2005
+-----------------------------
+
+Features of the Final Release Include:
+
+Standardized:
+* Fully compliant with Java Portlet API Standard 1.0 (JSR 168)
+* Passed JSR-168 TCK Compatibility Test Suite
+* J2EE Security based on JAAS Standard, JAAS DB Portal Security Policy
+* LDAP Support for User Authentication
+
+Foundation Component Architecture:
+* Spring-based Components and Scalable Architecture
+* Configurable Pipeline Request Processor
+* Auto Deployment of Portlet Applications
+* Jetspeed Component Java API
+* Jetspeed AJAX XML API
+* PSML: Extended Portlet Site Markup Language
+    - Database Persistent
+    - Content Management Facilities
+    - Security Constraints
+
+Portal Core Features:
+* Declarative Security Constraints and JAAS Database Security Policy
+* Runtime Portlet API Standard Role-based Security
+* Portal Content Management and Navigations: Pages, Menus, Folders, Links
+* Multithreaded Aggregation Engine
+* PSML Folder CMS Navigations, Menus, Links
+* Jetspeed SSO (Single Sign-on)
+* Rules-based Profiler for page and resource location
+* Integrates with most popular databases including
+   - Derby, MySQL, MS SQL, Oracle, Postgres, DB2
+* Client independent capability engine (HTML, XHTML, WML, VML)
+* Internationalization: Localized Portal Resources in 12 Languages
+* Statistics Logging Engine
+* Portlet Registry
+* Full Text Search of Portlet Resources with Lucene
+* User Registration
+* Forgotten Password
+* Rich Login and Password Configuration Management
+
+Administrative Portlets:
+* User, Role, Group, Password, and Profile Management
+* JSR 168 Generic User Attributes Editor
+    - JSR 168 Preferences Editor 
+    -  Site Manager
+    -  SSO Manager
+    -  Portlet Application and Lifecycle Management
+    -  Profiler Administration
+    -  Statistics Reports
+
+Web Framework Support and Sample Portlets:
+* Bridges to other Web Frameworks
+   - JSF, Struts, PHP, Perl, Velocity
+* Sample Portlets
+   - RSS, IFrame, Calendar XSLT, Bookmark, Database Browser
+   - Integration with Display Tags, Spring MVC
+
+Customization Features:
+* Administrative Site Manager
+* Page Customizer
+
+Portal Design Features:
+* Deployment Jetspeed Portlet and Page Skins (Decorators) CSS Components
+* Configurable CSS Page Layouts
+* Easy to Use Velocity Macro Language for Skin and Layout Components
+
+Development Tools
+* Automated Maven Build
+* Jetspeed-2 Maven Plugin for Custom Portal Development
+* AutoDeployment of Portlet Applications, Portal Resources
+* Deployment Tools
+* Plugin Goals integrated with Auto Deployment Feature
+
+Application Servers Supported:
+* Tomcat 5.0.x
+* Tomcat 5.5.x
+* Websphere 5.1, 6.0
+* JBoss 
+
+----------------------------------------------------------------------
+
+The release is available for download from the Apache Download Mirrors:
+
+     http://portals.apache.org/jetspeed-2/download.html
+
+We hope you enjoy using Jetspeed! If you have any questions, please consult:
+
+    * The web site: http://portals.apache.org/jetspeed-2/
+
+    * The jetspeed-user mailing list: http://portals.apache.org/jetspeed-2/mail-lists.html
+
+  For news and information, see:
+
+    * http://portals.apache.org/news.html
+

Propchange: portals/jetspeed-2/portal/trunk/docs/release/JETSPEED-2.0-ANNOUNCEMENT.txt
------------------------------------------------------------------------------
    svn:eol-style = native



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org


Mime
View raw message