]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.api/src/org/argeo/api/MvcProvider.java
Argeo CMS standalone distribution.
[lgpl/argeo-commons.git] / org.argeo.api / src / org / argeo / api / MvcProvider.java
1 package org.argeo.api;
2
3 import java.util.function.BiFunction;
4
5 /**
6 * Stateless UI part creator. Takes a parent view (V) and a model context (M) in
7 * order to create a view part (W) which can then be further configured. Such
8 * object can be used as services and reference other part of the model which
9 * are relevant for all created UI part.
10 */
11 @FunctionalInterface
12 public interface MvcProvider<V, M, W> extends BiFunction<V, M, W> {
13 /**
14 * Whether this parent view is supported.
15 *
16 * @return true by default.
17 */
18 default boolean isViewSupported(V parent) {
19 return true;
20 }
21
22 /**
23 * Whether this context is supported.
24 *
25 * @return true by default.
26 */
27 default boolean isModelSupported(M context) {
28 return true;
29 }
30
31 default W createUiPart(V parent, M context) {
32 if (!isViewSupported(parent))
33 throw new IllegalArgumentException("Parent view " + parent + "is not supported.");
34 if (!isModelSupported(context))
35 throw new IllegalArgumentException("Model context " + context + "is not supported.");
36 return apply(parent, context);
37 }
38 }