You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2015/05/18 21:12:18 UTC
svn commit: r1680074 - in
/sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src:
main/java/org/apache/sling/nosql/generic/resource/impl/
test/java/org/apache/sling/nosql/generic/resource/
Author: sseifert
Date: Mon May 18 19:12:17 2015
New Revision: 1680074
URL: http://svn.apache.org/r1680074
Log:
fix unit tests
Added:
sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlValueMap.java (with props)
Modified:
sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlResource.java
sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/resource/NoSqlResourceProviderTest.java
Modified: sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlResource.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlResource.java?rev=1680074&r1=1680073&r2=1680074&view=diff
==============================================================================
--- sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlResource.java (original)
+++ sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlResource.java Mon May 18 19:12:17 2015
@@ -20,14 +20,13 @@ package org.apache.sling.nosql.generic.r
import java.util.Map;
+import org.apache.jackrabbit.JcrConstants;
import org.apache.sling.api.SlingConstants;
import org.apache.sling.api.resource.AbstractResource;
import org.apache.sling.api.resource.ModifiableValueMap;
import org.apache.sling.api.resource.ResourceMetadata;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ValueMap;
-import org.apache.sling.api.wrappers.ModifiableValueMapDecorator;
-import org.apache.sling.api.wrappers.ValueMapDecorator;
import org.apache.sling.nosql.generic.adapter.NoSqlData;
/**
@@ -54,7 +53,7 @@ public class NoSqlResource extends Abstr
}
public String getResourceType() {
- return getValueMap().get(ResourceResolver.PROPERTY_RESOURCE_TYPE, String.class);
+ return getValueMap().get(ResourceResolver.PROPERTY_RESOURCE_TYPE, JcrConstants.NT_UNSTRUCTURED);
}
public String getResourceSuperType() {
@@ -68,11 +67,8 @@ public class NoSqlResource extends Abstr
@SuppressWarnings("unchecked")
@Override
public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) {
- if (type == ValueMap.class || type == Map.class) {
- return (AdapterType)new ValueMapDecorator(data.getProperties());
- }
- if (type == ModifiableValueMap.class) {
- return (AdapterType)new ModifiableValueMapDecorator(data.getProperties());
+ if (type == ValueMap.class || type == Map.class || type == ModifiableValueMap.class) {
+ return (AdapterType)new NoSqlValueMap(this, data.getProperties());
}
return super.adaptTo(type);
}
Added: sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlValueMap.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlValueMap.java?rev=1680074&view=auto
==============================================================================
--- sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlValueMap.java (added)
+++ sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlValueMap.java Mon May 18 19:12:17 2015
@@ -0,0 +1,134 @@
+/*
+ * 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.sling.nosql.generic.resource.impl;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.jackrabbit.util.ISO8601;
+import org.apache.sling.api.resource.ModifiableValueMap;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceUtil;
+import org.apache.sling.api.wrappers.ValueMapDecorator;
+
+class NoSqlValueMap extends ValueMapDecorator implements ModifiableValueMap {
+
+ private final Resource resource;
+
+ public NoSqlValueMap(Resource resource) {
+ this(resource, new HashMap<String, Object>());
+ }
+
+ public NoSqlValueMap(Resource resource, Map<String,Object> map) {
+ super(convertForWrite(map));
+ this.resource = resource;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public <T> T get(String name, Class<T> type) {
+
+ // check for deep path access
+ int slashPos = name.lastIndexOf('/');
+ if (slashPos >= 0) {
+ String resourcePath = "./" + name.substring(0, slashPos);
+ String propertyName = name.substring(slashPos + 1);
+ Resource childResource = resource.getChild(resourcePath);
+ if (childResource!=null) {
+ return ResourceUtil.getValueMap(childResource).get(propertyName, type);
+ }
+ }
+
+ if (type == Calendar.class) {
+ // Support conversion of String to Calendar if value conforms to ISO8601 date format
+ Object value = get(name);
+ if (value instanceof String) {
+ return (T)ISO8601.parse((String)value);
+ }
+ }
+ else if (type == Date.class) {
+ // Support conversion from Calendar to Date
+ Calendar calendar = get(name, Calendar.class);
+ if (calendar != null) {
+ return (T)calendar.getTime();
+ }
+ else {
+ return null;
+ }
+ }
+ else if (type == InputStream.class) {
+ // Support conversion from byte array to InputStream
+ byte[] data = get(name, byte[].class);
+ if (data != null) {
+ return (T)new ByteArrayInputStream(data);
+ }
+ else {
+ return null;
+ }
+ }
+ else if ( type == null ) {
+ return (T) super.get(name);
+ }
+ return super.get(name, type);
+ }
+
+ @Override
+ public Object put(String key, Object value) {
+ return super.put(key, convertForWrite(value));
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public void putAll(Map<? extends String, ?> map) {
+ super.putAll((Map<? extends String, ?>)convertForWrite(map));
+ }
+
+ private static Object convertForWrite(Object value) {
+ if (value instanceof Date) {
+ // Store Date values as Calendar values
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime((Date)value);
+ value = calendar;
+ }
+ else if (value instanceof InputStream) {
+ // Store InputStream values as byte array
+ try {
+ value = IOUtils.toByteArray((InputStream)value);
+ } catch (IOException ex) {
+ throw new RuntimeException("Unable to convert input stream to byte array.");
+ }
+ }
+ return value;
+ }
+
+ private static Map<String, Object> convertForWrite(Map<String, Object> map) {
+ Map<String,Object> newMap = new HashMap<String, Object>();
+ for (Map.Entry<String, Object> entry : map.entrySet()) {
+ newMap.put(entry.getKey(), convertForWrite(entry.getValue()));
+ }
+ return newMap;
+ }
+
+}
Propchange: sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlValueMap.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlValueMap.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Mon May 18 19:12:17 2015
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author
Propchange: sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlValueMap.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/resource/NoSqlResourceProviderTest.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/resource/NoSqlResourceProviderTest.java?rev=1680074&r1=1680073&r2=1680074&view=diff
==============================================================================
--- sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/resource/NoSqlResourceProviderTest.java (original)
+++ sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/resource/NoSqlResourceProviderTest.java Mon May 18 19:12:17 2015
@@ -197,18 +197,10 @@ public class NoSqlResourceProviderTest {
public void testBinaryData() throws IOException {
Resource resource1 = this.resourceResolver.getResource(getTestRootResource().getPath() + "/node1");
- Resource binaryPropResource = resource1.getChild("binaryProp");
- InputStream is = binaryPropResource.adaptTo(InputStream.class);
+ InputStream is = ResourceUtil.getValueMap(resource1).get("binaryProp", InputStream.class);
byte[] dataFromResource = IOUtils.toByteArray(is);
is.close();
assertArrayEquals(BINARY_VALUE, dataFromResource);
-
- // read second time to ensure not the original input stream was returned
- // and this time using another syntax
- InputStream is2 = ResourceUtil.getValueMap(resource1).get("binaryProp", InputStream.class);
- byte[] dataFromResource2 = IOUtils.toByteArray(is2);
- is2.close();
- assertArrayEquals(BINARY_VALUE, dataFromResource2);
}
@Test