1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.client.console.commons;
20
21 import java.util.ArrayList;
22 import java.util.Collections;
23 import java.util.List;
24 import java.util.stream.Collectors;
25 import org.apache.syncope.client.console.SyncopeConsoleSession;
26 import org.apache.syncope.client.console.init.ClassPathScanImplementationLookup;
27 import org.apache.syncope.client.console.rest.ImplementationRestClient;
28 import org.apache.syncope.common.lib.policy.AccountRuleConf;
29 import org.apache.syncope.common.lib.policy.PasswordRuleConf;
30 import org.apache.syncope.common.lib.report.ReportConf;
31 import org.apache.syncope.common.lib.to.ImplementationTO;
32 import org.apache.syncope.common.lib.types.IdRepoImplementationType;
33 import org.apache.syncope.common.lib.types.ImplementationEngine;
34 import org.apache.wicket.model.IModel;
35 import org.apache.wicket.model.LoadableDetachableModel;
36
37 public class IdRepoImplementationInfoProvider implements ImplementationInfoProvider {
38
39 private static final long serialVersionUID = -6620368595630782392L;
40
41 protected final ClassPathScanImplementationLookup lookup;
42
43 protected final ImplementationRestClient implementationRestClient;
44
45 public IdRepoImplementationInfoProvider(
46 final ClassPathScanImplementationLookup lookup,
47 final ImplementationRestClient implementationRestClient) {
48
49 this.lookup = lookup;
50 this.implementationRestClient = implementationRestClient;
51 }
52
53 @Override
54 public ViewMode getViewMode(final ImplementationTO implementation) {
55 return implementation.getEngine() == ImplementationEngine.GROOVY
56 ? ViewMode.GROOVY_BODY
57 : IdRepoImplementationType.REPORT_DELEGATE.equals(implementation.getType())
58 || IdRepoImplementationType.ACCOUNT_RULE.equals(implementation.getType())
59 || IdRepoImplementationType.PASSWORD_RULE.equals(implementation.getType())
60 ? ViewMode.JSON_BODY
61 : ViewMode.JAVA_CLASS;
62 }
63
64 @Override
65 public List<String> getClasses(final ImplementationTO implementation, final ViewMode viewMode) {
66 List<String> classes = List.of();
67 if (viewMode == ViewMode.JAVA_CLASS) {
68 classes = SyncopeConsoleSession.get().getPlatformInfo().getJavaImplInfo(implementation.getType()).
69 map(javaImplInfo -> new ArrayList<>(javaImplInfo.getClasses())).orElseGet(ArrayList::new);
70 } else if (viewMode == ViewMode.JSON_BODY) {
71 switch (implementation.getType()) {
72 case IdRepoImplementationType.REPORT_DELEGATE:
73 classes = lookup.getClasses(ReportConf.class).stream().
74 map(Class::getName).collect(Collectors.toList());
75 break;
76
77 case IdRepoImplementationType.ACCOUNT_RULE:
78 classes = lookup.getClasses(AccountRuleConf.class).stream().
79 map(Class::getName).collect(Collectors.toList());
80 break;
81
82 case IdRepoImplementationType.PASSWORD_RULE:
83 classes = lookup.getClasses(PasswordRuleConf.class).stream().
84 map(Class::getName).collect(Collectors.toList());
85 break;
86
87 default:
88 }
89 }
90 if (!classes.isEmpty()) {
91 Collections.sort(classes);
92 }
93
94 return classes;
95 }
96
97 @Override
98 public String getGroovyTemplateClassName(final String implementationType) {
99 String templateClassName = null;
100
101 switch (implementationType) {
102 case IdRepoImplementationType.ACCOUNT_RULE:
103 templateClassName = "MyAccountRule";
104 break;
105
106 case IdRepoImplementationType.PASSWORD_RULE:
107 templateClassName = "MyPasswordRule";
108 break;
109
110 case IdRepoImplementationType.TASKJOB_DELEGATE:
111 templateClassName = "MySchedTaskJobDelegate";
112 break;
113
114 case IdRepoImplementationType.REPORT_DELEGATE:
115 templateClassName = "MyReportJobDelegate";
116 break;
117
118 case IdRepoImplementationType.LOGIC_ACTIONS:
119 templateClassName = "MyLogicActions";
120 break;
121
122 case IdRepoImplementationType.MACRO_ACTIONS:
123 templateClassName = "MyMacroActions";
124 break;
125
126 case IdRepoImplementationType.ATTR_VALUE_VALIDATOR:
127 templateClassName = "MyAttrValueValidator";
128 break;
129
130 case IdRepoImplementationType.RECIPIENTS_PROVIDER:
131 templateClassName = "MyRecipientsProvider";
132 break;
133
134 case IdRepoImplementationType.ITEM_TRANSFORMER:
135 templateClassName = "MyItemTransformer";
136 break;
137
138 case IdRepoImplementationType.COMMAND:
139 templateClassName = "MyCommand";
140 break;
141
142 default:
143 }
144
145 return templateClassName;
146 }
147
148 @Override
149 public Class<?> getClass(final String implementationType, final String name) {
150 Class<?> clazz = null;
151 switch (implementationType) {
152 case IdRepoImplementationType.REPORT_DELEGATE:
153 clazz = lookup.getClasses(ReportConf.class).stream().
154 filter(c -> c.getName().equals(name)).findFirst().orElse(null);
155 break;
156
157 case IdRepoImplementationType.ACCOUNT_RULE:
158 clazz = lookup.getClasses(AccountRuleConf.class).stream().
159 filter(c -> c.getName().equals(name)).findFirst().orElse(null);
160 break;
161
162 case IdRepoImplementationType.PASSWORD_RULE:
163 clazz = lookup.getClasses(PasswordRuleConf.class).stream().
164 filter(c -> c.getName().equals(name)).findFirst().orElse(null);
165 break;
166
167 default:
168 }
169
170 return clazz;
171 }
172
173 @Override
174 public IModel<List<String>> getTaskJobDelegates() {
175 return new LoadableDetachableModel<>() {
176
177 private static final long serialVersionUID = 5275935387613157437L;
178
179 @Override
180 protected List<String> load() {
181 return implementationRestClient.list(IdRepoImplementationType.TASKJOB_DELEGATE).stream().
182 map(ImplementationTO::getKey).sorted().collect(Collectors.toList());
183 }
184 };
185 }
186
187 @Override
188 public IModel<List<String>> getReportJobDelegates() {
189 return new LoadableDetachableModel<>() {
190
191 private static final long serialVersionUID = 5275935387613157437L;
192
193 @Override
194 protected List<String> load() {
195 return implementationRestClient.list(IdRepoImplementationType.REPORT_DELEGATE).stream().
196 map(ImplementationTO::getKey).sorted().collect(Collectors.toList());
197 }
198 };
199 }
200
201 @Override
202 public IModel<List<String>> getReconFilterBuilders() {
203 return new LoadableDetachableModel<>() {
204
205 private static final long serialVersionUID = 5275935387613157437L;
206
207 @Override
208 protected List<String> load() {
209 return List.of();
210 }
211 };
212 }
213
214 @Override
215 public IModel<List<String>> getMacroActions() {
216 return new LoadableDetachableModel<>() {
217
218 private static final long serialVersionUID = 5275935387613157437L;
219
220 @Override
221 protected List<String> load() {
222 return implementationRestClient.list(IdRepoImplementationType.MACRO_ACTIONS).stream().
223 map(ImplementationTO::getKey).sorted().collect(Collectors.toList());
224 }
225 };
226 }
227
228 @Override
229 public IModel<List<String>> getPullActions() {
230 return new LoadableDetachableModel<>() {
231
232 private static final long serialVersionUID = 5275935387613157437L;
233
234 @Override
235 protected List<String> load() {
236 return List.of();
237 }
238 };
239 }
240
241 @Override
242 public IModel<List<String>> getPushActions() {
243 return new LoadableDetachableModel<>() {
244
245 private static final long serialVersionUID = 5275935387613157437L;
246
247 @Override
248 protected List<String> load() {
249 return List.of();
250 }
251 };
252 }
253 }