]> source.dussan.org Git - archiva.git/blob
ae89c37047865786184947fba060e717b6df5fd9
[archiva.git] /
1 package org.apache.maven.repository.manager.web.mapper;
2
3 /*
4  * Copyright 2005-2006 The Apache Software Foundation.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18
19 import com.opensymphony.webwork.dispatcher.mapper.ActionMapping;
20 import com.opensymphony.webwork.dispatcher.mapper.DefaultActionMapper;
21
22 import javax.servlet.http.HttpServletRequest;
23 import java.util.HashMap;
24 import java.util.Map;
25
26 /**
27  * Map alternate URLs to specific actions. Used for the repository browser and the proxy.
28  *
29  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
30  */
31 public class RepositoryActionMapper
32     extends DefaultActionMapper
33 {
34     private static final String BROWSE_PREFIX = "/browse/";
35
36     private static final String PROXY_PREFIX = "/proxy/";
37
38     public String getUriFromActionMapping( ActionMapping actionMapping )
39     {
40         Map params = actionMapping.getParams();
41         if ( "browseGroup".equals( actionMapping.getName() ) )
42         {
43             return BROWSE_PREFIX + params.remove( "groupId" );
44         }
45         else if ( "browseArtifact".equals( actionMapping.getName() ) )
46         {
47             return BROWSE_PREFIX + params.remove( "groupId" ) + "/" + params.remove( "artifactId" );
48         }
49         else if ( "showArtifact".equals( actionMapping.getName() ) )
50         {
51             return BROWSE_PREFIX + params.remove( "groupId" ) + "/" + params.remove( "artifactId" ) + "/" +
52                 params.remove( "version" );
53         }
54         else if ( "proxy".equals( actionMapping.getName() ) )
55         {
56             return PROXY_PREFIX + params.remove( "path" );
57         }
58
59         return super.getUriFromActionMapping( actionMapping );
60     }
61
62     public ActionMapping getMapping( HttpServletRequest httpServletRequest )
63     {
64         String path = httpServletRequest.getServletPath();
65         if ( path.startsWith( BROWSE_PREFIX ) )
66         {
67             path = path.substring( BROWSE_PREFIX.length() );
68             if ( path.length() == 0 )
69             {
70                 return new ActionMapping( "browse", "/", "", null );
71             }
72             else
73             {
74                 String[] parts = path.split( "/" );
75                 if ( parts.length == 1 )
76                 {
77                     Map params = new HashMap();
78                     params.put( "groupId", parts[0] );
79                     return new ActionMapping( "browseGroup", "/", "", params );
80                 }
81                 else if ( parts.length == 2 )
82                 {
83                     Map params = new HashMap();
84                     params.put( "groupId", parts[0] );
85                     params.put( "artifactId", parts[1] );
86                     return new ActionMapping( "browseArtifact", "/", "", params );
87                 }
88                 else if ( parts.length == 3 )
89                 {
90                     Map params = new HashMap();
91                     params.put( "groupId", parts[0] );
92                     params.put( "artifactId", parts[1] );
93                     params.put( "version", parts[2] );
94                     return new ActionMapping( "showArtifact", "/", "", params );
95                 }
96             }
97         }
98         else if ( path.startsWith( PROXY_PREFIX ) )
99         {
100             // retain the leading /
101             path = path.substring( PROXY_PREFIX.length() - 1 );
102
103             Map params = new HashMap();
104             params.put( "path", path );
105             return new ActionMapping( "proxy", "/", "", params );
106         }
107
108         return super.getMapping( httpServletRequest );
109     }
110 }