You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2012/09/07 13:11:42 UTC
svn commit: r1381976 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint:
Constraints.java DoubleConstraint.java LongConstraint.java
NumericConstraint.java
Author: mduerig
Date: Fri Sep 7 11:11:42 2012
New Revision: 1381976
URL: http://svn.apache.org/viewvc?rev=1381976&view=rev
Log:
OAK-66: JCR Node Type Management
value constraints for Double
Added:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/DoubleConstraint.java (with props)
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/NumericConstraint.java
- copied, changed from r1381975, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/LongConstraint.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/Constraints.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/LongConstraint.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/Constraints.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/Constraints.java?rev=1381976&r1=1381975&r2=1381976&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/Constraints.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/Constraints.java Fri Sep 7 11:11:42 2012
@@ -76,7 +76,7 @@ public class Constraints {
}
private static Predicate<Value> doubleConstraint(String constraint) {
- return Predicates.alwaysTrue(); // todo implement doubleConstraint
+ return new DoubleConstraint(constraint);
}
private static Predicate<Value> dateConstraint(String constraint) {
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/DoubleConstraint.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/DoubleConstraint.java?rev=1381976&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/DoubleConstraint.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/DoubleConstraint.java Fri Sep 7 11:11:42 2012
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.plugins.type.constraint;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.Value;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DoubleConstraint extends NumericConstraint<Double> {
+ private static final Logger log = LoggerFactory.getLogger(DoubleConstraint.class);
+
+ public DoubleConstraint(String constraint) {
+ super(constraint);
+ }
+
+ @Override
+ protected void setBounds(String lowerBound, String upperBound) {
+ try {
+ this.lowerBound = lowerBound == null || lowerBound.isEmpty()
+ ? null
+ : Double.parseDouble(lowerBound);
+
+ this.upperBound = upperBound == null || upperBound.isEmpty()
+ ? null
+ : Double.parseDouble(upperBound);
+ }
+ catch (NumberFormatException e) {
+ this.lowerBound = 1.0;
+ this.upperBound = 0.0;
+ log.warn("Invalid bound for numeric constraint" + this, e);
+ }
+ }
+
+ @Override
+ protected Double getValue(Value value) throws RepositoryException {
+ return value.getDouble();
+ }
+
+ @Override
+ protected boolean less(Double val, Double bound) {
+ return val < bound;
+ }
+}
Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/DoubleConstraint.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/DoubleConstraint.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision Rev URL
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/LongConstraint.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/LongConstraint.java?rev=1381976&r1=1381975&r2=1381976&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/LongConstraint.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/LongConstraint.java Fri Sep 7 11:11:42 2012
@@ -16,48 +16,21 @@
*/
package org.apache.jackrabbit.oak.plugins.type.constraint;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.annotation.Nullable;
import javax.jcr.RepositoryException;
import javax.jcr.Value;
-import com.google.common.base.Predicate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class LongConstraint implements Predicate<Value> {
+public class LongConstraint extends NumericConstraint<Long> {
private static final Logger log = LoggerFactory.getLogger(LongConstraint.class);
- private boolean lowerInclusive;
- private Long lowerBound;
- private Long upperBound;
- private boolean upperInclusive;
-
public LongConstraint(String definition) {
- // format: '(<min>, <max>)', '[<min>, <max>]', '(, <max>)' etc.
- Pattern pattern = Pattern.compile("([\\(\\[])[^,]*,[^\\)\\]]*([\\)\\]])");
- Matcher matcher = pattern.matcher(definition);
- if (matcher.matches()) {
- // group 1 is lower inclusive/exclusive
- String match = matcher.group(1);
- lowerInclusive = "[".equals(match);
-
- // group 2 is lower, group 3 is upper bound
- setBounds(matcher.group(2), matcher.group(3));
-
- // group 4 is lower inclusive/exclusive
- match = matcher.group(4);
- upperInclusive = "]".equals(match);
- }
- else {
- String msg = '\'' + definition + "' is not a valid value constraint format for numeric values";
- log.warn(msg);
- }
+ super(definition);
}
- private void setBounds(String lowerBound, String upperBound) {
+ @Override
+ protected void setBounds(String lowerBound, String upperBound) {
try {
this.lowerBound = lowerBound == null || lowerBound.isEmpty()
? null
@@ -75,49 +48,12 @@ public class LongConstraint implements P
}
@Override
- public boolean apply(@Nullable Value value) {
- if (value == null) {
- return false;
- }
-
- try {
- long val = value.getLong();
- if (lowerBound != null) {
- if (lowerInclusive) {
- if (val < (lowerBound)) {
- return false;
- }
- } else {
- if (val <= (lowerBound)) {
- return false;
- }
- }
- }
- if (upperBound != null) {
- if (upperInclusive) {
- if (val > (upperBound)) {
- return false;
- }
- } else {
- if (val >= (upperBound)) {
- return false;
- }
- }
- }
- return true;
- }
- catch (RepositoryException e) {
- log.warn("Error checking numeric constraint " + this, e);
- return false;
- }
+ protected Long getValue(Value value) throws RepositoryException {
+ return value.getLong();
}
@Override
- public String toString() {
- return (lowerInclusive ? "[" : "(") +
- (lowerBound == null ? "" : lowerBound) + ", " +
- (upperBound == null ? "" : upperBound) +
- (upperInclusive ? "]" : ")");
+ protected boolean less(Long val, Long bound) {
+ return val < bound;
}
-
}
Copied: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/NumericConstraint.java (from r1381975, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/LongConstraint.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/NumericConstraint.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/NumericConstraint.java&p1=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/LongConstraint.java&r1=1381975&r2=1381976&rev=1381976&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/LongConstraint.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/NumericConstraint.java Fri Sep 7 11:11:42 2012
@@ -27,15 +27,15 @@ import com.google.common.base.Predicate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class LongConstraint implements Predicate<Value> {
- private static final Logger log = LoggerFactory.getLogger(LongConstraint.class);
+public abstract class NumericConstraint<T> implements Predicate<Value> {
+ private static final Logger log = LoggerFactory.getLogger(NumericConstraint.class);
private boolean lowerInclusive;
- private Long lowerBound;
- private Long upperBound;
+ protected T lowerBound;
+ protected T upperBound;
private boolean upperInclusive;
- public LongConstraint(String definition) {
+ protected NumericConstraint(String definition) {
// format: '(<min>, <max>)', '[<min>, <max>]', '(, <max>)' etc.
Pattern pattern = Pattern.compile("([\\(\\[])[^,]*,[^\\)\\]]*([\\)\\]])");
Matcher matcher = pattern.matcher(definition);
@@ -57,22 +57,7 @@ public class LongConstraint implements P
}
}
- private void setBounds(String lowerBound, String upperBound) {
- try {
- this.lowerBound = lowerBound == null || lowerBound.isEmpty()
- ? null
- : Long.parseLong(lowerBound);
-
- this.upperBound = upperBound == null || upperBound.isEmpty()
- ? null
- : Long.parseLong(upperBound);
- }
- catch (NumberFormatException e) {
- this.lowerBound = 1L;
- this.upperBound = 0L;
- log.warn("Invalid bound for numeric constraint" + this, e);
- }
- }
+ protected abstract void setBounds(String lowerBound, String upperBound);
@Override
public boolean apply(@Nullable Value value) {
@@ -81,25 +66,25 @@ public class LongConstraint implements P
}
try {
- long val = value.getLong();
+ T t = getValue(value);
if (lowerBound != null) {
if (lowerInclusive) {
- if (val < (lowerBound)) {
+ if (less(t, lowerBound)) {
return false;
}
} else {
- if (val <= (lowerBound)) {
+ if (lessOrEqual(t, lowerBound)) {
return false;
}
}
}
if (upperBound != null) {
if (upperInclusive) {
- if (val > (upperBound)) {
+ if (greater(t, upperBound)) {
return false;
}
} else {
- if (val >= (upperBound)) {
+ if (greaterOrEqual(t, upperBound)) {
return false;
}
}
@@ -112,12 +97,29 @@ public class LongConstraint implements P
}
}
+ protected abstract T getValue(Value value) throws RepositoryException;
+ protected abstract boolean less(T val, T bound);
+
+ protected boolean greater(T val, T bound) {
+ return less(bound, val);
+ }
+
+ protected boolean equals(T val, T bound) {
+ return val.equals(bound);
+ }
+
+ protected boolean greaterOrEqual(T val, T bound) {
+ return greater(val, bound) || equals(val, bound);
+ }
+
+ protected boolean lessOrEqual(T val, T bound) {
+ return less(val, bound) || equals(val, bound);
+ }
+
@Override
public String toString() {
return (lowerInclusive ? "[" : "(") +
- (lowerBound == null ? "" : lowerBound) + ", " +
- (upperBound == null ? "" : upperBound) +
- (upperInclusive ? "]" : ")");
- }
-
-}
+ (lowerBound == null ? "" : lowerBound) + ", " +
+ (upperBound == null ? "" : upperBound) +
+ (upperInclusive ? "]" : ")");
+ }}