package org.korsakow.services.encoders.sound;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
public class SoundEncoderFactory
{
private static SoundEncoderFactory defaultFactory;
public static SoundEncoderFactory getDefaultFactory()
{
if (defaultFactory == null)
defaultFactory = new SoundEncoderFactory();
return defaultFactory;
}
private final Collection<SoundEncoder.SoundEncoderDescription> descriptions = new ArrayList<SoundEncoder.SoundEncoderDescription>();
private final Collection<SoundFormat> requiredInputFormats = new HashSet<SoundFormat>();
private final Collection<SoundFormat> requiredOutputFormats = new HashSet<SoundFormat>();
public void addEncoder(SoundEncoder.SoundEncoderDescription description)
{
descriptions.add(description);
}
public void addRequiredInputFormat(SoundFormat format)
{
requiredInputFormats.add(format);
}
public void addRequiredOutputFormat(SoundFormat format)
{
requiredOutputFormats.add(format);
}
public SoundEncoder createSoundEncoder() throws SoundEncoderException
{
for (SoundEncoder.SoundEncoderDescription desc : descriptions) {
if (!desc.getSupportedInputFormats().containsAll(requiredInputFormats))
continue;
if (!desc.getSupportedOutputFormats().containsAll(requiredOutputFormats))
continue;
SoundEncoder soundEncoder;
try {
soundEncoder = desc.getEncoderClass().newInstance();
} catch (InstantiationException e) {
throw new SoundEncoderException(e);
} catch (IllegalAccessException e) {
throw new SoundEncoderException(e);
}
return soundEncoder;
}
throw new SoundEncoderException("No encoder matching the requirements was found");
}
}