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
38 import info.magnolia.link.LinkFactory;
39 import info.magnolia.link.LinkException;
40 import info.magnolia.objectfactory.Components;
41
42 import java.util.Collection;
43 import java.util.Comparator;
44 import java.util.TreeSet;
45
46 import org.apache.commons.lang.StringUtils;
47 import org.slf4j.Logger;
48 import org.slf4j.LoggerFactory;
49
50
51
52
53
54
55
56
57 public class URI2RepositoryManager {
58
59 protected static final URI2RepositoryMapping DEFAULT_MAPPING = new URI2RepositoryMapping("", ContentRepository.WEBSITE,"");
60
61 private static Logger log = LoggerFactory.getLogger(URI2RepositoryManager.class);
62
63
64
65
66 private Collection<URI2RepositoryMapping> mappings;
67
68 public URI2RepositoryManager() {
69 mappings = new TreeSet<URI2RepositoryMapping>(getMappingComparator());
70 }
71
72 protected Comparator<URI2RepositoryMapping> getMappingComparator() {
73 return new Comparator<URI2RepositoryMapping>() {
74 public int compare(URI2RepositoryMapping m0, URI2RepositoryMapping m1) {
75 return m1.getURIPrefix().compareTo(m0.getURIPrefix());
76 }
77 };
78 }
79
80
81
82
83 public URI2RepositoryMapping getMapping(String uri) {
84 for (URI2RepositoryMapping mapping : mappings) {
85 if (mapping.matches(uri)) {
86 return mapping;
87 }
88 }
89 return this.getDefaultMapping();
90 }
91
92 public URI2RepositoryMapping getDefaultMapping() {
93 return DEFAULT_MAPPING;
94 }
95
96
97
98
99 public String getHandle(String uri) {
100 return this.getMapping(uri).getHandle(uri);
101 }
102
103
104
105
106 public String getRepository(String uri) {
107 return this.getMapping(uri).getRepository();
108 }
109
110
111
112
113 public String getURI(String repository, String handle) {
114 try {
115 return getURI(LinkFactory.createLink(repository, handle, null, null, null));
116 }
117 catch (LinkException e) {
118 log.error("can't map [" + handle + "] to a uri", e);
119 }
120 return handle;
121 }
122
123 public String getURI(Link uuidLink) {
124 for (URI2RepositoryMapping mapping : mappings) {
125 if (StringUtils.equals(mapping.getRepository(), uuidLink.getRepository()) && uuidLink.getHandle().startsWith(mapping.getHandlePrefix())) {
126 return mapping.getURI(uuidLink);
127 }
128 }
129 return this.getDefaultMapping().getURI(uuidLink);
130 }
131
132 public void addMapping(URI2RepositoryMapping mapping) {
133 mappings.add(mapping);
134 }
135
136 public static URI2RepositoryManager getInstance() {
137 return Components.getSingleton(URI2RepositoryManager.class);
138 }
139
140
141
142
143 public Collection<URI2RepositoryMapping> getMappings() {
144 return this.mappings;
145 }
146
147 }