You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2016/12/18 18:30:46 UTC

cayenne git commit: deprecated API cleanup

Repository: cayenne
Updated Branches:
  refs/heads/master a24473ad8 -> 9319337c6


deprecated API cleanup


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

Branch: refs/heads/master
Commit: 9319337c60eb882051b846e7b81df9cb155ff923
Parents: a24473a
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Sun Dec 18 21:26:20 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Sun Dec 18 21:30:30 2016 +0300

----------------------------------------------------------------------
 .../access/ClientServerChannelQueryIT.java      | 19 ++++--------
 .../cayenne/query/ClientExpressionIT.java       |  9 +++---
 .../access/PrefetchProcessorJointNode.java      | 21 ++++++-------
 .../ejbql/EJBQLIdentifierColumnsTranslator.java | 13 ++++----
 .../apache/cayenne/exp/ExpressionFactory.java   | 19 ++++++------
 .../cayenne/exp/parser/ExpressionParser.java    | 13 +-------
 .../java/org/apache/cayenne/map/MapLoader.java  | 15 +++++-----
 .../cayenne/map/QueryDescriptorLoader.java      |  6 ++--
 .../cayenne/exp/parser/ExpressionParser.jjt     | 19 ++++--------
 .../apache/cayenne/access/DataContextIT.java    |  2 +-
 .../access/DataContextPrefetchMultistepIT.java  | 21 +++++--------
 .../cayenne/access/jdbc/SelectActionIT.java     |  3 +-
 .../cayenne/exp/BooleanExpressionTest.java      |  4 +--
 .../cayenne/exp/ParsedExpQualifierCompatIT.java | 31 +++++++++-----------
 .../java/org/apache/cayenne/map/DbEntityIT.java | 28 ++++++++----------
 .../org/apache/cayenne/map/ObjEntityIT.java     | 28 +++++++++---------
 .../cayenne/map/SelectQueryDescriptorTest.java  | 14 ++++-----
 .../SelectQueryPrefetchRouterActionIT.java      |  5 ++--
 ...ryPrefetchRouterActionQualifiedEntityIT.java |  3 +-
 .../cayenne/unit/jira/CAY_10062004_ExpTest.java | 15 +++++-----
 .../org/apache/cayenne/unit/jira/CAY_115IT.java |  3 +-
 .../modeler/editor/SelectQueryPrefetchTab.java  | 20 ++++++-------
 .../modeler/util/ExpressionConvertor.java       |  3 +-
 .../apache/cayenne/wocompat/EOObjEntity.java    | 21 ++++++-------
 .../org/apache/cayenne/wocompat/EOQuery.java    | 18 ++++++------
 25 files changed, 155 insertions(+), 198 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/9319337c/cayenne-client/src/test/java/org/apache/cayenne/access/ClientServerChannelQueryIT.java
----------------------------------------------------------------------
diff --git a/cayenne-client/src/test/java/org/apache/cayenne/access/ClientServerChannelQueryIT.java b/cayenne-client/src/test/java/org/apache/cayenne/access/ClientServerChannelQueryIT.java
index ecb99c1..ff91c1a 100644
--- a/cayenne-client/src/test/java/org/apache/cayenne/access/ClientServerChannelQueryIT.java
+++ b/cayenne-client/src/test/java/org/apache/cayenne/access/ClientServerChannelQueryIT.java
@@ -23,7 +23,7 @@ import org.apache.cayenne.ObjectContext;
 import org.apache.cayenne.ValueHolder;
 import org.apache.cayenne.cache.QueryCache;
 import org.apache.cayenne.di.Inject;
-import org.apache.cayenne.exp.Expression;
+import org.apache.cayenne.exp.ExpressionFactory;
 import org.apache.cayenne.query.MappedSelect;
 import org.apache.cayenne.query.SelectQuery;
 import org.apache.cayenne.query.SortOrder;
