JPA API PR 362 - Add support for Expressions as conditions in CriteriaBuilder CASE expressions
JPA API PR 317 - Fixed build issues after API dependency update. Expressions are not yet implemented.

Signed-off-by: Tomas Kraus <tomas.kraus@oracle.com>
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CriteriaBuilderImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CriteriaBuilderImpl.java
index 42049e1..03dec36 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CriteriaBuilderImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CriteriaBuilderImpl.java
@@ -1430,22 +1430,6 @@
                 buildList(x, internalLiteral(n)), "round");
     }
 
-    // This came with API modifications branch and shall be removed.
-    @Override
-    public Expression<LocalDate> localDate() {
-        return null;
-    }
-
-    @Override
-    public Expression<LocalDateTime> localDateTime() {
-        return null;
-    }
-
-    @Override
-    public Expression<LocalTime> localTime() {
-        return null;
-    }
-
 // typecasts:
     /**
      * Typecast.
@@ -2331,6 +2315,39 @@
     }
 
     /**
+     * Create expression to return current local date.
+     *
+     * @return expression for current date
+     */
+    @Override
+    public Expression<java.time.LocalDate> localDate() {
+        // TODO: Implement
+        throw new UnsupportedOperationException("Local date expression is not implemented yet");
+    }
+
+    /**
+     * Create expression to return current local datetime.
+     *
+     * @return expression for current timestamp
+     */
+    @Override
+    public Expression<java.time.LocalDateTime> localDateTime() {
+        // TODO: Implement
+        throw new UnsupportedOperationException("Local datetime expression is not implemented yet");
+    }
+
+    /**
+     * Create expression to return current local time.
+     *
+     * @return expression for current time
+     */
+    @Override
+    public Expression<java.time.LocalTime> localTime() {
+        // TODO: Implement
+        throw new UnsupportedOperationException("Local time expression is not implemented yet");
+    }
+
+    /**
      * Create predicate to test whether given expression is contained in a list
      * of values.
      *
@@ -2741,6 +2758,49 @@
         }
 
         /**
+         * Add a when/then clause to the case expression.
+         * @param condition  "when" condition
+         * @param result  "then" result value
+         * @return simple case expression
+         */
+        @Override
+        public SimpleCase<C, R> when(Expression<? extends C> condition, R result) {
+            org.eclipse.persistence.expressions.Expression conditionExp = org.eclipse.persistence.expressions.Expression.from(condition, new ExpressionBuilder());
+            ((FunctionExpression)currentNode).addChild(conditionExp);
+            this.expressions.add(condition);
+
+            org.eclipse.persistence.expressions.Expression resultExp = ((InternalSelection)result).getCurrentNode();
+            resultExp = org.eclipse.persistence.expressions.Expression.from(resultExp, currentNode);
+            ((FunctionExpression)currentNode).addChild(resultExp);
+            Expression<R> resultLiteral = internalLiteral(result);
+            this.expressions.add(resultLiteral);
+
+            setJavaType((Class<R>) resultLiteral.getJavaType());
+            return this;
+        }
+
+        /**
+         * Add a when/then clause to the case expression.
+         * @param condition  "when" condition
+         * @param result  "then" result expression
+         * @return simple case expression
+         */
+        @Override
+        public SimpleCase<C, R> when(Expression<? extends C> condition, Expression<? extends R> result) {
+            org.eclipse.persistence.expressions.Expression conditionExp = org.eclipse.persistence.expressions.Expression.from(condition, new ExpressionBuilder());
+            ((FunctionExpression)currentNode).addChild(conditionExp);
+            this.expressions.add(condition);
+
+            org.eclipse.persistence.expressions.Expression resultExp = ((InternalSelection)result).getCurrentNode();
+            resultExp = org.eclipse.persistence.expressions.Expression.from(resultExp, currentNode);
+            ((FunctionExpression)currentNode).addChild(resultExp);
+            this.expressions.add(result);
+
+            setJavaType((Class<R>) result.getJavaType());
+            return this;
+        }
+
+        /**
          * Add an "else" clause to the case expression.
          * @param result  "else" result
          * @return expression
diff --git a/pom.xml b/pom.xml
index a864d28..a245dff 100644
--- a/pom.xml
+++ b/pom.xml
@@ -194,7 +194,7 @@
         <jersey.version>3.1.0-M2</jersey.version>
         <jms.version>3.0.0</jms.version>
         <json.version>2.1.0</json.version>
-        <jpa.api.version>3.1.0-RC2</jpa.api.version>
+        <jpa.api.version>3.1.0</jpa.api.version>
         <mail-api.version>2.1.0</mail-api.version>
         <angus-mail.version>1.0.0</angus-mail.version>
         <oracle.ddlparser.version>3.0.0</oracle.ddlparser.version>