public UniGraph(Configuration configuration) throws Exception {
configuration.setProperty(Graph.GRAPH, UniGraph.class.getName());
this.configuration = configuration;
PropertyTypeFactory.init(Arrays.asList(TextType.class.getCanonicalName(),
DateType.class.getCanonicalName(),
NumberType.class.getCanonicalName(),
DoubleType.class.getCanonicalName(),
FloatType.class.getCanonicalName(),
IntType.class.getCanonicalName(),
LongType.class.getCanonicalName()));
List<PropertySchema.PropertySchemaBuilder> thirdPartyPropertySchemas = new ArrayList<>();
if(configuration.containsKey("propertySchemas")){
Stream.of(configuration.getStringArray("propertiesSchemas")).map(classString -> {
try {
return ((PropertySchema.PropertySchemaBuilder) Class.forName(classString).newInstance());
} catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
throw new IllegalArgumentException("class: " + classString + " not found");
}
}).forEach(thirdPartyPropertySchemas::add);
}
String traversalFilter = configuration.getString("traversalFilter", DefaultTraversalFilter.class.getCanonicalName());
TraversalFilter filter = Class.forName(traversalFilter).asSubclass(TraversalFilter.class).newInstance();
String configurationControllerManagerName = configuration.getString("controllerManager", ConfigurationControllerManager.class.getCanonicalName().toString());
ControllerManager configurationControllerManager = Class.forName(configurationControllerManagerName)
.asSubclass(ControllerManager.class)
.getConstructor(UniGraph.class, Configuration.class, List.class, TraversalFilter.class)
.newInstance(this, configuration,thirdPartyPropertySchemas, filter);
StrategyProvider strategyProvider = determineStrategyProvider(configuration);
init(configurationControllerManager, strategyProvider);
}