001/***************************************************************************** 002 * Copyright by The HDF Group. * 003 * Copyright by the Board of Trustees of the University of Illinois. * 004 * All rights reserved. * 005 * * 006 * This file is part of the HDF Java Products distribution. * 007 * The full copyright notice, including terms governing use, modification, * 008 * and redistribution, is contained in the files COPYING and Copyright.html. * 009 * COPYING can be found at the root of the source code distribution tree. * 010 * Or, see https://support.hdfgroup.org/products/licenses.html * 011 * If you do not have access to either file, you may request a copy from * 012 * help@hdfgroup.org. * 013 ****************************************************************************/ 014 015package hdf.object; 016 017import java.util.List; 018 019/** 020 * An interface that provides general I/O operations for object metadata 021 * attached to an object. For example, reading metadata content from the file 022 * into memory or writing metadata content from memory into the file. 023 * 024 * @see hdf.object.HObject 025 * 026 * @version 2.0 4/2/2018 027 * @author Peter X. Cao, Jordan T. Henderson 028 */ 029@SuppressWarnings("rawtypes") 030public interface MetaDataContainer 031{ 032 /** 033 * Retrieves the object's metadata, such as attributes, from the file. 034 * 035 * Metadata, such as attributes, is stored in a List. 036 * 037 * @return the list of metadata objects. 038 * 039 * @throws Exception 040 * if the metadata can not be retrieved 041 */ 042 List getMetadata() throws Exception; 043 044 /** 045 * Writes a specific piece of metadata (such as an attribute) into the file. 046 * 047 * If an HDF(4&5) attribute exists in the file, this method updates its 048 * value. If the attribute does not exist in the file, it creates the 049 * attribute in the file and attaches it to the object. It will fail to 050 * write a new attribute to the object where an attribute with the same name 051 * already exists. To update the value of an existing attribute in the file, 052 * one needs to get the instance of the attribute by getMetadata(), change 053 * its values, then use writeMetadata() to write the value. 054 * 055 * @param metadata 056 * the metadata to write. 057 * 058 * @throws Exception 059 * if the metadata can not be written 060 */ 061 void writeMetadata(Object metadata) throws Exception; 062 063 /** 064 * Deletes an existing piece of metadata from this object. 065 * 066 * @param metadata 067 * the metadata to delete. 068 * 069 * @throws Exception 070 * if the metadata can not be removed 071 */ 072 void removeMetadata(Object metadata) throws Exception; 073 074 /** 075 * Updates an existing piece of metadata attached to this object. 076 * 077 * @param metadata 078 * the metadata to update. 079 * 080 * @throws Exception 081 * if the metadata can not be updated 082 */ 083 void updateMetadata(Object metadata) throws Exception; 084 085 /** 086 * Check if the object has any attributes attached. 087 * 088 * @return true if it has any attributes, false otherwise. 089 */ 090 boolean hasAttribute(); 091 092 /** 093 * Removes all of the elements from metadata list. 094 * The list should be empty after this call returns. 095 */ 096 void clear(); 097}