3adb9e8d079fa68475b433e2d0a69982b8b4af97
[Mograsim.git] / net.mograsim.logic.ui / src / net / mograsim / logic / ui / serializing / snippets / SnippetSupplier.java
1 package net.mograsim.logic.ui.serializing.snippets;
2
3 import java.util.function.BiFunction;
4
5 import com.google.gson.Gson;
6 import com.google.gson.JsonElement;
7
8 import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
9
10 public interface SnippetSupplier<P, S>
11 {
12         public Class<P> getParamClass();
13
14         public S create(SubmodelComponent component, P params);
15
16         public default S create(SubmodelComponent component, JsonElement params)
17         {
18                 return create(component, new Gson().fromJson(params, getParamClass()));
19         }
20
21         public static <P, S> SnippetSupplier<P, S> create(Class<P> paramClass, BiFunction<SubmodelComponent, P, S> supplier)
22         {
23                 return new SnippetSupplier<>()
24                 {
25                         @Override
26                         public Class<P> getParamClass()
27                         {
28                                 return paramClass;
29                         }
30
31                         @Override
32                         public S create(SubmodelComponent component, P params)
33                         {
34                                 return supplier.apply(component, params);
35                         }
36                 };
37         }
38 }