/*
* 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.http.dialect.impl;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import org.hibernate.ogm.datastore.neo4j.remote.http.impl.HttpNeo4jClient;
import org.hibernate.ogm.datastore.neo4j.remote.http.json.impl.Graph.Node;
import org.hibernate.ogm.dialect.spi.TupleTypeContext;
import org.hibernate.ogm.model.key.spi.AssociatedEntityKeyMetadata;
import org.hibernate.ogm.model.key.spi.EntityKeyMetadata;
/**
* @author Davide D'Alto
*/
public final class HttpNeo4jAssociatedNodesHelper {
private HttpNeo4jAssociatedNodesHelper() {
}
public static Map<String, Node> findAssociatedNodes(HttpNeo4jClient client, Long txId, NodeWithEmbeddedNodes node, EntityKeyMetadata entityKeyMetadata,
TupleTypeContext tupleTypeContext, HttpNeo4jEntityQueries 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( client, txId, 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.getProperties().get( entityKeyMetadata.getColumnNames()[i] );
}
return values;
}
}