Return-Path: Delivered-To: apmail-jackrabbit-commits-archive@www.apache.org Received: (qmail 87661 invoked from network); 16 Feb 2008 12:30:30 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 16 Feb 2008 12:30:30 -0000 Received: (qmail 10980 invoked by uid 500); 16 Feb 2008 12:30:24 -0000 Delivered-To: apmail-jackrabbit-commits-archive@jackrabbit.apache.org Received: (qmail 10934 invoked by uid 500); 16 Feb 2008 12:30:24 -0000 Mailing-List: contact commits-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@jackrabbit.apache.org Delivered-To: mailing list commits@jackrabbit.apache.org Received: (qmail 10925 invoked by uid 99); 16 Feb 2008 12:30:24 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 16 Feb 2008 04:30:24 -0800 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 16 Feb 2008 12:29:45 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id D1EDD1A9832; Sat, 16 Feb 2008 04:30:05 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r628281 - in /jackrabbit/trunk/jackrabbit-core/src: main/java/org/apache/jackrabbit/core/NodeImpl.java main/java/org/apache/jackrabbit/core/version/NodeStateEx.java test/java/org/apache/jackrabbit/core/integration/NodeImplTest.java Date: Sat, 16 Feb 2008 12:30:04 -0000 To: commits@jackrabbit.apache.org From: jukka@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080216123005.D1EDD1A9832@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: jukka Date: Sat Feb 16 04:30:03 2008 New Revision: 628281 URL: http://svn.apache.org/viewvc?rev=628281&view=rev Log: JCR-1227: Restore of empty multivalue property always changes property type to string - Use the actual instead of defined property type in checkin() and restore() - Added a test case Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/NodeStateEx.java jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/NodeImplTest.java Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java?rev=628281&r1=628280&r2=628281&view=diff ============================================================================== --- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java (original) +++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java Sat Feb 16 04:30:03 2008 @@ -3892,7 +3892,8 @@ PropertyState prop = props[i]; propNames.add(prop.getName()); if (prop.isMultiValued()) { - internalSetProperty(props[i].getName(), prop.getValues()); + internalSetProperty( + props[i].getName(), prop.getValues(), prop.getType()); } else { internalSetProperty(props[i].getName(), prop.getValues()[0]); } Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/NodeStateEx.java URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/NodeStateEx.java?rev=628281&r1=628280&r2=628281&view=diff ============================================================================== --- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/NodeStateEx.java (original) +++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/NodeStateEx.java Sat Feb 16 04:30:03 2008 @@ -592,17 +592,11 @@ public void copyFrom(PropertyImpl prop) throws RepositoryException { if (prop.getDefinition().isMultiple()) { InternalValue[] values = prop.internalGetValues(); - int type; - if (values.length > 0) { - type = values[0].getType(); - } else { - type = prop.getDefinition().getRequiredType(); - } InternalValue[] copiedValues = new InternalValue[values.length]; for (int i = 0; i < values.length; i++) { copiedValues[i] = values[i].createCopy(); } - setPropertyValues(prop.getQName(), type, copiedValues); + setPropertyValues(prop.getQName(), prop.getType(), copiedValues); } else { setPropertyValue(prop.getQName(), prop.internalGetValue().createCopy()); } Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/NodeImplTest.java URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/NodeImplTest.java?rev=628281&r1=628280&r2=628281&view=diff ============================================================================== --- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/NodeImplTest.java (original) +++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/NodeImplTest.java Sat Feb 16 04:30:03 2008 @@ -21,6 +21,7 @@ import javax.jcr.PropertyType; import javax.jcr.RepositoryException; import javax.jcr.Value; +import javax.jcr.version.Version; import org.apache.jackrabbit.test.AbstractJCRTest; @@ -54,6 +55,38 @@ "JCR-1389: setProperty(name, new Value[0], PropertyType.LONG)" + " loses property type", PropertyType.LONG, property.getType()); + } + + /** + * Test case for JCR-1227. + * + * @see https://issues.apache.org/jira/browse/JCR-1227 + */ + public void testRestoreEmptyMultiValueProperty() throws Exception { + node.addMixin("mix:versionable"); + node.setProperty("test", new Value[0], PropertyType.LONG); + node.save(); + assertEquals(PropertyType.LONG, node.getProperty("test").getType()); + + Version version = node.checkin(); + assertEquals(PropertyType.LONG, node.getProperty("test").getType()); + + node.restore(version, false); + assertEquals( + "JCR-1227: Restore of empty multivalue property always" + + " changes property type to String", + PropertyType.LONG, node.getProperty("test").getType()); + + node.checkout(); + node.setProperty("test", new Value[0], PropertyType.BOOLEAN); + node.save(); + assertEquals(PropertyType.BOOLEAN, node.getProperty("test").getType()); + + node.restore(version, false); + assertEquals( + "JCR-1227: Restore of empty multivalue property always" + + " changes property type to String", + PropertyType.LONG, node.getProperty("test").getType()); } }