001/*
002 * SPDX-FileCopyrightText: none
003 * SPDX-License-Identifier: CC0-1.0
004 */
005
006package dev.metaschema.databind.model;
007
008import dev.metaschema.core.model.IBoundObject;
009import dev.metaschema.core.model.IInstance;
010import edu.umd.cs.findbugs.annotations.NonNull;
011import edu.umd.cs.findbugs.annotations.Nullable;
012
013/**
014 * Represents a Metaschema module instance bound to Java data.
015 *
016 * @param <ITEM>
017 *          the Java type for associated bound objects
018 */
019public interface IBoundInstance<ITEM> extends IBoundProperty<ITEM>, IBoundModelElement, IInstance {
020  @Override
021  IBoundDefinitionModel<IBoundObject> getContainingDefinition();
022
023  @Override
024  default IBoundModule getContainingModule() {
025    return getContainingDefinition().getContainingModule();
026  }
027
028  /**
029   * {@inheritDoc}
030   * <p>
031   * Always bound to a field.
032   */
033  @Override
034  @Nullable
035  default Object getValue(@NonNull Object parent) {
036    return IBoundProperty.super.getValue(parent);
037  }
038
039  /**
040   * {@inheritDoc}
041   * <p>
042   * Always bound to a field.
043   */
044  @Override
045  default void setValue(@NonNull Object parentObject, @Nullable Object value) {
046    IBoundProperty.super.setValue(parentObject, value);
047  }
048}