/* * 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.remote.bolt.dialect.impl; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import org.hibernate.ogm.dialect.spi.TupleTypeContext; import org.hibernate.ogm.model.key.spi.AssociatedEntityKeyMetadata; import org.hibernate.ogm.model.key.spi.EntityKeyMetadata; import org.neo4j.driver.v1.Transaction; import org.neo4j.driver.v1.types.Node; /** * Function required to get the associated nodes when building the tuple snapshot. * * @author Davide D'Alto */ public final class BoltNeo4jAssociatedNodesHelper { private BoltNeo4jAssociatedNodesHelper() { } public static Map<String, Node> findAssociatedNodes(Transaction tx, NodeWithEmbeddedNodes node, EntityKeyMetadata entityKeyMetadata, TupleTypeContext tupleTypeContext, BoltNeo4jEntityQueries queries) { Map<String, Node> associatedNodes = new HashMap<>( tupleTypeContext.getAllAssociatedEntityKeyMetadata().size() ); if ( tupleTypeContext.getAllAssociatedEntityKeyMetadata().size() > 0 ) { Object[] keyValues = keyValues( node.getOwner(), entityKeyMetadata ); for ( Entry<String, AssociatedEntityKeyMetadata> entry : tupleTypeContext.getAllAssociatedEntityKeyMetadata().entrySet() ) { String associationRole = tupleTypeContext.getAllRoles().get( entry.getKey() ); Node associatedEntity = queries.findAssociatedEntity( tx, keyValues, associationRole ); associatedNodes.put( associationRole, associatedEntity ); } } return associatedNodes; } private static Object[] keyValues(Node node, EntityKeyMetadata entityKeyMetadata) { Object[] values = new Object[entityKeyMetadata.getColumnNames().length]; for ( int i = 0; i < values.length; i++ ) { values[i] = node.get( entityKeyMetadata.getColumnNames()[i] ); } return values; } }