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