package download.impl;
import download.Config;
import download.api.Connection;
import download.api.ConnectionException;
import download.api.ConnectionManager;
import java.lang.reflect.InvocationTargetException;
public class ConnectionManagerImpl implements ConnectionManager {
@Override
public Connection open(String url, int startPos, int endPos) throws ConnectionException {
String protocol = url.split(":", 2)[0];
try {
Class<?> clazz = Class.forName(getClassName(protocol));
return (Connection) clazz.getDeclaredConstructor(String.class, int.class, int.class)
.newInstance(url, startPos, endPos);
} catch (ClassNotFoundException | IllegalAccessException |
NoSuchMethodException | InstantiationException | InvocationTargetException e) {
return new DefaultConnection(url, startPos, endPos);
}
}
private String getClassName(String protocol) {
String packageName = Config.packageName + ".impl.";
String className = Character.toUpperCase(protocol.charAt(0)) + protocol.substring(1) + "Connection";
return packageName + className;
}
}