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.ioc;
35
36 import java.lang.annotation.Annotation;
37 import java.util.List;
38 import java.util.Objects;
39
40 import org.apache.commons.lang3.StringUtils;
41
42
43
44
45
46
47
48
49
50
51
52
53 public class UiAnnotations {
54
55 private UiAnnotations() {
56 }
57
58 public static UiContextAnnotation forAdmincentral() {
59 return new AdmincentralImpl();
60 }
61
62 public static UiContextAnnotation forSubApp(String appName, String subAppName) {
63 return new SubAppImpl(appName, subAppName);
64 }
65
66 public static UiContextAnnotation forSubApps() {
67 return new SubAppImpl("", "");
68 }
69
70 public static UiContextAnnotation forApp(String appName) {
71 return new AppImpl(appName);
72 }
73
74 public static UiContextAnnotation forApps() {
75 return new AppImpl("");
76 }
77
78 public static UiContextAnnotation forView(String viewName) {
79 return new ViewImpl(viewName);
80 }
81
82 public static UiContextAnnotation forViews() {
83 return new ViewImpl();
84 }
85
86 static UiContextAnnotation cast(Annotation annotation) {
87 if (annotation instanceof UiContextAnnotation) {
88 return (UiContextAnnotation) annotation;
89 }
90
91 throw new IllegalArgumentException("Provided annotation [" + annotation + "] is not an instance of UI context annotation");
92 }
93
94 static Annotation parseAnnotation(String id, List<String> appNames) {
95 switch (id) {
96 case "admincentral":
97 return new AdmincentralImpl();
98 case "app":
99 return new AppImpl();
100 case "subapp":
101 return new SubAppImpl();
102 case "choosedialog":
103 return new ViewImpl("choosedialog");
104 case "mediaeditor":
105 return new ViewImpl("mediaeditor");
106 default:
107 final String appWithSubApp = StringUtils.removeStart(id, "app-");
108 return appNames.stream().filter(appWithSubApp::startsWith).findFirst().map(appName -> {
109 if (Objects.equals(appName, appWithSubApp)) {
110 return UiAnnotations.forApp(appName);
111 }
112
113 final String subAppName = StringUtils.removeStart(appWithSubApp, appName + "-");
114 return UiAnnotations.forSubApp(appName, subAppName);
115 }).orElseThrow(IllegalArgumentException::new);
116 }
117
118 }
119
120 }