+ /**
+ * Helper bridge for operation containers ({@code input} and {@code output}).
+ *
+ * @param <D> Class representing declared version of this statement.
+ */
+ public interface OperationContainerMixin<D extends DeclaredStatement<QName>>
+ extends ContainerLike, DocumentedNodeMixin.WithStatus<QName, D>, DataNodeContainerMixin<QName, D>,
+ MustConstraintMixin<QName, D>, WhenConditionMixin<QName, D>, AugmentationTargetMixin<QName, D>,
+ SchemaNodeMixin<QName, D>, CopyableMixin<QName, D> {
+ @Override
+ default @NonNull QName argument() {
+ return getQName();
+ }
+
+ @Override
+ default Optional<ActionDefinition> findAction(final QName qname) {
+ return Optional.empty();
+ }
+
+ @Override
+ default Optional<NotificationDefinition> findNotification(final QName qname) {
+ return Optional.empty();
+ }
+
+ @Override
+ default Collection<? extends ActionDefinition> getActions() {
+ return ImmutableSet.of();
+ }
+
+ @Override
+ default Collection<? extends NotificationDefinition> getNotifications() {
+ return ImmutableSet.of();
+ }
+
+ @Override
+ default boolean isConfiguration() {
+ return false;
+ }
+
+ default String defaultToString() {
+ return MoreObjects.toStringHelper(this).add("path", getPath()).toString();
+ }
+ }
+
+ /**
+ * Helper bridge for {@code anydata} and {@code anyxml} opaque data.
+ *
+ * @param <D> Class representing declared version of this statement.
+ */
+ public interface OpaqueDataSchemaNodeMixin<D extends DeclaredStatement<QName>>
+ extends DerivableSchemaNode, DataSchemaNodeMixin<QName, D>, DocumentedNodeMixin.WithStatus<QName, D>,
+ MandatoryMixin<QName, D>, MustConstraintMixin<QName, D>, WhenConditionMixin<QName, D> {
+ @Override
+ default @NonNull QName argument() {
+ return getQName();
+ }
+ }
+
+ /**
+ * Helper bridge for {@code rpc} and {@code action} operations.
+ *
+ * @param <D> Class representing declared version of this statement.
+ */
+ public interface OperationDefinitionMixin<D extends DeclaredStatement<QName>>
+ extends SchemaNodeMixin<QName, D>, OperationDefinition {
+ @Override
+ default @NonNull QName argument() {
+ return getQName();
+ }
+
+ @Override
+ default Collection<? extends TypeDefinition<?>> getTypeDefinitions() {
+ return filterTypeDefinitions(this);
+ }
+
+ @Override
+ default Collection<? extends GroupingDefinition> getGroupings() {
+ return filterEffectiveStatements(GroupingDefinition.class);
+ }
+
+ @Override
+ default InputSchemaNode getInput() {
+ return findAsContainer(this, InputEffectiveStatement.class, InputSchemaNode.class);
+ }
+
+ @Override
+ default OutputSchemaNode getOutput() {
+ return findAsContainer(this, OutputEffectiveStatement.class, OutputSchemaNode.class);
+ }
+ }
+