/* * Hibernate OGM, Domain model persistence for NoSQL datastores * * License: GNU Lesser General Public License (LGPL), version 2.1 or later * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.ogm.datastore.neo4j.logging.impl; import static org.hibernate.ogm.datastore.neo4j.query.parsing.cypherdsl.impl.CypherDSL.identifier; import static org.hibernate.ogm.datastore.neo4j.query.parsing.cypherdsl.impl.CypherDSL.literal; import java.util.Iterator; import org.neo4j.graphdb.Label; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.PropertyContainer; import org.neo4j.graphdb.Relationship; /** * Utility methods to lgo information about graph elements * * @author Davide D'Alto */ public final class GraphLogger { private static final Log log = LoggerFactory.getLogger(); private GraphLogger() { } public static void log(Node node) { log( "%1$s", node ); } public static void log(Relationship relationship) { log( "%1$s", relationship ); } public static void log(String msg, Node node) { if ( log.isTraceEnabled() ) { StringBuilder builder = new StringBuilder(); nodeAsCypher( builder, node ); log.tracef( msg, builder.toString() ); } } public static void log(String msg, Relationship relationship) { if ( log.isTraceEnabled() ) { StringBuilder builder = new StringBuilder(); if ( relationship != null ) { nodeAsCypher( builder, relationship.getStartNode() ); builder.append( " - [" ); identifier( builder, relationship.getType().name() ); appendProperties( builder, relationship ); builder.append( "] - " ); nodeAsCypher( builder, relationship.getEndNode() ); } else { builder.append( "null" ); } log.tracef( msg, builder.toString() ); } } private static void nodeAsCypher(StringBuilder builder, Node node) { if ( node != null ) { builder.append( "(" ); for ( Label label : node.getLabels() ) { builder.append( ":" ); identifier( builder, label.name() ); } appendProperties( builder, node ); builder.append( ")" ); } else { builder.append( "null" ); } } private static void appendProperties(StringBuilder builder, PropertyContainer propertyContainer) { Iterator<String> propertyKeys = propertyContainer.getPropertyKeys().iterator(); boolean hasProperties = false; if ( propertyKeys.hasNext() ) { hasProperties = true; builder.append( "{" ); String property = propertyKeys.next(); identifier( builder, property ); builder.append( ":" ); literal( builder, propertyContainer.getProperty( property ) ); } while ( propertyKeys.hasNext() ) { builder.append( ", " ); String property = propertyKeys.next(); identifier( builder, property ); builder.append( ":" ); literal( builder, propertyContainer.getProperty( property ) ); } if ( hasProperties ) { builder.append( "}" ); } } }