package org.nate;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import org.nate.exception.EncoderNotAvailableException;
public class Encoders {
private Map<String, Encoder> encoders = new HashMap<String, Encoder>();
public void register(Encoder encoder) {
String type = encoder.type().toUpperCase();
register(type, encoder);
}
private void register(String type, Encoder encoder) {
if (encoders.containsKey(type))
throw new IllegalArgumentException("Encoder for type '" + encoder.type() + "' is already registered.");
encoders.put(type, encoder);
}
public Encoder encoderFor(String type) {
return encoderForType(type.toUpperCase());
}
private Encoder encoderForType(String type) {
Encoder encoder = encoders.get(type);
if (encoder == null) {
throw new EncoderNotAvailableException(type);
}
return encoder;
}
public Encoder encoderFor(File file) {
return encoderFor(filenameExtension(file));
}
private String filenameExtension(File file) {
String filename = file.getName();
int period = filename.lastIndexOf(".");
if (period != -1)
return filename.substring(period + 1);
throw new IllegalStateException("Can't file file extension for '" + file.getName() + "'");
}
}