ConfigFileLoader RE-DESIGN: Split into two parts, common settings and specific project ones, by inheritance and generics for the project's settings Enum
This commit is contained in:
parent
954c02141e
commit
bec734b64c
|
@ -1,2 +1,3 @@
|
|||
/.idea/
|
||||
/target/
|
||||
.DS_Store
|
|
@ -0,0 +1,65 @@
|
|||
package tv.mangrana.config;
|
||||
|
||||
import tv.mangrana.exception.IncorrectWorkingReferencesException;
|
||||
import tv.mangrana.utils.yml.FakeYmlLoader;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.EnumMap;
|
||||
|
||||
public abstract class CommonConfigFileLoader<P extends Enum<P>> {
|
||||
|
||||
private static final String CONFIG_FOLDER = "/config";
|
||||
|
||||
public enum CommonProjectConfiguration {
|
||||
RADARR_API_KEY,
|
||||
RADARR_API_HOST,
|
||||
SONARR_API_KEY,
|
||||
SONARR_API_HOST,
|
||||
PLEX_TOKEN,
|
||||
PLEX_HOST,
|
||||
PLEX_SECTIONS_LIST_URI,
|
||||
PLEX_SECTION_REFRESH_URI,
|
||||
SONARR_PATHS_STARTER,
|
||||
PLEX_PATHS_STARTER
|
||||
}
|
||||
private EnumMap<CommonProjectConfiguration, String> commonConfigurationsMap;
|
||||
|
||||
private final Class<P> projectConfigEnumType;
|
||||
private EnumMap<P, String> configurationsMap;
|
||||
|
||||
|
||||
public CommonConfigFileLoader(Class<P> projectConfigEnumType) throws IncorrectWorkingReferencesException {
|
||||
this.projectConfigEnumType = projectConfigEnumType;
|
||||
loadAllConfigFromFile(false);
|
||||
}
|
||||
public CommonConfigFileLoader<P> refresh() throws IncorrectWorkingReferencesException {
|
||||
return loadAllConfigFromFile(true);
|
||||
}
|
||||
|
||||
private CommonConfigFileLoader<P> loadAllConfigFromFile(boolean silently) throws IncorrectWorkingReferencesException {
|
||||
commonConfigurationsMap = new EnumMap<>(CommonProjectConfiguration.class);
|
||||
commonConfigurationsMap.putAll( loadFromFile(CommonProjectConfiguration.class, silently) );
|
||||
|
||||
configurationsMap = new EnumMap<>(projectConfigEnumType);
|
||||
configurationsMap.putAll( loadFromFile(projectConfigEnumType, silently) );
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
private <E extends Enum<E>> EnumMap<E, String> loadFromFile(Class<E> enumType, boolean silently) throws IncorrectWorkingReferencesException {
|
||||
File configFile = new File(System.getProperty("user.dir")
|
||||
+ CONFIG_FOLDER.concat("/").concat(getConfigFileName()));
|
||||
|
||||
return FakeYmlLoader.getEnumMapFromFile(configFile, enumType, silently);
|
||||
}
|
||||
|
||||
public String getConfig(P key) {
|
||||
return configurationsMap.get(key);
|
||||
}
|
||||
public String getCommonConfig(CommonProjectConfiguration key) {
|
||||
return commonConfigurationsMap.get(key);
|
||||
}
|
||||
|
||||
protected abstract String getConfigFileName();
|
||||
|
||||
}
|
|
@ -1,65 +0,0 @@
|
|||
package tv.mangrana.config;
|
||||
|
||||
import tv.mangrana.exception.IncorrectWorkingReferencesException;
|
||||
import tv.mangrana.utils.yml.FakeYmlLoader;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.EnumMap;
|
||||
|
||||
public class ConfigFileLoader {
|
||||
|
||||
private static final String CONFIG_FOLDER = "/config";
|
||||
private static final String CONFIG_FILE = "AfterDownloadCarerConfig.yml";
|
||||
|
||||
public enum ProjectConfiguration {
|
||||
MANAGE_FAILED_DOWNLOADS,
|
||||
IMMORTAL_PROCESS,
|
||||
GRABBED_FILE_IDENTIFIER_REGEX,
|
||||
RADARR_API_KEY,
|
||||
RADARR_API_HOST,
|
||||
SONARR_API_KEY,
|
||||
SONARR_API_HOST,
|
||||
DOWNLOADS_TEAM_DRIVE_ID,
|
||||
DOWNLOADS_SERIES_FOLDER_ID,
|
||||
MOVIES_TEAM_DRIVE_ID,
|
||||
SERIES_TEAM_DRIVE_ID,
|
||||
PLEX_TOKEN,
|
||||
PLEX_HOST,
|
||||
PLEX_SECTIONS_LIST_URI,
|
||||
PLEX_SECTION_REFRESH_URI,
|
||||
GOOGLE_RETRY_INTERVAL,
|
||||
SONARR_RETRY_INTERVAL,
|
||||
RADARR_RETRY_INTERVAL,
|
||||
SONARR_PATHS_STARTER,
|
||||
PLEX_PATHS_STARTER
|
||||
}
|
||||
|
||||
private EnumMap<ProjectConfiguration, String> configurationsMap;
|
||||
|
||||
public ConfigFileLoader() throws IncorrectWorkingReferencesException {
|
||||
loadFromFile(false);
|
||||
}
|
||||
private ConfigFileLoader(boolean silently) throws IncorrectWorkingReferencesException {
|
||||
loadFromFile(silently);
|
||||
}
|
||||
public ConfigFileLoader refresh() throws IncorrectWorkingReferencesException {
|
||||
return loadFromFile(true);
|
||||
}
|
||||
public static ConfigFileLoader getFreshConfig() throws IncorrectWorkingReferencesException {
|
||||
return new ConfigFileLoader(true);
|
||||
}
|
||||
|
||||
private ConfigFileLoader loadFromFile(boolean silently) throws IncorrectWorkingReferencesException {
|
||||
File configFile = new File(System.getProperty("user.dir")
|
||||
+ CONFIG_FOLDER.concat("/").concat(CONFIG_FILE));
|
||||
|
||||
configurationsMap = FakeYmlLoader.getEnumMapFromFile(configFile, ProjectConfiguration.class, silently);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getConfig(ProjectConfiguration key) {
|
||||
return configurationsMap.get(key);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,8 +1,5 @@
|
|||
package tv.mangrana.plex.url;
|
||||
|
||||
import tv.mangrana.config.ConfigFileLoader;
|
||||
import tv.mangrana.exception.IncorrectWorkingReferencesException;
|
||||
import tv.mangrana.utils.EasyLogger;
|
||||
import org.apache.http.HttpEntity;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.client.methods.HttpUriRequest;
|
||||
|
@ -11,6 +8,8 @@ import org.apache.http.impl.client.CloseableHttpClient;
|
|||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.w3c.dom.Document;
|
||||
import org.xml.sax.SAXException;
|
||||
import tv.mangrana.config.CommonConfigFileLoader;
|
||||
import tv.mangrana.utils.EasyLogger;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
|
@ -22,26 +21,26 @@ import java.net.URISyntaxException;
|
|||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import static tv.mangrana.config.ConfigFileLoader.ProjectConfiguration.*;
|
||||
import static tv.mangrana.config.CommonConfigFileLoader.CommonProjectConfiguration.*;
|
||||
import static tv.mangrana.utils.Output.log;
|
||||
import static tv.mangrana.utils.rest.APIInterface.ProtocolURLMark.HTTPS;
|
||||
|
||||
public class PlexCommandLauncher {
|
||||
|
||||
private final EasyLogger logger;
|
||||
private final ConfigFileLoader config;
|
||||
private final CommonConfigFileLoader<?> config;
|
||||
private final PlexLibrarySectionsResolver sectionResolver;
|
||||
|
||||
public PlexCommandLauncher(ConfigFileLoader config) {
|
||||
public PlexCommandLauncher(CommonConfigFileLoader<?> config) {
|
||||
this.config = config;
|
||||
this.logger = new EasyLogger();
|
||||
this.sectionResolver = new PlexLibrarySectionsResolver(this, config);
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws IncorrectWorkingReferencesException {
|
||||
String toRefresh="/tv/Series/C/City on a Hill (2019)";
|
||||
new PlexCommandLauncher(new ConfigFileLoader()).scanByPath(toRefresh);
|
||||
}
|
||||
// public static void main(String[] args) throws IncorrectWorkingReferencesException {
|
||||
// String toRefresh="/tv/Series/C/City on a Hill (2019)";
|
||||
// new PlexCommandLauncher(new CommonConfigFileLoader()).scanByPath(toRefresh);
|
||||
// }
|
||||
|
||||
public void scanByPath(String fullDestinationPath) {
|
||||
String plexPathToRefresh = getPlexUrlPath2Refresh(fullDestinationPath);
|
||||
|
@ -51,11 +50,11 @@ public class PlexCommandLauncher {
|
|||
HttpUriRequest httpGET = RequestBuilder.get()
|
||||
.setUri(new URI(plexRefreshURL))
|
||||
.addParameter("path", plexPathToRefresh)
|
||||
.addParameter("X-Plex-Token", config.getConfig(PLEX_TOKEN))
|
||||
.addParameter("X-Plex-Token", config.getCommonConfig(PLEX_TOKEN))
|
||||
.build();
|
||||
httpclient.execute(httpGET);
|
||||
@SuppressWarnings("unused")
|
||||
String urlWithTokenHidden = httpGET.getURI().toString().replaceFirst(config.getConfig(PLEX_TOKEN), "__plex_token__");
|
||||
String urlWithTokenHidden = httpGET.getURI().toString().replaceFirst(config.getCommonConfig(PLEX_TOKEN), "__plex_token__");
|
||||
logger.nLog("Launched URL command: {0}", httpGET.getURI().toString());
|
||||
} catch (Exception e) {
|
||||
logger.nHLog("Some error has happened using the URL <{0}>", plexRefreshURL);
|
||||
|
@ -64,10 +63,10 @@ public class PlexCommandLauncher {
|
|||
}
|
||||
|
||||
public String getPlexUrlPath2Refresh(String fullDestinationPath) {
|
||||
Pattern p = Pattern.compile(config.getConfig(SONARR_PATHS_STARTER).concat("(.+/.+ \\(\\d{4}\\))"));
|
||||
Pattern p = Pattern.compile(config.getCommonConfig(SONARR_PATHS_STARTER).concat("(.+/.+ \\(\\d{4}\\))"));
|
||||
Matcher m = p.matcher(fullDestinationPath);
|
||||
if (m.find()) {
|
||||
String pathInPlexDockerStart = config.getConfig(PLEX_PATHS_STARTER);
|
||||
String pathInPlexDockerStart = config.getCommonConfig(PLEX_PATHS_STARTER);
|
||||
return pathInPlexDockerStart.concat(m.group(1));
|
||||
}
|
||||
return null;
|
||||
|
@ -77,7 +76,7 @@ public class PlexCommandLauncher {
|
|||
try (CloseableHttpClient httpclient = HttpClients.createDefault()) {
|
||||
HttpUriRequest httpGET = RequestBuilder.get()
|
||||
.setUri(new URI(getPlexSectionsURL()))
|
||||
.addParameter("X-Plex-Token", config.getConfig(PLEX_TOKEN))
|
||||
.addParameter("X-Plex-Token", config.getCommonConfig(PLEX_TOKEN))
|
||||
.build();
|
||||
try (CloseableHttpResponse httpResponse = httpclient.execute(httpGET)) {
|
||||
final HttpEntity entity = httpResponse.getEntity();
|
||||
|
@ -91,7 +90,7 @@ public class PlexCommandLauncher {
|
|||
}
|
||||
}
|
||||
}
|
||||
log("launched url command: "+httpGET.getURI().toString().replaceFirst(config.getConfig(PLEX_TOKEN), "__plex_token__"));
|
||||
log("launched url command: "+httpGET.getURI().toString().replaceFirst(config.getCommonConfig(PLEX_TOKEN), "__plex_token__"));
|
||||
} catch (URISyntaxException | IOException e) {
|
||||
log("could not refresh plex artist because of "+e.getMessage());
|
||||
e.printStackTrace();
|
||||
|
@ -102,15 +101,15 @@ public class PlexCommandLauncher {
|
|||
private String getPlexRefreshURL(String fullDestinationPath) {
|
||||
String sectionId = sectionResolver.resolveSectionByPath(fullDestinationPath);
|
||||
if (sectionId==null) return null;
|
||||
String host = config.getConfig(PLEX_HOST);
|
||||
String uriFormat = config.getConfig(PLEX_SECTION_REFRESH_URI);
|
||||
String host = config.getCommonConfig(PLEX_HOST);
|
||||
String uriFormat = config.getCommonConfig(PLEX_SECTION_REFRESH_URI);
|
||||
String uri = uriFormat.replaceFirst("\\{section_id}", sectionId);
|
||||
return HTTPS.getMark() + host + uri;
|
||||
}
|
||||
|
||||
private String getPlexSectionsURL() {
|
||||
String host = HTTPS.getMark() + config.getConfig(PLEX_HOST);
|
||||
String uri = config.getConfig(PLEX_SECTIONS_LIST_URI);
|
||||
String host = HTTPS.getMark() + config.getCommonConfig(PLEX_HOST);
|
||||
String uri = config.getCommonConfig(PLEX_SECTIONS_LIST_URI);
|
||||
return host + uri;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package tv.mangrana.plex.url;
|
||||
|
||||
|
||||
import tv.mangrana.config.ConfigFileLoader;
|
||||
import tv.mangrana.config.CommonConfigFileLoader;
|
||||
import tv.mangrana.utils.Output;
|
||||
import com.sun.org.apache.xerces.internal.dom.DeferredElementImpl;
|
||||
import org.w3c.dom.Document;
|
||||
|
@ -13,20 +13,20 @@ import javax.xml.xpath.XPathConstants;
|
|||
import javax.xml.xpath.XPathExpressionException;
|
||||
import javax.xml.xpath.XPathFactory;
|
||||
|
||||
import static tv.mangrana.config.ConfigFileLoader.ProjectConfiguration.PLEX_PATHS_STARTER;
|
||||
import static tv.mangrana.config.CommonConfigFileLoader.CommonProjectConfiguration.PLEX_PATHS_STARTER;
|
||||
|
||||
public class PlexLibrarySectionsResolver {
|
||||
|
||||
private final PlexCommandLauncher commandLauncher;
|
||||
private final ConfigFileLoader config;
|
||||
private final CommonConfigFileLoader<?> config;
|
||||
|
||||
public PlexLibrarySectionsResolver(PlexCommandLauncher commandLauncher, ConfigFileLoader config) {
|
||||
public PlexLibrarySectionsResolver(PlexCommandLauncher commandLauncher, CommonConfigFileLoader<?> config) {
|
||||
this.commandLauncher = commandLauncher;
|
||||
this.config = config;
|
||||
}
|
||||
|
||||
public String resolveSectionByPath(String fullDestinationPath) {
|
||||
final String plexPathStarter = config.getConfig(PLEX_PATHS_STARTER);
|
||||
final String plexPathStarter = config.getCommonConfig(PLEX_PATHS_STARTER);
|
||||
String keyFolder = fullDestinationPath.replaceFirst(plexPathStarter,"").split("/")[1];
|
||||
Document xmlDocument = commandLauncher.retrieveSectionsInfo();
|
||||
XPath xPath = XPathFactory.newInstance().newXPath();
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
package tv.mangrana.radarr.api.client.gateway;
|
||||
|
||||
import tv.mangrana.config.ConfigFileLoader;
|
||||
import tv.mangrana.config.CommonConfigFileLoader;
|
||||
import tv.mangrana.radarr.api.schema.command.RefreshMoviesCommand;
|
||||
import tv.mangrana.radarr.api.schema.movie.MovieResource;
|
||||
import tv.mangrana.radarr.api.schema.queue.QueueResourcePagingResource;
|
||||
import tv.mangrana.utils.rest.APIProxyBuilderSingleton;
|
||||
|
||||
import static tv.mangrana.config.ConfigFileLoader.ProjectConfiguration.RADARR_API_HOST;
|
||||
import static tv.mangrana.config.ConfigFileLoader.ProjectConfiguration.RADARR_API_KEY;
|
||||
import static tv.mangrana.config.CommonConfigFileLoader.CommonProjectConfiguration.RADARR_API_HOST;
|
||||
import static tv.mangrana.config.CommonConfigFileLoader.CommonProjectConfiguration.RADARR_API_KEY;
|
||||
import static tv.mangrana.utils.Output.log;
|
||||
|
||||
public class RadarrApiGateway {
|
||||
|
@ -15,9 +15,9 @@ public class RadarrApiGateway {
|
|||
private final String apiKey;
|
||||
private final RadarrAPIInterface proxy;
|
||||
|
||||
public RadarrApiGateway(ConfigFileLoader config) {
|
||||
apiKey = config.getConfig(RADARR_API_KEY);
|
||||
proxy = APIProxyBuilderSingleton.getRadarrInterface(config.getConfig(RADARR_API_HOST));
|
||||
public RadarrApiGateway(CommonConfigFileLoader<?> config) {
|
||||
apiKey = config.getCommonConfig(RADARR_API_KEY);
|
||||
proxy = APIProxyBuilderSingleton.getRadarrInterface(config.getCommonConfig(RADARR_API_HOST));
|
||||
}
|
||||
|
||||
public QueueResourcePagingResource getQueue() {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package tv.mangrana.sonarr.api.client.gateway;
|
||||
|
||||
import tv.mangrana.config.ConfigFileLoader;
|
||||
import tv.mangrana.config.CommonConfigFileLoader;
|
||||
import tv.mangrana.sonarr.api.schema.command.RefreshSerieCommand;
|
||||
import tv.mangrana.sonarr.api.schema.history.SonarrHistory;
|
||||
import tv.mangrana.sonarr.api.schema.queue.SonarrQueue;
|
||||
|
@ -9,8 +9,8 @@ import tv.mangrana.utils.EasyLogger;
|
|||
import tv.mangrana.utils.Output;
|
||||
import tv.mangrana.utils.rest.APIProxyBuilderSingleton;
|
||||
|
||||
import static tv.mangrana.config.ConfigFileLoader.ProjectConfiguration.SONARR_API_HOST;
|
||||
import static tv.mangrana.config.ConfigFileLoader.ProjectConfiguration.SONARR_API_KEY;
|
||||
import static tv.mangrana.config.CommonConfigFileLoader.CommonProjectConfiguration.SONARR_API_HOST;
|
||||
import static tv.mangrana.config.CommonConfigFileLoader.CommonProjectConfiguration.SONARR_API_KEY;
|
||||
|
||||
public class SonarrApiGateway {
|
||||
|
||||
|
@ -18,9 +18,9 @@ public class SonarrApiGateway {
|
|||
private final SonarrAPIInterface proxy;
|
||||
private final EasyLogger logger;
|
||||
|
||||
public SonarrApiGateway(ConfigFileLoader config) {
|
||||
apiKey = config.getConfig(SONARR_API_KEY);
|
||||
proxy = APIProxyBuilderSingleton.getSonarrInterface(config.getConfig(SONARR_API_HOST));
|
||||
public SonarrApiGateway(CommonConfigFileLoader<?> config) {
|
||||
apiKey = config.getCommonConfig(SONARR_API_KEY);
|
||||
proxy = APIProxyBuilderSingleton.getSonarrInterface(config.getCommonConfig(SONARR_API_HOST));
|
||||
logger = new EasyLogger();
|
||||
}
|
||||
|
||||
|
|
|
@ -1,83 +0,0 @@
|
|||
package tv.mangrana.utils.schema;
|
||||
|
||||
import tv.mangrana.config.ConfigFileLoader;
|
||||
import tv.mangrana.exception.IncorrectWorkingReferencesException;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import static tv.mangrana.config.ConfigFileLoader.ProjectConfiguration.*;
|
||||
import static tv.mangrana.utils.rest.APIInterface.ProtocolURLMark.HTTPS;
|
||||
|
||||
/**
|
||||
* @deprecated Once the generated classes for client schema are located in the project, this utility is not needed anymore
|
||||
*/
|
||||
@Deprecated
|
||||
public class ClientSchemaGenerator {
|
||||
|
||||
ConfigFileLoader configFileLoader;
|
||||
|
||||
private ClientSchemaGenerator() throws IncorrectWorkingReferencesException {
|
||||
configFileLoader = new ConfigFileLoader();
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws IncorrectWorkingReferencesException, IOException {
|
||||
new ClientSchemaGenerator().generateRadarrMovieClientSchema();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private void generateRadarrQueueClientSchema() throws IOException {
|
||||
generate(
|
||||
configFileLoader.getConfig(RADARR_API_HOST),
|
||||
"/api/v3/queue?includeMovie=true?apikey=",
|
||||
configFileLoader.getConfig(RADARR_API_KEY),
|
||||
"tv.mangrana.radarr.api.schema.queue",
|
||||
"QueueResourcePagingResource");
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private void generateRadarrMovieClientSchema() throws IOException {
|
||||
generate(
|
||||
configFileLoader.getConfig(RADARR_API_HOST),
|
||||
"/api/v3/movie/9216?apikey=",
|
||||
configFileLoader.getConfig(RADARR_API_KEY),
|
||||
"tv.mangrana.radarr.api.schema.movie",
|
||||
"MovieResource");
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private void generateSonarrQueueClientSchema() throws IOException {
|
||||
generate(
|
||||
configFileLoader.getConfig(SONARR_API_HOST),
|
||||
"/api/v3/queue?apikey=",
|
||||
configFileLoader.getConfig(SONARR_API_KEY),
|
||||
"tv.mangrana.sonarr.api.schema.queue",
|
||||
"SonarrQueue");
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private void generateSonarrSeriesClientSchema() throws IOException {
|
||||
generate(
|
||||
configFileLoader.getConfig(SONARR_API_HOST),
|
||||
"/api/v3/series/2220?apikey=",
|
||||
configFileLoader.getConfig(SONARR_API_KEY),
|
||||
"tv.mangrana.sonarr.api.schema.series",
|
||||
"SonarrSeries");
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private void generateSonarrHistoryClientSchema() throws IOException {
|
||||
generate(
|
||||
configFileLoader.getConfig(SONARR_API_HOST),
|
||||
"/api/v3/history?sortKey=date&apikey=",
|
||||
configFileLoader.getConfig(SONARR_API_KEY),
|
||||
"tv.mangrana.sonarr.api.schema.history",
|
||||
"SonarrHistory");
|
||||
}
|
||||
|
||||
private void generate(String host, String uri, String apiKey, String pckg, String className) throws IOException {
|
||||
String schemaUrl = HTTPS.getMark()+host.concat(uri.concat(apiKey));
|
||||
ClassGeneratorFromJson generatorFromJson = new ClassGeneratorFromJson();
|
||||
generatorFromJson.generateSchema(schemaUrl, pckg, className);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue