You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pluto-scm@portals.apache.org by ms...@apache.org on 2015/11/27 13:38:12 UTC
[31/38] portals-pluto git commit: First step in implementation of
header phase support. Initial, incomplete implementation of HeaderRequestImpl,
HeaderResponseImpl and th associated contexts. Completed invocation path.
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/65c0050b/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/FilterChainImpl.java
----------------------------------------------------------------------
diff --git a/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/FilterChainImpl.java b/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/FilterChainImpl.java
index 1fb7746..55c928e 100644
--- a/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/FilterChainImpl.java
+++ b/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/FilterChainImpl.java
@@ -1,189 +1,233 @@
-/*
- * 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.pluto.driver.services.container;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.portlet.ActionRequest;
-import javax.portlet.ActionResponse;
-import javax.portlet.EventPortlet;
-import javax.portlet.EventRequest;
-import javax.portlet.EventResponse;
-import javax.portlet.Portlet;
-import javax.portlet.PortletContext;
-import javax.portlet.PortletException;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
-import javax.portlet.ResourceRequest;
-import javax.portlet.ResourceResponse;
-import javax.portlet.ResourceServingPortlet;
-import javax.portlet.filter.ActionFilter;
-import javax.portlet.filter.EventFilter;
-import javax.portlet.filter.FilterChain;
-import javax.portlet.filter.RenderFilter;
-import javax.portlet.filter.ResourceFilter;
-
-import org.apache.pluto.container.om.portlet.Filter;
-
-/**
- * A <code>FilterChain</code> is an object provided by the portlet container
- * to the developer giving a view into the invocation chain of a
- * filtered request for a portlet. Filters use the <code>FilterChain</code>
- * to invoke the next filter in the chain, or if the calling filter is the
- * last filter in the chain, to invoke the portlet at the end of the chain.
- *@since 29/05/2007
- *@version 2.0
- */
-public class FilterChainImpl implements FilterChain {
-
- private List<Filter> filterList = new ArrayList<Filter>();
- private String lifeCycle;
- Portlet portlet;
- EventPortlet eventPortlet;
- ResourceServingPortlet resourceServingPortlet;
- ClassLoader loader;
- PortletContext portletContext;
- int filterListIndex = 0;
-
- public FilterChainImpl(String lifeCycle){
- this.lifeCycle = lifeCycle;
- }
- public void processFilter(EventRequest req, EventResponse res, EventPortlet eventPortlet, PortletContext portletContext) throws IOException, PortletException{
- this.eventPortlet = eventPortlet;
- this.loader = Thread.currentThread().getContextClassLoader();
- this.portletContext = portletContext;
- doFilter(req,res);
- }
- public void processFilter(ResourceRequest req, ResourceResponse res, ResourceServingPortlet resourceServingPortlet, PortletContext portletContext) throws IOException, PortletException{
- this.resourceServingPortlet = resourceServingPortlet;
- this.loader = Thread.currentThread().getContextClassLoader();
- this.portletContext = portletContext;
- doFilter(req,res);
- }
-
- public void processFilter(ActionRequest req, ActionResponse res, Portlet portlet, PortletContext portletContext) throws IOException, PortletException{
- this.portlet = portlet;
- this.loader = Thread.currentThread().getContextClassLoader();
- this.portletContext = portletContext;
- doFilter(req,res);
- }
-
- public void processFilter(RenderRequest req, RenderResponse res, Portlet portlet, PortletContext portletContext) throws IOException, PortletException{
- this.portlet = portlet;
- this.loader = Thread.currentThread().getContextClassLoader();
- this.portletContext = portletContext;
- doFilter(req, res);
- }
-
- public void addFilter(Filter filter){
- filterList.add(filter);
- }
-
- public void doFilter(ActionRequest request, ActionResponse response) throws IOException, PortletException {
- if (filterListIndex <filterList.size()){
- Filter filter = filterList.get(filterListIndex);
- filterListIndex++;
- try {
- ActionFilter actionFilter = (ActionFilter) loader.loadClass(filter.getFilterClass()).newInstance();
- FilterConfigImpl filterConfig = new FilterConfigImpl(filter.getFilterName(),filter.getInitParams(),portletContext);
- actionFilter.init(filterConfig);
- actionFilter.doFilter(request, response, this);
- actionFilter.destroy();
- } catch (InstantiationException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- }
- else{
- portlet.processAction(request, response);
- }
- }
-
- public void doFilter(EventRequest request, EventResponse response) throws IOException, PortletException {
- if (filterListIndex <filterList.size()){
- Filter filter = filterList.get(filterListIndex);
- filterListIndex++;
- try {
- EventFilter eventFilter = (EventFilter) loader.loadClass(filter.getFilterClass()).newInstance();
- FilterConfigImpl filterConfig = new FilterConfigImpl(filter.getFilterName(),filter.getInitParams(),portletContext);
- eventFilter.init(filterConfig);
- eventFilter.doFilter(request, response, this);
- eventFilter.destroy();
- } catch (InstantiationException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- }
- else{
- eventPortlet.processEvent(request, response);
- }
- }
-
- public void doFilter(RenderRequest request, RenderResponse response) throws IOException, PortletException {
- if (filterListIndex <filterList.size()){
- Filter filter = filterList.get(filterListIndex);
- filterListIndex++;
- try {
- RenderFilter renderFilter = (RenderFilter) loader.loadClass(filter.getFilterClass()).newInstance();
- FilterConfigImpl filterConfig = new FilterConfigImpl(filter.getFilterName(),filter.getInitParams(),portletContext);
- renderFilter.init(filterConfig);
- renderFilter.doFilter(request, response, this);
- renderFilter.destroy();
- } catch (InstantiationException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- }
- else{
- portlet.render(request, response);
- }
- }
-
- public void doFilter(ResourceRequest request, ResourceResponse response) throws IOException, PortletException {
- if (filterListIndex <filterList.size()){
- Filter filter = filterList.get(filterListIndex);
- filterListIndex++;
- try {
- ResourceFilter resourceFilter = (ResourceFilter) loader.loadClass(filter.getFilterClass()).newInstance();
- FilterConfigImpl filterConfig = new FilterConfigImpl(filter.getFilterName(),filter.getInitParams(),portletContext);
- resourceFilter.init(filterConfig);
- resourceFilter.doFilter(request, response, this);
- resourceFilter.destroy();
- } catch (InstantiationException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- }
- else{
- resourceServingPortlet.serveResource(request, response);
- }
- }
-}
+/*
+ * 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.pluto.driver.services.container;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.EventPortlet;
+import javax.portlet.EventRequest;
+import javax.portlet.EventResponse;
+import javax.portlet.HeaderPortlet;
+import javax.portlet.HeaderRequest;
+import javax.portlet.HeaderResponse;
+import javax.portlet.Portlet;
+import javax.portlet.PortletContext;
+import javax.portlet.PortletException;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+import javax.portlet.ResourceRequest;
+import javax.portlet.ResourceResponse;
+import javax.portlet.ResourceServingPortlet;
+import javax.portlet.filter.ActionFilter;
+import javax.portlet.filter.EventFilter;
+import javax.portlet.filter.FilterChain;
+import javax.portlet.filter.HeaderFilter;
+import javax.portlet.filter.HeaderFilterChain;
+import javax.portlet.filter.RenderFilter;
+import javax.portlet.filter.ResourceFilter;
+
+import org.apache.pluto.container.om.portlet.Filter;
+
+/**
+ * A <code>FilterChain</code> is an object provided by the portlet container to the developer giving a view into the
+ * invocation chain of a filtered request for a portlet. Filters use the <code>FilterChain</code> to invoke the next
+ * filter in the chain, or if the calling filter is the last filter in the chain, to invoke the portlet at the end of
+ * the chain.
+ *
+ * @since 29/05/2007
+ * @version 2.0
+ */
+public class FilterChainImpl implements FilterChain, HeaderFilterChain {
+
+ private List<Filter> filterList = new ArrayList<Filter>();
+ @SuppressWarnings("unused")
+ private String lifeCycle;
+ Portlet portlet;
+ EventPortlet eventPortlet;
+ ResourceServingPortlet resourceServingPortlet;
+ HeaderPortlet headerPortlet;
+ ClassLoader loader;
+ PortletContext portletContext;
+ int filterListIndex = 0;
+
+ public FilterChainImpl(String lifeCycle) {
+ this.lifeCycle = lifeCycle;
+ }
+
+ public void processFilter(EventRequest req, EventResponse res, EventPortlet eventPortlet,
+ PortletContext portletContext) throws IOException, PortletException {
+ this.eventPortlet = eventPortlet;
+ this.loader = Thread.currentThread().getContextClassLoader();
+ this.portletContext = portletContext;
+ doFilter(req, res);
+ }
+
+ public void processFilter(ResourceRequest req, ResourceResponse res, ResourceServingPortlet resourceServingPortlet,
+ PortletContext portletContext) throws IOException, PortletException {
+ this.resourceServingPortlet = resourceServingPortlet;
+ this.loader = Thread.currentThread().getContextClassLoader();
+ this.portletContext = portletContext;
+ doFilter(req, res);
+ }
+
+ public void processFilter(ActionRequest req, ActionResponse res, Portlet portlet, PortletContext portletContext)
+ throws IOException, PortletException {
+ this.portlet = portlet;
+ this.loader = Thread.currentThread().getContextClassLoader();
+ this.portletContext = portletContext;
+ doFilter(req, res);
+ }
+
+ public void processFilter(RenderRequest req, RenderResponse res, Portlet portlet, PortletContext portletContext)
+ throws IOException, PortletException {
+ this.portlet = portlet;
+ this.loader = Thread.currentThread().getContextClassLoader();
+ this.portletContext = portletContext;
+ doFilter(req, res);
+ }
+
+ public void processFilter(HeaderRequest req, HeaderResponse res, HeaderPortlet portlet, PortletContext portletContext)
+ throws IOException, PortletException {
+ this.headerPortlet = portlet;
+ this.loader = Thread.currentThread().getContextClassLoader();
+ this.portletContext = portletContext;
+ doFilter(req, res);
+ }
+
+ public void addFilter(Filter filter) {
+ filterList.add(filter);
+ }
+
+ public void doFilter(ActionRequest request, ActionResponse response) throws IOException, PortletException {
+ if (filterListIndex < filterList.size()) {
+ Filter filter = filterList.get(filterListIndex);
+ filterListIndex++;
+ try {
+ ActionFilter actionFilter = (ActionFilter) loader.loadClass(filter.getFilterClass()).newInstance();
+ FilterConfigImpl filterConfig = new FilterConfigImpl(filter.getFilterName(), filter.getInitParams(),
+ portletContext);
+ actionFilter.init(filterConfig);
+ actionFilter.doFilter(request, response, this);
+ actionFilter.destroy();
+ } catch (InstantiationException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ } else {
+ portlet.processAction(request, response);
+ }
+ }
+
+ public void doFilter(EventRequest request, EventResponse response) throws IOException, PortletException {
+ if (filterListIndex < filterList.size()) {
+ Filter filter = filterList.get(filterListIndex);
+ filterListIndex++;
+ try {
+ EventFilter eventFilter = (EventFilter) loader.loadClass(filter.getFilterClass()).newInstance();
+ FilterConfigImpl filterConfig = new FilterConfigImpl(filter.getFilterName(), filter.getInitParams(),
+ portletContext);
+ eventFilter.init(filterConfig);
+ eventFilter.doFilter(request, response, this);
+ eventFilter.destroy();
+ } catch (InstantiationException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ } else {
+ eventPortlet.processEvent(request, response);
+ }
+ }
+
+ public void doFilter(RenderRequest request, RenderResponse response) throws IOException, PortletException {
+ if (filterListIndex < filterList.size()) {
+ Filter filter = filterList.get(filterListIndex);
+ filterListIndex++;
+ try {
+ RenderFilter renderFilter = (RenderFilter) loader.loadClass(filter.getFilterClass()).newInstance();
+ FilterConfigImpl filterConfig = new FilterConfigImpl(filter.getFilterName(), filter.getInitParams(),
+ portletContext);
+ renderFilter.init(filterConfig);
+ renderFilter.doFilter(request, response, this);
+ renderFilter.destroy();
+ } catch (InstantiationException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ } else {
+ portlet.render(request, response);
+ }
+ }
+
+ public void doFilter(HeaderRequest request, HeaderResponse response) throws IOException, PortletException {
+ if (filterListIndex < filterList.size()) {
+ Filter filter = filterList.get(filterListIndex);
+ filterListIndex++;
+ try {
+ HeaderFilter headerFilter = (HeaderFilter) loader.loadClass(filter.getFilterClass()).newInstance();
+ FilterConfigImpl filterConfig = new FilterConfigImpl(filter.getFilterName(), filter.getInitParams(),
+ portletContext);
+ headerFilter.init(filterConfig);
+ headerFilter.doFilter(request, response, this);
+ headerFilter.destroy();
+ } catch (InstantiationException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ } else {
+ headerPortlet.renderHeaders(request, response);
+ }
+ }
+
+ public void doFilter(ResourceRequest request, ResourceResponse response) throws IOException, PortletException {
+ if (filterListIndex < filterList.size()) {
+ Filter filter = filterList.get(filterListIndex);
+ filterListIndex++;
+ try {
+ ResourceFilter resourceFilter = (ResourceFilter) loader.loadClass(filter.getFilterClass()).newInstance();
+ FilterConfigImpl filterConfig = new FilterConfigImpl(filter.getFilterName(), filter.getInitParams(),
+ portletContext);
+ resourceFilter.init(filterConfig);
+ resourceFilter.doFilter(request, response, this);
+ resourceFilter.destroy();
+ } catch (InstantiationException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ } else {
+ resourceServingPortlet.serveResource(request, response);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/65c0050b/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/FilterManagerImpl.java
----------------------------------------------------------------------
diff --git a/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/FilterManagerImpl.java b/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/FilterManagerImpl.java
index 49f0acb..0d28f45 100644
--- a/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/FilterManagerImpl.java
+++ b/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/FilterManagerImpl.java
@@ -1,146 +1,156 @@
-/*
- * 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.pluto.driver.services.container;
-
-import java.io.IOException;
-import java.util.List;
-
-import javax.portlet.ActionRequest;
-import javax.portlet.ActionResponse;
-import javax.portlet.EventPortlet;
-import javax.portlet.EventRequest;
-import javax.portlet.EventResponse;
-import javax.portlet.Portlet;
-import javax.portlet.PortletContext;
-import javax.portlet.PortletException;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
-import javax.portlet.ResourceRequest;
-import javax.portlet.ResourceResponse;
-import javax.portlet.ResourceServingPortlet;
-
-import org.apache.pluto.container.FilterManager;
-import org.apache.pluto.container.PortletWindow;
-import org.apache.pluto.container.om.portlet.Filter;
-import org.apache.pluto.container.om.portlet.FilterMapping;
-import org.apache.pluto.container.om.portlet.PortletApplicationDefinition;
-import org.apache.pluto.container.om.portlet.PortletDefinition;
-
-
-/**
- * Manage the initialization and doFilter {@link FilterChainImpl} for the filter which are
- * declareted in the deployment descriptor.
- * @since 05/29/2007
- * @version 2.0
- */
-public class FilterManagerImpl implements FilterManager{
- private FilterChainImpl filterchain;
- private PortletApplicationDefinition portletApp;
- private String portletName;
- private String lifeCycle;
-
- public FilterManagerImpl(PortletWindow portletWindow, String lifeCycle) {
- final PortletDefinition pd = portletWindow.getPortletDefinition();
- this.portletApp = pd.getApplication();
- this.portletName = pd.getPortletName();
- this.lifeCycle = lifeCycle;
- filterchain = new FilterChainImpl(lifeCycle);
- initFilterChain();
- }
-
- private void initFilterChain(){
- List<? extends FilterMapping> filterMappingList = portletApp.getFilterMappings();
- if (filterMappingList!= null){
- for (FilterMapping filterMapping : filterMappingList) {
- if (isFilter(filterMapping, portletName)){
- //the filter is specified for the portlet, check the filter for the lifecycle
- List<? extends Filter> filterList = portletApp.getFilters();
- for (Filter filter : filterList) {
- //search for the filter in the filter
- if (filter.getFilterName().equals(filterMapping.getFilterName())){
- //check the lifecycle
- if (isLifeCycle(filter, lifeCycle)){
- //the filter match to the portlet and has the specified lifecycle -> add to chain
- filterchain.addFilter(filter);
- }
- }
- }
- }
- }
- }
- }
-
- /**
- * @see org.apache.pluto.container.FilterManager#processFilter(javax.portlet.EventRequest, javax.portlet.EventResponse, javax.portlet.EventPortlet, javax.portlet.PortletContext)
- */
- public void processFilter(EventRequest req, EventResponse res, EventPortlet eventPortlet,PortletContext portletContext)throws PortletException, IOException{
- filterchain.processFilter(req, res, eventPortlet, portletContext);
- }
-
- /**
- * @see org.apache.pluto.container.FilterManager#processFilter(javax.portlet.ResourceRequest, javax.portlet.ResourceResponse, javax.portlet.ResourceServingPortlet, javax.portlet.PortletContext)
- */
- public void processFilter(ResourceRequest req, ResourceResponse res, ResourceServingPortlet resourceServingPortlet,PortletContext portletContext)throws PortletException, IOException{
- filterchain.processFilter(req, res, resourceServingPortlet, portletContext);
- }
-
- /**
- * @see org.apache.pluto.container.FilterManager#processFilter(javax.portlet.RenderRequest, javax.portlet.RenderResponse, javax.portlet.Portlet, javax.portlet.PortletContext)
- */
- public void processFilter(RenderRequest req, RenderResponse res, Portlet portlet,PortletContext portletContext) throws PortletException, IOException{
- filterchain.processFilter(req, res, portlet, portletContext);
- }
-
- /**
- * @see org.apache.pluto.container.FilterManager#processFilter(javax.portlet.ActionRequest, javax.portlet.ActionResponse, javax.portlet.Portlet, javax.portlet.PortletContext)
- */
- public void processFilter(ActionRequest req, ActionResponse res, Portlet portlet,PortletContext portletContext) throws PortletException, IOException{
- filterchain.processFilter(req, res, portlet, portletContext);
- }
-
- private boolean isLifeCycle(Filter filter, String lifeCycle){
- List <String> lifeCyclesList = filter.getLifecycles();
- for (String string : lifeCyclesList) {
- if (string.equals(lifeCycle))
- return true;
- }
- return false;
- }
-
- private boolean isFilter(FilterMapping filterMapping,String portletName){
- List <String> portletNamesList = filterMapping.getPortletNames();
- for (String portletNameFromFilterList : portletNamesList) {
- if (portletNameFromFilterList.endsWith("*")){
- if (portletNameFromFilterList.length()==1){
- //if name contains only *
- return true;
- }
- portletNameFromFilterList = portletNameFromFilterList.substring(0, portletNameFromFilterList.length()-1);
- if (portletName.length()>= portletNameFromFilterList.length()){
- if (portletName.substring(0, portletNameFromFilterList.length()).equals(portletNameFromFilterList)){
- return true;
- }
- }
- }
- else if (portletNameFromFilterList.equals(portletName))
- return true;
- }
- return false;
- }
-
-
-}
+/*
+ * 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.pluto.driver.services.container;
+
+import java.io.IOException;
+import java.util.List;
+
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.EventPortlet;
+import javax.portlet.EventRequest;
+import javax.portlet.EventResponse;
+import javax.portlet.HeaderPortlet;
+import javax.portlet.HeaderRequest;
+import javax.portlet.HeaderResponse;
+import javax.portlet.Portlet;
+import javax.portlet.PortletContext;
+import javax.portlet.PortletException;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+import javax.portlet.ResourceRequest;
+import javax.portlet.ResourceResponse;
+import javax.portlet.ResourceServingPortlet;
+
+import org.apache.pluto.container.FilterManager;
+import org.apache.pluto.container.PortletWindow;
+import org.apache.pluto.container.om.portlet.Filter;
+import org.apache.pluto.container.om.portlet.FilterMapping;
+import org.apache.pluto.container.om.portlet.PortletApplicationDefinition;
+import org.apache.pluto.container.om.portlet.PortletDefinition;
+
+
+/**
+ * Manage the initialization and doFilter {@link FilterChainImpl} for the filter which are
+ * declared in the deployment descriptor.
+ * @since 05/29/2007
+ * @version 2.0
+ */
+public class FilterManagerImpl implements FilterManager{
+ private FilterChainImpl filterchain;
+ private PortletApplicationDefinition portletApp;
+ private String portletName;
+ private String lifeCycle;
+
+ public FilterManagerImpl(PortletWindow portletWindow, String lifeCycle) {
+ final PortletDefinition pd = portletWindow.getPortletDefinition();
+ this.portletApp = pd.getApplication();
+ this.portletName = pd.getPortletName();
+ this.lifeCycle = lifeCycle;
+ filterchain = new FilterChainImpl(lifeCycle);
+ initFilterChain();
+ }
+
+ private void initFilterChain(){
+ List<? extends FilterMapping> filterMappingList = portletApp.getFilterMappings();
+ if (filterMappingList!= null){
+ for (FilterMapping filterMapping : filterMappingList) {
+ if (isFilter(filterMapping, portletName)){
+ //the filter is specified for the portlet, check the filter for the lifecycle
+ List<? extends Filter> filterList = portletApp.getFilters();
+ for (Filter filter : filterList) {
+ //search for the filter in the filter
+ if (filter.getFilterName().equals(filterMapping.getFilterName())){
+ //check the lifecycle
+ if (isLifeCycle(filter, lifeCycle)){
+ //the filter match to the portlet and has the specified lifecycle -> add to chain
+ filterchain.addFilter(filter);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * @see org.apache.pluto.container.FilterManager#processFilter(javax.portlet.EventRequest, javax.portlet.EventResponse, javax.portlet.EventPortlet, javax.portlet.PortletContext)
+ */
+ public void processFilter(EventRequest req, EventResponse res, EventPortlet eventPortlet,PortletContext portletContext)throws PortletException, IOException{
+ filterchain.processFilter(req, res, eventPortlet, portletContext);
+ }
+
+ /**
+ * @see org.apache.pluto.container.FilterManager#processFilter(javax.portlet.ResourceRequest, javax.portlet.ResourceResponse, javax.portlet.ResourceServingPortlet, javax.portlet.PortletContext)
+ */
+ public void processFilter(ResourceRequest req, ResourceResponse res, ResourceServingPortlet resourceServingPortlet,PortletContext portletContext)throws PortletException, IOException{
+ filterchain.processFilter(req, res, resourceServingPortlet, portletContext);
+ }
+
+ /**
+ * @see org.apache.pluto.container.FilterManager#processFilter(javax.portlet.RenderRequest, javax.portlet.RenderResponse, javax.portlet.Portlet, javax.portlet.PortletContext)
+ */
+ public void processFilter(RenderRequest req, RenderResponse res, Portlet portlet,PortletContext portletContext) throws PortletException, IOException{
+ filterchain.processFilter(req, res, portlet, portletContext);
+ }
+
+ /**
+ * @see org.apache.pluto.container.FilterManager#processFilter(javax.portlet.RenderRequest, javax.portlet.HeaderResponse, javax.portlet.HeaderPortlet, javax.portlet.PortletContext)
+ */
+ public void processFilter(HeaderRequest req, HeaderResponse res, HeaderPortlet portlet,PortletContext portletContext) throws PortletException, IOException{
+ filterchain.processFilter(req, res, portlet, portletContext);
+ }
+
+ /**
+ * @see org.apache.pluto.container.FilterManager#processFilter(javax.portlet.ActionRequest, javax.portlet.ActionResponse, javax.portlet.Portlet, javax.portlet.PortletContext)
+ */
+ public void processFilter(ActionRequest req, ActionResponse res, Portlet portlet,PortletContext portletContext) throws PortletException, IOException{
+ filterchain.processFilter(req, res, portlet, portletContext);
+ }
+
+ private boolean isLifeCycle(Filter filter, String lifeCycle){
+ List <String> lifeCyclesList = filter.getLifecycles();
+ for (String string : lifeCyclesList) {
+ if (string.equals(lifeCycle))
+ return true;
+ }
+ return false;
+ }
+
+ private boolean isFilter(FilterMapping filterMapping,String portletName){
+ List <String> portletNamesList = filterMapping.getPortletNames();
+ for (String portletNameFromFilterList : portletNamesList) {
+ if (portletNameFromFilterList.endsWith("*")){
+ if (portletNameFromFilterList.length()==1){
+ //if name contains only *
+ return true;
+ }
+ portletNameFromFilterList = portletNameFromFilterList.substring(0, portletNameFromFilterList.length()-1);
+ if (portletName.length()>= portletNameFromFilterList.length()){
+ if (portletName.substring(0, portletNameFromFilterList.length()).equals(portletNameFromFilterList)){
+ return true;
+ }
+ }
+ }
+ else if (portletNameFromFilterList.equals(portletName))
+ return true;
+ }
+ return false;
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/65c0050b/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletHeaderResponseContextImpl.java
----------------------------------------------------------------------
diff --git a/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletHeaderResponseContextImpl.java b/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletHeaderResponseContextImpl.java
new file mode 100644
index 0000000..5825be5
--- /dev/null
+++ b/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletHeaderResponseContextImpl.java
@@ -0,0 +1,55 @@
+/*
+ * 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.pluto.driver.services.container;
+
+import java.util.Collection;
+
+import javax.portlet.PortletMode;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.pluto.container.PortletContainer;
+import org.apache.pluto.container.PortletHeaderResponseContext;
+import org.apache.pluto.container.PortletWindow;
+import org.apache.pluto.driver.AttributeKeys;
+
+/**
+ * @version $Id$
+ *
+ */
+public class PortletHeaderResponseContextImpl extends PortletMimeResponseContextImpl implements
+ PortletHeaderResponseContext
+{
+ public PortletHeaderResponseContextImpl(PortletContainer container, HttpServletRequest containerRequest,
+ HttpServletResponse containerResponse, PortletWindow window)
+ {
+ super(container, containerRequest, containerResponse, window);
+ }
+
+ public void setNextPossiblePortletModes(Collection<PortletMode> portletModes)
+ {
+ // not supported
+ }
+
+ public void setTitle(String title)
+ {
+ if (!isClosed())
+ {
+ getServletRequest().setAttribute(AttributeKeys.PORTLET_TITLE, title);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/65c0050b/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletRequestContextServiceImpl.java
----------------------------------------------------------------------
diff --git a/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletRequestContextServiceImpl.java b/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletRequestContextServiceImpl.java
index 2425d82..c744243 100644
--- a/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletRequestContextServiceImpl.java
+++ b/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletRequestContextServiceImpl.java
@@ -22,6 +22,7 @@ import javax.servlet.http.HttpServletResponse;
import org.apache.pluto.container.PortletActionResponseContext;
import org.apache.pluto.container.PortletContainer;
import org.apache.pluto.container.PortletEventResponseContext;
+import org.apache.pluto.container.PortletHeaderResponseContext;
import org.apache.pluto.container.PortletRenderResponseContext;
import org.apache.pluto.container.PortletRequestContext;
import org.apache.pluto.container.PortletRequestContextService;
@@ -76,6 +77,20 @@ public class PortletRequestContextServiceImpl implements PortletRequestContextSe
return new PortletRenderResponseContextImpl(container, containerRequest, containerResponse, window);
}
+ public PortletRequestContext getPortletHeaderRequestContext(PortletContainer container, HttpServletRequest containerRequest,
+ HttpServletResponse containerResponse, PortletWindow window)
+ {
+ return new PortletRequestContextImpl(container, containerRequest, containerResponse, window, false);
+ }
+
+ public PortletHeaderResponseContext getPortletHeaderResponseContext(PortletContainer container,
+ HttpServletRequest containerRequest,
+ HttpServletResponse containerResponse,
+ PortletWindow window)
+ {
+ return new PortletHeaderResponseContextImpl(container, containerRequest, containerResponse, window);
+ }
+
public PortletResourceRequestContext getPortletResourceRequestContext(PortletContainer container,
HttpServletRequest containerRequest,
HttpServletResponse containerResponse,
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/65c0050b/pluto-portal-driver/src/main/java/org/apache/pluto/driver/PortalDriverServlet.java
----------------------------------------------------------------------
diff --git a/pluto-portal-driver/src/main/java/org/apache/pluto/driver/PortalDriverServlet.java b/pluto-portal-driver/src/main/java/org/apache/pluto/driver/PortalDriverServlet.java
index 8de18c3..868dc20 100644
--- a/pluto-portal-driver/src/main/java/org/apache/pluto/driver/PortalDriverServlet.java
+++ b/pluto-portal-driver/src/main/java/org/apache/pluto/driver/PortalDriverServlet.java
@@ -27,18 +27,17 @@ import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.apache.pluto.container.PortletContainer;
import org.apache.pluto.container.PortletContainerException;
import org.apache.pluto.driver.core.PortalRequestContext;
import org.apache.pluto.driver.core.PortletWindowImpl;
import org.apache.pluto.driver.services.portal.PageConfig;
import org.apache.pluto.driver.services.portal.PortletWindowConfig;
-import org.apache.pluto.driver.services.portal.RenderConfigService;
import org.apache.pluto.driver.url.PortalURL;
import org.apache.pluto.driver.url.PortalURL.URLType;
import org.apache.pluto.driver.util.PageState;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* The controller servlet used to drive the Portal Driver. All requests mapped
@@ -216,10 +215,19 @@ public class PortalDriverServlet extends HttpServlet {
request.setAttribute(AttributeKeys.CURRENT_PAGE, pageConfig);
String uri = (pageConfig.getUri() != null) ? pageConfig.getUri() : DEFAULT_PAGE_URI;
+ // Execute header request for each portlet on the page
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Executing header requests for target portlets.");
+ }
+
+ doHeaders(request, response, portalURL);
+
if (LOG.isDebugEnabled()) {
LOG.debug("Dispatching to: " + uri);
}
+ // Dispatch to the JSP that aggregates the page.
RequestDispatcher dispatcher = request.getRequestDispatcher(uri);
dispatcher.forward(request, response);
@@ -246,4 +254,18 @@ public class PortalDriverServlet extends HttpServlet {
throws ServletException, IOException {
doGet(request, response);
}
+
+
+ private void doHeaders(HttpServletRequest req, HttpServletResponse resp, PortalURL purl) {
+
+ for (String pid : purl.getPortletIds()) {
+ PortletWindowConfig wcfg = PortletWindowConfig.fromId(pid);
+ PortletWindowImpl pwin = new PortletWindowImpl(container, wcfg, purl);
+ try {
+ container.doHeader(pwin, req, resp);
+ } catch (Exception e) {
+
+ }
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/65c0050b/pluto-portal-driver/src/main/java/org/apache/pluto/driver/container/DefaultPortletInvokerService.java
----------------------------------------------------------------------
diff --git a/pluto-portal-driver/src/main/java/org/apache/pluto/driver/container/DefaultPortletInvokerService.java b/pluto-portal-driver/src/main/java/org/apache/pluto/driver/container/DefaultPortletInvokerService.java
index 32c097f..a46a4e5 100644
--- a/pluto-portal-driver/src/main/java/org/apache/pluto/driver/container/DefaultPortletInvokerService.java
+++ b/pluto-portal-driver/src/main/java/org/apache/pluto/driver/container/DefaultPortletInvokerService.java
@@ -22,6 +22,8 @@ import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.EventRequest;
import javax.portlet.EventResponse;
+import javax.portlet.HeaderRequest;
+import javax.portlet.HeaderResponse;
import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
@@ -97,10 +99,26 @@ public class DefaultPortletInvokerService implements PortletInvokerService {
}
/**
+ * Invoke the portlet with a header request.
+ *
+ * @param request header request used for the invocation.
+ * @param response header response used for the invocation.
+ * @see PortletServlet3
+ * @see javax.portlet.Portlet#header(javax.portlet.headerRequest,javax.portlet.headerResponse)
+ */
+ public void header(PortletRequestContext context, HeaderRequest request, HeaderResponse response, FilterManager filterManager)
+ throws IOException, PortletException, PortletContainerException {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Performing header Invocation");
+ }
+ invoke(context, request, response, filterManager, PortletInvokerService.METHOD_HEADER);
+ }
+
+ /**
* Invoke the portlet with a render request.
*
- * @param request action request used for the invocation.
- * @param response action response used for the invocation.
+ * @param request render request used for the invocation.
+ * @param response render response used for the invocation.
* @see PortletServlet3
* @see javax.portlet.Portlet#render(javax.portlet.RenderRequest,javax.portlet.RenderResponse)
*/
@@ -115,8 +133,8 @@ public class DefaultPortletInvokerService implements PortletInvokerService {
/**
* Invoke the portlet with a render request.
*
- * @param request action request used for the invocation.
- * @param response action response used for the invocation.
+ * @param request event request used for the invocation.
+ * @param response event response used for the invocation.
* @see PortletServlet3
* @see javax.portlet.Portlet#render(javax.portlet.RenderRequest,javax.portlet.RenderResponse)
*/
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/65c0050b/portlet-api/src/main/java/javax/portlet/PortletRequest.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/PortletRequest.java b/portlet-api/src/main/java/javax/portlet/PortletRequest.java
index 1ec5121..9581cdf 100644
--- a/portlet-api/src/main/java/javax/portlet/PortletRequest.java
+++ b/portlet-api/src/main/java/javax/portlet/PortletRequest.java
@@ -206,6 +206,17 @@ public interface PortletRequest extends PortletState
/**
* String identifier for the portlet render lifecycle phase. In this
* phase the portlet request and response are from type
+ * <code>HeaderRequest</code> and <code>HeaderResponse</code>.
+ * <p>
+ * The value of the constant is <code>HEADER_PHASE</code>.
+ *
+ * @since 3.0
+ */
+ public static final String HEADER_PHASE = "HEADER_PHASE";
+
+ /**
+ * String identifier for the portlet render lifecycle phase. In this
+ * phase the portlet request and response are from type
* <code>RenderRequest</code> and <code>RenderResponse</code>.
* <p>
* The value of the constant is <code>RENDER_PHASE</code>.