View Javadoc
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  	W createUiPart(V parent, M context);
14  	
15  	/**
16  	 * Whether this parent view is supported.
17  	 * 
18  	 * @return true by default.
19  	 */
20  	default boolean isViewSupported(V parent) {
21  		return true;
22  	}
23  
24  	/**
25  	 * Whether this context is supported.
26  	 * 
27  	 * @return true by default.
28  	 */
29  	default boolean isModelSupported(M context) {
30  		return true;
31  	}
32  
33  	default W apply(V parent, M context) {
34  		if (!isViewSupported(parent))
35  			throw new IllegalArgumentException("Parent view " + parent + "is not supported.");
36  		if (!isModelSupported(context))
37  			throw new IllegalArgumentException("Model context " + context + "is not supported.");
38  		return createUiPart(parent, context);
39  	}
40  
41  	default W createUiPart(V parent) {
42  		return createUiPart(parent, null);
43  	}
44  }