Package org.neo4j.shell.tools.imp

Source Code of org.neo4j.shell.tools.imp.ExportGraphMLApp

package org.neo4j.shell.tools.imp;

import org.neo4j.cypher.export.CypherResultSubGraph;
import org.neo4j.cypher.export.DatabaseSubGraph;
import org.neo4j.cypher.export.SubGraph;
import org.neo4j.cypher.javacompat.ExecutionEngine;
import org.neo4j.cypher.javacompat.ExecutionResult;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Transaction;
import org.neo4j.kernel.impl.util.StringLogger;
import org.neo4j.shell.*;
import org.neo4j.shell.impl.AbstractApp;
import org.neo4j.shell.kernel.GraphDatabaseShellServer;
import org.neo4j.shell.tools.imp.format.Format;
import org.neo4j.shell.tools.imp.format.XmlGraphMLFormat;
import org.neo4j.shell.tools.imp.util.Config;
import org.neo4j.shell.tools.imp.util.ProgressReporter;

import java.io.BufferedWriter;
import java.io.FileWriter;

/**
* TODO: arrays, labels, rel-types, key-types
* @author mh
* @since 17.01.14
*/
public class ExportGraphMLApp extends AbstractApp {

    {
        addOptionDefinition( "o", new OptionDefinition( OptionValueType.MUST,
                "Output GraphML file" ) );
        addOptionDefinition( "t", new OptionDefinition( OptionValueType.MAY,
                "Write key types upfront (double pass)" ) );
        addOptionDefinition( "r", new OptionDefinition( OptionValueType.MAY,
                "Add all nodes of selected relationships" ) );
    }

    private ExecutionEngine engine;
    protected ExecutionEngine getEngine() {
        if (engine==null) engine=new ExecutionEngine(getServer().getDb(), StringLogger.SYSTEM);
        return engine;
    }

    @Override
    public String getName() {
        return "export-graphml";
    }


    @Override
    public GraphDatabaseShellServer getServer() {
        return (GraphDatabaseShellServer) super.getServer();
    }

    private SubGraph cypherResultSubGraph(String query, boolean relsBetween) {
        try (Transaction tx = getServer().getDb().beginTx()) {
            ExecutionResult result = getEngine().execute(query);
            SubGraph subGraph = CypherResultSubGraph.from(result, getServer().getDb(), relsBetween);
            tx.success();
            return subGraph;
        }
    }


    @Override
    public Continuation execute(AppCommandParser parser, Session session, Output out) throws Exception {
        Config config = Config.fromOptions(parser);

        String fileName = parser.option("o", null);
        boolean relsBetween = parser.options().containsKey("r");
        BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));

        ProgressReporter reporter = new ProgressReporter(null, out);

        GraphDatabaseService db = getServer().getDb();

        Format exportFormat = new XmlGraphMLFormat(db);
        String query = Config.extractQuery(parser);
        SubGraph graph = query.isEmpty() ? new DatabaseSubGraph(db) : cypherResultSubGraph(query,relsBetween);
        exportFormat.dump(graph, writer, reporter, config);
        writer.close();
        reporter.progress("Wrote to GraphML-file " + fileName);
        return Continuation.INPUT_COMPLETE;
    }
}
TOP

Related Classes of org.neo4j.shell.tools.imp.ExportGraphMLApp

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.