001/* 002 * SPDX-FileCopyrightText: none 003 * SPDX-License-Identifier: CC0-1.0 004 */ 005 006package dev.metaschema.databind.model.info; 007 008import java.io.IOException; 009import java.util.Collection; 010import java.util.List; 011import java.util.Map; 012 013import dev.metaschema.core.util.ObjectUtils; 014import dev.metaschema.databind.model.IBoundInstanceModel; 015import edu.umd.cs.findbugs.annotations.NonNull; 016 017/** 018 * An abstract base class for writing model instance collections. 019 * <p> 020 * This class provides the framework for writing collections of items during 021 * serialization, with support for different collection types. 022 * 023 * @param <ITEM> 024 * the Java type of items being written 025 */ 026public abstract class AbstractModelInstanceWriteHandler<ITEM> 027 implements IModelInstanceWriteHandler<ITEM> { 028 @NonNull 029 private final IBoundInstanceModel<ITEM> instance; 030 031 /** 032 * Construct a new write handler for the provided model instance. 033 * 034 * @param instance 035 * the model instance to write 036 */ 037 public AbstractModelInstanceWriteHandler(@NonNull IBoundInstanceModel<ITEM> instance) { 038 this.instance = instance; 039 } 040 041 /** 042 * Get the associated instance. 043 * 044 * @return the instance 045 */ 046 public IBoundInstanceModel<ITEM> getInstance() { 047 return instance; 048 } 049 050 /** 051 * Get the collection information. 052 * 053 * @return the info 054 */ 055 @NonNull 056 public IModelInstanceCollectionInfo<ITEM> getCollectionInfo() { 057 return instance.getCollectionInfo(); 058 } 059 060 @Override 061 public void writeList(List<ITEM> items) throws IOException { 062 writeCollection(items); 063 } 064 065 @Override 066 public void writeMap(Map<String, ITEM> items) throws IOException { 067 writeCollection(ObjectUtils.notNull(items.values())); 068 } 069 070 private void writeCollection(@NonNull Collection<ITEM> items) throws IOException { 071 for (ITEM item : items) { 072 writeItem(ObjectUtils.requireNonNull(item)); 073 } 074 } 075}