]> source.dussan.org Git - archiva.git/blob
55c2e54accbb5b33f60081933d5670168e086d9b
[archiva.git] /
1 package org.apache.maven.archiva.web.util;
2
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 import org.apache.commons.lang.StringUtils;
23
24 import java.util.HashMap;
25 import java.util.Map;
26
27 import javax.servlet.http.HttpServletRequest;
28 import javax.servlet.jsp.PageContext;
29
30 /**
31  * ContextUtils 
32  *
33  * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
34  * @version $Id$
35  */
36 public class ContextUtils
37 {
38     private static final Map defaultSchemePortMap;
39
40     static
41     {
42         defaultSchemePortMap = new HashMap();
43         defaultSchemePortMap.put( "http", new Integer( 80 ) );
44         defaultSchemePortMap.put( "https", new Integer( 443 ) );
45     }
46
47     /**
48      * Using the page context, get the base url.
49      * 
50      * @param pageContext the page context to use
51      * @return the base url with module name.
52      */
53     public static String getBaseURL( PageContext pageContext )
54     {
55         return getBaseURL( pageContext, null );
56     }
57
58     /**
59      * Using the page context, get the base url and append an optional resource name to the end of the provided url.
60      * 
61      * @param pageContext the page context to use
62      * @param resource the resource name (or null if no resource name specified)
63      * @return the base url with resource name.
64      */
65     public static String getBaseURL( PageContext pageContext, String resource )
66     {
67         HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
68         return getBaseURL( request, resource );
69     }
70     
71     /**
72      * Using the http servlet request, get the base url and append an optional resource name to the end of the url.
73      * 
74      * @param request the request to use
75      * @param resource the resource name (or null if not resource name should be appended)
76      * @return the base url with resource name.
77      */
78     public static String getBaseURL( HttpServletRequest request, String resource )
79     {
80         StringBuffer baseUrl = new StringBuffer();
81         
82         baseUrl.append( request.getScheme() ).append( "://" );
83         baseUrl.append( request.getServerName() );
84         int portnum = request.getServerPort();
85
86         // Only add port if non-standard.
87         Integer defaultPortnum = (Integer) defaultSchemePortMap.get( request.getScheme() );
88         if ( ( defaultPortnum == null ) || ( defaultPortnum.intValue() != portnum ) )
89         {
90             baseUrl.append( ":" ).append( String.valueOf( portnum ) );
91         }
92         baseUrl.append( request.getContextPath() );
93
94         if ( StringUtils.isNotBlank( resource ) )
95         {
96             if ( !baseUrl.toString().endsWith( "/" ) )
97             {
98                 baseUrl.append( "/" );
99             }
100
101             baseUrl.append( resource );
102         }
103
104         return baseUrl.toString();
105     }
106 }