Author: chetanm
Date: Tue Oct 14 15:26:37 2014
New Revision: 1631789
URL: http://svn.apache.org/r1631789
Log:
OAK-2052 - Node.setProperty(String, Value) fails for binary non ValueImpls
Added:
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/BinaryBasedBlob.java
- copied unchanged from r1621115,
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/BinaryBasedBlob.java
jackrabbit/oak/branches/1.0/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/value/
- copied from r1621115,
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/value/
Modified:
jackrabbit/oak/branches/1.0/ (props changed)
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/BinaryPropertyState.java
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueImpl.java
jackrabbit/oak/branches/1.0/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java
Propchange: jackrabbit/oak/branches/1.0/
------------------------------------------------------------------------------
Merged /jackrabbit/oak/trunk:r1621115
Modified:
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/BinaryPropertyState.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/BinaryPropertyState.java?rev=1631789&r1=1631788&r2=1631789&view=diff
==============================================================================
---
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/BinaryPropertyState.java
(original)
+++
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/BinaryPropertyState.java
Tue Oct 14 15:26:37 2014
@@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.plugin
import static com.google.common.base.Preconditions.checkNotNull;
import javax.annotation.Nonnull;
+import javax.jcr.RepositoryException;
import javax.jcr.Value;
import org.apache.jackrabbit.oak.api.Blob;
@@ -78,7 +79,7 @@ public class BinaryPropertyState extends
* @return The new property state of type {@link Type#BINARY}
*/
public static PropertyState binaryProperty(
- @Nonnull String name, @Nonnull Value value) {
+ @Nonnull String name, @Nonnull Value value) throws
RepositoryException {
return new BinaryPropertyState(name, ValueImpl.getBlob(value));
}
Modified:
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueImpl.java?rev=1631789&r1=1631788&r2=1631789&view=diff
==============================================================================
---
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueImpl.java
(original)
+++
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueImpl.java
Tue Oct 14 15:26:37 2014
@@ -41,9 +41,12 @@ import org.apache.jackrabbit.oak.namepat
*/
public class ValueImpl implements JackrabbitValue {
- public static Blob getBlob(Value value) {
- checkState(value instanceof ValueImpl);
- return ((ValueImpl) value).getBlob();
+ public static Blob getBlob(Value value) throws RepositoryException {
+ if (value instanceof ValueImpl) {
+ return ((ValueImpl) value).getBlob();
+ } else {
+ return new BinaryBasedBlob(value.getBinary());
+ }
}
private final PropertyState propertyState;
Modified:
jackrabbit/oak/branches/1.0/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java?rev=1631789&r1=1631788&r2=1631789&view=diff
==============================================================================
---
jackrabbit/oak/branches/1.0/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java
(original)
+++
jackrabbit/oak/branches/1.0/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java
Tue Oct 14 15:26:37 2014
@@ -75,19 +75,14 @@ import org.apache.jackrabbit.commons.jac
import org.apache.jackrabbit.core.data.RandomInputStream;
import org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl;
import org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants;
+import org.apache.jackrabbit.spi.QValue;
+import org.apache.jackrabbit.spi.commons.conversion.DefaultNamePathResolver;
+import org.apache.jackrabbit.spi.commons.value.QValueFactoryImpl;
+import org.apache.jackrabbit.spi.commons.value.QValueValue;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
-import static java.util.Arrays.asList;
-import static org.apache.jackrabbit.commons.JcrUtils.getChildNodes;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.junit.Assume.assumeTrue;
-
public class RepositoryTest extends AbstractRepositoryTest {
private static final String TEST_NODE = "test_node";
private static final String TEST_PATH = '/' + TEST_NODE;
@@ -967,6 +962,18 @@ public class RepositoryTest extends Abst
}
@Test
+ public void addAlienBinaryProperty() throws RepositoryException,
IOException {
+ Session session = getAdminSession();
+ QValue qValue =
QValueFactoryImpl.getInstance().create("binaryValue".getBytes());
+ Value value = new QValueValue(qValue, new
DefaultNamePathResolver(session));
+ getNode(TEST_PATH).setProperty("binary", value);
+ session.save();
+
+ Value valueAgain = getNode(TEST_PATH).getProperty("binary").getValue();
+ assertEqualStream(value.getBinary().getStream(),
valueAgain.getBinary().getStream());
+ }
+
+ @Test
public void addMultiValuedBinary() throws RepositoryException {
Node parentNode = getNode(TEST_PATH);
Value[] values = new Value[2];