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;
35
36 import info.magnolia.ui.api.app.launcherlayout.AppLauncherLayout;
37 import info.magnolia.ui.api.app.launcherlayout.AppLauncherLayoutManager;
38 import info.magnolia.ui.api.location.DefaultLocation;
39 import info.magnolia.ui.api.location.Location;
40 import info.magnolia.ui.api.location.LocationHistoryMapper;
41
42
43
44
45 public class DefaultLocationHistoryMapper implements LocationHistoryMapper {
46
47 private AppLauncherLayoutManager appLauncherLayoutManager;
48
49 public DefaultLocationHistoryMapper(AppLauncherLayoutManager appLauncherLayoutManager) {
50 this.appLauncherLayoutManager = appLauncherLayoutManager;
51 }
52
53 @Override
54 public Location getLocation(String fragment) {
55
56 String appType = DefaultLocation.extractAppType(fragment);
57 String appName = DefaultLocation.extractAppName(fragment);
58 String subAppId = DefaultLocation.extractSubAppId(fragment);
59 String parameter = DefaultLocation.extractParameter(fragment);
60
61 if (!supported(appType, appName, subAppId, parameter)) {
62 return null;
63 }
64
65 return new DefaultLocation(appType, appName, subAppId, parameter);
66 }
67
68 @Override
69 public String getFragment(Location location) {
70
71 if (!supported(location.getAppType(), location.getAppName(), location.getSubAppId(), location.getParameter())) {
72 return null;
73 }
74
75 return location.toString();
76 }
77
78 private boolean supported(String appType, String appName, String subAppId, String parameter) {
79
80 if (appType.equals(Location.LOCATION_TYPE_SHELL_APP) && (appName.equals("applauncher") || appName.equals("pulse") || appName.equals("favorite"))) {
81 return true;
82 }
83
84 if (!appType.equals(Location.LOCATION_TYPE_APP)) {
85 return false;
86 }
87
88 AppLauncherLayout appLauncherLayout = appLauncherLayoutManager.getLayoutForCurrentUser();
89 return appLauncherLayout.containsApp(appName);
90 }
91 }