org.dswarm.graph.delta.util.GraphDBPrintUtil.java Source code

Java tutorial

Introduction

Here is the source code for org.dswarm.graph.delta.util.GraphDBPrintUtil.java

Source

/**
 * This file is part of d:swarm graph extension.
 *
 * d:swarm graph extension is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * d:swarm graph extension is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with d:swarm graph extension.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.dswarm.graph.delta.util;

import java.io.File;
import java.net.URL;

import org.apache.commons.io.FileUtils;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Label;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Path;
import org.neo4j.graphdb.Relationship;
import org.neo4j.graphdb.RelationshipType;
import org.neo4j.graphdb.Transaction;
import org.neo4j.graphdb.traversal.Paths;
import org.neo4j.tooling.GlobalGraphOperations;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.dswarm.graph.DMPGraphException;
import org.dswarm.graph.NodeType;
import org.dswarm.graph.delta.DeltaStatics;
import org.dswarm.graph.model.GraphStatics;
import org.dswarm.graph.utils.GraphUtils;

/**
 * @author tgaengler
 */
public final class GraphDBPrintUtil {

    private static final Logger LOG = LoggerFactory.getLogger(GraphDBPrintUtil.class);

    public static void printRelationships(final GraphDatabaseService graphDB) throws DMPGraphException {

        try (final Transaction tx = graphDB.beginTx()) {

            final Iterable<Relationship> relationships = GlobalGraphOperations.at(graphDB).getAllRelationships();

            for (final Relationship relationship : relationships) {

                final RelationshipType type = relationship.getType();

                System.out.println(
                        "relationship = '" + relationship.getId() + "' :: relationship type = '" + type.name());

                final Iterable<String> propertyKeys = relationship.getPropertyKeys();

                for (final String propertyKey : propertyKeys) {

                    final Object value = relationship.getProperty(propertyKey);

                    System.out.println("relationship = '" + relationship.getId() + "' :: key = '" + propertyKey
                            + "' :: value = '" + value + "'");
                }
            }

            tx.success();
        } catch (final Exception e) {

            final String message = "couldn't print relationships";

            GraphDBPrintUtil.LOG.error(message, e);

            throw new DMPGraphException(message);
        }
    }

    public static void printDeltaRelationships(final GraphDatabaseService graphDB) throws DMPGraphException {

        try (final Transaction tx = graphDB.beginTx()) {

            final Iterable<Relationship> relationships = GlobalGraphOperations.at(graphDB).getAllRelationships();

            for (final Relationship relationship : relationships) {

                final String sb = printDeltaRelationship(relationship);

                System.out.println(sb);
            }

            tx.success();
        } catch (final Exception e) {

            final String message = "couldn't print relationships";

            GraphDBPrintUtil.LOG.error(message, e);

            throw new DMPGraphException(message);
        }
    }

    public static void writeDeltaRelationships(final GraphDatabaseService graphDB, final URL fileURL)
            throws DMPGraphException {

        try (final Transaction tx = graphDB.beginTx()) {

            final Iterable<Relationship> relationships = GlobalGraphOperations.at(graphDB).getAllRelationships();

            final StringBuilder sb = new StringBuilder();

            for (final Relationship relationship : relationships) {

                final String printedRel = printDeltaRelationship(relationship);

                sb.append(printedRel).append("\n");
            }

            final File file = FileUtils.toFile(fileURL);
            FileUtils.writeStringToFile(file, sb.toString());

            tx.success();
        } catch (final Exception e) {

            final String message = "couldn't write relationships";

            GraphDBPrintUtil.LOG.error(message, e);

            throw new DMPGraphException(message);
        }
    }

    public static void printNodes(final GraphDatabaseService graphDB) throws DMPGraphException {

        try (final Transaction tx = graphDB.beginTx()) {

            final Iterable<Node> nodes = GlobalGraphOperations.at(graphDB).getAllNodes();

            for (final Node node : nodes) {

                final Iterable<Label> labels = node.getLabels();

                for (final Label label : labels) {

                    System.out.println("node = '" + node.getId() + "' :: label = '" + label.name());
                }

                final Iterable<String> propertyKeys = node.getPropertyKeys();

                for (final String propertyKey : propertyKeys) {

                    final Object value = node.getProperty(propertyKey);

                    System.out.println("node = '" + node.getId() + "' :: key = '" + propertyKey + "' :: value = '"
                            + value + "'");
                }
            }

            tx.success();
        } catch (final Exception e) {

            final String message = "couldn't print nodes";

            GraphDBPrintUtil.LOG.error(message, e);

            throw new DMPGraphException(message);
        }
    }

