You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by md...@apache.org on 2011/11/03 17:43:46 UTC
svn commit: r1197212 - in
/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel:
ItemInfos.java RepositoryServiceImpl.java Values.java
Author: mduerig
Date: Thu Nov 3 16:43:45 2011
New Revision: 1197212
URL: http://svn.apache.org/viewvc?rev=1197212&view=rev
Log:
Microkernel based Jackrabbit prototype (WIP): refactor Values.java to better match new JSON parser
Modified:
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/ItemInfos.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/RepositoryServiceImpl.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/Values.java
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/ItemInfos.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/ItemInfos.java?rev=1197212&r1=1197211&r2=1197212&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/ItemInfos.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/ItemInfos.java Thu Nov 3 16:43:45 2011
@@ -139,13 +139,12 @@ public final class ItemInfos {
@Override
public void atom(Token key, Token value) {
isEmpty = false;
- Object val = val(value);
try {
if (Paths.nameToString(JCR_PRIMARYTYPE).equals(key.text())) {
- nodeInfoBuilder.setPrimaryType(Values.objectToValue(val).getName());
+ nodeInfoBuilder.setPrimaryType(Values.tokenToValue(value).getName());
}
else if (Paths.nameToString(JCR_UUID).equals(key.text())) {
- nodeInfoBuilder.setUUID(Values.objectToValue(val).getString());
+ nodeInfoBuilder.setUUID(Values.tokenToValue(value).getString());
}
else if (key.text().startsWith(":")) { // ignore other internal values
return;
@@ -154,7 +153,7 @@ public final class ItemInfos {
// Single valued property
nodeInfoBuilder.createPropertyInfo()
.setName(Paths.stringToName(key.text()))
- .addValue(Values.objectToValue(val, binaryHandler))
+ .addValue(Values.tokenToValue(value, binaryHandler))
.build();
}
catch (RepositoryException e) {
@@ -217,11 +216,10 @@ public final class ItemInfos {
public void atom(Token key, Token value) {
try {
hasElements = true;
- Object val = val(value);
if (Paths.nameToString(JCR_MIXINTYPES).equals(arrayKey)) {
- nodeInfoBuilder.addMixin(Values.objectToValue(val).getName());
+ nodeInfoBuilder.addMixin(Values.tokenToValue(value).getName());
}
- propertyInfoBuilder.addValue(Values.objectToValue(val, binaryHandler));
+ propertyInfoBuilder.addValue(Values.tokenToValue(value, binaryHandler));
}
catch (RepositoryException e) {
throw new WrappedRepositoryException(e);
@@ -233,33 +231,5 @@ public final class ItemInfos {
}
}
- private static Object val(Token value) { // fixme cleanup: refactor Values.objectToValue to match
- Object val;
- switch (value.type()) {
- case TRUE:
- val = Boolean.TRUE;
- break;
- case FALSE:
- val = Boolean.FALSE;
- break;
- case NULL:
- val = null;
- break;
- case STRING:
- val = value.text();
- break;
- case NUMBER:
- try {
- val = Long.parseLong(value.text());
- }
- catch (NumberFormatException e) {
- val = Double.parseDouble(value.text());
- }
- break;
- default:
- val = null;
- }
- return val;
- }
}
}
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/RepositoryServiceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/RepositoryServiceImpl.java?rev=1197212&r1=1197211&r2=1197212&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/RepositoryServiceImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/RepositoryServiceImpl.java Thu Nov 3 16:43:45 2011
@@ -144,16 +144,16 @@ public class RepositoryServiceImpl exten
QValue[] TRUE = new QValue[]{Values.TRUE};
try {
- put(SPEC_NAME_DESC, new QValue[]{Values.objectToValue("Content Repository for Java Technology API")});
- put(SPEC_VERSION_DESC, new QValue[]{Values.objectToValue("2.0")});
- put(REP_NAME_DESC, new QValue[]{Values.objectToValue("Jackrabbit 3 Microkernel prototype")});
- put(REP_VENDOR_URL_DESC, new QValue[]{Values.objectToValue("http://www.apache.org/")});
- put(REP_VENDOR_DESC, new QValue[]{Values.objectToValue("Apache Software Foundation")});
+ put(SPEC_NAME_DESC, new QValue[]{Values.stringToValue("Content Repository for Java Technology API")});
+ put(SPEC_VERSION_DESC, new QValue[]{Values.stringToValue("2.0")});
+ put(REP_NAME_DESC, new QValue[]{Values.stringToValue("Jackrabbit 3 Microkernel prototype")});
+ put(REP_VENDOR_URL_DESC, new QValue[]{Values.stringToValue("http://www.apache.org/")});
+ put(REP_VENDOR_DESC, new QValue[]{Values.stringToValue("Apache Software Foundation")});
put(NODE_TYPE_MANAGEMENT_SAME_NAME_SIBLINGS_SUPPORTED, FALSE);
put(OPTION_WORKSPACE_MANAGEMENT_SUPPORTED, TRUE);
put(OPTION_OBSERVATION_SUPPORTED, TRUE);
put(WRITE_SUPPORTED, TRUE);
- put(IDENTIFIER_STABILITY, new QValue[] {Values.objectToValue(IDENTIFIER_STABILITY_METHOD_DURATION)});
+ put(IDENTIFIER_STABILITY, new QValue[] {Values.stringToValue(IDENTIFIER_STABILITY_METHOD_DURATION)});
put(OPTION_UPDATE_MIXIN_NODE_TYPES_SUPPORTED, TRUE);
put(OPTION_NODE_TYPE_MANAGEMENT_SUPPORTED, TRUE);
put(NODE_TYPE_MANAGEMENT_AUTOCREATED_DEFINITIONS_SUPPORTED, TRUE);
@@ -188,7 +188,7 @@ public class RepositoryServiceImpl exten
return Arrays.map(strings, new QValue[strings.length], new Function1<String, QValue>(){
@Override
public QValue apply(String s) throws Exception {
- return Values.objectToValue(s);
+ return Values.stringToValue(s);
}
});
}
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/Values.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/Values.java?rev=1197212&r1=1197211&r2=1197212&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/Values.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/Values.java Thu Nov 3 16:43:45 2011
@@ -26,8 +26,10 @@ import org.apache.jackrabbit.spi.QValue;
import org.apache.jackrabbit.spi.QValueFactory;
import org.apache.jackrabbit.spi.SessionInfo;
import org.apache.jackrabbit.spi.commons.nodetype.NodeTypeStorage;
-import org.apache.jackrabbit.spi.commons.value.QValueFactoryImpl;
import org.apache.jackrabbit.spi.commons.util.Function1;
+import org.apache.jackrabbit.spi.commons.value.QValueFactoryImpl;
+import org.apache.jackrabbit.spi2microkernel.json.Token;
+import org.apache.jackrabbit.spi2microkernel.json.Token.Type;
import org.apache.jackrabbit.util.Base64;
import org.apache.jackrabbit.util.ISO8601;
import org.slf4j.Logger;
@@ -38,6 +40,7 @@ import javax.jcr.RepositoryException;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.StringWriter;
+import java.math.BigDecimal;
import java.util.Calendar;
import java.util.HashMap;
import java.util.HashSet;
@@ -84,67 +87,38 @@ public final class Values {
private static final Map<Object, ValueFactory> VALUE_FACTORIES = new HashMap<Object, ValueFactory>() {{
ValueFactory valueFactory = new ValueFactory() {
@Override
- public QValue create(Object value) throws RepositoryException {
- return create((String) value);
- }
-
- @Override
public QValue create(String value) throws RepositoryException {
return FACTORY.create(value, STRING);
}
};
- put(String.class, valueFactory);
put(TYPES[STRING], valueFactory);
valueFactory = new ValueFactory() {
@Override
- public QValue create(Object value) throws RepositoryException {
- return FACTORY.create((Long) value);
- }
-
- @Override
public QValue create(String value) throws RepositoryException {
return FACTORY.create(value, LONG);
}
};
- put(Long.class, valueFactory);
put(TYPES[LONG], valueFactory);
valueFactory = new ValueFactory() {
@Override
- public QValue create(Object value) throws RepositoryException {
- return FACTORY.create((Double) value);
- }
-
- @Override
public QValue create(String value) throws RepositoryException {
return FACTORY.create(value, DOUBLE);
}
};
- put(Double.class, valueFactory);
put(TYPES[DOUBLE], valueFactory);
valueFactory = new ValueFactory() {
@Override
- public QValue create(Object value) throws RepositoryException {
- return FACTORY.create((Boolean) value);
- }
-
- @Override
public QValue create(String value) throws RepositoryException {
return FACTORY.create(value, BOOLEAN);
}
};
- put(Boolean.class, valueFactory);
put(TYPES[BOOLEAN], valueFactory);
valueFactory = new ValueFactory() {
@Override
- public QValue create(Object value) throws RepositoryException {
- throw new RepositoryException("Invalid value " + value);
- }
-
- @Override
public QValue create(String value) throws RepositoryException {
return FACTORY.create(value, DECIMAL);
}
@@ -153,11 +127,6 @@ public final class Values {
valueFactory = new ValueFactory() {
@Override
- public QValue create(Object value) throws RepositoryException {
- throw new RepositoryException("Invalid value " + value);
- }
-
- @Override
public QValue create(String value) throws RepositoryException {
return FACTORY.create(value, DATE);
}
@@ -166,11 +135,6 @@ public final class Values {
valueFactory = new ValueFactory() {
@Override
- public QValue create(Object value) throws RepositoryException {
- throw new RepositoryException("Invalid value " + value);
- }
-
- @Override
public QValue create(String value) throws RepositoryException {
return FACTORY.create(value, URI);
}
@@ -179,11 +143,6 @@ public final class Values {
valueFactory = new ValueFactory() {
@Override
- public QValue create(Object value) throws RepositoryException {
- throw new RepositoryException("Invalid value " + value);
- }
-
- @Override
public QValue create(String value) throws RepositoryException {
return FACTORY.create(Paths.stringToName(value));
}
@@ -192,11 +151,6 @@ public final class Values {
valueFactory = new ValueFactory() {
@Override
- public QValue create(Object value) throws RepositoryException {
- throw new RepositoryException("Invalid value " + value);
- }
-
- @Override
public QValue create(String value) throws RepositoryException {
return FACTORY.create(Paths.stringToPath(value));
}
@@ -205,11 +159,6 @@ public final class Values {
valueFactory = new ValueFactory() {
@Override
- public QValue create(Object value) throws RepositoryException {
- throw new RepositoryException("Invalid value " + value);
- }
-
- @Override
public QValue create(String value) throws RepositoryException {
try {
ByteArrayOutputStream os = new ByteArrayOutputStream();
@@ -225,11 +174,6 @@ public final class Values {
valueFactory = new ValueFactory() {
@Override
- public QValue create(Object value) throws RepositoryException {
- throw new RepositoryException("Invalid value " + value);
- }
-
- @Override
public QValue create(String value) throws RepositoryException {
return FACTORY.create(value, REFERENCE);
}
@@ -238,11 +182,6 @@ public final class Values {
valueFactory = new ValueFactory() {
@Override
- public QValue create(Object value) throws RepositoryException {
- throw new RepositoryException("Invalid value " + value);
- }
-
- @Override
public QValue create(String value) throws RepositoryException {
return FACTORY.create(value, WEAKREFERENCE);
}
@@ -252,22 +191,23 @@ public final class Values {
private Values() {}
- public static QValue objectToValue(Object value) throws RepositoryException {
- return objectToValue(value, null);
+ public static QValue tokenToValue(Token token) throws RepositoryException {
+ return tokenToValue(token, null);
}
- public static QValue objectToValue(Object value, Function1<String, QValue> binaryHandler) throws RepositoryException {
+ public static QValue tokenToValue(Token token, Function1<String, QValue> binaryHandler)
+ throws RepositoryException {
+
// Type encoded value
- if (value instanceof String) {
- String val = (String) value;
+ if (token.type() == Type.STRING) {
+ String val = token.text();
if (val.length() >= 2 && val.charAt(1) == ':') {
- ValueFactory valueFactory;
char type = val.charAt(0);
if (type == toHex(BLOB_REF_TYPE)) {
try {
if (binaryHandler == null) {
- IllegalArgumentException e = new IllegalArgumentException("Binary value found but " +
- "binaryHandler is null");
+ IllegalArgumentException e = new IllegalArgumentException(
+ "Binary value found but binaryHandler is null");
log.error(e.getMessage(), e);
throw e;
}
@@ -283,32 +223,53 @@ public final class Values {
}
}
else {
- valueFactory = VALUE_FACTORIES.get(type);
- }
+ ValueFactory valueFactory = VALUE_FACTORIES.get(type);
+ if (valueFactory == null) {
+ RepositoryException e = new RepositoryException("Cannot convert to value: " + token);
+ log.error(e.getMessage(), e);
+ throw e;
+ }
- if (valueFactory == null) {
- RepositoryException e = new RepositoryException("Not supported value " + value);
- log.error(e.getMessage(), e);
- throw e;
- }
- else {
return valueFactory.create(val.substring(2));
}
}
}
// Non type encoded value
- ValueFactory valueFactory = VALUE_FACTORIES.get(value.getClass());
- if (valueFactory == null) {
- RepositoryException e = new RepositoryException("Not supported value " + value);
- log.error(e.getMessage(), e);
- throw e;
- }
- else {
- return valueFactory.create(value);
+ switch (token.type()) {
+ case TRUE: return FACTORY.create(true);
+ case FALSE: return FACTORY.create(false);
+ case STRING: return FACTORY.create(token.text(), STRING);
+ case NUMBER:
+ try {
+ return FACTORY.create(Long.parseLong(token.text()));
+ }
+ catch (NumberFormatException e0) {
+ try {
+ return FACTORY.create(Double.parseDouble(token.text()));
+ }
+ catch (NumberFormatException e1) {
+ try {
+ return FACTORY.create(new BigDecimal(token.text()));
+ }
+ catch (RepositoryException e2) {
+ RepositoryException e = new RepositoryException("Cannot convert to value: " + token, e2);
+ log.error(e.getMessage(), e);
+ throw e;
+ }
+ }
+ }
+ default:
+ RepositoryException e = new RepositoryException("Cannot convert to value: " + token);
+ log.error(e.getMessage(), e);
+ throw e;
}
}
+ public static QValue stringToValue(String string) throws RepositoryException {
+ return FACTORY.create(string, STRING);
+ }
+
public static QValue pathToValue(Path path) throws RepositoryException {
return FACTORY.create(path);
}
@@ -498,7 +459,6 @@ public final class Values {
}
private interface ValueFactory {
- QValue create(Object value) throws RepositoryException;
QValue create(String value) throws RepositoryException;
}
}