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 2011/04/08 20:31:12 UTC

svn commit: r1090391 - in /cayenne/main/trunk: docs/doc/src/main/resources/ framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/

Author: mgentry
Date: Fri Apr  8 18:31:11 2011
New Revision: 1090391

URL: http://svn.apache.org/viewvc?rev=1090391&view=rev
Log:
CAY-1556: Add path construction feature to make constructing paths from constants easier for queries and orderings.

Modified:
    cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/Cayenne.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/CayenneDataObject.java

Modified: cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt?rev=1090391&r1=1090390&r2=1090391&view=diff
==============================================================================
--- cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt (original)
+++ cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt Fri Apr  8 18:31:11 2011
@@ -13,6 +13,7 @@ Date: 
 ----------------------------------
 Changes/New Features Since 3.1M2:
 
+CAY-1556 Add path construction feature to make constructing paths from constants easier for queries and orderings
 CAY-1525 CharType: don't trim spaces on the left
 CAY-1544 Remove jdk1.6 module from Cayenne sources
 CAY-1545 cayenne-lifecycle Referenceable handler refactoring

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/Cayenne.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/Cayenne.java?rev=1090391&r1=1090390&r2=1090391&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/Cayenne.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/Cayenne.java Fri Apr  8 18:31:11 2011
@@ -43,7 +43,7 @@ import org.apache.cayenne.reflect.Proper
  * via this class (or other such Cayenne API) is not a clean design practice in many
  * cases, and sometimes may actually lead to security issues. </i>
  * </p>
