1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.cms.beans.config;
35
36 import info.magnolia.link.Link;
37 import info.magnolia.link.LinkException;
38 import info.magnolia.link.LinkUtil;
39
40 import org.apache.commons.lang3.StringUtils;
41
42
43
44
45
46 public class URI2RepositoryMapping {
47
48
49
50
51 private String URIPrefix;
52
53
54
55
56 private String repository;
57
58
59
60
61 private String handlePrefix;
62
63 public URI2RepositoryMapping(String uriPrefix, String repository, String handlePrefix) {
64 this.URIPrefix = uriPrefix;
65 this.repository = repository;
66 this.handlePrefix = handlePrefix;
67 }
68
69 public URI2RepositoryMapping() {
70 }
71
72
73
74
75 public boolean matches(String uri) {
76 if (uri == null) {
77 return false;
78 }
79 return uri.startsWith(URIPrefix);
80 }
81
82
83
84
85 public String getHandle(final String uri) {
86 String cleanedUri = StringUtils.removeStart(uri, this.URIPrefix);
87 if (StringUtils.isNotEmpty(this.handlePrefix)) {
88
89 cleanedUri = StringUtils.removeStart(cleanedUri, this.handlePrefix);
90
91 cleanedUri = StringUtils.removeStart(cleanedUri, "/");
92 cleanedUri = this.handlePrefix + "/" + cleanedUri;
93 }
94
95 String fileName = StringUtils.substringAfterLast(cleanedUri, "/");
96 String extension = StringUtils.substringAfterLast(fileName, ".");
97 cleanedUri = StringUtils.removeEnd(cleanedUri, "." + extension);
98 return cleanHandle(cleanedUri);
99 }
100
101
102
103
104 protected String cleanHandle(String handle) {
105 if (!handle.startsWith("/")) {
106 handle = "/" + handle;
107 }
108 while (handle.indexOf("//") != -1) {
109 handle = StringUtils.replace(handle, "//", "/");
110 }
111 return handle;
112 }
113
114
115
116
117 public String getURI(String handle) {
118 try {
119 return getURI(LinkUtil.createLinkInstance(this.getRepository(), handle, null, null, null));
120 } catch (LinkException e) {
121 return handle;
122 }
123 }
124
125 public String getURI(Link uuidLink) {
126 String uri = uuidLink.getPath();
127 if (StringUtils.isNotEmpty(this.handlePrefix)) {
128 uri = StringUtils.removeStart(uri, this.handlePrefix);
129 }
130 if (StringUtils.isNotEmpty(this.URIPrefix)) {
131 uri = this.URIPrefix + "/" + uri;
132 }
133
134 String nodeDataName = uuidLink.getNodeDataName();
135 String fileName = uuidLink.getFileName();
136 String extension = uuidLink.getExtension();
137
138 if (StringUtils.isNotEmpty(nodeDataName)) {
139 uri += "/" + nodeDataName;
140 }
141 if (StringUtils.isNotEmpty(fileName)) {
142 uri += "/" + fileName;
143 }
144 if (StringUtils.isNotEmpty(uri) && StringUtils.isNotEmpty(extension) && !StringUtils.endsWith(uri, "/")) {
145 uri += "." + extension;
146 }
147
148 return cleanHandle(uri);
149 }
150
151 public String getHandlePrefix() {
152 return handlePrefix;
153 }
154
155 public void setHandlePrefix(String handlePrefix) {
156 this.handlePrefix = handlePrefix;
157 }
158
159 public String getRepository() {
160 return repository;
161 }
162
163 public void setRepository(String repository) {
164 this.repository = repository;
165 }
166
167 public String getURIPrefix() {
168 return URIPrefix;
169 }
170
171 public void setURIPrefix(String uriPrefix) {
172 this.URIPrefix = uriPrefix;
173 }
174
175 @Override
176 public String toString() {
177 return this.URIPrefix + " --> " + repository + ":" + this.handlePrefix;
178 }
179 }