Skip to content

Commit

Permalink
Merge branch 'feature.core-config' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
TomasLongo committed Jan 21, 2015
2 parents 1dabae1 + f587ffd commit 7f8176c
Showing 1 changed file with 40 additions and 6 deletions.
46 changes: 40 additions & 6 deletions src/main/java/de/tlongo/roscoe/core/ConfigManager.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.tlongo.roscoe.core;

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.slf4j.Logger;
Expand All @@ -10,27 +11,47 @@
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* Created by tomas on 11.01.15.
*/
public class ConfigManager {
public final class ConfigItem {
JsonElement configItem;

public String asString() {
return configItem.getAsString();
}

public Integer asInteger() {
return configItem.getAsInt();
}

public void setItem(JsonElement item) {
configItem = item;
}
}

ConfigItem configItem = new ConfigItem();

Logger logger = LoggerFactory.getLogger(ConfigManager.class);
String roscoeRoot;
File configDir;
JsonObject routesConfig;
JsonObject coreConfig;
ViewHandler viewHandler;

Map<String, JsonObject> configs = new HashMap<>();

public ConfigManager() {
roscoeRoot = System.getProperty("roscoe.root");
configDir = new File(roscoeRoot + "/conf");
try {
routesConfig = new JsonParser().parse(new FileReader(configDir + "/routes.json")).getAsJsonObject();
coreConfig = new JsonParser().parse(new FileReader(configDir + "/core.json")).getAsJsonObject();
configs.put("routes", new JsonParser().parse(new FileReader(configDir + "/routes.json")).getAsJsonObject());
configs.put("core", new JsonParser().parse(new FileReader(configDir + "/core.json")).getAsJsonObject());

viewHandler = instantiateViewHandler(coreConfig.get("viewhandler").getAsString());
viewHandler = instantiateViewHandler(getConfigItem("core", "viewhandler").asString());
} catch (FileNotFoundException e) {
logger.error("Could not load routes config {}", configDir + ("/routes.json"));
throw new RuntimeException("Could not load routes config.");
Expand All @@ -47,13 +68,14 @@ public ConfigManager() {
}

private ViewHandler instantiateViewHandler(String className) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
logger.debug("loading viewhandler {}", className);
Class viewHandlerClass = Class.forName(className);
return (ViewHandler)viewHandlerClass.newInstance();
}

public List<RoscoeRoute> getRoutes() {
final List<RoscoeRoute> routes = new ArrayList<>();
JsonArray jsonRoutesArray = routesConfig.getAsJsonArray("routes");
JsonArray jsonRoutesArray = configs.get("routes").getAsJsonArray("routes");

logger.debug("Loading Routes from config...");
jsonRoutesArray.forEach(route -> {
Expand Down Expand Up @@ -88,6 +110,18 @@ public List<RoscoeRoute> getRoutes() {
return routes;
}

public ConfigItem getConfigItem(String configName, String key) {
JsonObject config = configs.getOrDefault(configName, null);
if (config == null) {
logger.error("{} is not a valid config.");
throw new RuntimeException("Error loading config");
}

configItem.setItem(config.get(key));

return configItem;
}

private void handleClassLoadingError(String routeName, String routeImplementation) {
logger.error("Could not load implementation ({}) for Route {}", routeName, routeImplementation);
throw new RuntimeException("Error loading route from config.");
Expand Down

0 comments on commit 7f8176c

Please sign in to comment.