You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2012/10/05 11:32:33 UTC
svn commit: r1394421 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/JsopDiff.java
oak-http/src/main/java/org/apache/jackrabbit/oak/http/JsonRepresentation.java
Author: mduerig
Date: Fri Oct 5 09:32:33 2012
New Revision: 1394421
URL: http://svn.apache.org/viewvc?rev=1394421&view=rev
Log:
OAK-350: Unify PropertyState and CoreValue
- Replace CoreValue.getString with PropertyState.getValue(Type)
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/JsopDiff.java
jackrabbit/oak/trunk/oak-http/src/main/java/org/apache/jackrabbit/oak/http/JsonRepresentation.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/JsopDiff.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/JsopDiff.java?rev=1394421&r1=1394420&r2=1394421&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/JsopDiff.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/JsopDiff.java Fri Oct 5 09:32:33 2012
@@ -16,18 +16,29 @@
*/
package org.apache.jackrabbit.oak.kernel;
+import java.io.IOException;
+import java.io.InputStream;
+
import javax.jcr.PropertyType;
import org.apache.jackrabbit.mk.api.MicroKernel;
import org.apache.jackrabbit.mk.json.JsopBuilder;
-import org.apache.jackrabbit.oak.api.CoreValue;
+import org.apache.jackrabbit.oak.api.Blob;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.jackrabbit.oak.spi.state.NodeStateDiff;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.apache.jackrabbit.oak.api.Type.BINARIES;
+import static org.apache.jackrabbit.oak.api.Type.BOOLEANS;
+import static org.apache.jackrabbit.oak.api.Type.LONGS;
+import static org.apache.jackrabbit.oak.api.Type.STRINGS;
class JsopDiff implements NodeStateDiff {
+ private static final Logger log = LoggerFactory.getLogger(JsopDiff.class);
private final MicroKernel kernel;
@@ -120,34 +131,51 @@ class JsopDiff implements NodeStateDiff
private void toJson(PropertyState propertyState, JsopBuilder jsop) {
if (propertyState.isArray()) {
jsop.array();
- for (CoreValue value : propertyState.getValues()) {
- toJson(value, jsop);
- }
+ toJsonValue(propertyState, jsop);
jsop.endArray();
} else {
- toJson(propertyState.getValue(), jsop);
+ toJsonValue(propertyState, jsop);
}
}
- private void toJson(CoreValue value, JsopBuilder jsop) {
- int type = value.getType();
- if (type == PropertyType.BOOLEAN) {
- jsop.value(value.getBoolean());
- } else if (type == PropertyType.LONG) {
- jsop.value(value.getLong());
- } else {
- String string;
- if (type == PropertyType.BINARY
- && !(value instanceof BinaryValue)) {
- string = kernel.write(value.getNewStream());
- } else {
- string = value.getString();
- }
- if (type != PropertyType.STRING
- || CoreValueMapper.startsWithHint(string)) {
- string = CoreValueMapper.getHintForType(type) + ':' + string;
- }
- jsop.value(string);
+ private void toJsonValue(PropertyState property, JsopBuilder jsop) {
+ int type = property.getType().tag();
+ switch (type) {
+ case PropertyType.BOOLEAN:
+ for (boolean value : property.getValue(BOOLEANS)) {
+ jsop.value(value);
+ }
+ break;
+ case PropertyType.LONG:
+ for (long value : property.getValue(LONGS)) {
+ jsop.value(value);
+ }
+ break;
+ case PropertyType.BINARY:
+ for (Blob value : property.getValue(BINARIES)) {
+ InputStream is = value.getNewStream();
+ String binId = CoreValueMapper.getHintForType(type) + ':' + kernel.write(is);
+ close(is);
+ jsop.value(binId);
+ }
+ break;
+ default:
+ for (String value : property.getValue(STRINGS)) {
+ if (PropertyType.STRING != type || CoreValueMapper.startsWithHint(value)) {
+ value = CoreValueMapper.getHintForType(type) + ':' + value;
+ }
+ jsop.value(value);
+ }
+ break;
+ }
+ }
+
+ private static void close(InputStream stream) {
+ try {
+ stream.close();
+ }
+ catch (IOException e) {
+ log.warn("Error closing stream", e);
}
}
}
\ No newline at end of file
Modified: jackrabbit/oak/trunk/oak-http/src/main/java/org/apache/jackrabbit/oak/http/JsonRepresentation.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-http/src/main/java/org/apache/jackrabbit/oak/http/JsonRepresentation.java?rev=1394421&r1=1394420&r2=1394421&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-http/src/main/java/org/apache/jackrabbit/oak/http/JsonRepresentation.java (original)
+++ jackrabbit/oak/trunk/oak-http/src/main/java/org/apache/jackrabbit/oak/http/JsonRepresentation.java Fri Oct 5 09:32:33 2012
@@ -21,6 +21,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
+import javax.jcr.PropertyType;
import javax.servlet.http.HttpServletResponse;
import com.fasterxml.jackson.core.JsonFactory;
@@ -28,18 +29,12 @@ import com.fasterxml.jackson.core.JsonGe
import org.apache.jackrabbit.oak.api.Blob;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Tree;
-import org.apache.jackrabbit.oak.api.Type;
import org.apache.tika.mime.MediaType;
import static org.apache.jackrabbit.oak.api.Type.BINARIES;
-import static org.apache.jackrabbit.oak.api.Type.BINARY;
-import static org.apache.jackrabbit.oak.api.Type.BOOLEAN;
import static org.apache.jackrabbit.oak.api.Type.BOOLEANS;
-import static org.apache.jackrabbit.oak.api.Type.DECIMAL;
import static org.apache.jackrabbit.oak.api.Type.DECIMALS;
-import static org.apache.jackrabbit.oak.api.Type.DOUBLE;
import static org.apache.jackrabbit.oak.api.Type.DOUBLES;
-import static org.apache.jackrabbit.oak.api.Type.LONG;
import static org.apache.jackrabbit.oak.api.Type.LONGS;
import static org.apache.jackrabbit.oak.api.Type.STRINGS;
@@ -110,24 +105,24 @@ class JsonRepresentation implements Repr
private static void renderValue(PropertyState property, JsonGenerator generator)
throws IOException {
// TODO: Type info?
- Type<?> type = property.getType();
- if (BOOLEAN.equals(type)) {
+ int type = property.getType().tag();
+ if (type == PropertyType.BOOLEAN) {
for (boolean value : property.getValue(BOOLEANS)) {
generator.writeBoolean(value);
}
- } else if (DECIMAL.equals(type)) {
+ } else if (type == PropertyType.DECIMAL) {
for (BigDecimal value : property.getValue(DECIMALS)) {
generator.writeNumber(value);
}
- } else if (DOUBLE.equals(type)) {
+ } else if (type == PropertyType.DOUBLE) {
for (double value : property.getValue(DOUBLES)) {
generator.writeNumber(value);
}
- } else if (LONG.equals(type)) {
+ } else if (type == PropertyType.LONG) {
for (long value : property.getValue(LONGS)) {
generator.writeNumber(value);
}
- } else if (BINARY.equals(type)) {
+ } else if (type == PropertyType.BINARY) {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
for (Blob value : property.getValue(BINARIES)) {
InputStream stream = value.getNewStream();