You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by mg...@apache.org on 2009/10/01 15:11:59 UTC
svn commit: r820640 - in
/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query:
Ordering.java SortOrder.java
Author: mgentry
Date: Thu Oct 1 13:11:58 2009
New Revision: 820640
URL: http://svn.apache.org/viewvc?rev=820640&view=rev
Log:
Updates for CAY-1283 -- adding enums for Ordering.
Added:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/SortOrder.java
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/Ordering.java
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/Ordering.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/Ordering.java?rev=820640&r1=820639&r2=820640&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/Ordering.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/Ordering.java Thu Oct 1 13:11:58 2009
@@ -39,24 +39,29 @@
* as a specification for building <em>ORDER BY</em> clause of a SelectQuery query. Note
* that in case of in-memory sorting, Ordering can be used with any JavaBeans, not just
* DataObjects.
- *
*/
public class Ordering implements Comparator<Object>, Serializable, XMLSerializable {
-
/**
* Symbolic representation of ascending ordering criterion.
+ *
+ * @deprecated Use SortOrder.ASCENDING instead.
*/
+ @Deprecated
public static final boolean ASC = true;
/**
* Symbolic representation of descending ordering criterion.
+ *
+ * @deprecated Use SortOrder.DESCENDING instead.
*/
+ @Deprecated
public static final boolean DESC = false;
protected String sortSpecString;
protected transient Expression sortSpec;
- protected boolean ascending;
- protected boolean caseInsensitive;
+ protected SortOrder sortOrder;
+// protected boolean ascending;
+// protected boolean caseInsensitive;
protected boolean pathExceptionSuppressed = false;
protected boolean nullSortedFirst = true;
@@ -73,24 +78,40 @@
public Ordering() {
}
+ @Deprecated
public Ordering(String sortPathSpec, boolean ascending) {
this(sortPathSpec, ascending, false);
}
+ /**
+ * @since 3.0
+ */
+ public Ordering(String sortPathSpec, SortOrder sortOrder) {
+ setSortSpecString(sortPathSpec);
+ setSortOrder(sortOrder);
+ }
+
+ @Deprecated
public Ordering(String sortPathSpec, boolean ascending, boolean caseInsensitive) {
setSortSpecString(sortPathSpec);
- this.ascending = ascending;
- this.caseInsensitive = caseInsensitive;
+ setAscending(ascending);
+ setCaseInsensitive(caseInsensitive);
+// this.ascending = ascending;
+// this.caseInsensitive = caseInsensitive;
}
+ @Deprecated
public Ordering(Expression sortExpression, boolean ascending) {
this(sortExpression, ascending, false);
}
+ @Deprecated
public Ordering(Expression sortExpression, boolean ascending, boolean caseInsensitive) {
setSortSpec(sortExpression);
- this.ascending = ascending;
- this.caseInsensitive = caseInsensitive;
+ setAscending(ascending);
+ setCaseInsensitive(caseInsensitive);
+// this.ascending = ascending;
+// this.caseInsensitive = caseInsensitive;
}
/**
@@ -154,24 +175,119 @@
return sortSpecString;
}
+ /**
+ * Sets the sort order for this ordering.
+ *
+ * @since 3.0
+ */
+ public void setSortOrder(SortOrder order) {
+ this.sortOrder = order;
+ }
+
/** Returns true if sorting is done in ascending order. */
public boolean isAscending() {
- return ascending;
+ return sortOrder == null || sortOrder == SortOrder.ASCENDING || sortOrder == SortOrder.ASCENDING_INSENSITIVE;
}
- /** Sets <code>ascending</code> property of this Ordering. */
+ /**
+ * Returns true if the sorting is done in descending order.
+ *
+ * @since 3.0
+ */
+ public boolean isDescending() {
+ return !isAscending();
+ }
+
+ /**
+ * Sets <code>ascending</code> property of this Ordering.
+ *
+ * @deprecated Use setSortOrder() or setAscending() or setDescending().
+ */
+ @Deprecated
public void setAscending(boolean ascending) {
- this.ascending = ascending;
+ if (ascending)
+ setAscending();
+ else
+ setDescending();
+ }
+
+ /**
+ * If the sort order is DESCENDING or DESCENDING_INSENSITIVE, sets
+ * the sort order to ASCENDING or ASCENDING_INSENSITIVE, respectively.
+ *
+ * @since 3.0
+ */
+ public void setAscending() {
+ if (sortOrder == null || sortOrder == SortOrder.DESCENDING)
+ setSortOrder(SortOrder.ASCENDING);
+ else if (sortOrder == SortOrder.DESCENDING_INSENSITIVE)
+ setSortOrder(SortOrder.ASCENDING_INSENSITIVE);
+ }
+
+ /**
+ * If the sort order is ASCENDING or ASCENDING_INSENSITIVE, sets
+ * the sort order to DESCENDING or DESCENDING_INSENSITIVE, respectively.
+ *
+ * @since 3.0
+ */
+ public void setDescending() {
+ if (sortOrder == null || sortOrder == SortOrder.ASCENDING)
+ setSortOrder(SortOrder.DESCENDING);
+ else if (sortOrder == SortOrder.ASCENDING_INSENSITIVE)
+ setSortOrder(SortOrder.DESCENDING_INSENSITIVE);
}
/** Returns true if the sorting is case insensitive */
public boolean isCaseInsensitive() {
- return caseInsensitive;
+ return !isCaseSensitive();
}
- /** Sets <code>caseInsensitive</code> property of this Ordering. */
+ /**
+ * Returns true if the sorting is case sensitive.
+ *
+ * @since 3.0
+ */
+ public boolean isCaseSensitive() {
+ return sortOrder == null || sortOrder == SortOrder.ASCENDING || sortOrder == SortOrder.DESCENDING;
+ }
+
+ /**
+ * Sets <code>caseInsensitive</code> property of this Ordering.
+ *
+ * @deprecated Use setSortOrder() or setCaseInsensitive() or setCaseSensitive().
+ */
+ @Deprecated
public void setCaseInsensitive(boolean caseInsensitive) {
- this.caseInsensitive = caseInsensitive;
+ if (caseInsensitive)
+ setCaseInsensitive();
+ else
+ setCaseSensitive();
+ }
+
+ /**
+ * If the sort order is ASCENDING or DESCENDING, sets the sort order to
+ * ASCENDING_INSENSITIVE or DESCENDING_INSENSITIVE, respectively.
+ *
+ * @since 3.0
+ */
+ public void setCaseInsensitive() {
+ if (sortOrder == null || sortOrder == SortOrder.ASCENDING)
+ setSortOrder(SortOrder.ASCENDING_INSENSITIVE);
+ else if (sortOrder == SortOrder.DESCENDING)
+ setSortOrder(SortOrder.DESCENDING_INSENSITIVE);
+ }
+
+ /**
+ * If the sort order is ASCENDING_INSENSITIVE or DESCENDING_INSENSITIVE,
+ * sets the sort order to ASCENDING or DESCENDING, respectively.
+ *
+ * @since 3.0
+ */
+ public void setCaseSensitive() {
+ if (sortOrder == null || sortOrder == SortOrder.ASCENDING_INSENSITIVE)
+ setSortOrder(SortOrder.ASCENDING);
+ else if (sortOrder == SortOrder.DESCENDING_INSENSITIVE)
+ setSortOrder(SortOrder.DESCENDING);
}
/**
@@ -222,7 +338,7 @@
if (pathExceptionSuppressed && e.getCause() instanceof org.apache.cayenne.reflect.UnresolvablePathException) {
//do nothing, we expect this
} else {
- //rethrow
+ //re-throw
throw e;
}
}
@@ -246,7 +362,7 @@
return nullSortedFirst? 1:-1;
}
- if (this.caseInsensitive) {
+ if (isCaseInsensitive()) {
// TODO: to upper case should probably be defined as a separate expression
// type
value1 = ConversionUtil.toUpperCase(value1);
@@ -255,7 +371,7 @@
int compareResult = ConversionUtil.toComparable(value1).compareTo(
ConversionUtil.toComparable(value2));
- return (ascending) ? compareResult : -compareResult;
+ return (isAscending()) ? compareResult : -compareResult;
}
/**
@@ -266,11 +382,11 @@
public void encodeAsXML(XMLEncoder encoder) {
encoder.print("<ordering");
- if (!ascending) {
+ if (isDescending()) {
encoder.print(" descending=\"true\"");
}
- if (caseInsensitive) {
+ if (isCaseInsensitive()) {
encoder.print(" ignore-case=\"true\"");
}
Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/SortOrder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/SortOrder.java?rev=820640&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/SortOrder.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/SortOrder.java Thu Oct 1 13:11:58 2009
@@ -0,0 +1,36 @@
+/*****************************************************************
+ * 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.cayenne.query;
+
+/**
+ * Constants to order query results (the ORDER BY clause).
+ *
+ * @since 3.0
+ */
+public enum SortOrder {
+ /**
+ * ASCENDING = Ascending order, case sensitive.<br/>
+ * ASCENDING_INSENSITIVE = Ascending order, case insensitive<br/>
+ * DESCENDING = Descending order, case sensitive.<br>
+ * DESCENDING_INSENSITIVE = Descending order, case insensitive.<br>
+ */
+ ASCENDING, ASCENDING_INSENSITIVE,
+ DESCENDING, DESCENDING_INSENSITIVE
+}