This project has retired. For details please refer to its Attic page.
WildcardPortletApplicationContext xref
View Javadoc

1   /*
2    * $Id: WildcardPortletApplicationContext.java 1306435 2012-03-28 15:39:11Z nlebas $
3    *
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   * http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  package org.apache.tiles.request.portlet.wildcard;
23  
24  import java.io.IOException;
25  import java.net.URL;
26  import java.util.ArrayList;
27  import java.util.Collection;
28  import java.util.Collections;
29  import java.util.Locale;
30  
31  import javax.portlet.PortletContext;
32  
33  import org.apache.tiles.request.ApplicationResource;
34  import org.apache.tiles.request.locale.URLApplicationResource;
35  import org.apache.tiles.request.portlet.PortletApplicationContext;
36  import org.springframework.core.io.Resource;
37  import org.springframework.core.io.support.ResourcePatternResolver;
38  import org.springframework.web.portlet.context.PortletContextResourcePatternResolver;
39  
40  /**
41   * Portlet-based implementation of the TilesApplicationContext interface that
42   * can resolve resources even using wildcards.
43   *
44   * @version $Rev: 1306435 $ $Date: 2012-03-29 02:39:11 +1100 (Thu, 29 Mar 2012) $
45   */
46  public class WildcardPortletApplicationContext extends PortletApplicationContext {
47  
48      /**
49       * The pattern resolver.
50       */
51      protected ResourcePatternResolver resolver;
52  
53      /**
54       * Constructor.
55       *
56       * @param portletContext The portlet context.
57       */
58      public WildcardPortletApplicationContext(PortletContext portletContext) {
59          super(portletContext);
60      }
61  
62      /** {@inheritDoc} */
63      @Override
64      public void initialize(PortletContext context) {
65          super.initialize(context);
66  
67          resolver = new PortletContextResourcePatternResolver(context);
68      }
69  
70      /** {@inheritDoc} */
71      @Override
72      public ApplicationResource getResource(String localePath) {
73          ApplicationResource retValue = null;
74          Collection<ApplicationResource> resourceSet = getResources(localePath);
75          if (resourceSet != null && !resourceSet.isEmpty()) {
76              retValue = resourceSet.iterator().next();
77          }
78          return retValue;
79      }
80  
81      /** {@inheritDoc} */
82      @Override
83      public ApplicationResource getResource(ApplicationResource base, Locale locale) {
84          ApplicationResource retValue = null;
85          Collection<ApplicationResource> resourceSet = getResources(base.getLocalePath(locale));
86          if (resourceSet != null && !resourceSet.isEmpty()) {
87              retValue = resourceSet.iterator().next();
88          }
89          return retValue;
90      }
91  
92      /** {@inheritDoc} */
93      @Override
94      public Collection<ApplicationResource> getResources(String path) {
95          Resource[] resources;
96          try {
97              resources = resolver.getResources(path);
98          } catch (IOException e) {
99              return Collections.<ApplicationResource> emptyList();
100         }
101         Collection<ApplicationResource> resourceList = new ArrayList<ApplicationResource>();
102         if (resources != null && resources.length > 0) {
103             for (int i = 0; i < resources.length; i++) {
104                 URL url;
105                 try {
106                     url = resources[i].getURL();
107                     resourceList.add(new URLApplicationResource(url.toExternalForm(), url));
108                 } catch (IOException e) {
109                     // shouldn't happen with the kind of resources we're using
110                     throw new IllegalArgumentException("no URL for " + resources[i].toString(), e);
111                 }
112             }
113         }
114         return resourceList;
115     }
116 }