public static <V, E> Neo4jTopology loadTopology(Neo4jWorkspaceSettings settings) throws Exception { String db = DatabaseConfiguration.readDatabase(settings); Logger.getLogger(Neo4jWorkspace.class).info("using db " + db); // Get neo4j stuffs GraphDatabaseFactory factory = new GraphDatabaseFactory(); GraphDatabaseService database = factory.newEmbeddedDatabase(db); GlobalGraphOperations operation = GlobalGraphOperations.at(database); ViewsManager views = new ViewsManager(); views.load(settings); // Setup graph model Neo4jGraphModelIO gio = new Neo4jGraphModelIO(); gio.read(SimpleFile.read(settings.getModelPath())); Neo4jGraphModel typeModel = gio.getGraphModel(); // Build graph INeo4jGraphReader r = views.getFirst().getFilter(); Graph<IPropertyNode, IPropertyEdge> graph = r.read(operation, typeModel); Logger.getLogger(Neo4jWorkspace.class) .info("filtered graph has " + graph.getVertexCount() + " nodes using db " + db); // Build topology using graph typing model String topologyName = views.getFirst().getTopologyName(); Neo4jTopologyFactory tfact = new Neo4jTopologyFactory(); Neo4jTopology topology = tfact.newTopology(topologyName, graph, typeModel); return topology; }
/** * Build full Neo4jWorkspace involving reading files given by settings: * * <ul> * <li>neo4j database * <li>view * <li>graph model * <li>projection * </ul> * * and build topology & geometrical model according to Neo4j factories * * @param settings * @throws Exception */ public Neo4jWorkspace(Neo4jWorkspaceSettings settings) throws Exception { String db = DatabaseConfiguration.readDatabase(settings); Logger.getLogger(Neo4jWorkspace.class).info("using db " + db); // Get neo4j stuffs GraphDatabaseFactory factory = new GraphDatabaseFactory(); database = factory.newEmbeddedDatabase(db); operation = GlobalGraphOperations.at(database); views = new ViewsManager(); views.load(settings); layoutML = views.getFirst().getLayout(); // Setup graph model Neo4jGraphModelIO gio = new Neo4jGraphModelIO(); gio.read(SimpleFile.read(settings.getModelPath())); Neo4jGraphModel typeModel = gio.getGraphModel(); // Build graph INeo4jGraphReader r = views.getFirst().getFilter(); Graph<IPropertyNode, IPropertyEdge> graph = r.read(operation, typeModel); Logger.getLogger(Neo4jWorkspace.class) .info("filtered graph has " + graph.getVertexCount() + " nodes using db " + db); // Build topology using graph typing model String topologyName = views.getFirst().getTopologyName(); Neo4jTopologyFactory tfact = new Neo4jTopologyFactory(); topology = tfact.newTopology(topologyName, graph, typeModel); // Edit topology according to dataprism Dataprism dp = loadDataprism(settings); if (dp != null) ((Neo4jTopology) topology).edit().apply(dp); // Build layout model modelFactory = new Neo4jModelFactory(gio.getGraphModel()); model = (IHierarchicalNodeModel) modelFactory.getLayoutModel(topology); edgeModel = model.getEdgeModel(); applyLayoutMLConfiguration(model, layoutML); // Build layout layoutFactory = new Neo4jLayoutFactory(typeModel); if (layoutML != null) { Map<String, String> mapping = extractModelLayoutMapping(layoutML); layoutFactory.setModelLayoutMapping(mapping); } layout = layoutFactory.getLayout(model); layout.getEdgeLayout().setEdgePostProcess(null); // finalize workspace annotationModel = new AnnotationModel(); metadata = null; setName(settings.getName()); loadMapIfExist(); this.configuration = new ConfigurationFacade(this); }