]> source.dussan.org Git - archiva.git/blob
b712adbb525d5a76938ac46bba0b37ea20e73e90
[archiva.git] /
1 package org.apache.maven.archiva.webdav;
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.jackrabbit.webdav.DavResourceLocator;
23 import org.apache.jackrabbit.webdav.DavLocatorFactory;
24 import org.apache.jackrabbit.util.Text;
25
26 /**
27  * @author <a href="mailto:james@atlassian.com">James William Dumay</a>
28  */
29 public class ArchivaDavResourceLocator
30     implements DavResourceLocator, RepositoryLocator
31 {
32     private String prefix;
33
34     private String resourcePath;
35
36     private String href;
37
38     private String repositoryId;
39
40     private DavLocatorFactory davLocatorFactory;
41
42     public ArchivaDavResourceLocator( String prefix, String resourcePath, String repositoryId,
43                                       DavLocatorFactory davLocatorFactory )
44     {
45         this.prefix = prefix;
46         this.repositoryId = repositoryId;
47         this.davLocatorFactory = davLocatorFactory;
48         this.resourcePath = resourcePath;
49         
50         if (!resourcePath.startsWith("/"))
51         {
52             this.resourcePath = "/" + resourcePath;
53         }
54
55         String escapedPath = Text.escapePath( resourcePath );
56         String hrefPrefix = prefix;
57
58         // Ensure no extra slashes when href is joined
59         if ( hrefPrefix.endsWith( "/" ) && escapedPath.startsWith( "/" ) )
60         {
61             hrefPrefix = hrefPrefix.substring( 0, hrefPrefix.length() - 1 );
62         }
63
64         href = hrefPrefix + escapedPath;
65     }
66
67     public String getRepositoryId()
68     {
69         return repositoryId;
70     }
71
72     public String getPrefix()
73     {
74         return prefix;
75     }
76
77     public String getResourcePath()
78     {
79         return resourcePath;
80     }
81
82     public String getWorkspacePath()
83     {
84         return "";
85     }
86
87     public String getWorkspaceName()
88     {
89         return "";
90     }
91
92     public boolean isSameWorkspace( DavResourceLocator locator )
93     {
94         return isSameWorkspace( locator.getWorkspaceName() );
95     }
96
97     public boolean isSameWorkspace( String workspaceName )
98     {
99         return getWorkspaceName().equals( workspaceName );
100     }
101
102     public String getHref( boolean isCollection )
103     {
104         // avoid doubled trailing '/' for the root item
105         String suffix = ( isCollection && !isRootLocation() ) ? "/" : "";
106         return href + suffix;
107     }
108
109     public boolean isRootLocation()
110     {
111         return "/".equals( resourcePath );
112     }
113
114     public DavLocatorFactory getFactory()
115     {
116         return davLocatorFactory;
117     }
118
119     public String getRepositoryPath()
120     {
121         return getResourcePath();
122     }
123
124     /**
125      * Computes the hash code from the href, which is built using the final fields prefix and resourcePath.
126      * 
127      * @return the hash code
128      */
129     public int hashCode()
130     {
131         return href.hashCode();
132     }
133
134     /**
135      * Equality of path is achieved if the specified object is a <code>DavResourceLocator</code> object with the same
136      * hash code.
137      * 
138      * @param obj the object to compare to
139      * @return <code>true</code> if the 2 objects are equal; <code>false</code> otherwise
140      */
141     public boolean equals( Object obj )
142     {
143         if ( obj instanceof DavResourceLocator )
144         {
145             DavResourceLocator other = (DavResourceLocator) obj;
146             return hashCode() == other.hashCode();
147         }
148         return false;
149     }
150 }