001/*-
002 *******************************************************************************
003 * Copyright (c) 2011, 2016 Diamond Light Source Ltd.
004 * All rights reserved. This program and the accompanying materials
005 * are made available under the terms of the Eclipse Public License v1.0
006 * which accompanies this distribution, and is available at
007 * http://www.eclipse.org/legal/epl-v10.html
008 *
009 * Contributors:
010 *    Peter Chang - initial API and implementation and/or initial documentation
011 *******************************************************************************/
012
013package org.eclipse.january.dataset;
014
015import java.util.List;
016
017import org.eclipse.january.MetadataException;
018import org.eclipse.january.metadata.IMetadata;
019import org.eclipse.january.metadata.MetadataType;
020
021/**
022 * Interface which acts to provide metadata from an object
023 */
024public interface IMetadataProvider {
025
026        /**
027         * @deprecated Use {@code getFirstMetadata(IMetadata.class)} instead
028         * @return an instance of IMetadata
029         * @throws Exception when failing to fetch metadata
030         */
031        @Deprecated
032        public IMetadata getMetadata() throws Exception;
033
034        /**
035         * @param <T> metadata sub-interface
036         * @param clazz if null return everything
037         * @return list of metadata with given class (or its super interface)
038         * @throws MetadataException when failing to fetch metadata
039         */
040        public <T extends MetadataType> List<T> getMetadata(Class<T> clazz) throws MetadataException;
041
042        /**
043         * @param <T> metadata sub-interface
044         * @param clazz if null return first from everything
045         * @return first element from list of metadata with given class (or its super interface)
046         */
047        public <T extends MetadataType> T getFirstMetadata(Class<T> clazz);
048}