- * 
+ *
  * @since 3.1 its predecessor was called DataObjectUtils
  */
 public final class Cayenne {
@@ -83,7 +83,7 @@ public final class Cayenne {
 
     /**
      * Returns property descriptor for specified property.
-     * 
+     *
      * @param properyName path to the property
      * @return property descriptor, <code>null</code> if not found
      */
@@ -233,6 +233,34 @@ public final class Cayenne {
     }
 
     /**
+     * Constructs a dotted path from a list of strings.  Useful for creating
+     * more complex paths while preserving compilation safety.  For example,
+     * instead of saying:
+     * <p>
+     * <pre>orderings.add(new Ordering("department.name", SortOrder.ASCENDING));</pre>
+     * <p>
+     * You can use makePath() with the constants generated by Cayenne Modeler:
+     * <p>
+     * <pre>orderings.add(new Ordering(Cayenne.makePath(USER.DEPARTMENT_PROPERTY, Department.NAME_PROPERTY), SortOrder.ASCENDING));</pre>
+     * <p>
+     * @param pathParts The varargs list of paths to join.
+     * @return A string of all the paths joined by a "." (used by Cayenne in queries and orderings).
+     * <p>
+     * @since 3.1
+     */
+    public static String makePath(String...pathParts) {
+        StringBuilder builder   = new StringBuilder();
+        String        separator = "";
+
+        for (String path : pathParts) {
+            builder.append(separator).append(path);
+            separator = ".";
+        }
+
+        return builder.toString();
+    }
+
+    /**
      * Returns an int primary key value for a persistent object. Only works for single
      * column numeric primary keys. If an object is transient or has an ObjectId that can
      * not be converted to an int PK, an exception is thrown.
@@ -326,7 +354,7 @@ public final class Cayenne {
      * If this object is already cached in the ObjectStore, it is returned without a
      * query. Otherwise a query is built and executed against the database.
      * </p>
-     * 
+     *
      * @see #objectForPK(ObjectContext, ObjectId)
      */
     public static <T> T objectForPK(
@@ -344,7 +372,7 @@ public final class Cayenne {
      * If this object is already cached in the ObjectStore, it is returned without a
      * query. Otherwise a query is built and executed against the database.
      * </p>
-     * 
+     *
      * @see #objectForPK(ObjectContext, ObjectId)
      */
     public static <T> T objectForPK(
@@ -362,7 +390,7 @@ public final class Cayenne {
      * If this object is already cached in the ObjectStore, it is returned without a
      * query. Otherwise a query is built and executed against the database.
      * </p>
-     * 
+     *
      * @see #objectForPK(ObjectContext, ObjectId)
      */
     public static <T> T objectForPK(
@@ -386,7 +414,7 @@ public final class Cayenne {
      * If this object is already cached in the ObjectStore, it is returned without a
      * query. Otherwise a query is built and executed against the database.
      * </p>
-     * 
+     *
      * @see #objectForPK(ObjectContext, ObjectId)
      */
     public static Object objectForPK(ObjectContext context, String objEntityName, int pk) {
@@ -400,7 +428,7 @@ public final class Cayenne {
      * If this object is already cached in the ObjectStore, it is returned without a
      * query. Otherwise a query is built and executed against the database.
      * </p>
-     * 
+     *
      * @see #objectForPK(ObjectContext, ObjectId)
      */
     public static Object objectForPK(
@@ -417,7 +445,7 @@ public final class Cayenne {
      * If this object is already cached in the ObjectStore, it is returned without a
      * query. Otherwise a query is built and executed against the database.
      * </p>
-     * 
+     *
      * @see #objectForPK(ObjectContext, ObjectId)
      */
     public static Object objectForPK(
@@ -435,7 +463,7 @@ public final class Cayenne {
      * Returns an object matching ObjectId. If this object is already cached in the
      * ObjectStore, it is returned without a query. Otherwise a query is built and
      * executed against the database.
-     * 
+     *
      * @return A persistent object that matched the id, null if no matching objects were
      *         found
      * @throws CayenneRuntimeException if more than one object matched ObjectId.

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/CayenneDataObject.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/CayenneDataObject.java?rev=1090391&r1=1090390&r2=1090391&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/CayenneDataObject.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/CayenneDataObject.java Fri Apr  8 18:31:11 2011
@@ -107,7 +107,7 @@ public class CayenneDataObject extends P
      * <br>
      * </li>
      * </ul>
-     * 
+     *
      * @since 1.0.5
      */
     public Object readNestedProperty(String path) {
@@ -298,7 +298,7 @@ public class CayenneDataObject extends P
      * by reachability" logic, pulling one of the two objects to a DataConext of another
      * object in case one of the objects is transient. If both objects are persistent, and
      * they don't have the same DataContext, CayenneRuntimeException is thrown.
-     * 
+     *
      * @since 1.2
      */
     protected void willConnect(String relationshipName, Persistent object) {
@@ -323,7 +323,7 @@ public class CayenneDataObject extends P
 
     /**
      * Initializes reverse relationship from object <code>val</code> to this object.
-     * 
+     *
      * @param relName name of relationship from this object to <code>val</code>.
      */
     protected void setReverseRelationship(String relName, DataObject val) {
@@ -463,7 +463,7 @@ public class CayenneDataObject extends P
 
     /**
      * Returns a version of a DataRow snapshot that was used to create this object.
-     * 
+     *
      * @since 1.1
      */
     public long getSnapshotVersion() {
@@ -478,12 +478,24 @@ public class CayenneDataObject extends P
     }
 
     /**
+     * Convenience method to invoke {@link Cayenne#makePath(String...)} from
+     * within a DataObject subclass to create a dotted path using the generated
+     * string constants for attributes and relationships.
+     *
+     * @see Cayenne#makePath(String...)
+     * @since 3.1
+     */
+    public String makePath(String...pathParts) {
+        return Cayenne.makePath(pathParts);
+    }
+
+    /**
      * Performs property validation of the object, appending any validation failures to
      * the provided validationResult object. This method is invoked from "validateFor.."
      * before committing a NEW or MODIFIED object to the database. Validation includes
      * checking for null values and value sizes. CayenneDataObject subclasses may override
      * this method, calling super.
-     * 
+     *
      * @since 1.1
      */
     protected void validateForSave(ValidationResult validationResult) {
@@ -645,7 +657,7 @@ public class CayenneDataObject extends P
      * Calls {@link #validateForSave(ValidationResult)}. CayenneDataObject subclasses may
      * override it providing validation logic that should be executed for the newly
      * created objects before saving them.
-     * 
+     *
      * @since 1.1
      */
     public void validateForInsert(ValidationResult validationResult) {
@@ -656,7 +668,7 @@ public class CayenneDataObject extends P
      * Calls {@link #validateForSave(ValidationResult)}. CayenneDataObject subclasses may
      * override it providing validation logic that should be executed for the modified
      * objects before saving them.
-     * 
+     *
      * @since 1.1
      */
     public void validateForUpdate(ValidationResult validationResult) {
@@ -667,7 +679,7 @@ public class CayenneDataObject extends P
      * This implementation does nothing. CayenneDataObject subclasses may override it
      * providing validation logic that should be executed for the deleted objects before
      * committing them.
-     * 
+     *
      * @since 1.1
      */
     public void validateForDelete(ValidationResult validationResult) {
@@ -676,7 +688,7 @@ public class CayenneDataObject extends P
 
     /**
      * Encodes object to XML using provided encoder.
-     * 
+     *
      * @since 1.2
      * @deprecated since 3.1 XML serialization package is deprecated and will be removed
      *             in the following releases. It has a number of functional and
@@ -685,6 +697,7 @@ public class CayenneDataObject extends P
      *             recommend the users to implement XML serialization of persistent
      *             objects based JAXB, XStream or other similar frameworks.
      */
+    @Deprecated
     public void encodeAsXML(XMLEncoder encoder) {
         EntityResolver er = getObjectContext().getEntityResolver();
         ObjEntity objectEntity = er.lookupObjEntity(getClass());
@@ -706,6 +719,7 @@ public class CayenneDataObject extends P
      *             recommend the users to implement XML serialization of persistent
      *             objects based JAXB, XStream or other similar frameworks.
      */
+    @Deprecated
     public void decodeFromXML(XMLDecoder decoder) {
 
         Injector injector = CayenneRuntime.getThreadInjector();