Cleanup code

Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/e616dc14
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/e616dc14
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/e616dc14

Branch: refs/heads/master
Commit: e616dc140150e016c486cb671998e35e632ab606
Parents: d7acbe8
Author: Nikita Timofeev <stari...@gmail.com>
Authored: Tue Jul 31 15:08:02 2018 +0300
Committer: Nikita Timofeev <stari...@gmail.com>
Committed: Tue Jul 31 15:08:02 2018 +0300

----------------------------------------------------------------------
 .../cayenne/access/DataDomainQueryAction.java   |   6 +-
 .../access/PrefetchProcessorJointNode.java      |   3 +-
 .../cayenne/access/jdbc/SelectAction.java       |   5 +-
 .../translator/ejbql/EJBQLFromTranslator.java   |  10 +-
 .../apache/cayenne/ejbql/parser/Compiler.java   |  23 ++--
 .../java/org/apache/cayenne/map/DbEntity.java   |  24 +---
 .../java/org/apache/cayenne/map/ObjEntity.java  |   7 +-
 .../cayenne/map/PathComponentIterator.java      | 122 +++++++++----------
 8 files changed, 83 insertions(+), 117 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/e616dc14/cayenne-server/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java
 
b/cayenne-server/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java
index 13b1961..57458a9 100644
--- 
a/cayenne-server/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java
+++ 
b/cayenne-server/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java
@@ -743,9 +743,9 @@ class DataDomainQueryAction implements QueryRouter, 
OperationObserver {
             // with resolved objects
             List<PrefetchProcessorNode> segmentNodes = new ArrayList<>(width);
             for (int i = 0; i < width; i++) {
-
-                if (rsMapping.get(i) instanceof EntityResultSegment) {
-                    EntityResultSegment entitySegment = (EntityResultSegment) 
rsMapping.get(i);
+                Object mapping = rsMapping.get(i);
+                if (mapping instanceof EntityResultSegment) {
+                    EntityResultSegment entitySegment = (EntityResultSegment) 
mapping;
                     PrefetchProcessorNode nextResult = 
toResultsTree(entitySegment.getClassDescriptor(),
                             metadata.getPrefetchTree(), mainRows, i);
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e616dc14/cayenne-server/src/main/java/org/apache/cayenne/access/PrefetchProcessorJointNode.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/access/PrefetchProcessorJointNode.java
 
b/cayenne-server/src/main/java/org/apache/cayenne/access/PrefetchProcessorJointNode.java
index 784453a..dc7003a 100644
--- 
a/cayenne-server/src/main/java/org/apache/cayenne/access/PrefetchProcessorJointNode.java
+++ 
b/cayenne-server/src/main/java/org/apache/cayenne/access/PrefetchProcessorJointNode.java
@@ -171,8 +171,7 @@ class PrefetchProcessorJointNode extends 
PrefetchProcessorNode {
 
             // make sure we do not include "db:" prefix
             prefix = translated.getOperand(0) + ".";
-        }
-        else {
+        } else {
             prefix = "";
         }
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e616dc14/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SelectAction.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SelectAction.java 
b/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SelectAction.java
index 0cb1ea7..51f373b 100644
--- 
a/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SelectAction.java
+++ 
b/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SelectAction.java
@@ -168,8 +168,9 @@ public class SelectAction extends BaseSQLAction {
                // number of objects returned from Cayenne.
 
                int fetchLimit = query.getFetchLimit();
-               int offset = translator.isSuppressingDistinct() ? 
query.getFetchOffset() : getInMemoryOffset(query
-                               .getFetchOffset());
+               int offset = translator.isSuppressingDistinct()
+                               ? query.getFetchOffset()
+                               : getInMemoryOffset(query.getFetchOffset());
 
                if (fetchLimit > 0 || offset > 0) {
                        return new LimitResultIterator<>(iterator, offset, 
fetchLimit);

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e616dc14/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLFromTranslator.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLFromTranslator.java
 
b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLFromTranslator.java
index e1f3740..f1fc202 100644
--- 
a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLFromTranslator.java
+++ 
b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLFromTranslator.java
@@ -21,9 +21,7 @@ package org.apache.cayenne.access.translator.ejbql;
 import org.apache.cayenne.ejbql.EJBQLBaseVisitor;
 import org.apache.cayenne.ejbql.EJBQLExpression;
 import org.apache.cayenne.ejbql.parser.EJBQLFromItem;
-import org.apache.cayenne.ejbql.parser.EJBQLInnerFetchJoin;
 import org.apache.cayenne.ejbql.parser.EJBQLJoin;
-import org.apache.cayenne.ejbql.parser.EJBQLOuterFetchJoin;
 
 /**
  * @since 3.0
@@ -71,10 +69,10 @@ public class EJBQLFromTranslator extends EJBQLBaseVisitor {
         joinAppender.appendInnerJoin(
                 null,
                 new EJBQLTableId(join.getLeftHandSideId()),
-                new EJBQLTableId(((EJBQLInnerFetchJoin) 
join).getRightHandSideId()));
+                new EJBQLTableId(join.getRightHandSideId()));
 
         context.markCurrentPosition(EJBQLJoinAppender
-                .makeJoinTailMarker(((EJBQLInnerFetchJoin) 
join).getRightHandSideId()));
+                .makeJoinTailMarker(join.getRightHandSideId()));
         return false;
     }
 
@@ -95,10 +93,10 @@ public class EJBQLFromTranslator extends EJBQLBaseVisitor {
         joinAppender.appendOuterJoin(
                 null,
                 new EJBQLTableId(join.getLeftHandSideId()),
-                new EJBQLTableId(((EJBQLOuterFetchJoin) 
join).getRightHandSideId()));
+                new EJBQLTableId(join.getRightHandSideId()));
 
         context.markCurrentPosition(EJBQLJoinAppender
-                .makeJoinTailMarker(((EJBQLOuterFetchJoin) 
join).getRightHandSideId()));
+                .makeJoinTailMarker(join.getRightHandSideId()));
         return false;
     }
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e616dc14/cayenne-server/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java 
b/cayenne-server/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
index 3908ff3..47eef55 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
@@ -233,26 +233,21 @@ class Compiler {
         return compiled;
     }
 
-    private EntityResult compileEntityResultWithPrefetch(
-            EntityResult compiledResult,
-            EJBQLExpression prefetchExpression) {
-        final EntityResult result = compiledResult;
+    private EntityResult compileEntityResultWithPrefetch(EntityResult 
compiledResult, EJBQLExpression prefetchExpression) {
         String id = prefetchExpression.getText().toLowerCase();
         ClassDescriptor descriptor = descriptorsById.get(id);
         if (descriptor == null) {
             descriptor = descriptorsById.get(prefetchExpression.getText());
         }
-        final String prefix = prefetchExpression.getText().substring(
-                prefetchExpression.getText().indexOf(".") + 1);
-
-        final Set<String> visited = new HashSet<String>();
+        String prefix = 
prefetchExpression.getText().substring(prefetchExpression.getText().indexOf(".")
 + 1);
+        Set<String> visited = new HashSet<>();
 
         PropertyVisitor visitor = new PropertyVisitor() {
 
             public boolean visitAttribute(AttributeProperty property) {
                 ObjAttribute oa = property.getAttribute();
                 if (visited.add(oa.getDbAttributePath())) {
-                    result.addObjectField(oa.getEntity().getName(), "fetch."
+                    compiledResult.addObjectField(oa.getEntity().getName(), 
"fetch."
                             + prefix
                             + "."
                             + oa.getName(), prefix + "." + 
oa.getDbAttributeName());
@@ -271,7 +266,7 @@ class Compiler {
                 for (DbJoin join : dbRel.getJoins()) {
                     DbAttribute src = join.getSource();
                     if (src.isForeignKey() && visited.add(src.getName())) {
-                        result.addDbField("fetch." + prefix + "." + 
src.getName(), prefix
+                        compiledResult.addDbField("fetch." + prefix + "." + 
src.getName(), prefix
                                 + "."
                                 + src.getName());
                     }
@@ -286,7 +281,7 @@ class Compiler {
         // append id columns ... (some may have been appended already via 
relationships)
         for (String pkName : descriptor.getEntity().getPrimaryKeyNames()) {
             if (visited.add(pkName)) {
-                result
+                compiledResult
                         .addDbField("fetch." + prefix + "." + pkName, prefix
                                 + "."
                                 + pkName);
@@ -297,13 +292,13 @@ class Compiler {
         for (ObjAttribute column : descriptor.getDiscriminatorColumns()) {
 
             if (visited.add(column.getName())) {
-                result.addDbField(
+                compiledResult.addDbField(
                         "fetch." + prefix + "." + column.getDbAttributePath(),
                         prefix + "." + column.getDbAttributePath());
             }
         }
 
-        return result;
+        return compiledResult;
     }
 
     private EntityResult compileEntityResult(EJBQLExpression expression, int 
position) {
@@ -321,7 +316,7 @@ class Compiler {
             0
         };
 
-        final Set<String> visited = new HashSet<String>();
+        final Set<String> visited = new HashSet<>();
 
         PropertyVisitor visitor = new PropertyVisitor() {
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e616dc14/cayenne-server/src/main/java/org/apache/cayenne/map/DbEntity.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/DbEntity.java 
b/cayenne-server/src/main/java/org/apache/cayenne/map/DbEntity.java
index 51fefa4..0626655 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/map/DbEntity.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/map/DbEntity.java
@@ -34,6 +34,7 @@ import org.apache.cayenne.map.event.EntityEvent;
 import org.apache.cayenne.map.event.MapEvent;
 import org.apache.cayenne.map.event.RelationshipEvent;
 import org.apache.cayenne.util.CayenneMapEntry;
+import org.apache.cayenne.util.Util;
 import org.apache.cayenne.util.XMLEncoder;
 
 import java.util.ArrayList;
@@ -669,7 +670,7 @@ public class DbEntity extends Entity implements 
ConfigurationNode, DbEntityListe
         }
 
         private PathComponentIterator createPathIterator(String path) {
-            return new PathComponentIterator(DbEntity.this, path, new 
HashMap<>());
+            return new PathComponentIterator(DbEntity.this, path, 
Collections.emptyMap());
             // TODO: do we need aliases here?
         }
 
@@ -713,7 +714,7 @@ public class DbEntity extends Entity implements 
ConfigurationNode, DbEntityListe
                     appendPath(finalPath, component);
                 }
 
-                return convertToPath(finalPath);
+                return Util.join(finalPath, Entity.PATH_SEPARATOR);
             }
             // case (1)
             if (path.equals(relationshipPath)) {
@@ -736,7 +737,7 @@ public class DbEntity extends Entity implements 
ConfigurationNode, DbEntityListe
                     appendPath(finalPath, lastDBR);
                 }
 
-                return convertToPath(finalPath);
+                return Util.join(finalPath, Entity.PATH_SEPARATOR);
             }
 
             // case (2)
@@ -751,7 +752,6 @@ public class DbEntity extends Entity implements 
ConfigurationNode, DbEntityListe
 
             // for inserts from the both ends use LinkedList
             LinkedList<String> finalPath = new LinkedList<>();
-
             while (relationshipIt.hasNext() && pathIt.hasNext()) {
                 // relationship path components must be DbRelationships
                 DbRelationship nextDBR = (DbRelationship) 
relationshipIt.next();
@@ -783,21 +783,7 @@ public class DbEntity extends Entity implements 
ConfigurationNode, DbEntityListe
                 appendPath(finalPath, component);
             }
 
-            return convertToPath(finalPath);
-        }
-
-        private String convertToPath(List<String> path) {
-            StringBuilder converted = new StringBuilder();
-            int len = path.size();
-            for (int i = 0; i < len; i++) {
-                if (i > 0) {
-                    converted.append(Entity.PATH_SEPARATOR);
-                }
-
-                converted.append(path.get(i));
-            }
-
-            return converted.toString();
+            return Util.join(finalPath, Entity.PATH_SEPARATOR);
         }
 
         private void prependReversedPath(LinkedList<String> finalPath, 
DbRelationship relationship) {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e616dc14/cayenne-server/src/main/java/org/apache/cayenne/map/ObjEntity.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/ObjEntity.java 
b/cayenne-server/src/main/java/org/apache/cayenne/map/ObjEntity.java
index 02eb43e..74e793d 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/map/ObjEntity.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/map/ObjEntity.java
@@ -1010,7 +1010,7 @@ public class ObjEntity extends Entity implements 
ObjEntityListener, Configuratio
     }
 
     private PathComponentIterator createPathIterator(String path) {
-        return new PathComponentIterator(ObjEntity.this, path, new 
HashMap<String, String>());
+        return new PathComponentIterator(ObjEntity.this, path, 
Collections.emptyMap());
         // TODO: do we need aliases here?
     }
 
@@ -1077,11 +1077,8 @@ public class ObjEntity extends Entity implements 
ObjEntityListener, Configuratio
             }
 
             // convert obj_path to db_path
-
             String converted = toDbPath(createPathIterator((String) 
expression.getOperand(0)));
-            Expression exp = 
ExpressionFactory.expressionOfType(Expression.DB_PATH);
-            exp.setOperand(0, converted);
-            return exp;
+            return ExpressionFactory.dbPathExp(converted);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e616dc14/cayenne-server/src/main/java/org/apache/cayenne/map/PathComponentIterator.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/map/PathComponentIterator.java
 
b/cayenne-server/src/main/java/org/apache/cayenne/map/PathComponentIterator.java
index e631156..a23a281 100644
--- 
a/cayenne-server/src/main/java/org/apache/cayenne/map/PathComponentIterator.java
+++ 
b/cayenne-server/src/main/java/org/apache/cayenne/map/PathComponentIterator.java
@@ -25,6 +25,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.Objects;
 import java.util.StringTokenizer;
 
 /**
@@ -32,16 +33,17 @@ import java.util.StringTokenizer;
  */
 class PathComponentIterator implements Iterator<PathComponent<Attribute, 
Relationship>> {
 
-    private StringTokenizer toks;
+    private final StringTokenizer toks;
+    private final String path;
+    private final Map<String, String> aliasMap;
+
     private Entity currentEntity;
-    private String path;
-    private Map<String, String> aliasMap;
 
     PathComponentIterator(Entity root, String path, Map<String, String> 
aliasMap) {
-        currentEntity = root;
-        toks = new StringTokenizer(path, Entity.PATH_SEPARATOR);
-        this.path = path;
-        this.aliasMap = aliasMap;
+        this.currentEntity = Objects.requireNonNull(root);
+        this.path = Objects.requireNonNull(path);
+        this.aliasMap = Objects.requireNonNull(aliasMap);
+        this.toks = new StringTokenizer(path, Entity.PATH_SEPARATOR);
     }
 
     public boolean hasNext() {
@@ -56,8 +58,7 @@ class PathComponentIterator implements 
Iterator<PathComponent<Attribute, Relatio
         // we only support LEFT JOINS for now...
         if (pathComp.endsWith(Entity.OUTER_JOIN_INDICATOR)) {
             relationshipJoinType = JoinType.LEFT_OUTER;
-            pathComp = pathComp.substring(0, pathComp.length()
-                    - Entity.OUTER_JOIN_INDICATOR.length());
+            pathComp = pathComp.substring(0, pathComp.length() - 
Entity.OUTER_JOIN_INDICATOR.length());
         }
 
         // see if this is an attribute
@@ -66,79 +67,68 @@ class PathComponentIterator implements 
Iterator<PathComponent<Attribute, Relatio
             // do a sanity check...
             if (toks.hasMoreTokens()) {
                 throw new ExpressionException(
-                        "Attribute must be the last component of the path: '"
-                                + pathComp
-                                + "'.",
-                        path,
-                        null);
+                        "Attribute must be the last component of the path: '" 
+ pathComp + "'.", path, null);
             }
 
-            return new AttributePathComponent<Attribute, Relationship>(attr);
+            return new AttributePathComponent<>(attr);
         }
 
         Relationship rel = currentEntity.getRelationship(pathComp);
         if (rel != null) {
             currentEntity = rel.getTargetEntity();
-            return new RelationshipPathComponent<Attribute, Relationship>(
-                    rel,
-                    relationshipJoinType,
-                    !hasNext());
+            return new RelationshipPathComponent<>(rel, relationshipJoinType, 
!hasNext());
+        }
+
+        PathComponent<Attribute, Relationship> aliasedPathComponent = 
getAliasedPathComponent(pathComp);
+        if (aliasedPathComponent != null) {
+            return aliasedPathComponent;
+        }
+
+        throw invalidPathException("Can't resolve path component", pathComp);
+    }
+
+    private PathComponent<Attribute, Relationship> 
getAliasedPathComponent(String pathComp) {
+        String aliasedPath = aliasMap.get(pathComp);
+        if(aliasedPath == null) {
+            return null;
         }
 
-        String aliasedPath = (aliasMap != null) ? aliasMap.get(pathComp) : 
null;
-        if (aliasedPath != null) {
-
-            // a few fairly arbitrary assumptions.... if we find that they 
restrict valid
-            // and useful cases, we can change this behavior:
-            // 
-            // 1. No nested aliases. Aliased path must contain only unaliased 
component
-            // names.
-            // 2. Subpath must be relationship-only. Aliasing attributes 
doesn't seem
-            // useful, so we don't handle this case for simplicity...
-
-            // fully resolve subpath here... since we need to know the target 
entity of
-            // the subpath, we have to fully traverse it, hence instead of 
lazy iterator
-            // we might as well reuse obtained information in the 
AliasPathComponent
-
-            Iterator<PathComponent<Attribute, Relationship>> subpathIt = new 
PathComponentIterator(
-                    currentEntity,
-                    aliasedPath,
-                    Collections.<String, String>emptyMap());
-
-            Collection<PathComponent<Attribute, Relationship>> parsedSubpath = 
new ArrayList<>(4);
-
-            while (subpathIt.hasNext()) {
-                PathComponent<Attribute, Relationship> subpathComponent = 
subpathIt.next();
-
-                Relationship subpathRelationship = 
subpathComponent.getRelationship();
-                if (subpathRelationship == null) {
-                    throw invalidPathException(
-                            "Expected a relationship in the aliased subpath. 
Alias ["
-                                    + pathComp
-                                    + "]",
-                            subpathComponent.getName());
-                }
-
-                currentEntity = subpathRelationship.getTargetEntity();
-                parsedSubpath.add(subpathComponent);
+        // a few fairly arbitrary assumptions.... if we find that they 
restrict valid
+        // and useful cases, we can change this behavior:
+        //
+        // 1. No nested aliases. Aliased path must contain only unaliased 
component names.
+        // 2. Subpath must be relationship-only. Aliasing attributes doesn't 
seem
+        // useful, so we don't handle this case for simplicity...
+
+        // fully resolve subpath here... since we need to know the target 
entity of
+        // the subpath, we have to fully traverse it, hence instead of lazy 
iterator
+        // we might as well reuse obtained information in the 
AliasPathComponent
+
+        Iterator<PathComponent<Attribute, Relationship>> subpathIt =
+                new PathComponentIterator(currentEntity, aliasedPath, 
Collections.emptyMap());
+
+        Collection<PathComponent<Attribute, Relationship>> parsedSubpath = new 
ArrayList<>(4);
+
+        while (subpathIt.hasNext()) {
+            PathComponent<Attribute, Relationship> subpathComponent = 
subpathIt.next();
+
+            Relationship subpathRelationship = 
subpathComponent.getRelationship();
+            if (subpathRelationship == null) {
+                throw invalidPathException(
+                        "Expected a relationship in the aliased subpath. Alias 
[" + pathComp + "]",
+                        subpathComponent.getName());
             }
 
-            return new AliasPathComponent<>(pathComp, parsedSubpath, 
!hasNext());
+            currentEntity = subpathRelationship.getTargetEntity();
+            parsedSubpath.add(subpathComponent);
         }
 
-        throw invalidPathException("Can't resolve path component", pathComp);
+        return new AliasPathComponent<>(pathComp, parsedSubpath, !hasNext());
     }
 
     private ExpressionException invalidPathException(String message, String 
pathComponent) {
-        StringBuilder buffer = new StringBuilder();
-        buffer
-                .append(message)
-                .append(": [")
-                .append(currentEntity.getName())
-                .append('.')
-                .append(pathComponent)
-                .append("].");
-        return new ExpressionException(buffer.toString(), path, null);
+        String buffer = message + ": [" + currentEntity.getName() + '.' + 
pathComponent + "].";
+        return new ExpressionException(buffer, path, null);
     }
 
     public void remove() {

Reply via email to