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); }