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 ju...@apache.org on 2013/02/08 21:23:47 UTC
svn commit: r1444216 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment:
JcrImporter.java SegmentWriter.java
Author: jukka
Date: Fri Feb 8 20:23:47 2013
New Revision: 1444216
URL: http://svn.apache.org/r1444216
Log:
OAK-593: Segment-based MK
Simple JCR importer
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/JcrImporter.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/JcrImporter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/JcrImporter.java?rev=1444216&r1=1444215&r2=1444216&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/JcrImporter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/JcrImporter.java Fri Feb 8 20:23:47 2013
@@ -16,23 +16,18 @@
*/
package org.apache.jackrabbit.oak.plugins.segment;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.Arrays;
-import javax.jcr.Binary;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.Property;
import javax.jcr.PropertyIterator;
-import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
-import javax.jcr.Value;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
+import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeBuilder;
+import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeState;
+import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
+import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
public class JcrImporter {
@@ -42,19 +37,32 @@ public class JcrImporter {
this.writer = writer;
}
- public RecordId writeValue(Value value) throws RepositoryException {
- if (value.getType() == PropertyType.BINARY) {
- Binary binary = value.getBinary();
- try {
- return writer.writeStream(binary.getStream());
- } catch (IOException e) {
- throw new RepositoryException(
- "Can not read a binary stream from the repository", e);
- } finally {
- binary.dispose();
+ public RecordId writeNode(Node node) throws RepositoryException {
+ NodeBuilder builder =
+ new MemoryNodeBuilder(MemoryNodeState.EMPTY_NODE);
+ buildNode(builder, node);
+ return writer.writeNode(builder.getNodeState());
+ }
+
+ private void buildNode(NodeBuilder builder, Node node)
+ throws RepositoryException {
+ PropertyIterator properties = node.getProperties();
+ while (properties.hasNext()) {
+ Property property = properties.nextProperty();
+ if (property.isMultiple()) {
+ builder.setProperty(PropertyStates.createProperty(
+ property.getName(),
+ Arrays.asList(property.getValues())));
+ } else {
+ builder.setProperty(PropertyStates.createProperty(
+ property.getName(), property.getValue()));
}
- } else {
- return writer.writeString(value.getString());
+ }
+
+ NodeIterator childNodes = node.getNodes();
+ while (childNodes.hasNext()) {
+ Node childNode = childNodes.nextNode();
+ buildNode(builder.child(childNode.getName()), childNode);
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java?rev=1444216&r1=1444215&r2=1444216&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java Fri Feb 8 20:23:47 2013
@@ -171,8 +171,25 @@ public class SegmentWriter {
if (diff == 0) {
diff = key.compareTo(that.key);
}
+ if (diff == 0) {
+ diff = value.compareTo(that.value);
+ }
return diff;
}
+
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ } else if (object instanceof MapEntry) {
+ MapEntry that = (MapEntry) object;
+ return hashCode == that.hashCode
+ && key.equals(that.key)
+ && value.equals(that.value);
+ } else {
+ return false;
+ }
+ }
+
}
private synchronized RecordId writeMapBucket(