@@ -41,10 +41,7 @@ import org.junit.Test;
 
 import java.util.List;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 @UseServerRuntime(CayenneProjects.MULTI_TIER_PROJECT)
 public class ClientServerChannelQueryIT extends ClientCase {
@@ -155,8 +152,7 @@ public class ClientServerChannelQueryIT extends ClientCase {
     public void testSelectQuerySimpleQualifier() throws Exception {
         createTwoMtTable1sAnd2sDataSet();
 
-        SelectQuery q = new SelectQuery(ClientMtTable1.class, Expression
-                .fromString("globalAttribute1 = 'g1'"));
+        SelectQuery q = new SelectQuery(ClientMtTable1.class, ExpressionFactory.exp("globalAttribute1 = 'g1'"));
         List<?> results = context.performQuery(q);
 
         assertEquals(1, results.size());
@@ -168,8 +164,7 @@ public class ClientServerChannelQueryIT extends ClientCase {
     public void testSelectQueryToManyRelationshipQualifier() throws Exception {
         createTwoMtTable1sAnd2sDataSet();
 
-        SelectQuery q = new SelectQuery(ClientMtTable1.class, Expression
-                .fromString("table2Array.globalAttribute = 'g1'"));
+        SelectQuery q = new SelectQuery(ClientMtTable1.class, ExpressionFactory.exp("table2Array.globalAttribute = 'g1'"));
         List<?> results = context.performQuery(q);
 
         assertEquals(1, results.size());
@@ -208,8 +203,7 @@ public class ClientServerChannelQueryIT extends ClientCase {
     public void testSelectQueryPrefetchToOne() throws Exception {
         createTwoMtTable1sAnd2sDataSet();
 
-        SelectQuery q = new SelectQuery(ClientMtTable2.class, Expression
-                .fromString("globalAttribute = 'g1'"));
+        SelectQuery q = new SelectQuery(ClientMtTable2.class, ExpressionFactory.exp("globalAttribute = 'g1'"));
         q.addPrefetch(ClientMtTable2.TABLE1_PROPERTY);
         List<?> results = context.performQuery(q);
 
@@ -231,8 +225,7 @@ public class ClientServerChannelQueryIT extends ClientCase {
     public void testSelectQueryPrefetchToMany() throws Exception {
         createTwoMtTable1sAnd2sDataSet();
 
-        SelectQuery q = new SelectQuery(ClientMtTable1.class, Expression
-                .fromString("globalAttribute1 = 'g1'"));
+        SelectQuery q = new SelectQuery(ClientMtTable1.class, ExpressionFactory.exp("globalAttribute1 = 'g1'"));
         q.addPrefetch(ClientMtTable1.TABLE2ARRAY_PROPERTY);
         List<?> results = context.performQuery(q);
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9319337c/cayenne-client/src/test/java/org/apache/cayenne/query/ClientExpressionIT.java
----------------------------------------------------------------------
diff --git a/cayenne-client/src/test/java/org/apache/cayenne/query/ClientExpressionIT.java b/cayenne-client/src/test/java/org/apache/cayenne/query/ClientExpressionIT.java
index 856dfa5..7bc471d 100644
--- a/cayenne-client/src/test/java/org/apache/cayenne/query/ClientExpressionIT.java
+++ b/cayenne-client/src/test/java/org/apache/cayenne/query/ClientExpressionIT.java
@@ -306,7 +306,7 @@ public class ClientExpressionIT extends ClientCase {
     }
 
     @Test
-    public void testExpressionWithParameters() throws Exception {
+    public void testParams() throws Exception {
         createDataSet();
         
         SelectQuery<ClientMtTable1> table1Query = new SelectQuery<ClientMtTable1>(ClientMtTable1.class);
@@ -316,15 +316,14 @@ public class ClientExpressionIT extends ClientCase {
         ClientMtTable1 element_1 = table1List.get(0);
         ClientMtTable1 element_5 = table1List.get(4);
         
-        Expression exp = Expression.fromString("table1 = $attr");
-        exp = exp.expWithParameters(Collections.singletonMap("attr", element_1));
+        Expression exp = ExpressionFactory.exp("table1 = $attr");
+        exp = exp.params(Collections.singletonMap("attr", element_1));
         SelectQuery<ClientMtTable2> table2Query = new SelectQuery<ClientMtTable2>(ClientMtTable2.class, exp);
         List<ClientMtTable2> table2List = context.select(table2Query);
         
         assertEquals(2, table2List.size());
         
-        exp = exp.andExp(Expression.fromString("table1 = $attr"))
-                .expWithParameters(Collections.singletonMap("attr", element_5));
+        exp = exp.andExp(ExpressionFactory.exp("table1 = $attr")).params(Collections.singletonMap("attr", element_5));
         table2Query = new SelectQuery<ClientMtTable2>(ClientMtTable2.class, exp);
         table2List = context.select(table2Query);
         

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9319337c/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 460f255..7022dc6 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
@@ -19,20 +19,12 @@
 
 package org.apache.cayenne.access;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.DataRow;
 import org.apache.cayenne.Persistent;
 import org.apache.cayenne.access.jdbc.ColumnDescriptor;
 import org.apache.cayenne.exp.Expression;
+import org.apache.cayenne.exp.ExpressionFactory;
 import org.apache.cayenne.exp.parser.ASTPath;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbJoin;
@@ -47,6 +39,15 @@ import org.apache.cayenne.reflect.PropertyVisitor;
 import org.apache.cayenne.reflect.ToManyProperty;
 import org.apache.cayenne.reflect.ToOneProperty;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
 /**
  * A specialized PrefetchTreeNode used for joint prefetch resolving.
  * 
@@ -162,7 +163,7 @@ class PrefetchProcessorJointNode extends PrefetchProcessorNode {
 
         final String prefix;
         if (jointRoot != this) {
-            Expression objectPath = Expression.fromString(getPath(jointRoot));
+            Expression objectPath = ExpressionFactory.exp(getPath(jointRoot));
             ASTPath translated = (ASTPath) ((PrefetchProcessorNode) jointRoot)
                     .getResolver()
                     .getEntity()

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9319337c/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLIdentifierColumnsTranslator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLIdentifierColumnsTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLIdentifierColumnsTranslator.java
index ac5205e..38dcd9b 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLIdentifierColumnsTranslator.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLIdentifierColumnsTranslator.java
@@ -18,16 +18,12 @@
  ****************************************************************/
 package org.apache.cayenne.access.translator.ejbql;
 
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.dba.TypesMapping;
 import org.apache.cayenne.ejbql.EJBQLBaseVisitor;
 import org.apache.cayenne.ejbql.EJBQLExpression;
 import org.apache.cayenne.exp.Expression;
+import org.apache.cayenne.exp.ExpressionFactory;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.DbJoin;
@@ -44,6 +40,11 @@ import org.apache.cayenne.reflect.PropertyVisitor;
 import org.apache.cayenne.reflect.ToManyProperty;
 import org.apache.cayenne.reflect.ToOneProperty;
 
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
 /**
  * @since 3.0
  */
@@ -166,7 +167,7 @@ class EJBQLIdentifierColumnsTranslator extends EJBQLBaseVisitor {
                     DbEntity table = descriptor.getRootDbEntities().iterator().next();
                     ObjEntity objectEntity = descriptor.getEntity();
                     prefetch.setEntityName(objectEntity.getName());
-                    Expression prefetchExp = Expression.fromString(prefetch.getPath());
+                    Expression prefetchExp = ExpressionFactory.exp(prefetch.getPath());
                     Expression dbPrefetch = objectEntity.translateToDbPath(prefetchExp);
 
                     DbRelationship r = null;

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9319337c/cayenne-server/src/main/java/org/apache/cayenne/exp/ExpressionFactory.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/exp/ExpressionFactory.java b/cayenne-server/src/main/java/org/apache/cayenne/exp/ExpressionFactory.java
index b440f8a..1ffefef 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/exp/ExpressionFactory.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/exp/ExpressionFactory.java
@@ -19,14 +19,6 @@
 
 package org.apache.cayenne.exp;
 
-import java.io.Reader;
-import java.io.StringReader;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
 import org.apache.cayenne.Persistent;
 import org.apache.cayenne.exp.parser.ASTAdd;
 import org.apache.cayenne.exp.parser.ASTAnd;
@@ -69,9 +61,16 @@ import org.apache.cayenne.exp.parser.ParseException;
 import org.apache.cayenne.exp.parser.SimpleNode;
 import org.apache.cayenne.map.Entity;
 
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
 /**
- * Helper class to build expressions. Alternatively expressions can be built
- * using {@link org.apache.cayenne.exp.Expression#fromString(String)} method.
+ * Helper class to build expressions.
  */
 public class ExpressionFactory {
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9319337c/cayenne-server/src/main/java/org/apache/cayenne/exp/parser/ExpressionParser.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/exp/parser/ExpressionParser.java b/cayenne-server/src/main/java/org/apache/cayenne/exp/parser/ExpressionParser.java
index 18841ab..77fea61 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/exp/parser/ExpressionParser.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/exp/parser/ExpressionParser.java
@@ -29,18 +29,7 @@ import org.apache.cayenne.exp.Expression;
   * @since 1.1
   */
 public class ExpressionParser/*@bgen(jjtree)*/implements ExpressionParserTreeConstants, ExpressionParserConstants {/*@bgen(jjtree)*/
-  protected JJTExpressionParserState jjtree = new JJTExpressionParserState();public static void main(String[] arg) {
-        // since Main is used for some basic speed measuring,
-        // lets run it twice to "warm up" the parser
-        Expression.fromString(arg[0]);
-
-        long start = System.currentTimeMillis();
-        Expression exp = Expression.fromString(arg[0]);
-        long end = System.currentTimeMillis();
-
-        System.out.println(exp);
-        System.out.println("Parsed in " + (end - start) + " ms.");
-    }
+  protected JJTExpressionParserState jjtree = new JJTExpressionParserState();
 
   final public Expression expression() throws ParseException {
     orCondition();

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9319337c/cayenne-server/src/main/java/org/apache/cayenne/map/MapLoader.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/MapLoader.java b/cayenne-server/src/main/java/org/apache/cayenne/map/MapLoader.java
index 64376f4..2ea7a6f 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/map/MapLoader.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/map/MapLoader.java
@@ -19,14 +19,9 @@
 
 package org.apache.cayenne.map;
 
-import java.util.HashMap;
-import java.util.Map;
-import java.util.TreeMap;
-
 import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.dbimport.*;
 import org.apache.cayenne.dba.TypesMapping;
-import org.apache.cayenne.exp.Expression;
+import org.apache.cayenne.exp.ExpressionFactory;
 import org.apache.cayenne.util.Util;
 import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;
@@ -34,6 +29,10 @@ import org.xml.sax.SAXException;
 import org.xml.sax.XMLReader;
 import org.xml.sax.helpers.DefaultHandler;
 
+import java.util.HashMap;
+import java.util.Map;
+import java.util.TreeMap;
+
 /**
  * Default MapLoader. Its responsibilities include reading DataMaps from XML
  * files and saving DataMap objects back to XML.
@@ -1114,9 +1113,9 @@ public class MapLoader extends DefaultHandler {
 
 		// qualifier can belong to ObjEntity, DbEntity or a query
 		if (objEntity != null) {
-			objEntity.setDeclaredQualifier(Expression.fromString(qualifier));
+			objEntity.setDeclaredQualifier(ExpressionFactory.exp(qualifier));
 		} else if (dbEntity != null) {
-			dbEntity.setQualifier(Expression.fromString(qualifier));
+			dbEntity.setQualifier(ExpressionFactory.exp(qualifier));
 		} else {
 			queryBuilder.setQualifier(qualifier);
 		}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9319337c/cayenne-server/src/main/java/org/apache/cayenne/map/QueryDescriptorLoader.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/QueryDescriptorLoader.java b/cayenne-server/src/main/java/org/apache/cayenne/map/QueryDescriptorLoader.java
index 90bcfc7..4514b22 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/map/QueryDescriptorLoader.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/map/QueryDescriptorLoader.java
@@ -21,7 +21,9 @@ package org.apache.cayenne.map;
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.ConfigurationException;
 import org.apache.cayenne.exp.Expression;
-import org.apache.cayenne.query.*;
+import org.apache.cayenne.exp.ExpressionFactory;
+import org.apache.cayenne.query.Ordering;
+import org.apache.cayenne.query.SortOrder;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -191,7 +193,7 @@ public class QueryDescriptorLoader {
             this.qualifier = null;
         }
         else {
-            this.qualifier = Expression.fromString(qualifier.trim());
+            this.qualifier = ExpressionFactory.exp(qualifier.trim());
         }
     }
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9319337c/cayenne-server/src/main/jjtree/org/apache/cayenne/exp/parser/ExpressionParser.jjt
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/jjtree/org/apache/cayenne/exp/parser/ExpressionParser.jjt b/cayenne-server/src/main/jjtree/org/apache/cayenne/exp/parser/ExpressionParser.jjt
index 08f8b7d..370a223 100644
--- a/cayenne-server/src/main/jjtree/org/apache/cayenne/exp/parser/ExpressionParser.jjt
+++ b/cayenne-server/src/main/jjtree/org/apache/cayenne/exp/parser/ExpressionParser.jjt
@@ -45,18 +45,6 @@ import org.apache.cayenne.exp.*;
   * @since 1.1
   */ 
 public class ExpressionParser {
-    public static void main(String[] arg) {
-        // since Main is used for some basic speed measuring,
-        // lets run it twice to "warm up" the parser
-        Expression.fromString(arg[0]);
-        
-        long start = System.currentTimeMillis();
-        Expression exp = Expression.fromString(arg[0]);
-        long end = System.currentTimeMillis();
-        
-        System.out.println(exp);
-        System.out.println("Parsed in " + (end - start) + " ms.");
-    }
 }
 
 PARSER_END(ExpressionParser)
@@ -249,10 +237,13 @@ void multiplySubtractExp() : {}
 }
 
 void numericTermExt() : {}
-{
        numericTerm()
+{
+        numericTerm()
     |
         "~" numericTerm()  #BitwiseNot(1)
-}

  
+}
+
+  
 void numericTerm() : {} 
 {
         ( "+" )?  numericPrimary ()

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9319337c/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextIT.java
index e5068be..1163c3f 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextIT.java
@@ -393,7 +393,7 @@ public class DataContextIT extends ServerCase {
 
 		createSingleArtistDataSet();
 
-		SelectQuery select = new SelectQuery(Painting.class, Expression.fromString("db:PAINTING_ID = 1"));
+		SelectQuery select = new SelectQuery(Painting.class, ExpressionFactory.exp("db:PAINTING_ID = 1"));
 
 		assertEquals(0, context.performQuery(select).size());
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9319337c/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextPrefetchMultistepIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextPrefetchMultistepIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextPrefetchMultistepIT.java
index 5381719..ab76c4d 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextPrefetchMultistepIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextPrefetchMultistepIT.java
@@ -26,6 +26,7 @@ import org.apache.cayenne.Persistent;
 import org.apache.cayenne.ValueHolder;
 import org.apache.cayenne.di.Inject;
 import org.apache.cayenne.exp.Expression;
+import org.apache.cayenne.exp.ExpressionFactory;
 import org.apache.cayenne.query.PrefetchTreeNode;
 import org.apache.cayenne.query.SelectQuery;
 import org.apache.cayenne.test.jdbc.DBHelper;
@@ -46,11 +47,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 @UseServerRuntime(CayenneProjects.TESTMAP_PROJECT)
 public class DataContextPrefetchMultistepIT extends ServerCase {
@@ -138,9 +135,8 @@ public class DataContextPrefetchMultistepIT extends ServerCase {
         assertNull(context.getGraphManager().getNode(oid1));
         assertNull(context.getGraphManager().getNode(oid2));
 
-        Expression e = Expression.fromString("galleryName = $name");
-        SelectQuery<Gallery> q = SelectQuery.query(Gallery.class, e.expWithParameters(Collections
-                .singletonMap("name", "gallery2")));
+        Expression e = ExpressionFactory.exp("galleryName = $name");
+        SelectQuery<Gallery> q = SelectQuery.query(Gallery.class, e.params(Collections.singletonMap("name", "gallery2")));
         q.addPrefetch("exhibitArray.artistExhibitArray");
 
         List<Gallery> galleries = context.select(q);
@@ -167,7 +163,7 @@ public class DataContextPrefetchMultistepIT extends ServerCase {
 
         createTwoArtistsWithExhibitsDataSet();
 
-        Expression e = Expression.fromString("galleryName = $name");
+        Expression e = ExpressionFactory.exp("galleryName = $name");
         SelectQuery<Gallery> q = SelectQuery.query(Gallery.class, e.expWithParameters(Collections
                 .singletonMap("name", "gallery2")));
         q.addPrefetch("exhibitArray");
@@ -203,7 +199,7 @@ public class DataContextPrefetchMultistepIT extends ServerCase {
 
         createTwoArtistsWithExhibitsDataSet();
 
-        Expression e = Expression.fromString("galleryName = $name");
+        Expression e = ExpressionFactory.exp("galleryName = $name");
         SelectQuery<Gallery> q = SelectQuery.query(Gallery.class, e.expWithParameters(Collections
                 .singletonMap("name", "gallery2")));
         q.addPrefetch("exhibitArray").setSemantics(
@@ -240,14 +236,13 @@ public class DataContextPrefetchMultistepIT extends ServerCase {
 
         createTwoArtistsWithExhibitsDataSet();
 
-        Expression e = Expression.fromString("galleryName = $name");
+        Expression e = ExpressionFactory.exp("galleryName = $name");
         SelectQuery<Gallery> q = SelectQuery.query(Gallery.class, e.expWithParameters(Collections
                 .singletonMap("name", "gallery2")));
 
         // reverse the order of prefetches compared to the previous test
         q.addPrefetch("exhibitArray");
-        q.addPrefetch("exhibitArray.artistExhibitArray").setSemantics(
-                PrefetchTreeNode.JOINT_PREFETCH_SEMANTICS);
+        q.addPrefetch("exhibitArray.artistExhibitArray").setSemantics(PrefetchTreeNode.JOINT_PREFETCH_SEMANTICS);
 
         List<Gallery> galleries = context.select(q);
         assertEquals(1, galleries.size());

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9319337c/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/SelectActionIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/SelectActionIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/SelectActionIT.java
index b2ca3a4..865b823 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/SelectActionIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/SelectActionIT.java
@@ -22,6 +22,7 @@ import org.apache.cayenne.DataRow;
 import org.apache.cayenne.access.DataContext;
 import org.apache.cayenne.di.Inject;
 import org.apache.cayenne.exp.Expression;
+import org.apache.cayenne.exp.ExpressionFactory;
 import org.apache.cayenne.query.SelectQuery;
 import org.apache.cayenne.testdo.lob.ClobTestEntity;
 import org.apache.cayenne.testdo.lob.ClobTestRelation;
@@ -51,7 +52,7 @@ public class SelectActionIT extends ServerCase {
 
             insertClobDb();
 
-            Expression qual = Expression.fromString("clobValue.value = 100");
+            Expression qual = ExpressionFactory.exp("clobValue.value = 100");
             SelectQuery select = new SelectQuery(ClobTestEntity.class, qual);
             select.setFetchLimit(25);
             List<DataRow> resultRows = context.performQuery(select);

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9319337c/cayenne-server/src/test/java/org/apache/cayenne/exp/BooleanExpressionTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/exp/BooleanExpressionTest.java b/cayenne-server/src/test/java/org/apache/cayenne/exp/BooleanExpressionTest.java
index 7a45599..8d5c834 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/exp/BooleanExpressionTest.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/exp/BooleanExpressionTest.java
@@ -28,8 +28,8 @@ public class BooleanExpressionTest {
 
     @Test
     public void testCAY1185() {
-        Expression expTrue = Expression.fromString("booleanColumn = true");
-        Expression expFalse = Expression.fromString("booleanColumn = false");
+        Expression expTrue = ExpressionFactory.exp("booleanColumn = true");
+        Expression expFalse = ExpressionFactory.exp("booleanColumn = false");
 
         BooleanTestEntity entity = new BooleanTestEntity();
         entity.setBooleanColumn(true);

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9319337c/cayenne-server/src/test/java/org/apache/cayenne/exp/ParsedExpQualifierCompatIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/exp/ParsedExpQualifierCompatIT.java b/cayenne-server/src/test/java/org/apache/cayenne/exp/ParsedExpQualifierCompatIT.java
index 3be97ad..f18ff50 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/exp/ParsedExpQualifierCompatIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/exp/ParsedExpQualifierCompatIT.java
@@ -93,12 +93,10 @@ public class ParsedExpQualifierCompatIT extends ServerCase {
 
         createTwentyFiveArtists();
 
-        Expression parsed = Expression
-                .fromString("artistName='artist1' or artistName='artist3'");
+        Expression parsed = ExpressionFactory.exp("artistName='artist1' or artistName='artist3'");
         assertEquals(2, execute(Artist.class, parsed).size());
 
-        parsed = Expression
-                .fromString("artistName='artist1' or artistName='artist3' or artistName='artist5'");
+        parsed = ExpressionFactory.exp("artistName='artist1' or artistName='artist3' or artistName='artist5'");
         assertEquals(3, execute(Artist.class, parsed).size());
     }
 
@@ -106,11 +104,10 @@ public class ParsedExpQualifierCompatIT extends ServerCase {
     public void testAnd() throws Exception {
         createTwentyFiveArtists();
 
-        Expression parsed = Expression
-                .fromString("artistName='artist1' and artistName='artist1'");
+        Expression parsed = ExpressionFactory.exp("artistName='artist1' and artistName='artist1'");
         assertEquals(1, execute(Artist.class, parsed).size());
 
-        parsed = Expression.fromString("artistName='artist1' and artistName='artist3'");
+        parsed = ExpressionFactory.exp("artistName='artist1' and artistName='artist3'");
         assertEquals(0, execute(Artist.class, parsed).size());
     }
 
@@ -119,10 +116,10 @@ public class ParsedExpQualifierCompatIT extends ServerCase {
 
         createTwentyFiveArtists();
 
-        Expression parsed1 = Expression.fromString("not artistName='artist3'");
+        Expression parsed1 = ExpressionFactory.exp("not artistName='artist3'");
         assertEquals(25 - 1, execute(Artist.class, parsed1).size());
 
-        Expression parsed2 = Expression.fromString("not artistName='artist3'");
+        Expression parsed2 = ExpressionFactory.exp("not artistName='artist3'");
         assertEquals(25 - 1, execute(Artist.class, parsed2).size());
     }
 
@@ -131,13 +128,13 @@ public class ParsedExpQualifierCompatIT extends ServerCase {
 
         createTwentyFiveArtists();
 
-        Expression parsed1 = Expression.fromString("artistName='artist3'");
+        Expression parsed1 = ExpressionFactory.exp("artistName='artist3'");
         assertEquals(1, execute(Artist.class, parsed1).size());
 
         // test with prefetch... this type of expressions should work with prefetches
         assertEquals(1, execute(Artist.class, parsed1, "paintingArray").size());
 
-        Expression parsed2 = Expression.fromString("artistName=='artist3'");
+        Expression parsed2 = ExpressionFactory.exp("artistName=='artist3'");
         assertEquals(1, execute(Artist.class, parsed2).size());
     }
 
@@ -146,38 +143,38 @@ public class ParsedExpQualifierCompatIT extends ServerCase {
 
         createTwentyFiveArtists();
 
-        Expression parsed1 = Expression.fromString("artistName!='artist3'");
+        Expression parsed1 = ExpressionFactory.exp("artistName!='artist3'");
         assertEquals(25 - 1, execute(Artist.class, parsed1).size());
 
-        Expression parsed2 = Expression.fromString("artistName<>'artist3'");
+        Expression parsed2 = ExpressionFactory.exp("artistName<>'artist3'");
         assertEquals(25 - 1, execute(Artist.class, parsed2).size());
     }
 
     @Test
     public void testLessThan() throws Exception {
         createTwentyFiveArtistsAndPaintings();
-        Expression parsed1 = Expression.fromString("estimatedPrice < 2000.0");
+        Expression parsed1 = ExpressionFactory.exp("estimatedPrice < 2000.0");
         assertEquals(1, execute(Painting.class, parsed1).size());
     }
 
     @Test
     public void testLessThanEqualTo() throws Exception {
         createTwentyFiveArtistsAndPaintings();
-        Expression parsed1 = Expression.fromString("estimatedPrice <= 2000.0");
+        Expression parsed1 = ExpressionFactory.exp("estimatedPrice <= 2000.0");
         assertEquals(2, execute(Painting.class, parsed1).size());
     }
 
     @Test
     public void testGreaterThan() throws Exception {
         createTwentyFiveArtistsAndPaintings();
-        Expression parsed1 = Expression.fromString("estimatedPrice > 2000");
+        Expression parsed1 = ExpressionFactory.exp("estimatedPrice > 2000");
         assertEquals(25 - 2, execute(Painting.class, parsed1).size());
     }
 
     @Test
     public void testGreaterThanEqualTo() throws Exception {
         createTwentyFiveArtistsAndPaintings();
-        Expression parsed1 = Expression.fromString("estimatedPrice >= 2000");
+        Expression parsed1 = ExpressionFactory.exp("estimatedPrice >= 2000");
         assertEquals(25 - 1, execute(Painting.class, parsed1).size());
     }
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9319337c/cayenne-server/src/test/java/org/apache/cayenne/map/DbEntityIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/map/DbEntityIT.java b/cayenne-server/src/test/java/org/apache/cayenne/map/DbEntityIT.java
index 41b7c03..c0a886f 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/map/DbEntityIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/map/DbEntityIT.java
@@ -22,6 +22,7 @@ package org.apache.cayenne.map;
 import org.apache.cayenne.configuration.server.ServerRuntime;
 import org.apache.cayenne.di.Inject;
 import org.apache.cayenne.exp.Expression;
+import org.apache.cayenne.exp.ExpressionFactory;
 import org.apache.cayenne.unit.di.server.CayenneProjects;
 import org.apache.cayenne.unit.di.server.ServerCase;
 import org.apache.cayenne.unit.di.server.UseServerRuntime;
@@ -30,12 +31,7 @@ import org.junit.Test;
 
 import java.util.Collection;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 @UseServerRuntime(CayenneProjects.TESTMAP_PROJECT)
 public class DbEntityIT extends ServerCase {
@@ -231,18 +227,18 @@ public class DbEntityIT extends ServerCase {
     public void testTranslateToRelatedEntityIndependentPath() {
         DbEntity artistE = runtime.getDataDomain().getEntityResolver().getDbEntity("ARTIST");
 
-        Expression e1 = Expression.fromString("db:paintingArray");
+        Expression e1 = ExpressionFactory.exp("db:paintingArray");
         Expression translated = artistE.translateToRelatedEntity(e1, "artistExhibitArray");
-        assertEquals("failure: " + translated, Expression.fromString("db:toArtist.paintingArray"), translated);
+        assertEquals("failure: " + translated, ExpressionFactory.exp("db:toArtist.paintingArray"), translated);
     }
 
     @Test
     public void testTranslateToRelatedEntityTrimmedPath() {
         DbEntity artistE = runtime.getDataDomain().getEntityResolver().getDbEntity("ARTIST");
 
-        Expression e1 = Expression.fromString("db:artistExhibitArray.toExhibit");
+        Expression e1 = ExpressionFactory.exp("db:artistExhibitArray.toExhibit");
         Expression translated = artistE.translateToRelatedEntity(e1, "artistExhibitArray");
-        assertEquals("failure: " + translated, Expression.fromString("db:toArtist.artistExhibitArray.toExhibit"),
+        assertEquals("failure: " + translated, ExpressionFactory.exp("db:toArtist.artistExhibitArray.toExhibit"),
                 translated);
     }
 
@@ -250,30 +246,30 @@ public class DbEntityIT extends ServerCase {
     public void testTranslateToRelatedEntitySplitHalfWay() {
         DbEntity artistE = runtime.getDataDomain().getEntityResolver().getDbEntity("ARTIST");
 
-        Expression e1 = Expression.fromString("db:paintingArray.toPaintingInfo.TEXT_REVIEW");
+        Expression e1 = ExpressionFactory.exp("db:paintingArray.toPaintingInfo.TEXT_REVIEW");
         Expression translated = artistE.translateToRelatedEntity(e1, "paintingArray.toGallery");
         assertEquals("failure: " + translated,
-                Expression.fromString("db:paintingArray.toArtist.paintingArray.toPaintingInfo.TEXT_REVIEW"), translated);
+                ExpressionFactory.exp("db:paintingArray.toArtist.paintingArray.toPaintingInfo.TEXT_REVIEW"), translated);
     }
 
     @Test
     public void testTranslateToRelatedEntityMatchingPath() {
         DbEntity artistE = runtime.getDataDomain().getEntityResolver().getDbEntity("ARTIST");
 
-        Expression e1 = Expression.fromString("db:artistExhibitArray.toExhibit");
+        Expression e1 = ExpressionFactory.exp("db:artistExhibitArray.toExhibit");
         Expression translated = artistE.translateToRelatedEntity(e1, "artistExhibitArray.toExhibit");
 
         assertEquals("failure: " + translated,
-                Expression.fromString("db:artistExhibitArray.toArtist.artistExhibitArray.toExhibit"), translated);
+                ExpressionFactory.exp("db:artistExhibitArray.toArtist.artistExhibitArray.toExhibit"), translated);
     }
 
     @Test
     public void testTranslateToRelatedEntityToOne() {
         DbEntity paintingE = runtime.getDataDomain().getEntityResolver().getDbEntity("PAINTING");
 
-        Expression e1 = Expression.fromString("db:toArtist.ARTIST_NAME = 'aa'");
+        Expression e1 = ExpressionFactory.exp("db:toArtist.ARTIST_NAME = 'aa'");
         Expression translated = paintingE.translateToRelatedEntity(e1, "toArtist");
 
-        assertEquals("failure: " + translated, Expression.fromString("db:ARTIST_NAME = 'aa'"), translated);
+        assertEquals("failure: " + translated, ExpressionFactory.exp("db:ARTIST_NAME = 'aa'"), translated);
     }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9319337c/cayenne-server/src/test/java/org/apache/cayenne/map/ObjEntityIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/map/ObjEntityIT.java b/cayenne-server/src/test/java/org/apache/cayenne/map/ObjEntityIT.java
index 793874c..eb86ca2 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/map/ObjEntityIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/map/ObjEntityIT.java
@@ -145,12 +145,12 @@ public class ObjEntityIT extends ServerCase {
         aliases.put("a", "paintingArray.toGallery");
 
         PathComponent<ObjAttribute, ObjRelationship> lastAttribute = artistE.lastPathComponent(
-                Expression.fromString("paintingArray.paintingTitle"), aliases);
+                ExpressionFactory.exp("paintingArray.paintingTitle"), aliases);
         assertTrue(lastAttribute.getAttribute() != null);
         assertEquals("paintingTitle", lastAttribute.getAttribute().getName());
 
         PathComponent<ObjAttribute, ObjRelationship> lastRelationship = artistE.lastPathComponent(
-                Expression.fromString("paintingArray.toGallery"), aliases);
+                ExpressionFactory.exp("paintingArray.toGallery"), aliases);
         assertTrue(lastRelationship.getRelationship() != null);
         assertEquals("toGallery", lastRelationship.getRelationship().getName());
 
@@ -388,18 +388,18 @@ public class ObjEntityIT extends ServerCase {
     public void testTranslateToRelatedEntityIndependentPath() throws Exception {
         ObjEntity artistE = runtime.getDataDomain().getEntityResolver().getObjEntity(Artist.class);
 
-        Expression e1 = Expression.fromString("paintingArray");
+        Expression e1 = ExpressionFactory.exp("paintingArray");
         Expression translated = artistE.translateToRelatedEntity(e1, "artistExhibitArray");
-        assertEquals("failure: " + translated, Expression.fromString("db:toArtist.paintingArray"), translated);
+        assertEquals("failure: " + translated, ExpressionFactory.exp("db:toArtist.paintingArray"), translated);
     }
 
     @Test
     public void testTranslateToRelatedEntityTrimmedPath() throws Exception {
         ObjEntity artistE = runtime.getDataDomain().getEntityResolver().getObjEntity(Artist.class);
 
-        Expression e1 = Expression.fromString("artistExhibitArray.toExhibit");
+        Expression e1 = ExpressionFactory.exp("artistExhibitArray.toExhibit");
         Expression translated = artistE.translateToRelatedEntity(e1, "artistExhibitArray");
-        assertEquals("failure: " + translated, Expression.fromString("db:toArtist.artistExhibitArray.toExhibit"),
+        assertEquals("failure: " + translated, ExpressionFactory.exp("db:toArtist.artistExhibitArray.toExhibit"),
                 translated);
     }
 
@@ -407,28 +407,28 @@ public class ObjEntityIT extends ServerCase {
     public void testTranslateToRelatedEntitySplitHalfWay() throws Exception {
         ObjEntity artistE = runtime.getDataDomain().getEntityResolver().getObjEntity(Artist.class);
 
-        Expression e1 = Expression.fromString("paintingArray.toPaintingInfo.textReview");
+        Expression e1 = ExpressionFactory.exp("paintingArray.toPaintingInfo.textReview");
         Expression translated = artistE.translateToRelatedEntity(e1, "paintingArray.toGallery");
         assertEquals("failure: " + translated,
-                Expression.fromString("db:paintingArray.toArtist.paintingArray.toPaintingInfo.TEXT_REVIEW"), translated);
+                ExpressionFactory.exp("db:paintingArray.toArtist.paintingArray.toPaintingInfo.TEXT_REVIEW"), translated);
     }
 
     @Test
     public void testTranslateToRelatedEntityMatchingPath() throws Exception {
         ObjEntity artistE = runtime.getDataDomain().getEntityResolver().getObjEntity(Artist.class);
-        Expression e1 = Expression.fromString("artistExhibitArray.toExhibit");
+        Expression e1 = ExpressionFactory.exp("artistExhibitArray.toExhibit");
         Expression translated = artistE.translateToRelatedEntity(e1, "artistExhibitArray.toExhibit");
         assertEquals("failure: " + translated,
-                Expression.fromString("db:artistExhibitArray.toArtist.artistExhibitArray.toExhibit"), translated);
+                ExpressionFactory.exp("db:artistExhibitArray.toArtist.artistExhibitArray.toExhibit"), translated);
     }
 
     @Test
     public void testTranslateToRelatedEntityMultiplePaths() throws Exception {
         ObjEntity artistE = runtime.getDataDomain().getEntityResolver().getObjEntity(Artist.class);
 
-        Expression e1 = Expression.fromString("paintingArray = $p and artistExhibitArray.toExhibit.closingDate = $d");
+        Expression e1 = ExpressionFactory.exp("paintingArray = $p and artistExhibitArray.toExhibit.closingDate = $d");
         Expression translated = artistE.translateToRelatedEntity(e1, "artistExhibitArray");
-        assertEquals("failure: " + translated, Expression.fromString("db:toArtist.paintingArray = $p "
+        assertEquals("failure: " + translated, ExpressionFactory.exp("db:toArtist.paintingArray = $p "
                 + "and db:toArtist.artistExhibitArray.toExhibit.CLOSING_DATE = $d"), translated);
     }
 
@@ -436,9 +436,9 @@ public class ObjEntityIT extends ServerCase {
     public void testTranslateToRelatedEntityOuterJoin_Flattened() throws Exception {
         ObjEntity artistE = runtime.getDataDomain().getEntityResolver().getObjEntity(Artist.class);
 
-        Expression e1 = Expression.fromString("groupArray+.name");
+        Expression e1 = ExpressionFactory.exp("groupArray+.name");
         Expression translated = artistE.translateToRelatedEntity(e1, "artistExhibitArray");
-        assertEquals("failure: " + translated, Expression.fromString("db:toArtist.artistGroupArray+.toGroup+.NAME"), translated);
+        assertEquals("failure: " + translated, ExpressionFactory.exp("db:toArtist.artistGroupArray+.toGroup+.NAME"), translated);
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9319337c/cayenne-server/src/test/java/org/apache/cayenne/map/SelectQueryDescriptorTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/map/SelectQueryDescriptorTest.java b/cayenne-server/src/test/java/org/apache/cayenne/map/SelectQueryDescriptorTest.java
index 085f73f..4c2a8e3 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/map/SelectQueryDescriptorTest.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/map/SelectQueryDescriptorTest.java
@@ -19,13 +19,13 @@
 
 package org.apache.cayenne.map;
 
-import org.apache.cayenne.exp.Expression;
-import org.apache.cayenne.query.*;
+import org.apache.cayenne.exp.ExpressionFactory;
+import org.apache.cayenne.query.Query;
+import org.apache.cayenne.query.QueryMetadata;
+import org.apache.cayenne.query.SelectQuery;
 import org.junit.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 /**
  */
@@ -64,11 +64,11 @@ public class SelectQueryDescriptorTest {
     public void testGetQueryQualifier() throws Exception {
         SelectQueryDescriptor builder = QueryDescriptor.selectQueryDescriptor();
         builder.setRoot("FakeRoot");
-        builder.setQualifier(Expression.fromString("abc = 5"));
+        builder.setQualifier(ExpressionFactory.exp("abc = 5"));
 
         SelectQuery query = (SelectQuery) builder.buildQuery();
 
-        assertEquals(Expression.fromString("abc = 5"), query.getQualifier());
+        assertEquals(ExpressionFactory.exp("abc = 5"), query.getQualifier());
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9319337c/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryPrefetchRouterActionIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryPrefetchRouterActionIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryPrefetchRouterActionIT.java
index 6655cc0..0c82bb9 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryPrefetchRouterActionIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryPrefetchRouterActionIT.java
@@ -20,7 +20,6 @@
 package org.apache.cayenne.query;
 
 import org.apache.cayenne.di.Inject;
-import org.apache.cayenne.exp.Expression;
 import org.apache.cayenne.exp.ExpressionFactory;
 import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.map.ObjEntity;
@@ -56,7 +55,7 @@ public class SelectQueryPrefetchRouterActionIT extends ServerCase {
         PrefetchSelectQuery prefetch = (PrefetchSelectQuery) router.getQueries().get(0);
 
         assertSame(paintingEntity, prefetch.getRoot());
-        assertEquals(Expression.fromString("db:toArtist.ARTIST_NAME = 'abc'"), prefetch.getQualifier());
+        assertEquals(ExpressionFactory.exp("db:toArtist.ARTIST_NAME = 'abc'"), prefetch.getQualifier());
     }
 
     @Test
@@ -74,7 +73,7 @@ public class SelectQueryPrefetchRouterActionIT extends ServerCase {
 
         PrefetchSelectQuery prefetch = (PrefetchSelectQuery) router.getQueries().get(0);
         assertSame(paintingEntity, prefetch.getRoot());
-        assertEquals(Expression.fromString("db:toArtist.ARTIST_NAME = 'abc' or db:toArtist.ARTIST_NAME = 'xyz'"),
+        assertEquals(ExpressionFactory.exp("db:toArtist.ARTIST_NAME = 'abc' or db:toArtist.ARTIST_NAME = 'xyz'"),
                 prefetch.getQualifier());
     }
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9319337c/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryPrefetchRouterActionQualifiedEntityIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryPrefetchRouterActionQualifiedEntityIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryPrefetchRouterActionQualifiedEntityIT.java
index dd2291a..1dd5153 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryPrefetchRouterActionQualifiedEntityIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryPrefetchRouterActionQualifiedEntityIT.java
@@ -20,7 +20,6 @@
 package org.apache.cayenne.query;
 
 import org.apache.cayenne.di.Inject;
-import org.apache.cayenne.exp.Expression;
 import org.apache.cayenne.exp.ExpressionFactory;
 import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.map.ObjEntity;
@@ -73,7 +72,7 @@ public class SelectQueryPrefetchRouterActionQualifiedEntityIT extends PeopleProj
 
         PrefetchSelectQuery prefetch = (PrefetchSelectQuery) router.getQueries().get(0);
         assertSame(departmentEntity, prefetch.getRoot());
-        assertEquals(Expression.fromString("db:employees.NAME = 'abc' and db:employees.PERSON_TYPE = 'EM'"),
+        assertEquals(ExpressionFactory.exp("db:employees.NAME = 'abc' and db:employees.PERSON_TYPE = 'EM'"),
                 prefetch.getQualifier());
     }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9319337c/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_10062004_ExpTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_10062004_ExpTest.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_10062004_ExpTest.java
index b5195e6..0fa5b86 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_10062004_ExpTest.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_10062004_ExpTest.java
@@ -20,6 +20,7 @@
 package org.apache.cayenne.unit.jira;
 
 import org.apache.cayenne.exp.Expression;
+import org.apache.cayenne.exp.ExpressionFactory;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
@@ -31,8 +32,7 @@ public class CAY_10062004_ExpTest {
     @Test
     public void testDeepCopy() throws Exception {
 
-        Expression parsed = Expression
-                .fromString("(a = 1 and a = 2) or (a != 1 and a != 2)");
+        Expression parsed = ExpressionFactory.exp("(a = 1 and a = 2) or (a != 1 and a != 2)");
         Expression finalExpression = parsed.deepCopy();
 
         assertEquals(parsed, finalExpression);
@@ -42,13 +42,12 @@ public class CAY_10062004_ExpTest {
     @Test
     public void testAndExpOrExp() throws Exception {
 
-        Expression parsed = Expression
-                .fromString("(a = 1 and a = 2) or (a != 1 and a != 2)");
+        Expression parsed = ExpressionFactory.exp("(a = 1 and a = 2) or (a != 1 and a != 2)");
 
-        Expression first = Expression.fromString("a = 1");
-        Expression second = Expression.fromString("a = 2");
-        Expression third = Expression.fromString("a != 1");
-        Expression fourth = Expression.fromString("a != 2");
+        Expression first = ExpressionFactory.exp("a = 1");
+        Expression second = ExpressionFactory.exp("a = 2");
+        Expression third = ExpressionFactory.exp("a != 1");
+        Expression fourth = ExpressionFactory.exp("a != 2");
 
         // this internally calls "joinExp"
         Expression firstAndSecond = first.andExp(second);

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9319337c/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_115IT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_115IT.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_115IT.java
index 3a17bf0..ee18c4b 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_115IT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_115IT.java
@@ -22,6 +22,7 @@ package org.apache.cayenne.unit.jira;
 import org.apache.cayenne.access.DataContext;
 import org.apache.cayenne.di.Inject;
 import org.apache.cayenne.exp.Expression;
+import org.apache.cayenne.exp.ExpressionFactory;
 import org.apache.cayenne.query.SelectQuery;
 import org.apache.cayenne.test.jdbc.DBHelper;
 import org.apache.cayenne.test.jdbc.TableHelper;
@@ -109,7 +110,7 @@ public class CAY_115IT extends ServerCase {
 
         createDistinctClobFetchWithToManyJoin();
 
-        Expression qual = Expression.fromString("details.name like 'cd%'");
+        Expression qual = ExpressionFactory.exp("details.name like 'cd%'");
         SelectQuery query = new SelectQuery(ClobMaster.class, qual);
         List<?> result = context.performQuery(query);
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9319337c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectQueryPrefetchTab.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectQueryPrefetchTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectQueryPrefetchTab.java
index fe02245..677d185 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectQueryPrefetchTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectQueryPrefetchTab.java
@@ -19,19 +19,10 @@
 
 package org.apache.cayenne.modeler.editor;
 
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.JButton;
-import javax.swing.JComponent;
-import javax.swing.JToolBar;
-import javax.swing.table.AbstractTableModel;
-import javax.swing.table.TableModel;
-import javax.swing.tree.TreeModel;
-
 import org.apache.cayenne.configuration.event.QueryEvent;
 import org.apache.cayenne.exp.Expression;
 import org.apache.cayenne.exp.ExpressionException;
+import org.apache.cayenne.exp.ExpressionFactory;
 import org.apache.cayenne.map.Attribute;
 import org.apache.cayenne.map.Entity;
 import org.apache.cayenne.map.Relationship;
@@ -42,6 +33,13 @@ import org.apache.cayenne.modeler.util.EntityTreeFilter;
 import org.apache.cayenne.modeler.util.EntityTreeModel;
 import org.apache.cayenne.modeler.util.ModelerUtil;
 
+import javax.swing.*;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableModel;
+import javax.swing.tree.TreeModel;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
 /**
  * Subclass of the SelectQueryOrderingTab configured to work with prefetches.
  * 
@@ -148,7 +146,7 @@ public class SelectQueryPrefetchTab extends SelectQueryOrderingTab {
 
         // totally invalid path would result in ExpressionException
         try {
-            Expression exp = Expression.fromString(prefetch);
+            Expression exp = ExpressionFactory.exp(prefetch);
             Object object = exp.evaluate(root);
             if (object instanceof Relationship) {
                 return ((Relationship) object).isToMany();

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9319337c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ExpressionConvertor.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ExpressionConvertor.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ExpressionConvertor.java
index 8534fcb..277dba0 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ExpressionConvertor.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ExpressionConvertor.java
@@ -21,6 +21,7 @@ package org.apache.cayenne.modeler.util;
 
 import org.apache.cayenne.exp.Expression;
 import org.apache.cayenne.exp.ExpressionException;
+import org.apache.cayenne.exp.ExpressionFactory;
 import org.apache.cayenne.exp.parser.ParseException;
 import org.apache.cayenne.util.Util;
 
@@ -50,7 +51,7 @@ public class ExpressionConvertor {
         }
 
         try {
-            return Expression.fromString(string);
+            return ExpressionFactory.exp(string);
         }
         catch (ExpressionException eex) {
             // this is likely a parse exception... show detailed message

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9319337c/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOObjEntity.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOObjEntity.java b/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOObjEntity.java
index 240682d..ed264a3 100644
--- a/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOObjEntity.java
+++ b/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOObjEntity.java
@@ -19,14 +19,6 @@
 
 package org.apache.cayenne.wocompat;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.StringTokenizer;
-
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.exp.Expression;
 import org.apache.cayenne.exp.ExpressionException;
@@ -36,6 +28,14 @@ import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.map.Relationship;
 import org.apache.commons.collections.Transformer;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+
 /**
  * An extension of ObjEntity used to accomodate extra EOModel entity properties.
  */
@@ -109,10 +109,7 @@ public class EOObjEntity extends ObjEntity {
             }
             else {
                 Map params = Collections.singletonMap("root", EOObjEntity.this);
-                Expression filter = Expression
-                        .fromString("root = $root")
-                        .expWithParameters(params);
-
+                Expression filter = ExpressionFactory.exp("root = $root").params(params);
                 filteredQueries = filter.filter(queries, new ArrayList());
             }
         }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9319337c/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOQuery.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOQuery.java b/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOQuery.java
index 5a451d3..8400686 100644
--- a/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOQuery.java
+++ b/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOQuery.java
@@ -19,14 +19,6 @@
 
 package org.apache.cayenne.wocompat;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
 import org.apache.cayenne.exp.Expression;
 import org.apache.cayenne.exp.ExpressionException;
 import org.apache.cayenne.exp.ExpressionFactory;
@@ -39,6 +31,14 @@ import org.apache.cayenne.map.ObjRelationship;
 import org.apache.cayenne.query.SelectQuery;
 import org.apache.cayenne.query.SortOrder;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
 /**
  * A descriptor of SelectQuery loaded from EOModel. It is an informal
  * "decorator" of Cayenne SelectQuery to provide access to the extra information
@@ -476,7 +476,7 @@ public class EOQuery<T> extends SelectQuery<T> {
 			// component is not,
 			// switch to db path..
 
-			Expression keyExp = Expression.fromString(key);
+			Expression keyExp = ExpressionFactory.exp(key);
 			try {
 				entity.lastPathComponent(keyExp, Collections.emptyMap());
 			} catch (ExpressionException e) {