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