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/11 08:18:50 UTC
[3/4] cayenne git commit: javadocs
javadocs
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/94d4d839
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/94d4d839
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/94d4d839
Branch: refs/heads/master
Commit: 94d4d839ce8b3193970c4f4abd008ceca4040439
Parents: bff0e00
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Sun Dec 11 10:41:49 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Sun Dec 11 10:41:49 2016 +0300
----------------------------------------------------------------------
.../java/org/apache/cayenne/exp/Property.java | 966 +++++++++----------
1 file changed, 479 insertions(+), 487 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/94d4d839/cayenne-server/src/main/java/org/apache/cayenne/exp/Property.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/exp/Property.java b/cayenne-server/src/main/java/org/apache/cayenne/exp/Property.java
index 2de19ef..5560014 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/exp/Property.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/exp/Property.java
@@ -32,503 +32,495 @@ import org.apache.cayenne.reflect.PropertyUtils;
* <p>
* A property in a DataObject.
* </p>
- *
+ * <p>
* <p>
* Used to construct Expressions quickly and with type-safety, and to construct
* Orderings
* </p>
- *
+ * <p>
* <p>
* Instances of this class are immutable
* </p>
- *
- * @param <E>
- * The type this property returns.
+ *
+ * @param <E> The type this property returns.
* @since 4.0
*/
public class Property<E> {
- /**
- * Name of the property in the object
- */
- private final String name;
-
- /**
- * Constructs a new property with the given name.
- */
- public Property(String name) {
- this.name = name;
- }
-
- /**
- * @return Name of the property in the object.
- */
- public String getName() {
- return name;
- }
-
- @Override
- public int hashCode() {
- return getName().hashCode();
- }
-
- @Override
- public boolean equals(Object obj) {
- return obj instanceof Property && ((Property<?>) obj).getName().equals(getName());
- }
-
- /**
- * @return Constructs a property path by appending the argument to the
- * existing property separated by a dot
- */
- public Property<Object> dot(String property) {
- return new Property<Object>(getName() + "." + property);
- }
-
- /**
- * @return Constructs a property path by appending the argument to the
- * existing property separated by a dot
- */
- public <T> Property<T> dot(Property<T> property) {
- return new Property<T>(getName() + "." + property.getName());
- }
-
- /**
- * Returns a version of this property that represents an OUTER join. It is
- * up to caller to ensure that the property corresponds to a relationship,
- * as "outer" attributes make no sense.
- */
- public Property<E> outer() {
- return isOuter() ? this : new Property<E>(name + "+");
- }
-
- private boolean isOuter() {
- return name.endsWith("+");
- }
-
- /**
- * @return An expression representing null.
- */
- public Expression isNull() {
- return ExpressionFactory.matchExp(getName(), null);
- }
-
- /**
- * @return An expression representing a non-null value.
- */
- public Expression isNotNull() {
- return ExpressionFactory.matchExp(getName(), null).notExp();
- }
-
- /**
- * @return An expression representing equality to TRUE.
- */
- public Expression isTrue() {
- return ExpressionFactory.matchExp(getName(), Boolean.TRUE);
- }
-
- /**
- * @return An expression representing equality to FALSE.
- */
- public Expression isFalse() {
- return ExpressionFactory.matchExp(getName(), Boolean.FALSE);
- }
-
- /**
- * @return An expression representing equality to a value.
- */
- public Expression eq(E value) {
- return ExpressionFactory.matchExp(getName(), value);
- }
-
- /**
- * @return An expression representing equality between two attributes
- * (columns).
- */
- public Expression eq(Property<?> value) {
- return ExpressionFactory.matchExp(getName(), new ASTObjPath(value.getName()));
- }
-
- /**
- * @return An expression representing inequality to a value.
- */
- public Expression ne(E value) {
- return ExpressionFactory.noMatchExp(getName(), value);
- }
-
- /**
- * @return An expression representing inequality between two attributes
- * (columns).
- */
- public Expression ne(Property<?> value) {
- return ExpressionFactory.noMatchExp(getName(), new ASTObjPath(value.getName()));
- }
-
- /**
- * @param pattern
- * a pattern matching property value. Pattern may include "_" and
- * "%" wildcard symbols to match any single character or a
- * sequence of characters. To prevent "_" and "%" from being
- * treated as wildcards, they need to be escaped and escape char
- * passed with {@link #like(String, char)} method.
- * @return An expression for a Database "LIKE" query.
- */
- public Expression like(String pattern) {
- return ExpressionFactory.likeExp(getName(), pattern);
- }
-
- /**
- * @param pattern
- * a properly escaped pattern matching property value. Pattern
- * may include "_" and "%" wildcard symbols to match any single
- * character or a sequence of characters.
- * @param escapeChar
- * an escape character used in the pattern to escape "%" and "_".
- *
- * @return An expression for a Database "LIKE" query.
- */
- public Expression like(String pattern, char escapeChar) {
- return ExpressionFactory.likeExp(getName(), pattern, escapeChar);
- }
-
- /**
- * @return An expression for a case insensitive "LIKE" query.
- */
- public Expression likeIgnoreCase(String pattern) {
- return ExpressionFactory.likeIgnoreCaseExp(getName(), pattern);
- }
-
- /**
- * @return An expression for a Database "NOT LIKE" query.
- */
- public Expression nlike(String value) {
- return ExpressionFactory.notLikeExp(getName(), value);
- }
-
- /**
- * @return An expression for a case insensitive "NOT LIKE" query.
- */
- public Expression nlikeIgnoreCase(String value) {
- return ExpressionFactory.notLikeIgnoreCaseExp(getName(), value);
- }
-
- /**
- * Creates an expression for a database "LIKE" query with the value
- * converted to a pattern matching anywhere in the String.
- *
- * @param substring
- * a String to match against property value. "_" and "%" symbols
- * are NOT treated as wildcards and are escaped when converted to
- * a LIKE expression.
- */
- public Expression contains(String substring) {
- return ExpressionFactory.containsExp(getName(), substring);
- }
-
- /**
- * Creates an expression for a database "LIKE" query with the value
- * converted to a pattern matching the beginning of a String.
- *
- * @param substring
- * a String to match against property value. "_" and "%" symbols
- * are NOT treated as wildcards and are escaped when converted to
- * a LIKE expression.
- */
- public Expression startsWith(String value) {
- return ExpressionFactory.startsWithExp(getName(), value);
- }
-
- /**
- * Creates an expression for a database "LIKE" query with the value
- * converted to a pattern matching the tail of a String.
- *
- * @param substring
- * a String to match against property value. "_" and "%" symbols
- * are NOT treated as wildcards and are escaped when converted to
- * a LIKE expression.
- */
- public Expression endsWith(String value) {
- return ExpressionFactory.endsWithExp(getName(), value);
- }
-
- /**
- * Same as {@link #contains(String)}, only using case-insensitive
- * comparison.
- */
- public Expression containsIgnoreCase(String value) {
- return ExpressionFactory.containsIgnoreCaseExp(getName(), value);
- }
-
- /**
- * Same as {@link #startsWith(String)}, only using case-insensitive
- * comparison.
- */
- public Expression startsWithIgnoreCase(String value) {
- return ExpressionFactory.startsWithIgnoreCaseExp(getName(), value);
- }
-
- /**
- * Same as {@link #endsWith(String)}, only using case-insensitive
- * comparison.
- */
- public Expression endsWithIgnoreCase(String value) {
- return ExpressionFactory.endsWithIgnoreCaseExp(getName(), value);
- }
-
- /**
- * @return An expression checking for objects between a lower and upper
- * bound inclusive
- *
- * @param lower
- * The lower bound.
- * @param upper
- * The upper bound.
- */
- public Expression between(E lower, E upper) {
- return ExpressionFactory.betweenExp(getName(), lower, upper);
- }
-
- /**
- * @return An expression for finding objects with values in the given set.
- */
- public Expression in(E firstValue, E... moreValues) {
-
- int moreValuesLength = moreValues != null ? moreValues.length : 0;
-
- Object[] values = new Object[moreValuesLength + 1];
- values[0] = firstValue;
-
- if (moreValuesLength > 0) {
- System.arraycopy(moreValues, 0, values, 1, moreValuesLength);
- }
-
- return ExpressionFactory.inExp(getName(), values);
- }
-
- /**
- * @return An expression for finding objects with values not in the given
- * set.
- */
- public Expression nin(E firstValue, E... moreValues) {
-
- int moreValuesLength = moreValues != null ? moreValues.length : 0;
-
- Object[] values = new Object[moreValuesLength + 1];
- values[0] = firstValue;
-
- if (moreValuesLength > 0) {
- System.arraycopy(moreValues, 0, values, 1, moreValuesLength);
- }
-
- return ExpressionFactory.notInExp(getName(), values);
- }
-
- /**
- * @return An expression for finding objects with values in the given set.
- */
- public Expression in(Collection<E> values) {
- return ExpressionFactory.inExp(getName(), values);
- }
-
- /**
- * @return An expression for finding objects with values not in the given
- * set.
- */
- public Expression nin(Collection<E> values) {
- return ExpressionFactory.notInExp(getName(), values);
- }
-
- /**
- * @return A greater than Expression.
- */
- public Expression gt(E value) {
- return ExpressionFactory.greaterExp(getName(), value);
- }
-
- /**
- * @return Represents a greater than relationship between two attributes
- * (columns).
- */
- public Expression gt(Property<?> value) {
- return ExpressionFactory.greaterExp(getName(), new ASTObjPath(value.getName()));
- }
-
- /**
- * @return A greater than or equal to Expression.
- */
- public Expression gte(E value) {
- return ExpressionFactory.greaterOrEqualExp(getName(), value);
- }
-
- /**
- * @return Represents a greater than or equal relationship between two
- * attributes (columns).
- */
- public Expression gte(Property<?> value) {
- return ExpressionFactory.greaterOrEqualExp(getName(), new ASTObjPath(value.getName()));
- }
-
- /**
- * @return A less than Expression.
- */
- public Expression lt(E value) {
- return ExpressionFactory.lessExp(getName(), value);
- }
-
- /**
- * @return Represents a less than relationship between two attributes
- * (columns).
- */
- public Expression lt(Property<?> value) {
- return ExpressionFactory.lessExp(getName(), new ASTObjPath(value.getName()));
- }
-
- /**
- * @return A less than or equal to Expression.
- */
- public Expression lte(E value) {
- return ExpressionFactory.lessOrEqualExp(getName(), value);
- }
-
- /**
- * @return Represents a less than or equal relationship between two
- * attributes (columns).
- */
- public Expression lte(Property<?> value) {
- return ExpressionFactory.lessOrEqualExp(getName(), new ASTObjPath(value.getName()));
- }
-
- /**
- * @return Ascending sort orderings on this property.
- */
- public Ordering asc() {
- return new Ordering(getName(), SortOrder.ASCENDING);
- }
-
- /**
- * @return Ascending sort orderings on this property.
- */
- public List<Ordering> ascs() {
- List<Ordering> result = new ArrayList<Ordering>(1);
- result.add(asc());
- return result;
- }
-
- /**
- * @return Ascending case insensitive sort orderings on this property.
- */
- public Ordering ascInsensitive() {
- return new Ordering(getName(), SortOrder.ASCENDING_INSENSITIVE);
- }
-
- /**
- * @return Ascending case insensitive sort orderings on this property.
- */
- public List<Ordering> ascInsensitives() {
- List<Ordering> result = new ArrayList<Ordering>(1);
- result.add(ascInsensitive());
- return result;
- }
-
- /**
- * @return Descending sort orderings on this property.
- */
- public Ordering desc() {
- return new Ordering(getName(), SortOrder.DESCENDING);
- }
-
- /**
- * @return Descending sort orderings on this property.
- */
- public List<Ordering> descs() {
- List<Ordering> result = new ArrayList<Ordering>(1);
- result.add(desc());
- return result;
- }
-
- /**
- * @return Descending case insensitive sort orderings on this property.
- */
- public Ordering descInsensitive() {
- return new Ordering(getName(), SortOrder.DESCENDING_INSENSITIVE);
- }
-
- /**
- * @return Descending case insensitive sort orderings on this property.
- */
- public List<Ordering> descInsensitives() {
- List<Ordering> result = new ArrayList<Ordering>(1);
- result.add(descInsensitive());
- return result;
- }
-
- /**
- * Returns a prefetch tree that follows this property path, potentially
- * spanning a number of phantom nodes, and having a single leaf with "joint"
- * prefetch semantics.
- */
- public PrefetchTreeNode joint() {
- return PrefetchTreeNode.withPath(name, PrefetchTreeNode.JOINT_PREFETCH_SEMANTICS);
- }
-
- /**
- * Returns a prefetch tree that follows this property path, potentially
- * spanning a number of phantom nodes, and having a single leaf with
- * "disjoint" prefetch semantics.
- */
- public PrefetchTreeNode disjoint() {
- return PrefetchTreeNode.withPath(name, PrefetchTreeNode.DISJOINT_PREFETCH_SEMANTICS);
- }
-
- /**
- * Returns a prefetch tree that follows this property path, potentially
- * spanning a number of phantom nodes, and having a single leaf with
- * "disjoint by id" prefetch semantics.
- */
- public PrefetchTreeNode disjointById() {
- return PrefetchTreeNode.withPath(name, PrefetchTreeNode.DISJOINT_BY_ID_PREFETCH_SEMANTICS);
- }
-
- /**
- * Extracts property value from an object using JavaBean-compatible
- * introspection with one addition - a property can be a dot-separated
- * property name path.
- */
- @SuppressWarnings("unchecked")
- public E getFrom(Object bean) {
- return (E) PropertyUtils.getProperty(bean, getName());
- }
-
- /**
- * Extracts property value from a collection of objects using
- * JavaBean-compatible introspection with one addition - a property can be a
- * dot-separated property name path.
- */
- public List<E> getFromAll(Collection<?> beans) {
- List<E> result = new ArrayList<E>(beans.size());
- for (Object bean : beans) {
- result.add(getFrom(bean));
- }
- return result;
- }
-
- /**
- * Sets a property value in 'obj' using JavaBean-compatible introspection
- * with one addition - a property can be a dot-separated property name path.
- */
- public void setIn(Object bean, E value) {
- PropertyUtils.setProperty(bean, getName(), value);
- }
-
- /**
- * Sets a property value in a collection of objects using
- * JavaBean-compatible introspection with one addition - a property can be a
- * dot-separated property name path.
- */
- public void setInAll(Collection<?> beans, E value) {
- for (Object bean : beans) {
- setIn(bean, value);
- }
- }
+ /**
+ * Name of the property in the object
+ */
+ private final String name;
+
+ /**
+ * Constructs a new property with the given name.
+ */
+ public Property(String name) {
+ this.name = name;
+ }
+
+ /**
+ * @return Name of the property in the object.
+ */
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public int hashCode() {
+ return getName().hashCode();
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ return obj instanceof Property && ((Property<?>) obj).getName().equals(getName());
+ }
+
+ /**
+ * @return Constructs a property path by appending the argument to the
+ * existing property separated by a dot
+ */
+ public Property<Object> dot(String property) {
+ return new Property<Object>(getName() + "." + property);
+ }
+
+ /**
+ * @return Constructs a property path by appending the argument to the
+ * existing property separated by a dot
+ */
+ public <T> Property<T> dot(Property<T> property) {
+ return new Property<T>(getName() + "." + property.getName());
+ }
+
+ /**
+ * Returns a version of this property that represents an OUTER join. It is
+ * up to caller to ensure that the property corresponds to a relationship,
+ * as "outer" attributes make no sense.
+ */
+ public Property<E> outer() {
+ return isOuter() ? this : new Property<E>(name + "+");
+ }
+
+ private boolean isOuter() {
+ return name.endsWith("+");
+ }
+
+ /**
+ * @return An expression representing null.
+ */
+ public Expression isNull() {
+ return ExpressionFactory.matchExp(getName(), null);
+ }
+
+ /**
+ * @return An expression representing a non-null value.
+ */
+ public Expression isNotNull() {
+ return ExpressionFactory.matchExp(getName(), null).notExp();
+ }
+
+ /**
+ * @return An expression representing equality to TRUE.
+ */
+ public Expression isTrue() {
+ return ExpressionFactory.matchExp(getName(), Boolean.TRUE);
+ }
+
+ /**
+ * @return An expression representing equality to FALSE.
+ */
+ public Expression isFalse() {
+ return ExpressionFactory.matchExp(getName(), Boolean.FALSE);
+ }
+
+ /**
+ * @return An expression representing equality to a value.
+ */
+ public Expression eq(E value) {
+ return ExpressionFactory.matchExp(getName(), value);
+ }
+
+ /**
+ * @return An expression representing equality between two attributes
+ * (columns).
+ */
+ public Expression eq(Property<?> value) {
+ return ExpressionFactory.matchExp(getName(), new ASTObjPath(value.getName()));
+ }
+
+ /**
+ * @return An expression representing inequality to a value.
+ */
+ public Expression ne(E value) {
+ return ExpressionFactory.noMatchExp(getName(), value);
+ }
+
+ /**
+ * @return An expression representing inequality between two attributes
+ * (columns).
+ */
+ public Expression ne(Property<?> value) {
+ return ExpressionFactory.noMatchExp(getName(), new ASTObjPath(value.getName()));
+ }
+
+ /**
+ * @param pattern a pattern matching property value. Pattern may include "_" and
+ * "%" wildcard symbols to match any single character or a
+ * sequence of characters. To prevent "_" and "%" from being
+ * treated as wildcards, they need to be escaped and escape char
+ * passed with {@link #like(String, char)} method.
+ * @return An expression for a Database "LIKE" query.
+ */
+ public Expression like(String pattern) {
+ return ExpressionFactory.likeExp(getName(), pattern);
+ }
+
+ /**
+ * @param pattern a properly escaped pattern matching property value. Pattern
+ * may include "_" and "%" wildcard symbols to match any single
+ * character or a sequence of characters.
+ * @param escapeChar an escape character used in the pattern to escape "%" and "_".
+ * @return An expression for a Database "LIKE" query.
+ */
+ public Expression like(String pattern, char escapeChar) {
+ return ExpressionFactory.likeExp(getName(), pattern, escapeChar);
+ }
+
+ /**
+ * @return An expression for a case insensitive "LIKE" query.
+ */
+ public Expression likeIgnoreCase(String pattern) {
+ return ExpressionFactory.likeIgnoreCaseExp(getName(), pattern);
+ }
+
+ /**
+ * @return An expression for a Database "NOT LIKE" query.
+ */
+ public Expression nlike(String value) {
+ return ExpressionFactory.notLikeExp(getName(), value);
+ }
+
+ /**
+ * @return An expression for a case insensitive "NOT LIKE" query.
+ */
+ public Expression nlikeIgnoreCase(String value) {
+ return ExpressionFactory.notLikeIgnoreCaseExp(getName(), value);
+ }
+
+ /**
+ * Creates an expression for a database "LIKE" query with the value converted to a pattern matching anywhere in the
+ * String.
+ *
+ * @param substring a String to match against property value. "_" and "%" symbols
+ * are NOT treated as wildcards and are escaped when converted to
+ * a LIKE expression.
+ * @return a newly created expression.
+ */
+ public Expression contains(String substring) {
+ return ExpressionFactory.containsExp(getName(), substring);
+ }
+
+ /**
+ * Creates an expression for a database "LIKE" query with the value converted to a pattern matching the beginning of
+ * a String.
+ *
+ * @param value a String to match against property value. "_" and "%" symbols
+ * are NOT treated as wildcards and are escaped when converted to
+ * a LIKE expression.
+ * @return a newly created expression.
+ */
+ public Expression startsWith(String value) {
+ return ExpressionFactory.startsWithExp(getName(), value);
+ }
+
+ /**
+ * Creates an expression for a database "LIKE" query with the value
+ * converted to a pattern matching the tail of a String.
+ *
+ * @param value a String to match against property value. "_" and "%" symbols
+ * are NOT treated as wildcards and are escaped when converted to
+ * a LIKE expression.
+ * @return a newly created expression.
+ */
+ public Expression endsWith(String value) {
+ return ExpressionFactory.endsWithExp(getName(), value);
+ }
+
+ /**
+ * Same as {@link #contains(String)}, only using case-insensitive
+ * comparison.
+ */
+ public Expression containsIgnoreCase(String value) {
+ return ExpressionFactory.containsIgnoreCaseExp(getName(), value);
+ }
+
+ /**
+ * Same as {@link #startsWith(String)}, only using case-insensitive
+ * comparison.
+ */
+ public Expression startsWithIgnoreCase(String value) {
+ return ExpressionFactory.startsWithIgnoreCaseExp(getName(), value);
+ }
+
+ /**
+ * Same as {@link #endsWith(String)}, only using case-insensitive
+ * comparison.
+ */
+ public Expression endsWithIgnoreCase(String value) {
+ return ExpressionFactory.endsWithIgnoreCaseExp(getName(), value);
+ }
+
+ /**
+ * @param lower The lower bound.
+ * @param upper The upper bound.
+ * @return An expression checking for objects between a lower and upper
+ * bound inclusive
+ */
+ public Expression between(E lower, E upper) {
+ return ExpressionFactory.betweenExp(getName(), lower, upper);
+ }
+
+ /**
+ * @return An expression for finding objects with values in the given set.
+ */
+ public Expression in(E firstValue, E... moreValues) {
+
+ int moreValuesLength = moreValues != null ? moreValues.length : 0;
+
+ Object[] values = new Object[moreValuesLength + 1];
+ values[0] = firstValue;
+
+ if (moreValuesLength > 0) {
+ System.arraycopy(moreValues, 0, values, 1, moreValuesLength);
+ }
+
+ return ExpressionFactory.inExp(getName(), values);
+ }
+
+ /**
+ * @return An expression for finding objects with values not in the given
+ * set.
+ */
+ public Expression nin(E firstValue, E... moreValues) {
+
+ int moreValuesLength = moreValues != null ? moreValues.length : 0;
+
+ Object[] values = new Object[moreValuesLength + 1];
+ values[0] = firstValue;
+
+ if (moreValuesLength > 0) {
+ System.arraycopy(moreValues, 0, values, 1, moreValuesLength);
+ }
+
+ return ExpressionFactory.notInExp(getName(), values);
+ }
+
+ /**
+ * @return An expression for finding objects with values in the given set.
+ */
+ public Expression in(Collection<E> values) {
+ return ExpressionFactory.inExp(getName(), values);
+ }
+
+ /**
+ * @return An expression for finding objects with values not in the given
+ * set.
+ */
+ public Expression nin(Collection<E> values) {
+ return ExpressionFactory.notInExp(getName(), values);
+ }
+
+ /**
+ * @return A greater than Expression.
+ */
+ public Expression gt(E value) {
+ return ExpressionFactory.greaterExp(getName(), value);
+ }
+
+ /**
+ * @return Represents a greater than relationship between two attributes
+ * (columns).
+ */
+ public Expression gt(Property<?> value) {
+ return ExpressionFactory.greaterExp(getName(), new ASTObjPath(value.getName()));
+ }
+
+ /**
+ * @return A greater than or equal to Expression.
+ */
+ public Expression gte(E value) {
+ return ExpressionFactory.greaterOrEqualExp(getName(), value);
+ }
+
+ /**
+ * @return Represents a greater than or equal relationship between two
+ * attributes (columns).
+ */
+ public Expression gte(Property<?> value) {
+ return ExpressionFactory.greaterOrEqualExp(getName(), new ASTObjPath(value.getName()));
+ }
+
+ /**
+ * @return A less than Expression.
+ */
+ public Expression lt(E value) {
+ return ExpressionFactory.lessExp(getName(), value);
+ }
+
+ /**
+ * @return Represents a less than relationship between two attributes
+ * (columns).
+ */
+ public Expression lt(Property<?> value) {
+ return ExpressionFactory.lessExp(getName(), new ASTObjPath(value.getName()));
+ }
+
+ /**
+ * @return A less than or equal to Expression.
+ */
+ public Expression lte(E value) {
+ return ExpressionFactory.lessOrEqualExp(getName(), value);
+ }
+
+ /**
+ * @return Represents a less than or equal relationship between two
+ * attributes (columns).
+ */
+ public Expression lte(Property<?> value) {
+ return ExpressionFactory.lessOrEqualExp(getName(), new ASTObjPath(value.getName()));
+ }
+
+ /**
+ * @return Ascending sort orderings on this property.
+ */
+ public Ordering asc() {
+ return new Ordering(getName(), SortOrder.ASCENDING);
+ }
+
+ /**
+ * @return Ascending sort orderings on this property.
+ */
+ public List<Ordering> ascs() {
+ List<Ordering> result = new ArrayList<Ordering>(1);
+ result.add(asc());
+ return result;
+ }
+
+ /**
+ * @return Ascending case insensitive sort orderings on this property.
+ */
+ public Ordering ascInsensitive() {
+ return new Ordering(getName(), SortOrder.ASCENDING_INSENSITIVE);
+ }
+
+ /**
+ * @return Ascending case insensitive sort orderings on this property.
+ */
+ public List<Ordering> ascInsensitives() {
+ List<Ordering> result = new ArrayList<Ordering>(1);
+ result.add(ascInsensitive());
+ return result;
+ }
+
+ /**
+ * @return Descending sort orderings on this property.
+ */
+ public Ordering desc() {
+ return new Ordering(getName(), SortOrder.DESCENDING);
+ }
+
+ /**
+ * @return Descending sort orderings on this property.
+ */
+ public List<Ordering> descs() {
+ List<Ordering> result = new ArrayList<Ordering>(1);
+ result.add(desc());
+ return result;
+ }
+
+ /**
+ * @return Descending case insensitive sort orderings on this property.
+ */
+ public Ordering descInsensitive() {
+ return new Ordering(getName(), SortOrder.DESCENDING_INSENSITIVE);
+ }
+
+ /**
+ * @return Descending case insensitive sort orderings on this property.
+ */
+ public List<Ordering> descInsensitives() {
+ List<Ordering> result = new ArrayList<Ordering>(1);
+ result.add(descInsensitive());
+ return result;
+ }
+
+ /**
+ * Returns a prefetch tree that follows this property path, potentially
+ * spanning a number of phantom nodes, and having a single leaf with "joint"
+ * prefetch semantics.
+ */
+ public PrefetchTreeNode joint() {
+ return PrefetchTreeNode.withPath(name, PrefetchTreeNode.JOINT_PREFETCH_SEMANTICS);
+ }
+
+ /**
+ * Returns a prefetch tree that follows this property path, potentially
+ * spanning a number of phantom nodes, and having a single leaf with
+ * "disjoint" prefetch semantics.
+ */
+ public PrefetchTreeNode disjoint() {
+ return PrefetchTreeNode.withPath(name, PrefetchTreeNode.DISJOINT_PREFETCH_SEMANTICS);
+ }
+
+ /**
+ * Returns a prefetch tree that follows this property path, potentially
+ * spanning a number of phantom nodes, and having a single leaf with
+ * "disjoint by id" prefetch semantics.
+ */
+ public PrefetchTreeNode disjointById() {
+ return PrefetchTreeNode.withPath(name, PrefetchTreeNode.DISJOINT_BY_ID_PREFETCH_SEMANTICS);
+ }
+
+ /**
+ * Extracts property value from an object using JavaBean-compatible
+ * introspection with one addition - a property can be a dot-separated
+ * property name path.
+ */
+ @SuppressWarnings("unchecked")
+ public E getFrom(Object bean) {
+ return (E) PropertyUtils.getProperty(bean, getName());
+ }
+
+ /**
+ * Extracts property value from a collection of objects using
+ * JavaBean-compatible introspection with one addition - a property can be a
+ * dot-separated property name path.
+ */
+ public List<E> getFromAll(Collection<?> beans) {
+ List<E> result = new ArrayList<E>(beans.size());
+ for (Object bean : beans) {
+ result.add(getFrom(bean));
+ }
+ return result;
+ }
+
+ /**
+ * Sets a property value in 'obj' using JavaBean-compatible introspection
+ * with one addition - a property can be a dot-separated property name path.
+ */
+ public void setIn(Object bean, E value) {
+ PropertyUtils.setProperty(bean, getName(), value);
+ }
+
+ /**
+ * Sets a property value in a collection of objects using
+ * JavaBean-compatible introspection with one addition - a property can be a
+ * dot-separated property name path.
+ */
+ public void setInAll(Collection<?> beans, E value) {
+ for (Object bean : beans) {
+ setIn(bean, value);
+ }
+ }
}
\ No newline at end of file