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.ui.framework.app.embedded;
35
36 import info.magnolia.context.MgnlContext;
37 import info.magnolia.ui.api.app.SubAppContext;
38 import info.magnolia.ui.api.location.Location;
39 import info.magnolia.ui.api.view.View;
40 import info.magnolia.ui.framework.app.BaseSubApp;
41
42 import javax.inject.Inject;
43
44 import org.apache.commons.lang.StringUtils;
45 import org.slf4j.Logger;
46 import org.slf4j.LoggerFactory;
47
48
49
50
51
52 public class EmbeddedPageSubApp extends BaseSubApp {
53
54 private static final Logger log = LoggerFactory.getLogger(EmbeddedPageSubApp.class);
55 private Location lastLocation;
56
57 @Inject
58 public EmbeddedPageSubApp(SubAppContext subAppContext, EmbeddedPageView pageView) {
59 super(subAppContext, pageView);
60 }
61
62 @Override
63 public View start(Location location) {
64 this.lastLocation = location;
65 String url = location.getParameter();
66 if (StringUtils.isEmpty(url)) {
67 EmbeddedPageSubAppDescriptor subAppDescriptor = ((EmbeddedPageSubAppDescriptor) getSubAppContext().getSubAppDescriptor());
68 url = subAppDescriptor.getUrl();
69 }
70
71 url = updateUrl(url);
72 getView().setUrl(url);
73 return super.start(location);
74 }
75
76
77
78
79 @Override
80 public void locationChanged(Location location) {
81 String url = location.getParameter();
82 if (StringUtils.isNotBlank(url) && !url.equals(lastLocation.getParameter())) {
83 getView().setUrl(updateUrl(url));
84 }
85 this.lastLocation = location;
86 super.locationChanged(location);
87 }
88
89 @Override
90 public EmbeddedPageView getView() {
91 return (EmbeddedPageView) super.getView();
92 }
93
94
95
96
97 private String updateUrl(String url) {
98 boolean isInternalPage = !url.startsWith("http");
99
100 if(isInternalPage) {
101 url = url.startsWith("/") ? MgnlContext.getContextPath() + url : MgnlContext.getContextPath() + "/" + url;
102 }
103 return url;
104 }
105 }