package org.lodder.subtools.multisubdownloader.lib;
import java.io.File;
import org.lodder.subtools.multisubdownloader.lib.control.MovieReleaseControl;
import org.lodder.subtools.multisubdownloader.lib.control.ReleaseControl;
import org.lodder.subtools.multisubdownloader.lib.control.TvReleaseControl;
import org.lodder.subtools.multisubdownloader.settings.model.Settings;
import org.lodder.subtools.sublibrary.Manager;
import org.lodder.subtools.sublibrary.control.ReleaseParser;
import org.lodder.subtools.sublibrary.exception.ReleaseControlException;
import org.lodder.subtools.sublibrary.exception.ReleaseParseException;
import org.lodder.subtools.sublibrary.model.MovieRelease;
import org.lodder.subtools.sublibrary.model.Release;
import org.lodder.subtools.sublibrary.model.TvRelease;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ReleaseFactory {
private ReleaseParser releaseParser;
private ReleaseControl releaseControl;
private Settings settings;
private Manager manager;
private static final Logger LOGGER = LoggerFactory.getLogger(ReleaseFactory.class);
public ReleaseFactory(Settings settings, Manager manager){
releaseParser = new ReleaseParser();
this.settings = settings;
this.manager = manager;
}
public Release createRelease(final File file){
Release r = null;
try {
r = releaseParser.parse(file);
switch (r.getVideoType()){
case EPISODE:
releaseControl = new TvReleaseControl((TvRelease) r, settings, manager);
break;
case MOVIE:
releaseControl = new MovieReleaseControl((MovieRelease) r, settings, manager);
break;
default:
break;
}
releaseControl.process(settings.getMappingSettings().getMappingList());
r = releaseControl.getVideoFile();
} catch (ReleaseParseException e) {
LOGGER.error("createRelease", e);
} catch (ReleaseControlException e) {
LOGGER.error("createRelease", e);
return null;
}
return r;
}
}