Skip to content

Commit

Permalink
OGM-783 [Neo4j] Use EmbeddedHelper utility class
Browse files Browse the repository at this point in the history
  • Loading branch information
DavideD committed May 15, 2015
1 parent 0ad0225 commit 110b273
Show file tree
Hide file tree
Showing 7 changed files with 21 additions and 35 deletions.
Expand Up @@ -8,6 +8,8 @@

import static org.hibernate.ogm.datastore.neo4j.query.parsing.cypherdsl.impl.CypherDSL.limit;
import static org.hibernate.ogm.datastore.neo4j.query.parsing.cypherdsl.impl.CypherDSL.skip;
import static org.hibernate.ogm.util.impl.EmbeddedHelper.isPartOfEmbedded;
import static org.hibernate.ogm.util.impl.EmbeddedHelper.split;
import static org.neo4j.graphdb.DynamicRelationshipType.withName;

import java.util.Collection;
Expand All @@ -18,7 +20,6 @@
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.regex.Pattern;

import org.hibernate.AssertionFailure;
import org.hibernate.engine.spi.QueryParameters;
Expand Down Expand Up @@ -99,10 +100,6 @@
*/
public class Neo4jDialect extends BaseGridDialect implements QueryableGridDialect<String>, ServiceRegistryAwareService, SessionFactoryLifecycleAwareDialect {

private static final Pattern EMBEDDED_FIELDNAME_SEPARATOR = Pattern.compile( "\\." );

private static final String PROPERTY_SEPARATOR = ".";

private static final Log log = LoggerFactory.getLogger();

private final Neo4jSequenceGenerator neo4jSequenceGenerator;
Expand Down Expand Up @@ -322,6 +319,7 @@ public Association getAssociation(AssociationKey associationKey, AssociationCont
if ( entityNode == null ) {
return null;
}

return new Association(
new Neo4jAssociationSnapshot(
entityNode,
Expand Down Expand Up @@ -438,7 +436,7 @@ private void removeTupleOperation(EntityKey entityKey, Node node, TupleOperation
if ( !tupleContext.isPartOfAssociation( operation.getColumn() ) ) {
if ( isPartOfRegularEmbedded( entityKey.getColumnNames(), operation.getColumn() ) ) {
// Embedded node
String[] split = EMBEDDED_FIELDNAME_SEPARATOR.split( operation.getColumn() );
String[] split = split( operation.getColumn() );
removePropertyForEmbedded( node, split, 0 );
}
else if ( node.hasProperty( operation.getColumn() ) ) {
Expand Down Expand Up @@ -517,7 +515,7 @@ else if ( isPartOfRegularEmbedded( entityKey.getMetadata().getColumnNames(), ope
* @return {@code true} if the column represent an attribute of a regular embedded element, {@code false} otherwise
*/
public static boolean isPartOfRegularEmbedded(String[] keyColumnNames, String column) {
return column.contains( PROPERTY_SEPARATOR ) && !ArrayHelper.contains( keyColumnNames, column );
return isPartOfEmbedded( column ) && !ArrayHelper.contains( keyColumnNames, column );
}

private void putProperty(EntityKey entityKey, Node node, TupleOperation operation) {
Expand Down
Expand Up @@ -9,6 +9,8 @@
import static org.hibernate.ogm.datastore.neo4j.dialect.impl.NodeLabel.EMBEDDED;
import static org.hibernate.ogm.datastore.neo4j.dialect.impl.NodeLabel.ENTITY;
import static org.hibernate.ogm.datastore.neo4j.query.parsing.cypherdsl.impl.CypherDSL.escapeIdentifier;
import static org.hibernate.ogm.util.impl.EmbeddedHelper.isPartOfEmbedded;
import static org.hibernate.ogm.util.impl.EmbeddedHelper.split;

import java.util.ArrayList;
import java.util.HashMap;
Expand Down Expand Up @@ -454,10 +456,6 @@ private void createRelationshipForCollectionOfPrimitivesOrMap(AssociationKey ass
queryBuilder.append( " RETURN r" );
}

private boolean isPartOfEmbedded(String collectionRole) {
return collectionRole.contains( "." );
}

private Relationship executeQuery(ExecutionEngine executionEngine, String query, Object[] queryValues) {
Map<String, Object> params = params( queryValues );
ExecutionResult result = executionEngine.execute( query, params );
Expand Down Expand Up @@ -529,7 +527,7 @@ private static void appendEntityNode(String alias, EntityKeyMetadata entityKeyMe
* query.
*/
private static String[] appendEmbeddedNodes(String path, StringBuilder queryBuilder) {
String[] columns = EMBEDDED_FIELDNAME_SEPARATOR.split( path );
String[] columns = split( path );
for ( int i = 0; i < columns.length - 1; i++ ) {
queryBuilder.append( " - [:" );
appendRelationshipType( queryBuilder, columns[i] );
Expand Down
Expand Up @@ -6,14 +6,14 @@
*/
package org.hibernate.ogm.datastore.neo4j.dialect.impl;

import static org.hibernate.ogm.util.impl.EmbeddedHelper.split;
import static org.neo4j.graphdb.DynamicRelationshipType.withName;

import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;

import org.hibernate.ogm.model.key.spi.AssociatedEntityKeyMetadata;
import org.hibernate.ogm.model.key.spi.AssociationKey;
Expand All @@ -32,8 +32,6 @@
*/
public final class Neo4jAssociationSnapshot implements AssociationSnapshot {

private static final Pattern EMBEDDED_FIELDNAME_SEPARATOR = Pattern.compile( "\\." );

private final Map<RowKey, Tuple> tuples = new HashMap<RowKey, Tuple>();

public Neo4jAssociationSnapshot(Node ownerNode, AssociationKey associationKey, AssociatedEntityKeyMetadata associatedEntityKeyMetadata, String relationshipType) {
Expand Down Expand Up @@ -69,7 +67,7 @@ public Set<RowKey> getRowKeys() {

private static Iterable<Relationship> relationships(Node ownerNode, AssociationKey associationKey, String relationshipType) {
if ( relationshipType.contains( "." ) ) {
String[] pathToAssociation = EMBEDDED_FIELDNAME_SEPARATOR.split( relationshipType );
String[] pathToAssociation = split( relationshipType );
Node nextNode = ownerNode;
for ( int i = 0; i < pathToAssociation.length; i++ ) {
String splitType = pathToAssociation[i];
Expand Down
Expand Up @@ -9,6 +9,7 @@
import static org.hibernate.ogm.datastore.neo4j.dialect.impl.NodeLabel.EMBEDDED;
import static org.hibernate.ogm.datastore.neo4j.dialect.impl.NodeLabel.ENTITY;
import static org.hibernate.ogm.datastore.neo4j.query.parsing.cypherdsl.impl.CypherDSL.escapeIdentifier;
import static org.hibernate.ogm.util.impl.EmbeddedHelper.split;

import java.util.Map;

Expand Down Expand Up @@ -289,7 +290,7 @@ private String initUpdateEmbeddedColumnQuery(Object[] keyValues, String embedded
* query.
*/
private static String[] appendEmbeddedNodes(String path, StringBuilder queryBuilder) {
String[] columns = EMBEDDED_FIELDNAME_SEPARATOR.split( path );
String[] columns = split( path );
for ( int i = 0; i < columns.length - 1; i++ ) {
queryBuilder.append( " - [:" );
appendRelationshipType( queryBuilder, columns[i] );
Expand Down
Expand Up @@ -6,19 +6,21 @@
*/
package org.hibernate.ogm.datastore.neo4j.dialect.impl;

import static org.hibernate.ogm.util.impl.EmbeddedHelper.isPartOfEmbedded;
import static org.hibernate.ogm.util.impl.EmbeddedHelper.split;
import static org.neo4j.graphdb.DynamicLabel.label;
import static org.neo4j.graphdb.DynamicRelationshipType.withName;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;

import org.hibernate.ogm.model.key.spi.AssociatedEntityKeyMetadata;
import org.hibernate.ogm.model.key.spi.AssociationKey;
import org.hibernate.ogm.model.spi.AssociationKind;
import org.hibernate.ogm.model.spi.TupleSnapshot;
import org.hibernate.ogm.util.impl.EmbeddedHelper;
import org.neo4j.graphdb.Direction;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Relationship;
Expand All @@ -28,8 +30,6 @@
*/
public class Neo4jTupleAssociationSnapshot implements TupleSnapshot {

private static final Pattern EMBEDDED_FIELDNAME_SEPARATOR = Pattern.compile( "\\." );

private final Map<String, Object> properties;

public Neo4jTupleAssociationSnapshot(Relationship relationship, AssociationKey associationKey, AssociatedEntityKeyMetadata associatedEntityKeyMetadata) {
Expand All @@ -53,7 +53,7 @@ private static Map<String, Object> collectProperties(Relationship relationship,
// Properties stored in the target side of the association
for ( String associationColumn : associatedEntityKeyMetadata.getAssociationKeyColumns() ) {
String targetColumnName = associatedEntityKeyMetadata.getCorrespondingEntityKeyColumn( associationColumn );
if ( isEmbedded( targetColumnName ) ) {
if ( isPartOfEmbedded( targetColumnName ) ) {
// Embedded column
String collectionRole = associationKey.getMetadata().getCollectionRole();
if ( targetColumnName.equals( collectionRole ) ) {
Expand All @@ -70,7 +70,7 @@ else if ( targetNode.hasProperty( targetColumnName ) ) {
else {
// Ex: @ElementCollection List<Embedded> examples
Node embeddedNode = targetNode;
String[] split = EMBEDDED_FIELDNAME_SEPARATOR.split( targetColumnName );
String[] split = split( targetColumnName );
boolean found = true;
for ( int i = 0; i < split.length - 1; i++ ) {
Iterator<Relationship> iterator = embeddedNode.getRelationships( Direction.OUTGOING, withName( split[i] ) ).iterator();
Expand Down Expand Up @@ -130,8 +130,8 @@ private static boolean isEmbeddedCollection(AssociationKey associationKey) {
}

private static Node embeddedAssociationOwner(Relationship relationship, String collectionRole) {
if ( isEmbedded( collectionRole ) ) {
String[] split = EMBEDDED_FIELDNAME_SEPARATOR.split( collectionRole );
if ( isPartOfEmbedded( collectionRole ) ) {
String[] split = EmbeddedHelper.split( collectionRole );
Node ownerNode = relationship.getStartNode();
for ( int i = 1; i < split.length; i++ ) {
String type = split[split.length - i - 1];
Expand All @@ -145,10 +145,6 @@ private static Node embeddedAssociationOwner(Relationship relationship, String c
}
}

private static boolean isEmbedded(String targetColumnName) {
return targetColumnName.contains( "." );
}

private static Node ownerNodeFromAssociation(AssociationKey associationKey, Relationship relationship) {
if ( relationship.getStartNode().hasLabel( label( associationKey.getEntityKey().getTable() ) ) ) {
return relationship.getStartNode();
Expand Down
Expand Up @@ -6,14 +6,14 @@
*/
package org.hibernate.ogm.datastore.neo4j.dialect.impl;

import static org.hibernate.ogm.util.impl.EmbeddedHelper.split;
import static org.neo4j.graphdb.DynamicRelationshipType.withName;

import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;

import org.hibernate.ogm.datastore.neo4j.Neo4jDialect;
import org.hibernate.ogm.model.key.spi.AssociatedEntityKeyMetadata;
Expand All @@ -32,8 +32,6 @@
*/
public final class Neo4jTupleSnapshot implements TupleSnapshot {

private static final Pattern EMBEDDED_FIELDNAME_SEPARATOR = Pattern.compile( "\\." );

private final Node node;
private final Map<String, AssociatedEntityKeyMetadata> associatedEntityKeyMetadata;
private final Map<String, String> rolesByColumn;
Expand Down Expand Up @@ -76,7 +74,7 @@ private Object readPropertyOnOtherNode(String column) {

// TODO: We should create a query to read this value
private Object readEmbeddedProperty(String column) {
String[] split = EMBEDDED_FIELDNAME_SEPARATOR.split( column );
String[] split = split( column );
Node embeddedNode = node;
for ( int i = 0; i < split.length - 1; i++ ) {
String relType = split[i];
Expand Down
Expand Up @@ -10,7 +10,6 @@

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;

import org.hibernate.ogm.model.key.spi.EntityKeyMetadata;
import org.neo4j.cypher.javacompat.ExecutionResult;
Expand All @@ -24,8 +23,6 @@
*/
class QueriesBase {

static final Pattern EMBEDDED_FIELDNAME_SEPARATOR = Pattern.compile( "\\." );

protected static void appendLabel(EntityKeyMetadata entityKeyMetadata, StringBuilder queryBuilder) {
escapeIdentifier( queryBuilder, entityKeyMetadata.getTable() );
}
Expand Down

0 comments on commit 110b273

Please sign in to comment.