You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by fa...@apache.org on 2009/05/20 23:59:24 UTC

svn commit: r776878 - in /openjpa/trunk: openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/ openjpa-persistence/src/main/java/org/apache/openjpa/persistence/ openjpa-persistence/src/main/resources/org/apache/open...

Author: faywang
Date: Wed May 20 21:59:24 2009
New Revision: 776878

URL: http://svn.apache.org/viewvc?rev=776878&view=rev
Log:
OPENJPA-1069: support of @OrderBy("DESC") on ElementCollection containing basic type

Modified:
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/Person.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/TestAttrOverrides.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java
    openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/localizer.properties

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/Person.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/Person.java?rev=776878&r1=776877&r2=776878&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/Person.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/Person.java Wed May 20 21:59:24 2009
@@ -1,3 +1,21 @@
+/*
+ * 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.openjpa.persistence.embed.attrOverrides;
 
 import java.util.ArrayList;
@@ -20,6 +38,22 @@
     @OrderBy("zipcode.zip, zipcode.plusFour")
     protected List<Address> residences = new ArrayList<Address>();
     
+    @ElementCollection
+    @OrderBy("DESC")
+    private List<String> nickNames = new ArrayList<String>();
+
+    public List<String> getNickNames() {
+        return nickNames;
+    }
+    
+    public void setNickNames(List<String> nickNames) {
+        this.nickNames = nickNames;
+    }
+    
+    public void addNickName(String nickName) {
+        nickNames.add(nickName);
+    }
+    
     public String getSsn() {
         return ssn;
     }

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/TestAttrOverrides.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/TestAttrOverrides.java?rev=776878&r1=776877&r2=776878&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/TestAttrOverrides.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/TestAttrOverrides.java Wed May 20 21:59:24 2009
@@ -249,6 +249,7 @@
             zipCode.setPlusFour("plusFour_" + id + "_" + i);
             addr.setZipcode(zipCode);
             p.addResidence(addr);
+            p.addNickName("nickName_ + " + i);
         }
         em.persist(p);
         return p;
@@ -271,5 +272,14 @@
             assertEquals(expPlusFour, plusFour);
             i++;
         }
+        
+        List<String> nickNames = p.getNickNames();
+        assertEquals(4, nickNames.size());
+        i = 4;
+        for (String s : nickNames) {
+            String expNickName = "nickName_ + " + i;
+            assertEquals(expNickName, s);
+            i--;
+        }
    }
 }
\ No newline at end of file

Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java?rev=776878&r1=776877&r2=776878&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java Wed May 20 21:59:24 2009
@@ -1542,8 +1542,18 @@
      */
     private void parseOrderBy(FieldMetaData fmd, OrderBy anno) {
         String dec = anno.value();
-        if (dec.length() == 0)
+        if (fmd.isElementCollection() &&
+            fmd.getElement().getEmbeddedMetaData() != null) {
+                if (dec.length() == 0 || dec.equals("ASC") ||
+                    dec.equals("DESC"))
+                    throw new MetaDataException(_loc.get(
+                        "invalid-orderBy", fmd)); 
+        }
+        if (dec.length() == 0 || dec.equals("ASC"))
             dec = Order.ELEMENT + " asc";
+        else if (dec.equals("DESC"))
+            dec = Order.ELEMENT + " desc";
+            
         fmd.setOrderDeclaration(dec);
     }
 

Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java?rev=776878&r1=776877&r2=776878&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java Wed May 20 21:59:24 2009
@@ -72,6 +72,8 @@
 import static org.apache.openjpa.persistence.MetaDataTag.*;
 import static org.apache.openjpa.persistence.PersistenceStrategy.*;
 import org.apache.openjpa.util.ImplHelper;
+import org.apache.openjpa.util.MetaDataException;
+
 import serp.util.Numbers;
 
 /**
@@ -1549,8 +1551,18 @@
         throws SAXException {
         FieldMetaData fmd = (FieldMetaData) currentElement();
         String dec = currentText();
-        if (StringUtils.isEmpty(dec))
+        if (fmd.isElementCollection() &&
+            fmd.getElement().getEmbeddedMetaData() != null) {
+            if (dec.length() == 0 || dec.equals("ASC") ||
+                dec.equals("DESC"))
+                throw new MetaDataException(_loc.get(
+                    "invalid-orderBy", fmd)); 
+        }
+        if (StringUtils.isEmpty(dec) || dec.equals("ASC"))
             dec = Order.ELEMENT + " asc";
+        else if (dec.equals("DESC"))
+            dec = Order.ELEMENT + " desc";
+        
         fmd.setOrderDeclaration(dec);
     }
 

Modified: openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/localizer.properties
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/localizer.properties?rev=776878&r1=776877&r2=776878&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/localizer.properties (original)
+++ openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/localizer.properties Wed May 20 21:59:24 2009
@@ -190,4 +190,6 @@
 access-invalid: "{0}" is not a valid access style. Valid access styles are \
 	"PROPERTY" and "FIELD".
 getter-unmatched: Getter method "{0}" has no matching setter method.
-	
\ No newline at end of file
+invalid-orderBy: This is not a valid OrderBy annotation. The property or \
+    field_name must be specified in the orederBy item of the orderBy list \
+    for "{0}".	
\ No newline at end of file