    public static String printDeltaRelationship(final Relationship relationship) throws DMPGraphException {

        final Long index = (Long) relationship.getProperty(GraphStatics.INDEX_PROPERTY, null);
        final String startNodeString = printNode(relationship.getStartNode());
        final String relString = printRelationship(relationship);
        final String endNodeString = printNode(relationship.getEndNode());

        final StringBuilder sb = new StringBuilder();

        sb.append(index).append(" : ").append(startNodeString).append("-").append(relString).append("->")
                .append(endNodeString);

        return sb.toString();
    }

    public static String printNode(final Node node) throws DMPGraphException {

        final NodeType nodeType = GraphUtils.determineNodeType(node);
        final StringBuilder sb = new StringBuilder();
        sb.append("(").append(node.getId()).append(":type='").append(nodeType).append("',");

        final String labels = GraphDBUtil.getLabels(node);

        sb.append("label='").append(labels);

        switch (nodeType) {

        case Resource:
        case TypeResource:

            sb.append("',");

            final String uri = (String) node.getProperty(GraphStatics.URI_PROPERTY, null);
            sb.append("uri='").append(uri);

            break;
        case Literal:

            sb.append("',");

            final String value = (String) node.getProperty(GraphStatics.VALUE_PROPERTY, null);
            sb.append("value='").append(value);

            break;
        }

        sb.append("'");

        final Boolean matched = (Boolean) node.getProperty(DeltaStatics.MATCHED_PROPERTY, null);

        if (matched != null) {

            sb.append(",matched='").append(matched).append("'");
        }

        final String deltaState = (String) node.getProperty(DeltaStatics.DELTA_STATE_PROPERTY, null);

        if (deltaState != null) {

            sb.append(",delta_state='").append(deltaState).append("'");
        }

        sb.append(")");

        return sb.toString();
    }

    public static String printRelationship(final Relationship relationship) {

        final StringBuilder sb = new StringBuilder();
        sb.append("[").append(relationship.getId()).append(":").append(relationship.getType().name()).append(",");

        final Long order = (Long) relationship.getProperty(GraphStatics.ORDER_PROPERTY, null);

        if (order != null) {

            sb.append("order='").append(order).append("',");
        }

        final Long index = (Long) relationship.getProperty(GraphStatics.INDEX_PROPERTY, null);
        sb.append("index='").append(index);

        sb.append("'");

        final Boolean matched = (Boolean) relationship.getProperty(DeltaStatics.MATCHED_PROPERTY, null);

        if (matched != null) {

            sb.append(",matched='").append(matched).append("'");
        }

        final String deltaState = (String) relationship.getProperty(DeltaStatics.DELTA_STATE_PROPERTY, null);

        if (deltaState != null) {

            sb.append(",delta_state='").append(deltaState).append("'");
        }

        sb.append("]");

        return sb.toString();
    }

    public static void printPaths(final GraphDatabaseService graphDB, final String resourceURI)
            throws DMPGraphException {

        try (final Transaction tx = graphDB.beginTx()) {

            final Iterable<Path> paths = GraphDBUtil.getResourcePaths(graphDB, resourceURI);
            printPaths(paths);

            tx.success();
        } catch (final Exception e) {

            final String message = "couldn't print paths";

            GraphDBPrintUtil.LOG.error(message, e);

            throw new DMPGraphException(message);
        }
    }

    /**
     * note: should be run in transaction scope
     *
     * @param paths
     */
    public static void printPaths(final Iterable<Path> paths) {

        final Paths.PathDescriptor<Path> pathPrinter = new PathPrinter();

        for (final Path path : paths) {

            final String pathString = Paths.pathToString(path, pathPrinter);

            System.out.println(pathString);
        }
    }

    public static void printEntityPaths(final GraphDatabaseService graphDB, final long nodeId)
            throws DMPGraphException {

        try (final Transaction tx = graphDB.beginTx()) {

            final Iterable<Path> paths = GraphDBUtil.getEntityPaths(graphDB, nodeId);
            printPaths(paths);

            tx.success();
        } catch (final Exception e) {

            final String message = "couldn't print entity paths";

            GraphDBPrintUtil.LOG.error(message, e);

            throw new DMPGraphException(message);
        }
    }
}