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