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.link;
35
36 import info.magnolia.cms.core.AggregationState;
37 import info.magnolia.context.MgnlContext;
38 import info.magnolia.objectfactory.Components;
39
40 import java.util.HashMap;
41 import java.util.Map;
42
43 import javax.jcr.Node;
44
45 import org.slf4j.Logger;
46 import org.slf4j.LoggerFactory;
47
48
49
50
51 public class LinkTransformerManager {
52
53 private static final Logger log = LoggerFactory.getLogger(LinkTransformerManager.class);
54
55 private boolean makeBrowserLinksRelative = false;
56 private boolean addContextPathToBrowserLinks = false;
57
58 private Map<String, LinkTransformer> transformers;
59
60 public LinkTransformerManager() {
61 this.transformers = new HashMap<String, LinkTransformer>();
62 }
63
64 public Map<String, LinkTransformer> getTransformers() {
65 return this.transformers;
66 }
67
68 public void setTransformers(Map<String, LinkTransformer> transformers) {
69 this.transformers = transformers;
70 }
71
72 public void addTransformer(String key, LinkTransformer transformer) {
73 this.transformers.put(key, transformer);
74 }
75
76 public boolean isAddContextPathToBrowserLinks() {
77 return this.addContextPathToBrowserLinks;
78 }
79
80 public void setAddContextPathToBrowserLinks(boolean addContextPathToBrowserLinks) {
81 this.addContextPathToBrowserLinks = addContextPathToBrowserLinks;
82 }
83
84 public boolean isMakeBrowserLinksRelative() {
85 return this.makeBrowserLinksRelative;
86 }
87
88 public void setMakeBrowserLinksRelative(boolean makeBrowserLinksRelative) {
89 this.makeBrowserLinksRelative = makeBrowserLinksRelative;
90 }
91
92
93
94
95 public static LinkTransformerManager getInstance() {
96 return Components.getComponent(LinkTransformerManager.class);
97 }
98
99
100
101
102 public LinkTransformer getAbsoluteTransformer() {
103 return transformers.get("absolute");
104 }
105
106
107
108
109 public LinkTransformer getEditorTransformer() {
110 return transformers.get("editor");
111 }
112
113
114
115
116 public LinkTransformer getRelativeTransformer() {
117 return transformers.get("relative");
118 }
119
120
121
122
123 public LinkTransformer getCompleteURLTransformer() {
124 return transformers.get("completeURL");
125 }
126
127
128
129
130 public LinkTransformer getI18nTransformer() {
131 return transformers.get("i18n");
132 }
133
134
135
136
137 public AbsolutePathTransformer getAbsolute() {
138 return getAbsolute(true);
139 }
140
141
142
143
144 public AbsolutePathTransformer getAbsolute(boolean addContextPath) {
145 if (getAbsoluteTransformer() == null) {
146 return new AbsolutePathTransformer(addContextPath, true, true);
147 }
148 AbsolutePathTransformer/link/AbsolutePathTransformer.html#AbsolutePathTransformer">AbsolutePathTransformer transformer = (AbsolutePathTransformer) transformers.get("absolute");
149 transformer.setAddContextPath(addContextPath);
150 transformer.setUseI18N(true);
151 transformer.setUseURI2RepositoryMapping(true);
152 return transformer;
153 }
154
155
156
157
158 public RelativePathTransformer getRelative(Node page) {
159 if (getRelativeTransformer() == null) {
160 return new RelativePathTransformer(page, true, true);
161 }
162 RelativePathTransformer/link/RelativePathTransformer.html#RelativePathTransformer">RelativePathTransformer transformer = (RelativePathTransformer) transformers.get("relative");
163 transformer.setUseI18N(true);
164 transformer.setUseURI2RepositoryMapping(true);
165 transformer.setAbsolutSourcePath(page);
166 return transformer;
167 }
168
169
170
171
172 public RelativePathTransformer getRelative(String absolutePath) {
173 if (getRelativeTransformer() == null) {
174 return new RelativePathTransformer(absolutePath, true, true);
175 }
176 RelativePathTransformer/link/RelativePathTransformer.html#RelativePathTransformer">RelativePathTransformer transformer = (RelativePathTransformer) transformers.get("relative");
177 transformer.setUseI18N(true);
178 transformer.setUseURI2RepositoryMapping(true);
179 transformer.setAbsolutSourcePath(absolutePath);
180 return transformer;
181 }
182
183
184
185
186 public CompleteUrlPathTransformer getCompleteUrl() {
187 if (getCompleteURLTransformer() == null) {
188 return new CompleteUrlPathTransformer(true, true);
189 }
190 CompleteUrlPathTransformernk/CompleteUrlPathTransformer.html#CompleteUrlPathTransformer">CompleteUrlPathTransformer transformer = (CompleteUrlPathTransformer) transformers.get("completeURL");
191 transformer.setUseURI2RepositoryMapping(true);
192 transformer.setUseI18N(true);
193 return transformer;
194 }
195
196
197
198
199 public EditorLinkTransformer getEditorLink() {
200 if (getEditorTransformer() == null) {
201 return new EditorLinkTransformer();
202 }
203 return (EditorLinkTransformer) transformers.get("editor");
204 }
205
206
207
208
209
210
211 public LinkTransformer getBrowserLink(String currentPath) {
212 if (MgnlContext.isWebContext()) {
213 if (isMakeBrowserLinksRelative()) {
214 final AggregationState state = MgnlContext.getAggregationState();
215 if (currentPath == null && state != null) {
216 currentPath = state.getOriginalURI();
217 }
218 if (currentPath != null) {
219 return getRelative(currentPath);
220 }
221 }
222 return getAbsolute(addContextPathToBrowserLinks);
223 }
224 return getCompleteUrl();
225 }
226 }