1
2
3
4
5
6 package dev.metaschema.databind.model;
7
8 import dev.metaschema.core.model.IBoundObject;
9 import dev.metaschema.core.model.INamedModelInstanceGrouped;
10 import dev.metaschema.core.model.JsonGroupAsBehavior;
11 import dev.metaschema.core.model.util.ModuleUtils;
12 import dev.metaschema.core.util.ObjectUtils;
13 import dev.metaschema.databind.io.BindingException;
14 import dev.metaschema.databind.model.info.IFeatureComplexItemValueHandler;
15 import edu.umd.cs.findbugs.annotations.Nullable;
16
17
18
19
20 public interface IBoundInstanceModelGroupedNamed
21 extends INamedModelInstanceGrouped, IFeatureComplexItemValueHandler {
22 @Override
23 IBoundInstanceModelChoiceGroup getParentContainer();
24
25 @Override
26 IBoundDefinitionModelComplex getDefinition();
27
28 @Override
29 @Nullable
30 default IBoundInstanceFlag getEffectiveJsonKey() {
31 return JsonGroupAsBehavior.KEYED.equals(getParentContainer().getJsonGroupAsBehavior())
32 ? getJsonKey()
33 : null;
34 }
35
36 @Override
37 default IBoundInstanceFlag getJsonKey() {
38 String name = getParentContainer().getJsonKeyFlagInstanceName();
39 return name == null
40 ? null
41 : ObjectUtils.requireNonNull(
42 getDefinition().getFlagInstanceByName(
43 ModuleUtils.parseFlagName(getContainingModule(), name).getIndexPosition()));
44 }
45
46 @Override
47 default IBoundDefinitionModelAssembly getContainingDefinition() {
48 return getParentContainer().getContainingDefinition();
49 }
50
51 @Override
52 default String getName() {
53 return getDefinition().getName();
54 }
55
56 @Override
57 default IBoundObject deepCopyItem(IBoundObject item, IBoundObject parentInstance) throws BindingException {
58 return getDefinition().deepCopyItem(item, parentInstance);
59 }
60
61 @Override
62 default void callBeforeDeserialize(IBoundObject targetObject, IBoundObject parentObject) throws BindingException {
63 getDefinition().callBeforeDeserialize(targetObject, parentObject);
64 }
65
66 @Override
67 default void callAfterDeserialize(IBoundObject targetObject, IBoundObject parentObject) throws BindingException {
68 getDefinition().callAfterDeserialize(targetObject, parentObject);
69 }
70 }