package org.jaudiotagger.audio.asf.data; import java.math.BigInteger; /** * A factory for creating appropriate {@link MetadataContainer} objects upon * specified {@linkplain ContainerType container types}.<br> * * @author Christian Laireiter */ public final class MetadataContainerFactory { /** * Factory instance. */ private final static MetadataContainerFactory INSTANCE = new MetadataContainerFactory(); /** * Returns an instance. * * @return an instance. */ public static MetadataContainerFactory getInstance() { return INSTANCE; } /** * Hidden utility class constructor. */ private MetadataContainerFactory() { // Hidden } /** * Creates an appropriate {@linkplain MetadataContainer container * implementation} for the given container type. * * @param type * the type of container to get a container instance for. * @return appropriate container implementation. */ public MetadataContainer createContainer(final ContainerType type) { return createContainer(type, 0, BigInteger.ZERO); } /** * Convenience Method for I/O. Same as * {@link #createContainer(ContainerType)}, but additionally assigns * position and size. (since a {@link MetadataContainer} is actually a * {@link Chunk}). * * @param type * The containers type. * @param pos * the position within the stream. * @param chunkSize * the size of the container. * @return an appropriate container implementation with assigned size and * position. */ public MetadataContainer createContainer(final ContainerType type, final long pos, final BigInteger chunkSize) { MetadataContainer result; if (type == ContainerType.CONTENT_DESCRIPTION) { result = new ContentDescription(pos, chunkSize); } else if (type == ContainerType.CONTENT_BRANDING) { result = new ContentBranding(pos, chunkSize); } else { result = new MetadataContainer(type, pos, chunkSize); } return result; } /** * Convenience method which calls {@link #createContainer(ContainerType)} * for each given container type. * * @param types * types of the container which are to be created. * @return appropriate container implementations. */ public MetadataContainer[] createContainers(final ContainerType[] types) { assert types != null; final MetadataContainer[] result = new MetadataContainer[types.length]; for (int i = 0; i < result.length; i++) { result[i] = createContainer(types[i]); } return result; } }