From 110b27345bc09260e280052c33f14e26a8555800 Mon Sep 17 00:00:00 2001 From: Davide D'Alto Date: Wed, 13 May 2015 08:40:10 +0100 Subject: [PATCH] OGM-783 [Neo4j] Use EmbeddedHelper utility class --- .../ogm/datastore/neo4j/Neo4jDialect.java | 12 +++++------- .../dialect/impl/Neo4jAssociationQueries.java | 8 +++----- .../dialect/impl/Neo4jAssociationSnapshot.java | 6 ++---- .../neo4j/dialect/impl/Neo4jEntityQueries.java | 3 ++- .../impl/Neo4jTupleAssociationSnapshot.java | 18 +++++++----------- .../neo4j/dialect/impl/Neo4jTupleSnapshot.java | 6 ++---- .../neo4j/dialect/impl/QueriesBase.java | 3 --- 7 files changed, 21 insertions(+), 35 deletions(-) diff --git a/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/Neo4jDialect.java b/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/Neo4jDialect.java index 5a9ed72c9d..addb34ee51 100644 --- a/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/Neo4jDialect.java +++ b/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/Neo4jDialect.java @@ -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; @@ -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; @@ -99,10 +100,6 @@ */ public class Neo4jDialect extends BaseGridDialect implements QueryableGridDialect, 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; @@ -322,6 +319,7 @@ public Association getAssociation(AssociationKey associationKey, AssociationCont if ( entityNode == null ) { return null; } + return new Association( new Neo4jAssociationSnapshot( entityNode, @@ -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() ) ) { @@ -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) { diff --git a/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/dialect/impl/Neo4jAssociationQueries.java b/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/dialect/impl/Neo4jAssociationQueries.java index 9a6c157bfc..1235b69451 100644 --- a/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/dialect/impl/Neo4jAssociationQueries.java +++ b/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/dialect/impl/Neo4jAssociationQueries.java @@ -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; @@ -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 params = params( queryValues ); ExecutionResult result = executionEngine.execute( query, params ); @@ -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] ); diff --git a/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/dialect/impl/Neo4jAssociationSnapshot.java b/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/dialect/impl/Neo4jAssociationSnapshot.java index 83db1992b0..b29577f7d0 100644 --- a/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/dialect/impl/Neo4jAssociationSnapshot.java +++ b/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/dialect/impl/Neo4jAssociationSnapshot.java @@ -6,6 +6,7 @@ */ 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; @@ -13,7 +14,6 @@ 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; @@ -32,8 +32,6 @@ */ public final class Neo4jAssociationSnapshot implements AssociationSnapshot { - private static final Pattern EMBEDDED_FIELDNAME_SEPARATOR = Pattern.compile( "\\." ); - private final Map tuples = new HashMap(); public Neo4jAssociationSnapshot(Node ownerNode, AssociationKey associationKey, AssociatedEntityKeyMetadata associatedEntityKeyMetadata, String relationshipType) { @@ -69,7 +67,7 @@ public Set getRowKeys() { private static Iterable 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]; diff --git a/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/dialect/impl/Neo4jEntityQueries.java b/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/dialect/impl/Neo4jEntityQueries.java index f0cf45a73e..c9bb6a0f8d 100644 --- a/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/dialect/impl/Neo4jEntityQueries.java +++ b/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/dialect/impl/Neo4jEntityQueries.java @@ -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; @@ -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] ); diff --git a/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/dialect/impl/Neo4jTupleAssociationSnapshot.java b/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/dialect/impl/Neo4jTupleAssociationSnapshot.java index 393917af00..f0048a9f7c 100644 --- a/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/dialect/impl/Neo4jTupleAssociationSnapshot.java +++ b/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/dialect/impl/Neo4jTupleAssociationSnapshot.java @@ -6,6 +6,8 @@ */ 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; @@ -13,12 +15,12 @@ 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; @@ -28,8 +30,6 @@ */ public class Neo4jTupleAssociationSnapshot implements TupleSnapshot { - private static final Pattern EMBEDDED_FIELDNAME_SEPARATOR = Pattern.compile( "\\." ); - private final Map properties; public Neo4jTupleAssociationSnapshot(Relationship relationship, AssociationKey associationKey, AssociatedEntityKeyMetadata associatedEntityKeyMetadata) { @@ -53,7 +53,7 @@ private static Map 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 ) ) { @@ -70,7 +70,7 @@ else if ( targetNode.hasProperty( targetColumnName ) ) { else { // Ex: @ElementCollection List 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 iterator = embeddedNode.getRelationships( Direction.OUTGOING, withName( split[i] ) ).iterator(); @@ -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]; @@ -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(); diff --git a/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/dialect/impl/Neo4jTupleSnapshot.java b/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/dialect/impl/Neo4jTupleSnapshot.java index 6a015df39c..5dfe43f481 100644 --- a/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/dialect/impl/Neo4jTupleSnapshot.java +++ b/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/dialect/impl/Neo4jTupleSnapshot.java @@ -6,6 +6,7 @@ */ 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; @@ -13,7 +14,6 @@ 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; @@ -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 associatedEntityKeyMetadata; private final Map rolesByColumn; @@ -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]; diff --git a/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/dialect/impl/QueriesBase.java b/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/dialect/impl/QueriesBase.java index e89a30b316..c9a596eec1 100644 --- a/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/dialect/impl/QueriesBase.java +++ b/neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/dialect/impl/QueriesBase.java @@ -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; @@ -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() ); }