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