Index: src/main/java/org/apache/jackrabbit/mongomk/BlobStoreMongo.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/BlobStoreMongo.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/BlobStoreMongo.java (working copy) @@ -1,56 +0,0 @@ -/* - * 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.jackrabbit.mongomk; - -import java.io.InputStream; - -import org.apache.jackrabbit.mongomk.api.BlobStore; -import org.apache.jackrabbit.mongomk.api.command.Command; -import org.apache.jackrabbit.mongomk.api.command.CommandExecutor; -import org.apache.jackrabbit.mongomk.command.GetBlobLengthCommandMongo; -import org.apache.jackrabbit.mongomk.command.ReadBlobCommandMongo; -import org.apache.jackrabbit.mongomk.command.WriteBlobCommandMongo; -import org.apache.jackrabbit.mongomk.impl.command.CommandExecutorImpl; - -public class BlobStoreMongo implements BlobStore { - - private final MongoConnection mongoConnection; - private final CommandExecutor commandExecutor; - - public BlobStoreMongo(MongoConnection mongoConnection) { - this.mongoConnection = mongoConnection; - this.commandExecutor = new CommandExecutorImpl(); - } - - @Override - public long getBlobLength(String blobId) throws Exception { - Command command = new GetBlobLengthCommandMongo(mongoConnection, blobId); - return commandExecutor.execute(command); - } - - @Override - public int readBlob(String blobId, long blobOffset, byte[] buffer, int bufferOffset, int length) throws Exception { - Command command = new ReadBlobCommandMongo(mongoConnection, blobId, blobOffset, buffer, bufferOffset, length); - return commandExecutor.execute(command); - } - - @Override - public String writeBlob(InputStream is) throws Exception { - Command command = new WriteBlobCommandMongo(mongoConnection, is); - return commandExecutor.execute(command); - } -} Index: src/main/java/org/apache/jackrabbit/mongomk/MongoConnection.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/MongoConnection.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/MongoConnection.java (working copy) @@ -1,107 +0,0 @@ -/* - * 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.jackrabbit.mongomk; - -import org.apache.jackrabbit.mongomk.model.CommitMongo; -import org.apache.jackrabbit.mongomk.model.HeadMongo; -import org.apache.jackrabbit.mongomk.model.NodeMongo; - -import com.mongodb.DB; -import com.mongodb.DBCollection; -import com.mongodb.Mongo; -import com.mongodb.gridfs.GridFS; - -/** - * The {@code MongoConnection} contains connection properties for the {@code MongoDB}. - * - * @author l = new ArrayList(); - t.read('['); - do { - l.add(t.readString()); - } while (t.matches(',')); - t.read(']'); - return l.toArray(new String[l.size()]); - } - - NameFilter getChildNodeFilter() { - return nodeFilter; - } - - NameFilter getPropertyFilter() { - return propFilter; - } - - boolean includeNode(String name) { - return nodeFilter == null || nodeFilter.matches(name); - } - - public boolean includeProperty(String name) { - return propFilter == null || propFilter.matches(name); - } -} \ No newline at end of file Index: src/main/java/org/apache/jackrabbit/mongomk/NodeStoreMongo.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/NodeStoreMongo.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/NodeStoreMongo.java (working copy) @@ -1,206 +0,0 @@ -/* - * 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.jackrabbit.mongomk; - -import java.util.List; - -import org.apache.jackrabbit.mk.json.JsopBuilder; -import org.apache.jackrabbit.mongomk.api.NodeStore; -import org.apache.jackrabbit.mongomk.api.command.Command; -import org.apache.jackrabbit.mongomk.api.command.CommandExecutor; -import org.apache.jackrabbit.mongomk.api.model.Commit; -import org.apache.jackrabbit.mongomk.api.model.Node; -import org.apache.jackrabbit.mongomk.command.CommitCommandMongo; -import org.apache.jackrabbit.mongomk.command.GetHeadRevisionCommandMongo; -import org.apache.jackrabbit.mongomk.command.GetNodesCommandMongo; -import org.apache.jackrabbit.mongomk.command.NodeExistsCommandMongo; -import org.apache.jackrabbit.mongomk.impl.command.CommandExecutorImpl; -import org.apache.jackrabbit.mongomk.model.CommitMongo; -import org.apache.jackrabbit.mongomk.model.HeadMongo; -import org.apache.jackrabbit.mongomk.query.FetchValidCommitsQuery; -import org.apache.jackrabbit.mongomk.util.MongoUtil; - -import com.mongodb.DBCollection; - -/** - * Implementation of {@link NodeStore} for the {@code MongoDB}. - * - * @author commits = new FetchValidCommitsQuery(mongoConnection, - fromRevisionId, toRevisionId).execute(); - - CommitMongo toCommit = getCommit(commits, toRevisionId); - - CommitMongo fromCommit; - if (toRevisionId.equals(fromRevisionId)) { - fromCommit = toCommit; - } else { - fromCommit = getCommit(commits, fromRevisionId); - if (fromCommit == null || (fromCommit.getTimestamp() > toCommit.getTimestamp())) { - // negative range, return empty journal - return "[]"; - } - } - - JsopBuilder commitBuff = new JsopBuilder().array(); - // iterate over commits in chronological order, - // starting with oldest commit - for (int i = commits.size() - 1; i >= 0; i--) { - CommitMongo commit = commits.get(i); - //if (commit.getParentId() == null) { - // continue; - //} - String diff = commit.getDiff(); - // FIXME Check that filter really works. - if (!filtered || commit.getAffectedPaths().contains(path)) { - commitBuff.object() - .key("id").value(String.valueOf(commit.getRevisionId())) - .key("ts").value(commit.getTimestamp()) - .key("msg").value(commit.getMessage()) - .key("changes").value(diff).endObject(); - } - } - return commitBuff.endArray().toString(); - } - - private CommitMongo getCommit(List commits, String toRevisionId) { - for (CommitMongo commit : commits) { - if (String.valueOf(commit.getRevisionId()).equals(toRevisionId)) { - return commit; - } - } - return null; - } - - @Override - public String getRevisionHistory(long since, int maxEntries, String path) { - path = (path == null || "".equals(path)) ? "/" : path; - boolean filtered = !"/".equals(path); - maxEntries = maxEntries < 0 ? Integer.MAX_VALUE : maxEntries; - - List history = new FetchValidCommitsQuery(mongoConnection, maxEntries).execute(); - JsopBuilder buff = new JsopBuilder().array(); - for (int i = history.size() - 1; i >= 0; i--) { - CommitMongo commit = history.get(i); - if (commit.getTimestamp() >= since) { - // FIXME [Mete] Check that filter really works. - if (!filtered || commit.getAffectedPaths().contains(path)) { - buff.object() - .key("id").value(String.valueOf(commit.getRevisionId())) - .key("ts").value(commit.getTimestamp()) - .key("msg").value(commit.getMessage()) - .endObject(); - } - } - } - - return buff.endArray().toString(); - } - - @Override - public String waitForCommit(String oldHeadRevisionId, long timeout) throws InterruptedException { - long startTimestamp = System.currentTimeMillis(); - long initialHeadRevisionId = getHeadRevisionId(); - - if (timeout <= 0) { - return String.valueOf(initialHeadRevisionId); - } - - long oldHeadRevision = MongoUtil.toMongoRepresentation(oldHeadRevisionId); - if (oldHeadRevision < initialHeadRevisionId) { - return String.valueOf(initialHeadRevisionId); - } - - long waitForCommitPollMillis = Math.min(WAIT_FOR_COMMIT_POLL_MILLIS, timeout); - while (true) { - long headRevisionId = getHeadRevisionId(); - long now = System.currentTimeMillis(); - if (headRevisionId != initialHeadRevisionId || now - startTimestamp >= timeout) { - return String.valueOf(headRevisionId); - } - Thread.sleep(waitForCommitPollMillis); - } - } - - private long getHeadRevisionId() { - DBCollection headCollection = mongoConnection.getHeadCollection(); - HeadMongo headMongo = (HeadMongo)headCollection.findOne(); - long headRevisionId = headMongo.getHeadRevisionId(); - return headRevisionId; - } -} Index: src/main/java/org/apache/jackrabbit/mongomk/impl/BlobStoreMongo.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/impl/BlobStoreMongo.java (revision 0) +++ src/main/java/org/apache/jackrabbit/mongomk/impl/BlobStoreMongo.java (working copy) @@ -0,0 +1,56 @@ +/* + * 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.jackrabbit.mongomk.impl; + +import java.io.InputStream; + +import org.apache.jackrabbit.mongomk.api.BlobStore; +import org.apache.jackrabbit.mongomk.api.command.Command; +import org.apache.jackrabbit.mongomk.api.command.CommandExecutor; +import org.apache.jackrabbit.mongomk.command.GetBlobLengthCommandMongo; +import org.apache.jackrabbit.mongomk.command.ReadBlobCommandMongo; +import org.apache.jackrabbit.mongomk.command.WriteBlobCommandMongo; +import org.apache.jackrabbit.mongomk.impl.command.CommandExecutorImpl; + +public class BlobStoreMongo implements BlobStore { + + private final MongoConnection mongoConnection; + private final CommandExecutor commandExecutor; + + public BlobStoreMongo(MongoConnection mongoConnection) { + this.mongoConnection = mongoConnection; + this.commandExecutor = new CommandExecutorImpl(); + } + + @Override + public long getBlobLength(String blobId) throws Exception { + Command command = new GetBlobLengthCommandMongo(mongoConnection, blobId); + return commandExecutor.execute(command); + } + + @Override + public int readBlob(String blobId, long blobOffset, byte[] buffer, int bufferOffset, int length) throws Exception { + Command command = new ReadBlobCommandMongo(mongoConnection, blobId, blobOffset, buffer, bufferOffset, length); + return commandExecutor.execute(command); + } + + @Override + public String writeBlob(InputStream is) throws Exception { + Command command = new WriteBlobCommandMongo(mongoConnection, is); + return commandExecutor.execute(command); + } +} Property changes on: src/main/java/org/apache/jackrabbit/mongomk/impl/BlobStoreMongo.java ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Index: src/main/java/org/apache/jackrabbit/mongomk/impl/MongoConnection.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/impl/MongoConnection.java (revision 0) +++ src/main/java/org/apache/jackrabbit/mongomk/impl/MongoConnection.java (working copy) @@ -0,0 +1,104 @@ +/* + * 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.jackrabbit.mongomk.impl; + +import org.apache.jackrabbit.mongomk.model.CommitMongo; +import org.apache.jackrabbit.mongomk.model.HeadMongo; +import org.apache.jackrabbit.mongomk.model.NodeMongo; + +import com.mongodb.DB; +import com.mongodb.DBCollection; +import com.mongodb.Mongo; +import com.mongodb.gridfs.GridFS; + +/** + * The {@code MongoConnection} contains connection properties for the {@code MongoDB}. + * + * @author commits = new FetchValidCommitsQuery(mongoConnection, + fromRevision, toRevision).execute(); + + CommitMongo toCommit = getCommit(commits, toRevision); + + CommitMongo fromCommit; + if (toRevision == fromRevision) { + fromCommit = toCommit; + } else { + fromCommit = getCommit(commits, fromRevision); + if (fromCommit == null || (fromCommit.getTimestamp() > toCommit.getTimestamp())) { + // negative range, return empty journal + return "[]"; + } + } + + JsopBuilder commitBuff = new JsopBuilder().array(); + // iterate over commits in chronological order, + // starting with oldest commit + for (int i = commits.size() - 1; i >= 0; i--) { + CommitMongo commit = commits.get(i); + //if (commit.getParentId() == null) { + // continue; + //} + String diff = commit.getDiff(); + // FIXME Check that filter really works. + if (!filtered || commit.getAffectedPaths().contains(path)) { + commitBuff.object() + .key("id").value(MongoUtil.fromMongoRepresentation(commit.getRevisionId())) + .key("ts").value(commit.getTimestamp()) + .key("msg").value(commit.getMessage()) + .key("changes").value(diff).endObject(); + } + } + return commitBuff.endArray().toString(); + } + + @Override + public String getRevisionHistory(long since, int maxEntries, String path) { + path = (path == null || "".equals(path)) ? "/" : path; + boolean filtered = !"/".equals(path); + maxEntries = maxEntries < 0 ? Integer.MAX_VALUE : maxEntries; + + List history = new FetchValidCommitsQuery(mongoConnection, maxEntries).execute(); + JsopBuilder buff = new JsopBuilder().array(); + for (int i = history.size() - 1; i >= 0; i--) { + CommitMongo commit = history.get(i); + if (commit.getTimestamp() >= since) { + // FIXME [Mete] Check that filter really works. + if (!filtered || commit.getAffectedPaths().contains(path)) { + buff.object() + .key("id").value(MongoUtil.fromMongoRepresentation(commit.getRevisionId())) + .key("ts").value(commit.getTimestamp()) + .key("msg").value(commit.getMessage()) + .endObject(); + } + } + } + + return buff.endArray().toString(); + } + + @Override + public String waitForCommit(String oldHeadRevisionId, long timeout) throws InterruptedException { + long startTimestamp = System.currentTimeMillis(); + long initialHeadRevisionId = getHeadRevisionId(); + + if (timeout <= 0) { + return MongoUtil.fromMongoRepresentation(initialHeadRevisionId); + } + + long oldHeadRevision = MongoUtil.toMongoRepresentation(oldHeadRevisionId); + if (oldHeadRevision < initialHeadRevisionId) { + return MongoUtil.fromMongoRepresentation(initialHeadRevisionId); + } + + long waitForCommitPollMillis = Math.min(WAIT_FOR_COMMIT_POLL_MILLIS, timeout); + while (true) { + long headRevisionId = getHeadRevisionId(); + long now = System.currentTimeMillis(); + if (headRevisionId != initialHeadRevisionId || now - startTimestamp >= timeout) { + return MongoUtil.fromMongoRepresentation(headRevisionId); + } + Thread.sleep(waitForCommitPollMillis); + } + } + + // FIXME - Consolidate with getHeadRevision + private long getHeadRevisionId() { + DBCollection headCollection = mongoConnection.getHeadCollection(); + HeadMongo headMongo = (HeadMongo)headCollection.findOne(); + long headRevisionId = headMongo.getHeadRevisionId(); + return headRevisionId; + } + + // FIXME - Move to a command. + private CommitMongo getCommit(List commits, Long revisionId) { + for (CommitMongo commit : commits) { + if (commit.getRevisionId() == revisionId) { + return commit; + } + } + return null; + } +} Property changes on: src/main/java/org/apache/jackrabbit/mongomk/impl/NodeStoreMongo.java ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Index: src/main/java/org/apache/jackrabbit/mongomk/query/AbstractQuery.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/query/AbstractQuery.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/query/AbstractQuery.java (working copy) @@ -16,7 +16,7 @@ */ package org.apache.jackrabbit.mongomk.query; -import org.apache.jackrabbit.mongomk.MongoConnection; +import org.apache.jackrabbit.mongomk.impl.MongoConnection; /** * An abstract base class for queries performed with {@code MongoDB}. Index: src/test/java/org/apache/jackrabbit/mongomk/BaseMongoTest.java =================================================================== --- src/test/java/org/apache/jackrabbit/mongomk/BaseMongoTest.java (revision 1390863) +++ src/test/java/org/apache/jackrabbit/mongomk/BaseMongoTest.java (working copy) @@ -19,7 +19,7 @@ import java.io.InputStream; import java.util.Properties; -import org.apache.jackrabbit.mongomk.MongoConnection; +import org.apache.jackrabbit.mongomk.impl.MongoConnection; import org.apache.jackrabbit.mongomk.util.MongoUtil; import org.junit.After; import org.junit.AfterClass; Index: src/main/java/org/apache/jackrabbit/mongomk/api/model/Commit.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/api/model/Commit.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/api/model/Commit.java (working copy) @@ -56,14 +56,14 @@ String getPath(); /** - * Returns the revision id of this commit if known already, else this will return {@code null}. The revision - * id will be determined only after the commit has been successfully performed. + * Returns the revision id of this commit if known already, else this will return {@code null}. + * The revision id will be determined only after the commit has been successfully performed. * - * @see #setRevisionId(String) + * @see #setRevisionId(Long) * * @return The revision id of this commit or {@code null}. */ - String getRevisionId(); + Long getRevisionId(); /** * Sets the revision id of this commit. @@ -72,7 +72,7 @@ * * @param revisionId The revision id to set. */ - void setRevisionId(String revisionId); + void setRevisionId(Long revisionId); /** Index: src/main/java/org/apache/jackrabbit/mongomk/model/CommitCommandInstructionVisitor.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/model/CommitCommandInstructionVisitor.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/model/CommitCommandInstructionVisitor.java (working copy) @@ -21,9 +21,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.Set; -import org.apache.jackrabbit.mongomk.MongoConnection; import org.apache.jackrabbit.mongomk.api.model.Instruction.AddNodeInstruction; import org.apache.jackrabbit.mongomk.api.model.Instruction.AddPropertyInstruction; import org.apache.jackrabbit.mongomk.api.model.Instruction.CopyNodeInstruction; @@ -31,6 +29,7 @@ import org.apache.jackrabbit.mongomk.api.model.Instruction.RemoveNodeInstruction; import org.apache.jackrabbit.mongomk.api.model.Instruction.SetPropertyInstruction; import org.apache.jackrabbit.mongomk.api.model.InstructionVisitor; +import org.apache.jackrabbit.mongomk.impl.MongoConnection; import org.apache.jackrabbit.mongomk.query.FetchNodeByPathQuery; import org.apache.jackrabbit.oak.commons.PathUtils; Index: src/main/java/org/apache/jackrabbit/mongomk/command/CommitCommandMongo.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/command/CommitCommandMongo.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/command/CommitCommandMongo.java (working copy) @@ -23,10 +23,10 @@ import java.util.Map; import java.util.Set; -import org.apache.jackrabbit.mongomk.MongoConnection; import org.apache.jackrabbit.mongomk.api.command.AbstractCommand; import org.apache.jackrabbit.mongomk.api.model.Commit; import org.apache.jackrabbit.mongomk.api.model.Instruction; +import org.apache.jackrabbit.mongomk.impl.MongoConnection; import org.apache.jackrabbit.mongomk.model.CommitCommandInstructionVisitor; import org.apache.jackrabbit.mongomk.model.CommitMongo; import org.apache.jackrabbit.mongomk.model.HeadMongo; @@ -50,7 +50,7 @@ * * @author instructions = new LinkedList(); + instructions.add(new AddNodeInstructionImpl("/", "a")); + instructions.add(new AddNodeInstructionImpl("/a", "b")); + instructions.add(new AddNodeInstructionImpl("/a", "c")); + + Commit commit = new CommitImpl("/", "+a : { b : {} , c : {} }", + "This is a simple commit", instructions); + CommitCommandMongo command = new CommitCommandMongo(mongoConnection, commit); + Long revisionId = command.execute(); + + Assert.assertNotNull(revisionId); + MongoAssert.assertNodesExist(NodeBuilder.build(String.format( + "{ \"/#%1$s\" : { \"a#%1$s\" : { \"b#%1$s\" : {} , \"c#%1$s\" : {} } } }", revisionId))); + + MongoAssert.assertCommitExists(commit); + MongoAssert.assertCommitContainsAffectedPaths(commit.getRevisionId(), "/", "/a", "/a/b", "/a/c"); + MongoAssert.assertHeadRevision(1); + MongoAssert.assertNextRevision(2); } @Test - public void addNewNodesToSameParent() throws Exception { + public void addNodesToSameParent() throws Exception { List instructions = new LinkedList(); instructions.add(new AddNodeInstructionImpl("/", "1")); Commit commit = new CommitImpl("/", "+1 : {}", "This is the 1st commit", instructions); CommitCommandMongo command = new CommitCommandMongo(mongoConnection, commit); - String firstRevisionId = command.execute(); + Long firstRevisionId = command.execute(); instructions = new LinkedList(); instructions.add(new AddNodeInstructionImpl("/", "2")); commit = new CommitImpl("/", "+2 : {}", "This is the 2nd commit", instructions); command = new CommitCommandMongo(mongoConnection, commit); - String secondRevisionId = command.execute(); + Long secondRevisionId = command.execute(); instructions = new LinkedList(); instructions.add(new AddNodeInstructionImpl("/", "3")); commit = new CommitImpl("/", "+3 : {}", "This is the 3rd commit", instructions); command = new CommitCommandMongo(mongoConnection, commit); - String thirdRevisionId = command.execute(); + Long thirdRevisionId = command.execute(); - MongoAssert.assertNodesExist("", NodeBuilder.build(String.format( + MongoAssert.assertNodesExist(NodeBuilder.build(String.format( "{ \"/#%3$s\" : { \"1#%1$s\" : { } , \"2#%2$s\" : { } , \"3#%3$s\" : { } } }", firstRevisionId, secondRevisionId, thirdRevisionId))); } @Test - public void addNodes() throws Exception { + public void addIntermediataryNodes() throws Exception { List instructions = new LinkedList(); instructions.add(new AddNodeInstructionImpl("/", "a")); instructions.add(new AddNodeInstructionImpl("/a", "b")); - instructions.add(new AddNodeInstructionImpl("/a", "c")); + instructions.add(new AddNodeInstructionImpl("/a/b", "c")); - Commit commit = new CommitImpl("/", "+a : { b : {} , c : {} }", - "This is a simple commit", instructions); + Commit commit = new CommitImpl("/", "+a : { b : { c: {} }", + "Add /a/b/c", instructions); CommitCommandMongo command = new CommitCommandMongo(mongoConnection, commit); - String revisionId = command.execute(); + Long revisionId1 = command.execute(); - Assert.assertNotNull(revisionId); - MongoAssert.assertNodesExist("", NodeBuilder.build(String.format( - "{ \"/#%1$s\" : { \"a#%1$s\" : { \"b#%1$s\" : {} , \"c#%1$s\" : {} } } }", revisionId))); + instructions = new LinkedList(); + instructions.add(new AddNodeInstructionImpl("/a", "d")); + instructions.add(new AddNodeInstructionImpl("/a/b", "e")); - MongoAssert.assertCommitExists(commit); - MongoAssert.assertCommitContainsAffectedPaths(commit.getRevisionId(), "/", "/a", "/a/b", "/a/c"); - MongoAssert.assertHeadRevision(1); - MongoAssert.assertNextRevision(2); + commit = new CommitImpl("/", "+a : { b : { e: {} }, d : {} }", + "Add /a/d and /a/b/e", instructions); + command = new CommitCommandMongo(mongoConnection, commit); + Long revisionId2 = command.execute(); + + MongoAssert.assertNodesExist(NodeBuilder.build(String.format( + "{ \"/#%1$s\" : { \"a#%2$s\" : { \"b#%2$s\" : { \"c#%1$s\" : {}, \"e#%2$s\" : {} }, " + + " \"d#%2$s\" : {} } } }", revisionId1, revisionId2))); } @Test public void addDuplicateNode() throws Exception { - // Add /a and /a/b List instructions = new LinkedList(); instructions.add(new AddNodeInstructionImpl("/", "a")); instructions.add(new AddNodeInstructionImpl("/a", "b")); - Commit commit = new CommitImpl("/", "+a : { \"b\" : {} }", "Add /a, /a/b", instructions); + Commit commit = new CommitImpl("/", "+a : { \"b\" : {} }", "Add /a/b", instructions); CommitCommandMongo command = new CommitCommandMongo(mongoConnection, commit); command.execute(); - // Add /a/b again instructions = new LinkedList(); instructions.add(new AddNodeInstructionImpl("/a", "b")); - commit = new CommitImpl("/a", "+b", "Add /a/b", instructions); + commit = new CommitImpl("/a", "+b", "Add /a/b again", instructions); command = new CommitCommandMongo(mongoConnection, commit); try { command.execute(); @@ -122,160 +143,118 @@ } @Test - public void addNodesAndPropertiesOutOfOrder() throws Exception { + public void addNodesAndProperties() throws Exception { + SimpleNodeScenario scenario1 = new SimpleNodeScenario(mongoConnection); + scenario1.create(); + List instructions = new LinkedList(); - instructions.add(new AddPropertyInstructionImpl("/a", "key1", "value1")); instructions.add(new AddNodeInstructionImpl("/", "a")); + instructions.add(new AddPropertyInstructionImpl("/a", "key1", "value1")); instructions.add(new AddNodeInstructionImpl("/a", "b")); instructions.add(new AddPropertyInstructionImpl("/a/b", "key2", "value2")); - instructions.add(new AddPropertyInstructionImpl("/a/c", "key3", "value3")); instructions.add(new AddNodeInstructionImpl("/a", "c")); + instructions.add(new AddPropertyInstructionImpl("/a/c", "key3", "value3")); Commit commit = new CommitImpl("/", "+a : { \"key1\" : \"value1\" , \"key2\" : \"value2\" , \"key3\" : \"value3\" }", "This is a simple commit", instructions); CommitCommandMongo command = new CommitCommandMongo(mongoConnection, commit); - String revisionId = command.execute(); + Long revisionId = command.execute(); Assert.assertNotNull(revisionId); - MongoAssert - .assertNodesExist( - "", - NodeBuilder.build(String - .format("{ \"/#%1$s\" : { \"a#%1$s\" : { \"key1\" : \"value1\", \"b#%1$s\" : { \"key2\" : \"value2\" } , \"c#%1$s\" : { \"key3\" : \"value3\" } } } }", - revisionId))); + MongoAssert.assertNodesExist(NodeBuilder.build(String.format( + "{ \"/#%1$s\" : { \"a#%1$s\" : { \"int\" : 1 , \"key1\" : \"value1\", \"b#%1$s\" : { \"string\" : \"foo\" , \"key2\" : \"value2\" } , \"c#%1$s\" : { \"bool\" : true , \"key3\" : \"value3\" } } } }", + revisionId))); MongoAssert.assertCommitExists(commit); MongoAssert.assertCommitContainsAffectedPaths(commit.getRevisionId(), "/", "/a", "/a/b", "/a/c"); - MongoAssert.assertHeadRevision(1); - MongoAssert.assertNextRevision(2); } @Test - public void addNodesWhichAlreadyExist() throws Exception { - SimpleNodeScenario scenario1 = new SimpleNodeScenario(mongoConnection); - scenario1.create(); - + public void addNodesAndPropertiesOutOfOrder() throws Exception { List instructions = new LinkedList(); - instructions.add(new AddNodeInstructionImpl("/", "a")); instructions.add(new AddPropertyInstructionImpl("/a", "key1", "value1")); + instructions.add(new AddNodeInstructionImpl("/", "a")); instructions.add(new AddNodeInstructionImpl("/a", "b")); instructions.add(new AddPropertyInstructionImpl("/a/b", "key2", "value2")); - instructions.add(new AddNodeInstructionImpl("/a", "c")); instructions.add(new AddPropertyInstructionImpl("/a/c", "key3", "value3")); + instructions.add(new AddNodeInstructionImpl("/a", "c")); Commit commit = new CommitImpl("/", "+a : { \"key1\" : \"value1\" , \"key2\" : \"value2\" , \"key3\" : \"value3\" }", "This is a simple commit", instructions); CommitCommandMongo command = new CommitCommandMongo(mongoConnection, commit); - String revisionId = command.execute(); + Long revisionId = command.execute(); Assert.assertNotNull(revisionId); - MongoAssert - .assertNodesExist( - "", - NodeBuilder.build(String - .format("{ \"/#%1$s\" : { \"a#%1$s\" : { \"int\" : 1 , \"key1\" : \"value1\", \"b#%1$s\" : { \"string\" : \"foo\" , \"key2\" : \"value2\" } , \"c#%1$s\" : { \"bool\" : true , \"key3\" : \"value3\" } } } }", - revisionId))); + MongoAssert.assertNodesExist(NodeBuilder.build(String.format( + "{ \"/#%1$s\" : { \"a#%1$s\" : { \"key1\" : \"value1\", \"b#%1$s\" : { \"key2\" : \"value2\" } , \"c#%1$s\" : { \"key3\" : \"value3\" } } } }", + revisionId))); MongoAssert.assertCommitExists(commit); - // MongoAssert.assertCommitContainsAffectedPaths(commit.getRevisionId(), "/a", "/a/b", "/a/c"); TODO think about - // whether / should really be included since it already contained /a MongoAssert.assertCommitContainsAffectedPaths(commit.getRevisionId(), "/", "/a", "/a/b", "/a/c"); + MongoAssert.assertHeadRevision(1); + MongoAssert.assertNextRevision(2); + } + + @Test + @Ignore + // FIXME - This currently fails due to some limit in property sizes in Mongo + // which affects path property. + public void bigCommit() throws Exception { + String path = "/"; + String baseNodeName = "test"; + int numberOfCommits = 1000; + + List instructions = new LinkedList(); + for (int i = 0; i < numberOfCommits; i++) { + instructions.clear(); + instructions.add(new AddNodeInstructionImpl(path, baseNodeName + i)); + Commit commit = new CommitImpl(path, "+" + baseNodeName + i + " : {}", + "Add node n" + i, instructions); + CommitCommandMongo command = new CommitCommandMongo( + mongoConnection, commit); + command.execute(); + if (!PathUtils.denotesRoot(path)) { + path += "/"; + } + path += baseNodeName + i; + } } @Test public void commitAndMergeNodes() throws Exception { SimpleNodeScenario scenario1 = new SimpleNodeScenario(mongoConnection); - String firstRevisionId = scenario1.create(); - String secondRevisionId = scenario1.update_A_and_add_D_and_E(); + Long firstRevisionId = scenario1.create(); + Long secondRevisionId = scenario1.update_A_and_add_D_and_E(); SimpleNodeScenario scenario2 = new SimpleNodeScenario(mongoConnection); - String thirdRevisionId = scenario2.create(); + Long thirdRevisionId = scenario2.create(); + + MongoAssert.assertNodesExist(NodeBuilder.build(String.format( + "{ \"/#%1$s\" : { \"a#%1$s\" : { \"int\" : 1 , \"b#%1$s\" : { \"string\" : \"foo\" } , \"c#%1$s\" : { \"bool\" : true } } } }", + firstRevisionId))); - MongoAssert - .assertNodesExist( - "", - NodeBuilder.build(String - .format("{ \"/#%1$s\" : { \"a#%1$s\" : { \"int\" : 1 , \"b#%1$s\" : { \"string\" : \"foo\" } , \"c#%1$s\" : { \"bool\" : true } } } }", - firstRevisionId))); - MongoAssert - .assertNodesExist( - "", - NodeBuilder.build(String - .format("{ \"/#%1$s\" : { \"a#%2$s\" : { \"int\" : 1 , \"double\" : 0.123 , \"b#%2$s\" : { \"string\" : \"foo\" , \"e#%2$s\" : { \"array\" : [ 123, null, 123.456, \"for:bar\", true ] } } , \"c#%1$s\" : { \"bool\" : true }, \"d#%2$s\" : { \"null\" : null } } } }", - firstRevisionId, secondRevisionId))); - MongoAssert - .assertNodesExist( - "", - NodeBuilder.build(String - .format("{ \"/#%3$s\" : { \"a#%3$s\" : { \"int\" : 1 , \"double\" : 0.123 , \"b#%3$s\" : { \"string\" : \"foo\" , \"e#%2$s\" : { \"array\" : [ 123, null, 123.456, \"for:bar\", true ] } } , \"c#%3$s\" : { \"bool\" : true }, \"d#%2$s\" : { \"null\" : null } } } }", - firstRevisionId, secondRevisionId, - thirdRevisionId))); + MongoAssert.assertNodesExist(NodeBuilder.build(String.format( + "{ \"/#%1$s\" : { \"a#%2$s\" : { \"int\" : 1 , \"double\" : 0.123 , \"b#%2$s\" : { \"string\" : \"foo\" , \"e#%2$s\" : { \"array\" : [ 123, null, 123.456, \"for:bar\", true ] } } , \"c#%1$s\" : { \"bool\" : true }, \"d#%2$s\" : { \"null\" : null } } } }", + firstRevisionId, secondRevisionId))); + + MongoAssert.assertNodesExist(NodeBuilder.build(String.format( + "{ \"/#%3$s\" : { \"a#%3$s\" : { \"int\" : 1 , \"double\" : 0.123 , \"b#%3$s\" : { \"string\" : \"foo\" , \"e#%2$s\" : { \"array\" : [ 123, null, 123.456, \"for:bar\", true ] } } , \"c#%3$s\" : { \"bool\" : true }, \"d#%2$s\" : { \"null\" : null } } } }", + firstRevisionId, secondRevisionId, thirdRevisionId))); } @Test public void commitContainsAllAffectedNodes() throws Exception { SimpleNodeScenario scenario = new SimpleNodeScenario(mongoConnection); - String firstRevisionId = scenario.create(); - String secondRevisionId = scenario.update_A_and_add_D_and_E(); + Long firstRevisionId = scenario.create(); + Long secondRevisionId = scenario.update_A_and_add_D_and_E(); MongoAssert.assertCommitContainsAffectedPaths(firstRevisionId, "/", "/a", "/a/b", "/a/c"); MongoAssert.assertCommitContainsAffectedPaths(secondRevisionId, "/a", "/a/b", "/a/d", "/a/b/e"); } @Test - public void removeNode() throws Exception { - List instructions = new LinkedList(); - instructions.add(new AddNodeInstructionImpl("/", "a")); - instructions.add(new AddNodeInstructionImpl("/a", "b")); - instructions.add(new AddNodeInstructionImpl("/a", "c")); - - Commit commit = new CommitImpl("/", "+a : { b : {} , c : {} }", - "This is a simple commit", instructions); - CommitCommandMongo command = new CommitCommandMongo(mongoConnection, commit); - String revisionId = command.execute(); - Assert.assertNotNull(revisionId); - - instructions = new LinkedList(); - instructions.add(new RemoveNodeInstructionImpl("/", "a")); - - commit = new CommitImpl("/", "-a", "This is a simple commit", instructions); - command = new CommitCommandMongo(mongoConnection, commit); - revisionId = command.execute(); - Assert.assertNotNull(revisionId); - - MongoAssert.assertNodesExist("", - NodeBuilder.build(String.format("{ \"/#%1$s\" : {} }", revisionId))); - - MongoAssert.assertCommitExists(commit); - MongoAssert.assertCommitContainsAffectedPaths(commit.getRevisionId(), "/"); - } - - @Test - public void removeNonExistentNode() throws Exception { - List instructions = new LinkedList(); - instructions.add(new AddNodeInstructionImpl("/", "a")); - instructions.add(new AddNodeInstructionImpl("/a", "b")); - - Commit commit = new CommitImpl("/", "+a : { b : {} }", "Add nodes", instructions); - CommitCommandMongo command = new CommitCommandMongo(mongoConnection, commit); - command.execute(); - - instructions = new LinkedList(); - instructions.add(new RemoveNodeInstructionImpl("/a", "c")); - - commit = new CommitImpl("/a", "-c", "Non-existent node delete", instructions); - command = new CommitCommandMongo(mongoConnection, commit); - try { - command.execute(); - fail("Exception expected"); - } catch (Exception expected) { - - } - } - - @Test public void existingParentContainsChildren() throws Exception { List instructions = new LinkedList(); instructions.add(new AddNodeInstructionImpl("/", "a")); @@ -285,19 +264,19 @@ Commit commit = new CommitImpl("/", "+a : { b : {} , c : {} }", "This is a simple commit", instructions); CommitCommandMongo command = new CommitCommandMongo(mongoConnection, commit); - String revisionId = command.execute(); + Long revisionId = command.execute(); - Assert.assertNotNull(revisionId); - MongoAssert.assertNodesExist("", NodeBuilder.build(String.format( + assertNotNull(revisionId); + MongoAssert.assertNodesExist(NodeBuilder.build(String.format( "{ \"/#%1$s\" : { \"a#%1$s\" : {}, \"b#%1$s\" : {} , \"c#%1$s\" : {} } }", revisionId))); GetNodesCommandMongo command2 = new GetNodesCommandMongo(mongoConnection, "/", revisionId, 0); Node rootOfPath = command2.execute(); - Assert.assertEquals(3, rootOfPath.getChildCount()); + assertEquals(3, rootOfPath.getChildCount()); } @Test - public void mergePropertiesAndChildren_noneExistedAndNewAdded() throws Exception { + public void mergePropertiesAndChildrenNoneExistedAndNewAdded() throws Exception { List instructions = new LinkedList(); instructions.add(new AddNodeInstructionImpl("/", "a")); instructions.add(new AddPropertyInstructionImpl("/a", "key1", "value1")); @@ -308,19 +287,16 @@ "+a : { \"key1\" : \"value1\" , \"key2\" : \"value2\" , \"key3\" : \"value3\" }", "This is a simple commit", instructions); CommitCommandMongo command = new CommitCommandMongo(mongoConnection, commit); - String revisionId = command.execute(); + Long revisionId = command.execute(); - MongoAssert.assertNodesExist("", NodeBuilder.build(String.format("{ \"/#%1$s\" : {} }", "0"))); - MongoAssert - .assertNodesExist( - "", - NodeBuilder.build(String - .format("{ \"/#%1$s\" : { \"a#%1$s\" : { \"key1\" : \"value1\", \"key2\" : \"value2\", \"key3\" : \"value3\" } } }", - revisionId))); + MongoAssert.assertNodesExist(NodeBuilder.build(String.format("{ \"/#%1$s\" : {} }", "0"))); + MongoAssert.assertNodesExist(NodeBuilder.build(String.format( + "{ \"/#%1$s\" : { \"a#%1$s\" : { \"key1\" : \"value1\", \"key2\" : \"value2\", \"key3\" : \"value3\" } } }", + revisionId))); } @Test - public void mergePropertiesAndChildren_someExistedAndNewAdded() throws Exception { + public void mergePropertiesAndChildrenSomeExistedAndNewAdded() throws Exception { List instructions = new LinkedList(); instructions.add(new AddNodeInstructionImpl("/", "a")); instructions.add(new AddPropertyInstructionImpl("/a", "existed_key1", "value1")); @@ -331,7 +307,7 @@ "+a : { \"existed_key1\" : \"value1\" , \"existed_key2\" : \"value2\" , \"existed_key3\" : \"value3\" }", "This is a simple commit", instructions); CommitCommandMongo command = new CommitCommandMongo(mongoConnection, commit); - String revisionId = command.execute(); + Long revisionId = command.execute(); instructions = new LinkedList(); instructions.add(new AddNodeInstructionImpl("/", "a")); @@ -345,13 +321,9 @@ command = new CommitCommandMongo(mongoConnection, commit); revisionId = command.execute(); - MongoAssert.assertNodesExist("", NodeBuilder.build(String.format("{ \"/#%1$s\" : {} }", "0"))); - MongoAssert - .assertNodesExist( - "", - NodeBuilder.build(String - .format("{ \"/#%1$s\" : { \"a#%1$s\" : { \"existed_key1\" : \"value1\", \"existed_key2\" : \"value2\", \"existed_key3\" : \"value3\", \"key1\" : \"value1\", \"key2\" : \"value2\", \"key3\" : \"value3\" } } }", - revisionId))); + MongoAssert.assertNodesExist(NodeBuilder.build(String.format("{ \"/#%1$s\" : {} }", "0"))); + MongoAssert.assertNodesExist(NodeBuilder.build(String.format("{ \"/#%1$s\" : { \"a#%1$s\" : { \"existed_key1\" : \"value1\", \"existed_key2\" : \"value2\", \"existed_key3\" : \"value3\", \"key1\" : \"value1\", \"key2\" : \"value2\", \"key3\" : \"value3\" } } }", + revisionId))); } @Test @@ -364,7 +336,7 @@ Commit commit = new CommitImpl("/", "+a : { b : {} , c : {} }", "This is a simple commit", instructions); CommitCommandMongo command = new CommitCommandMongo(mongoConnection, commit); - String firstRevisionId = command.execute(); + Long firstRevisionId = command.execute(); instructions = new LinkedList(); instructions.add(new AddNodeInstructionImpl("/a", "d")); @@ -372,7 +344,7 @@ commit = new CommitImpl("/a", "+d: {} \n+e : {}", "This is a simple commit", instructions); command = new CommitCommandMongo(mongoConnection, commit); - String secondRevisionId = command.execute(); + Long secondRevisionId = command.execute(); MongoAssert.assertNodeRevisionId("/", firstRevisionId, true); MongoAssert.assertNodeRevisionId("/a", firstRevisionId, true); @@ -390,42 +362,69 @@ } @Test - public void rootNodeHasEmptyRootPath() throws Exception { + public void removeNode() throws Exception { List instructions = new LinkedList(); - instructions.add(new AddNodeInstructionImpl("", "/")); + instructions.add(new AddNodeInstructionImpl("/", "a")); + instructions.add(new AddNodeInstructionImpl("/a", "b")); + instructions.add(new AddNodeInstructionImpl("/a", "c")); - Commit commit = new CommitImpl(MongoUtil.INITIAL_COMMIT_PATH, MongoUtil.INITIAL_COMMIT_DIFF, - MongoUtil.INITIAL_COMMIT_MESSAGE, instructions); + Commit commit = new CommitImpl("/", "+a : { b : {} , c : {} }", + "Add a and its children", instructions); CommitCommandMongo command = new CommitCommandMongo(mongoConnection, commit); - String revisionId = command.execute(); - Assert.assertNotNull(revisionId); + Long revisionId = command.execute(); + assertNotNull(revisionId); + MongoAssert.assertNodesExist(NodeBuilder.build(String.format( + "{ \"/#%1$s\" : { \"a#%1$s\" : { \"b#%1$s\" : {} , \"c#%1$s\" : {} } } }", revisionId))); - Node expected = NodeBuilder.build(String.format("{ \"/#%1$s\" : {} }", revisionId)); - MongoAssert.assertNodesExist(MongoUtil.INITIAL_COMMIT_PATH, expected); + instructions = new LinkedList(); + instructions.add(new RemoveNodeInstructionImpl("/", "a")); + + commit = new CommitImpl("/", "-a", "Remove a", instructions); + command = new CommitCommandMongo(mongoConnection, commit); + revisionId = command.execute(); + assertNotNull(revisionId); + MongoAssert.assertNodesExist(NodeBuilder.build(String.format("{ \"/#%1$s\" : {} }", + revisionId))); + + MongoAssert.assertCommitExists(commit); + MongoAssert.assertCommitContainsAffectedPaths(commit.getRevisionId(), "/"); } @Test - @Ignore - // FIXME - This currently fails due to some limit in property sizes in Mongo - // which affects path property. - public void bigCommit() throws Exception { - String path = "/"; - String baseNodeName = "test"; - int numberOfCommits = 1000; - + public void removeNonExistentNode() throws Exception { List instructions = new LinkedList(); - for (int i = 0; i < numberOfCommits; i++) { - instructions.clear(); - instructions.add(new AddNodeInstructionImpl(path, baseNodeName + i)); - Commit commit = new CommitImpl(path, "+" + baseNodeName + i + " : {}", - "Add node n" + i, instructions); - CommitCommandMongo command = new CommitCommandMongo( - mongoConnection, commit); + instructions.add(new AddNodeInstructionImpl("/", "a")); + instructions.add(new AddNodeInstructionImpl("/a", "b")); + + Commit commit = new CommitImpl("/", "+a : { b : {} }", "Add nodes", instructions); + CommitCommandMongo command = new CommitCommandMongo(mongoConnection, commit); + command.execute(); + + instructions = new LinkedList(); + instructions.add(new RemoveNodeInstructionImpl("/a", "c")); + + commit = new CommitImpl("/a", "-c", "Non-existent node delete", instructions); + command = new CommitCommandMongo(mongoConnection, commit); + try { command.execute(); - if (!PathUtils.denotesRoot(path)) { - path += "/"; - } - path += baseNodeName + i; + fail("Exception expected"); + } catch (Exception expected) { + } } -} + + @Test + public void rootNodeHasEmptyRootPath() throws Exception { + List instructions = new LinkedList(); + instructions.add(new AddNodeInstructionImpl("", "/")); + + Commit commit = new CommitImpl(MongoUtil.INITIAL_COMMIT_PATH, MongoUtil.INITIAL_COMMIT_DIFF, + MongoUtil.INITIAL_COMMIT_MESSAGE, instructions); + CommitCommandMongo command = new CommitCommandMongo(mongoConnection, commit); + Long revisionId = command.execute(); + assertNotNull(revisionId); + + Node expected = NodeBuilder.build(String.format("{ \"/#%1$s\" : {} }", revisionId)); + MongoAssert.assertNodesExist(expected); + } +} \ No newline at end of file Index: src/main/java/org/apache/jackrabbit/mongomk/impl/model/CommitImpl.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/impl/model/CommitImpl.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/impl/model/CommitImpl.java (working copy) @@ -37,7 +37,7 @@ private final String message; private final String path; private final long timestamp; - private String revisionId; + private Long revisionId; /** * Constructs a new {@code CommitImpl}. @@ -91,11 +91,11 @@ return path; } - public String getRevisionId() { + public Long getRevisionId() { return revisionId; } - public void setRevisionId(String revisionId) { + public void setRevisionId(Long revisionId) { this.revisionId = revisionId; } Index: src/main/java/org/apache/jackrabbit/mongomk/model/CommitMongo.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/model/CommitMongo.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/model/CommitMongo.java (working copy) @@ -25,7 +25,6 @@ import org.apache.jackrabbit.mongomk.api.model.Commit; import org.apache.jackrabbit.mongomk.api.model.Instruction; import org.apache.jackrabbit.mongomk.api.model.Instruction.AddNodeInstruction; -import org.apache.jackrabbit.mongomk.util.MongoUtil; import org.apache.jackrabbit.oak.commons.PathUtils; import com.mongodb.BasicDBObject; @@ -60,7 +59,7 @@ String diff = commit.getDiff(); commitMongo.setDiff(diff); - String revisionId = commit.getRevisionId(); + Long revisionId = commit.getRevisionId(); if (revisionId != null) { commitMongo.setRevisionId(revisionId); } @@ -141,10 +140,6 @@ put(KEY_REVISION_ID, revisionId); } - public void setRevisionId(String revisionId) { - setRevisionId(MongoUtil.toMongoRepresentation(revisionId)); - } - public void setTimestamp(long timestamp) { put(KEY_TIMESTAMP, timestamp); } Index: src/test/java/org/apache/jackrabbit/mongomk/command/ConcurrentCommitCommandMongoTest.java =================================================================== --- src/test/java/org/apache/jackrabbit/mongomk/command/ConcurrentCommitCommandMongoTest.java (revision 1390863) +++ src/test/java/org/apache/jackrabbit/mongomk/command/ConcurrentCommitCommandMongoTest.java (working copy) @@ -75,7 +75,7 @@ // execute the commands final CommandExecutor commandExecutor = new CommandExecutorImpl(); ExecutorService executorService = Executors.newFixedThreadPool(numOfConcurrentThreads); - final List revisionIds = new LinkedList(); + final List revisionIds = new LinkedList(); for (int i = 0; i < numOfConcurrentThreads; ++i) { final CommitCommandMongo command = commands.get(i); Runnable runnable = new Runnable() { @@ -83,7 +83,7 @@ @Override public void run() { try { - String revisionId = commandExecutor.execute(command); + Long revisionId = commandExecutor.execute(command); revisionIds.add(revisionId); } catch (Exception e) { revisionIds.add(null); @@ -101,18 +101,17 @@ } } while (revisionIds.size() < numOfConcurrentThreads); - // verify the result by sorting the revision ids and verifying that all children are contained in the next - // revision - Collections.sort(revisionIds, new Comparator() { + // Verify the result by sorting the revision ids and verifying that all + // children are contained in the next revision + Collections.sort(revisionIds, new Comparator() { @Override - public int compare(String o1, String o2) { - return Long.valueOf(o1).compareTo(Long.valueOf(o2)); + public int compare(Long o1, Long o2) { + return o1.compareTo(o2); } }); List lastChildren = new LinkedList(); for (int i = 0; i < numOfConcurrentThreads; ++i) { - String revisionId = revisionIds.get(i); - + Long revisionId = revisionIds.get(i); GetNodesCommandMongo command2 = new GetNodesCommandMongo(mongoConnection, "/", revisionId, 0); Node root = command2.execute(); Set children = root.getChildren(); Index: src/main/java/org/apache/jackrabbit/mongomk/query/FetchHeadQuery.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/query/FetchHeadQuery.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/query/FetchHeadQuery.java (working copy) @@ -16,7 +16,7 @@ */ package org.apache.jackrabbit.mongomk.query; -import org.apache.jackrabbit.mongomk.MongoConnection; +import org.apache.jackrabbit.mongomk.impl.MongoConnection; import org.apache.jackrabbit.mongomk.model.HeadMongo; import com.mongodb.DBCollection; @@ -31,8 +31,7 @@ /** * Constructs a new {@code FetchHeadQuery}. * - * @param mongoConnection - * The {@link MongoConnection}. + * @param mongoConnection The {@link MongoConnection}. */ public FetchHeadQuery(MongoConnection mongoConnection) { super(mongoConnection); @@ -41,8 +40,6 @@ @Override public HeadMongo execute() throws Exception { DBCollection headCollection = mongoConnection.getHeadCollection(); - HeadMongo headMongo = (HeadMongo) headCollection.findOne(); - - return headMongo; + return (HeadMongo)headCollection.findOne(); } } Index: src/main/java/org/apache/jackrabbit/mongomk/query/FetchHeadRevisionQuery.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/query/FetchHeadRevisionQuery.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/query/FetchHeadRevisionQuery.java (working copy) @@ -16,7 +16,7 @@ */ package org.apache.jackrabbit.mongomk.query; -import org.apache.jackrabbit.mongomk.MongoConnection; +import org.apache.jackrabbit.mongomk.impl.MongoConnection; import org.apache.jackrabbit.mongomk.model.HeadMongo; Index: src/main/java/org/apache/jackrabbit/mongomk/query/FetchNodeByPathQuery.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/query/FetchNodeByPathQuery.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/query/FetchNodeByPathQuery.java (working copy) @@ -18,7 +18,7 @@ import java.util.List; -import org.apache.jackrabbit.mongomk.MongoConnection; +import org.apache.jackrabbit.mongomk.impl.MongoConnection; import org.apache.jackrabbit.mongomk.model.NodeMongo; import com.mongodb.DBCollection; @@ -96,7 +96,8 @@ if (revisionId == 0) { return true; } - FetchValidRevisionsQuery query = new FetchValidRevisionsQuery(mongoConnection, String.valueOf(Long.MAX_VALUE)); + FetchValidRevisionsQuery query = new FetchValidRevisionsQuery(mongoConnection, + Long.MAX_VALUE); List revisionIds = query.execute(); return revisionIds.contains(revisionId); } Index: src/main/java/org/apache/jackrabbit/mongomk/query/FetchNodesByPathAndDepthQuery.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/query/FetchNodesByPathAndDepthQuery.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/query/FetchNodesByPathAndDepthQuery.java (working copy) @@ -19,9 +19,8 @@ import java.util.List; import java.util.regex.Pattern; -import org.apache.jackrabbit.mongomk.MongoConnection; +import org.apache.jackrabbit.mongomk.impl.MongoConnection; import org.apache.jackrabbit.mongomk.model.NodeMongo; -import org.apache.jackrabbit.mongomk.util.MongoUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -41,21 +40,18 @@ private final int depth; private final String path; - private final String revisionId; + private final Long revisionId; /** * Constructs a new {@code FetchNodesByPathAndDepthQuery}. * - * @param mongoConnection - * The {@link MongoConnection}. - * @param path - * The path. - * @param revisionId - * The revision id. - * @param depth - * The depth. + * @param mongoConnection The {@link MongoConnection}. + * @param path The path. + * @param revisionId The revision id. + * @param depth The depth. */ - public FetchNodesByPathAndDepthQuery(MongoConnection mongoConnection, String path, String revisionId, int depth) { + public FetchNodesByPathAndDepthQuery(MongoConnection mongoConnection, String path, + Long revisionId, int depth) { super(mongoConnection); this.path = path; this.revisionId = revisionId; @@ -100,7 +96,7 @@ return pattern; } - private List fetchValidRevisions(MongoConnection mongoConnection, String revisionId) { + private List fetchValidRevisions(MongoConnection mongoConnection, Long revisionId) { return new FetchValidRevisionsQuery(mongoConnection, revisionId).execute(); } @@ -109,7 +105,7 @@ QueryBuilder qb = QueryBuilder.start(NodeMongo.KEY_PATH).regex(pattern); if (revisionId != null) { - qb = qb.and(NodeMongo.KEY_REVISION_ID).lessThanEquals(MongoUtil.toMongoRepresentation(revisionId)); + qb = qb.and(NodeMongo.KEY_REVISION_ID).lessThanEquals(revisionId); } DBObject query = qb.get(); Index: src/test/java/org/apache/jackrabbit/mongomk/query/FetchNodesByPathAndDepthQueryTest.java =================================================================== --- src/test/java/org/apache/jackrabbit/mongomk/query/FetchNodesByPathAndDepthQueryTest.java (revision 1390863) +++ src/test/java/org/apache/jackrabbit/mongomk/query/FetchNodesByPathAndDepthQueryTest.java (working copy) @@ -32,7 +32,6 @@ import org.apache.jackrabbit.mongomk.model.CommitMongo; import org.apache.jackrabbit.mongomk.model.NodeMongo; import org.apache.jackrabbit.mongomk.scenario.SimpleNodeScenario; -import org.apache.jackrabbit.mongomk.util.MongoUtil; import org.junit.Test; import com.mongodb.BasicDBObject; @@ -44,12 +43,12 @@ @Test public void fetchWithInvalidFirstRevision() throws Exception { - String revisionId1 = addNode("a"); - String revisionId2 = addNode("b"); - String revisionId3 = addNode("c"); + Long revisionId1 = addNode("a"); + Long revisionId2 = addNode("b"); + Long revisionId3 = addNode("c"); invalidateCommit(revisionId1); - updateBaseRevisionId(revisionId2, "0"); + updateBaseRevisionId(revisionId2, 0L); FetchNodesByPathAndDepthQuery query = new FetchNodesByPathAndDepthQuery(mongoConnection, "/", revisionId3, -1); @@ -63,9 +62,9 @@ @Test public void fetchWithInvalidLastRevision() throws Exception { - String revisionId1 = addNode("a"); - String revisionId2 = addNode("b"); - String revisionId3 = addNode("c"); + Long revisionId1 = addNode("a"); + Long revisionId2 = addNode("b"); + Long revisionId3 = addNode("c"); invalidateCommit(revisionId3); @@ -81,9 +80,9 @@ @Test public void fetchWithInvalidMiddleRevision() throws Exception { - String revisionId1 = addNode("a"); - String revisionId2 = addNode("b"); - String revisionId3 = addNode("c"); + Long revisionId1 = addNode("a"); + Long revisionId2 = addNode("b"); + Long revisionId3 = addNode("c"); invalidateCommit(revisionId2); updateBaseRevisionId(revisionId3, revisionId1); @@ -100,11 +99,11 @@ @Test public void simpleFetchRootAndAllDepths() throws Exception { SimpleNodeScenario scenario = new SimpleNodeScenario(mongoConnection); - String firstRevisionId = scenario.create(); - String secondRevisionId = scenario.update_A_and_add_D_and_E(); + Long firstRevisionId = scenario.create(); + Long secondRevisionId = scenario.update_A_and_add_D_and_E(); - FetchNodesByPathAndDepthQuery query = new FetchNodesByPathAndDepthQuery(mongoConnection, "/", firstRevisionId, - 0); + FetchNodesByPathAndDepthQuery query = new FetchNodesByPathAndDepthQuery(mongoConnection, + "/", firstRevisionId, 0); List result = query.execute(); List actuals = NodeMongo.toNode(result); Node expected = NodeBuilder.build(String.format("{ \"/#%1$s\" : {} }", firstRevisionId)); @@ -176,32 +175,30 @@ NodeAssert.assertEquals(expecteds, actuals); } - private String addNode(String nodeName) throws Exception { + private Long addNode(String nodeName) throws Exception { List instructions = new LinkedList(); instructions.add(new AddNodeInstructionImpl("/", nodeName)); Commit commit = new CommitImpl("/", "+" + nodeName, "Add /" + nodeName, instructions); CommitCommandMongo command = new CommitCommandMongo(mongoConnection, commit); - String revisionId = command.execute(); - return revisionId; + return command.execute(); } - private void invalidateCommit(String revisionId) { + private void invalidateCommit(Long revisionId) { DBCollection commitCollection = mongoConnection.getCommitCollection(); DBObject query = QueryBuilder.start(CommitMongo.KEY_REVISION_ID) - .is(MongoUtil.toMongoRepresentation(revisionId)).get(); + .is(revisionId).get(); DBObject update = new BasicDBObject(); update.put("$set", new BasicDBObject(CommitMongo.KEY_FAILED, Boolean.TRUE)); commitCollection.update(query, update); } - private void updateBaseRevisionId(String revisionId2, String baseRevisionId) { + private void updateBaseRevisionId(Long revisionId2, Long baseRevisionId) { DBCollection commitCollection = mongoConnection.getCommitCollection(); DBObject query = QueryBuilder.start(CommitMongo.KEY_REVISION_ID) - .is(MongoUtil.toMongoRepresentation(revisionId2)) + .is(revisionId2) .get(); DBObject update = new BasicDBObject("$set", - new BasicDBObject(CommitMongo.KEY_BASE_REVISION_ID, - MongoUtil.toMongoRepresentation(baseRevisionId))); + new BasicDBObject(CommitMongo.KEY_BASE_REVISION_ID, baseRevisionId)); commitCollection.update(query, update); } } Index: src/main/java/org/apache/jackrabbit/mongomk/query/FetchNodesForRevisionQuery.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/query/FetchNodesForRevisionQuery.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/query/FetchNodesForRevisionQuery.java (working copy) @@ -21,9 +21,8 @@ import java.util.List; import java.util.Set; -import org.apache.jackrabbit.mongomk.MongoConnection; +import org.apache.jackrabbit.mongomk.impl.MongoConnection; import org.apache.jackrabbit.mongomk.model.NodeMongo; -import org.apache.jackrabbit.mongomk.util.MongoUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -42,19 +41,17 @@ private static final Logger LOG = LoggerFactory.getLogger(FetchNodesForRevisionQuery.class); private final Set paths; - private final String revisionId; + private final Long revisionId; /** * Constructs a new {@code FetchNodesForRevisionQuery}. * - * @param mongoConnection - * The {@link MongoConnection}. - * @param paths - * The paths to fetch. - * @param revisionId - * The revision id. + * @param mongoConnection The {@link MongoConnection}. + * @param paths The paths to fetch. + * @param revisionId The revision id. */ - public FetchNodesForRevisionQuery(MongoConnection mongoConnection, Set paths, String revisionId) { + public FetchNodesForRevisionQuery(MongoConnection mongoConnection, Set paths, + Long revisionId) { super(mongoConnection); this.paths = paths; this.revisionId = revisionId; @@ -63,40 +60,31 @@ /** * Constructs a new {@code FetchNodesForRevisionQuery}. * - * @param mongoConnection - * The {@link MongoConnection}. - * @param paths - * The paths to fetch. - * @param revisionId - * The revision id. + * @param mongoConnection The {@link MongoConnection}. + * @param paths The paths to fetch. + * @param revisionId The revision id. */ - public FetchNodesForRevisionQuery(MongoConnection mongoConnection, String[] paths, String revisionId) { + public FetchNodesForRevisionQuery(MongoConnection mongoConnection, String[] paths, + Long revisionId) { this(mongoConnection, new HashSet(Arrays.asList(paths)), revisionId); } @Override public List execute() { - List validRevisions = fetchValidRevisions(mongoConnection, revisionId); - + List validRevisions = new FetchValidRevisionsQuery(mongoConnection, revisionId).execute(); DBCursor dbCursor = retrieveAllNodes(); List nodes = QueryUtils.convertToNodes(dbCursor, validRevisions); - return nodes; } - private List fetchValidRevisions(MongoConnection mongoConnection, String revisionId) { - return new FetchValidRevisionsQuery(mongoConnection, revisionId).execute(); - } - private DBCursor retrieveAllNodes() { DBCollection nodeCollection = mongoConnection.getNodeCollection(); - DBObject query = QueryBuilder.start(NodeMongo.KEY_PATH).in(paths).and(NodeMongo.KEY_REVISION_ID) - .lessThanEquals(MongoUtil.toMongoRepresentation(revisionId)).get(); + DBObject query = QueryBuilder.start(NodeMongo.KEY_PATH).in(paths) + .and(NodeMongo.KEY_REVISION_ID) + .lessThanEquals(revisionId).get(); LOG.debug(String.format("Executing query: %s", query)); - DBCursor dbCursor = nodeCollection.find(query); - - return dbCursor; + return nodeCollection.find(query); } -} +} \ No newline at end of file Index: src/test/java/org/apache/jackrabbit/mongomk/query/FetchNodesForRevisionQueryTest.java =================================================================== --- src/test/java/org/apache/jackrabbit/mongomk/query/FetchNodesForRevisionQueryTest.java (revision 1390863) +++ src/test/java/org/apache/jackrabbit/mongomk/query/FetchNodesForRevisionQueryTest.java (working copy) @@ -49,12 +49,12 @@ @Test public void fetchWithInvalidFirstRevision() throws Exception { - String revisionId1 = addNode("a"); - String revisionId2 = addNode("b"); - String revisionId3 = addNode("c"); + Long revisionId1 = addNode("a"); + Long revisionId2 = addNode("b"); + Long revisionId3 = addNode("c"); invalidateCommit(revisionId1); - updateBaseRevisionId(revisionId2, "0"); + updateBaseRevisionId(revisionId2, 0L); FetchNodesForRevisionQuery query = new FetchNodesForRevisionQuery(mongoConnection, new String[] { "/", "/a", "/b", "/c", "not_existing" }, revisionId3); @@ -68,9 +68,9 @@ @Test public void fetchWithInvalidLastRevision() throws Exception { - String revisionId1 = addNode("a"); - String revisionId2 = addNode("b"); - String revisionId3 = addNode("c"); + Long revisionId1 = addNode("a"); + Long revisionId2 = addNode("b"); + Long revisionId3 = addNode("c"); invalidateCommit(revisionId3); @@ -85,9 +85,9 @@ @Test public void fetchWithInvalidMiddleRevision() throws Exception { - String revisionId1 = addNode("a"); - String revisionId2 = addNode("b"); - String revisionId3 = addNode("c"); + Long revisionId1 = addNode("a"); + Long revisionId2 = addNode("b"); + Long revisionId3 = addNode("c"); invalidateCommit(revisionId2); updateBaseRevisionId(revisionId3, revisionId1); @@ -104,7 +104,7 @@ @Test public void fetchWithOneRevision() throws Exception { SimpleNodeScenario scenario = new SimpleNodeScenario(mongoConnection); - String revisionId = scenario.create(); + Long revisionId = scenario.create(); FetchNodesForRevisionQuery query = new FetchNodesForRevisionQuery(mongoConnection, new String[] { "/", "/a", "/a/b", "/a/c", "not_existing" }, revisionId); @@ -129,11 +129,12 @@ @Test public void fetchWithTwoRevisions() throws Exception { SimpleNodeScenario scenario = new SimpleNodeScenario(mongoConnection); - String firstRevisionId = scenario.create(); - String secondRevisionId = scenario.update_A_and_add_D_and_E(); + Long firstRevisionId = scenario.create(); + Long secondRevisionId = scenario.update_A_and_add_D_and_E(); - FetchNodesForRevisionQuery query = new FetchNodesForRevisionQuery(mongoConnection, new String[] { "/", "/a", - "/a/b", "/a/c", "/a/d", "/a/b/e", "not_existing" }, firstRevisionId); + FetchNodesForRevisionQuery query = new FetchNodesForRevisionQuery(mongoConnection, + new String[] { "/", "/a", "/a/b", "/a/c", "/a/d", "/a/b/e", "not_existing" }, + firstRevisionId); List nodeMongos = query.execute(); List actuals = NodeMongo.toNode(nodeMongos); Node expected = NodeBuilder @@ -155,32 +156,30 @@ NodeAssert.assertEquals(expecteds, actuals); } - private String addNode(String nodeName) throws Exception { + private Long addNode(String nodeName) throws Exception { List instructions = new LinkedList(); instructions.add(new AddNodeInstructionImpl("/", nodeName)); Commit commit = new CommitImpl("/", "+" + nodeName, "Add /" + nodeName, instructions); CommitCommandMongo command = new CommitCommandMongo(mongoConnection, commit); - String revisionId = command.execute(); - return revisionId; + return command.execute(); } - private void invalidateCommit(String revisionId) { + private void invalidateCommit(Long revisionId) { DBCollection commitCollection = mongoConnection.getCommitCollection(); DBObject query = QueryBuilder.start(CommitMongo.KEY_REVISION_ID) - .is(MongoUtil.toMongoRepresentation(revisionId)).get(); + .is(revisionId).get(); DBObject update = new BasicDBObject(); update.put("$set", new BasicDBObject(CommitMongo.KEY_FAILED, Boolean.TRUE)); commitCollection.update(query, update); } - private void updateBaseRevisionId(String revisionId2, String baseRevisionId) { + private void updateBaseRevisionId(Long revisionId2, Long baseRevisionId) { DBCollection commitCollection = mongoConnection.getCommitCollection(); DBObject query = QueryBuilder.start(CommitMongo.KEY_REVISION_ID) - .is(MongoUtil.toMongoRepresentation(revisionId2)) + .is(revisionId2) .get(); DBObject update = new BasicDBObject("$set", - new BasicDBObject(CommitMongo.KEY_BASE_REVISION_ID, - MongoUtil.toMongoRepresentation(baseRevisionId))); + new BasicDBObject(CommitMongo.KEY_BASE_REVISION_ID, baseRevisionId)); commitCollection.update(query, update); } } Index: src/main/java/org/apache/jackrabbit/mongomk/query/FetchValidCommitsQuery.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/query/FetchValidCommitsQuery.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/query/FetchValidCommitsQuery.java (working copy) @@ -22,9 +22,8 @@ import java.util.List; import java.util.Map; -import org.apache.jackrabbit.mongomk.MongoConnection; +import org.apache.jackrabbit.mongomk.impl.MongoConnection; import org.apache.jackrabbit.mongomk.model.CommitMongo; -import org.apache.jackrabbit.mongomk.util.MongoUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -43,8 +42,8 @@ private static final int LIMITLESS = 0; private static final Logger LOG = LoggerFactory.getLogger(FetchValidCommitsQuery.class); - private final String fromRevisionId; - private String toRevisionId; + private final Long fromRevisionId; + private Long toRevisionId; private int maxEntries = LIMITLESS; /** @@ -53,8 +52,8 @@ * @param mongoConnection Mongo connection. * @param fromRevisionId From revision id. */ - public FetchValidCommitsQuery(MongoConnection mongoConnection, String toRevisionId) { - this(mongoConnection, null, toRevisionId); + public FetchValidCommitsQuery(MongoConnection mongoConnection, Long toRevisionId) { + this(mongoConnection, 0L, toRevisionId); } /** @@ -64,8 +63,8 @@ * @param fromRevisionId From revision id. * @param toRevisionId To revision id. */ - public FetchValidCommitsQuery(MongoConnection mongoConnection, String fromRevisionId, - String toRevisionId) { + public FetchValidCommitsQuery(MongoConnection mongoConnection, Long fromRevisionId, + Long toRevisionId) { super(mongoConnection); this.fromRevisionId = fromRevisionId; this.toRevisionId = toRevisionId; @@ -81,8 +80,8 @@ */ public FetchValidCommitsQuery(MongoConnection mongoConnection, int maxEntries) { super(mongoConnection); - fromRevisionId = null; - toRevisionId = String.valueOf(Integer.MAX_VALUE); + fromRevisionId = 0L; + toRevisionId = Long.MAX_VALUE; this.maxEntries = maxEntries; } @@ -106,7 +105,7 @@ return validCommits; } - Long currentRevision = MongoUtil.toMongoRepresentation(toRevisionId); + Long currentRevision = toRevisionId; if (!revisions.containsKey(currentRevision)) { currentRevision = Collections.max(revisions.keySet()); } @@ -118,11 +117,9 @@ } validCommits.add(commitMongo); Long baseRevision = commitMongo.getBaseRevisionId(); - Long fromRevision = MongoUtil.toMongoRepresentation(fromRevisionId); - if ((currentRevision == 0L) || (baseRevision == null || baseRevision < fromRevision)) { + if ((currentRevision == 0L) || (baseRevision == null || baseRevision < fromRevisionId)) { break; } - currentRevision = baseRevision; } @@ -134,7 +131,7 @@ private DBCursor fetchListOfValidCommits() { DBCollection commitCollection = mongoConnection.getCommitCollection(); DBObject query = QueryBuilder.start(CommitMongo.KEY_FAILED).notEquals(Boolean.TRUE) - .and(CommitMongo.KEY_REVISION_ID).lessThanEquals(MongoUtil.toMongoRepresentation(toRevisionId)) + .and(CommitMongo.KEY_REVISION_ID).lessThanEquals(toRevisionId) .get(); LOG.debug(String.format("Executing query: %s", query)); Index: src/test/java/org/apache/jackrabbit/mongomk/query/FetchValidCommitsQueryTest.java =================================================================== --- src/test/java/org/apache/jackrabbit/mongomk/query/FetchValidCommitsQueryTest.java (revision 1390863) +++ src/test/java/org/apache/jackrabbit/mongomk/query/FetchValidCommitsQueryTest.java (working copy) @@ -36,7 +36,7 @@ @Test public void simple() throws Exception { FetchValidCommitsQuery query = new FetchValidCommitsQuery(mongoConnection, - String.valueOf(Integer.MAX_VALUE) /*maxRevisionId*/); + Long.MAX_VALUE); List commits = query.execute(); assertEquals(MIN_COMMITS, commits.size()); @@ -54,7 +54,7 @@ @Test public void revisionId() throws Exception { FetchValidCommitsQuery query = new FetchValidCommitsQuery(mongoConnection, - String.valueOf(Integer.MAX_VALUE) /*maxRevisionId*/); + Long.MAX_VALUE); List commits = query.execute(); CommitMongo commit0 = commits.get(0); @@ -74,7 +74,7 @@ @Test public void time() throws Exception { FetchValidCommitsQuery query = new FetchValidCommitsQuery(mongoConnection, - String.valueOf(Integer.MAX_VALUE) /*maxRevisionId*/); + Long.MAX_VALUE); List commits = query.execute(); CommitMongo commit0 = commits.get(0); Index: src/main/java/org/apache/jackrabbit/mongomk/query/FetchValidRevisionsQuery.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/query/FetchValidRevisionsQuery.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/query/FetchValidRevisionsQuery.java (working copy) @@ -19,10 +19,9 @@ import java.util.ArrayList; import java.util.List; -import org.apache.jackrabbit.mongomk.MongoConnection; +import org.apache.jackrabbit.mongomk.impl.MongoConnection; import org.apache.jackrabbit.mongomk.model.CommitMongo; - /** * An query for fetching valid revisions. * @@ -30,24 +29,22 @@ */ public class FetchValidRevisionsQuery extends AbstractQuery> { - private final String maxRevisionId; + private final Long maxRevisionId; /** * Constructs a new {@code FetchValidRevisionsQuery}. * - * @param mongoConnection - * The {@link MongoConnection}. - * @param maxRevisionId - * The max revision id which should be fetched. + * @param mongoConnection The {@link MongoConnection}. + * @param maxRevisionId The max revision id which should be fetched. */ - public FetchValidRevisionsQuery(MongoConnection mongoConnection, String maxRevisionId) { + public FetchValidRevisionsQuery(MongoConnection mongoConnection, Long maxRevisionId) { super(mongoConnection); this.maxRevisionId = maxRevisionId; } @Override public List execute() { - List validCommits = fetchValidCommits(); + List validCommits = new FetchValidCommitsQuery(mongoConnection, maxRevisionId).execute(); List validRevisions = new ArrayList(validCommits.size()); for (CommitMongo commitMongo : validCommits) { validRevisions.add(commitMongo.getRevisionId()); @@ -55,8 +52,4 @@ return validRevisions; } - - private List fetchValidCommits() { - return new FetchValidCommitsQuery(mongoConnection, maxRevisionId).execute(); - } -} +} \ No newline at end of file Index: src/main/java/org/apache/jackrabbit/mongomk/command/GetBlobLengthCommandMongo.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/command/GetBlobLengthCommandMongo.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/command/GetBlobLengthCommandMongo.java (working copy) @@ -16,8 +16,8 @@ */ package org.apache.jackrabbit.mongomk.command; -import org.apache.jackrabbit.mongomk.MongoConnection; import org.apache.jackrabbit.mongomk.api.command.AbstractCommand; +import org.apache.jackrabbit.mongomk.impl.MongoConnection; import com.mongodb.BasicDBObject; import com.mongodb.gridfs.GridFS; Index: src/main/java/org/apache/jackrabbit/mongomk/command/GetHeadRevisionCommandMongo.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/command/GetHeadRevisionCommandMongo.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/command/GetHeadRevisionCommandMongo.java (working copy) @@ -16,8 +16,8 @@ */ package org.apache.jackrabbit.mongomk.command; -import org.apache.jackrabbit.mongomk.MongoConnection; import org.apache.jackrabbit.mongomk.api.command.AbstractCommand; +import org.apache.jackrabbit.mongomk.impl.MongoConnection; import org.apache.jackrabbit.mongomk.query.FetchHeadRevisionQuery; /** @@ -25,7 +25,7 @@ * * @author properties = expected.getProperties(); if (properties != null) { for (Map.Entry entry : properties.entrySet()) { @@ -113,7 +114,7 @@ Assert.assertEquals(children.size(), childNames.size()); Assert.assertEquals(children.size(), new HashSet(childNames).size()); for (Node child : children) { - assertNodesExist(expected.getPath(), child); + assertNodesExist(child); Assert.assertTrue(childNames.contains(child.getName())); } } else { Index: src/main/java/org/apache/jackrabbit/mongomk/impl/MongoMicroKernel.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/impl/MongoMicroKernel.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/impl/MongoMicroKernel.java (working copy) @@ -20,6 +20,7 @@ import org.apache.jackrabbit.mk.api.MicroKernel; import org.apache.jackrabbit.mk.api.MicroKernelException; +import org.apache.jackrabbit.mk.util.NodeFilter; import org.apache.jackrabbit.mongomk.api.BlobStore; import org.apache.jackrabbit.mongomk.api.NodeStore; import org.apache.jackrabbit.mongomk.api.model.Commit; Index: src/main/java/org/apache/jackrabbit/mongomk/util/MongoUtil.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/util/MongoUtil.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/util/MongoUtil.java (working copy) @@ -18,7 +18,7 @@ import java.util.Arrays; -import org.apache.jackrabbit.mongomk.MongoConnection; +import org.apache.jackrabbit.mongomk.impl.MongoConnection; import org.apache.jackrabbit.mongomk.model.CommitMongo; import org.apache.jackrabbit.mongomk.model.HeadMongo; import org.apache.jackrabbit.mongomk.model.NodeMongo; @@ -63,7 +63,7 @@ public static void initCommitCollection(MongoConnection mongoConnection) { DBCollection commitCollection = mongoConnection.getCommitCollection(); DBObject index = new BasicDBObject(); - index.put(CommitMongo.KEY_REVISION_ID, Long.valueOf(1)); + index.put(CommitMongo.KEY_REVISION_ID, 1L); DBObject options = new BasicDBObject(); options.put("unique", Boolean.TRUE); commitCollection.ensureIndex(index, options); @@ -96,8 +96,8 @@ public static void initNodeCollection(MongoConnection mongoConnection) { DBCollection nodeCollection = mongoConnection.getNodeCollection(); DBObject index = new BasicDBObject(); - index.put(NodeMongo.KEY_PATH, Long.valueOf(1)); - index.put(NodeMongo.KEY_REVISION_ID, Long.valueOf(1)); + index.put(NodeMongo.KEY_PATH, 1L); + index.put(NodeMongo.KEY_REVISION_ID, 1L); DBObject options = new BasicDBObject(); options.put("unique", Boolean.TRUE); nodeCollection.ensureIndex(index, options); @@ -107,7 +107,11 @@ nodeCollection.insert(root); } + public static String fromMongoRepresentation(Long revisionId) { + return String.valueOf(revisionId); + } + public static Long toMongoRepresentation(String revisionId) { - return revisionId != null? Long.parseLong(revisionId) : 0L; + return revisionId != null? Long.parseLong(revisionId) : null; } } Index: src/main/java/org/apache/jackrabbit/mongomk/api/model/Node.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/api/model/Node.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/api/model/Node.java (working copy) @@ -79,15 +79,15 @@ Map getProperties(); /** - * Returns the revision id of this node if known already, else this will return {@code null}. The revision id - * will be determined only after the commit has been successfully performed or the node has been read as part of an - * existing revision. + * Returns the revision id of this node if known already, else this will return {@code null}. + * The revision id will be determined only after the commit has been successfully + * performed or the node has been read as part of an existing revision. * - * @see #setRevisionId(String) + * @see #setRevisionId(Long) * * @return The revision id of this commit or {@code null}. */ - String getRevisionId(); + Long getRevisionId(); /** * Sets the revision id of this node. @@ -96,5 +96,5 @@ * * @param revisionId The revision id to set. */ - void setRevisionId(String revisionId); + void setRevisionId(Long revisionId); } Index: src/test/java/org/apache/jackrabbit/mongomk/impl/NodeAssert.java =================================================================== --- src/test/java/org/apache/jackrabbit/mongomk/impl/NodeAssert.java (revision 1390863) +++ src/test/java/org/apache/jackrabbit/mongomk/impl/NodeAssert.java (working copy) @@ -81,8 +81,8 @@ Assert.assertEquals(expected.getName(), actual.getName()); Assert.assertEquals(expected.getPath(), actual.getPath()); - String expectedRevisionId = expected.getRevisionId(); - String actualRevisionId = actual.getRevisionId(); + Long expectedRevisionId = expected.getRevisionId(); + Long actualRevisionId = actual.getRevisionId(); if (expectedRevisionId == null) { Assert.assertNull(actualRevisionId); Index: src/main/java/org/apache/jackrabbit/mongomk/impl/builder/NodeBuilder.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/impl/builder/NodeBuilder.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/impl/builder/NodeBuilder.java (working copy) @@ -23,6 +23,7 @@ import org.apache.jackrabbit.mongomk.api.model.Node; import org.apache.jackrabbit.mongomk.impl.json.JsonUtil; import org.apache.jackrabbit.mongomk.impl.model.NodeImpl; +import org.apache.jackrabbit.mongomk.util.MongoUtil; import org.apache.jackrabbit.oak.commons.PathUtils; import org.json.JSONArray; import org.json.JSONException; @@ -95,7 +96,7 @@ } NodeImpl node = new NodeImpl(realPath); - node.setRevisionId(revisionId); + node.setRevisionId(MongoUtil.toMongoRepresentation(revisionId)); Map properties = null; for (@SuppressWarnings("rawtypes") Index: src/test/java/org/apache/jackrabbit/mongomk/impl/builder/NodeBuilderTest.java =================================================================== --- src/test/java/org/apache/jackrabbit/mongomk/impl/builder/NodeBuilderTest.java (revision 1390863) +++ src/test/java/org/apache/jackrabbit/mongomk/impl/builder/NodeBuilderTest.java (working copy) @@ -48,13 +48,13 @@ Node node = NodeBuilder.build(json); Node node_c = new NodeImpl("/a/c"); - node_c.setRevisionId("2"); + node_c.setRevisionId(2L); Node node_b = new NodeImpl("/a/b"); - node_b.setRevisionId("2"); + node_b.setRevisionId(2L); Node node_a = new NodeImpl("/a", new Node[] { node_b, node_c }); - node_a.setRevisionId("1"); + node_a.setRevisionId(1L); Node node_root = new NodeImpl("/", new Node[] { node_a }); - node_root.setRevisionId("1"); + node_root.setRevisionId(1L); NodeAssert.assertDeepEquals(node, node_root); } Index: src/main/java/org/apache/jackrabbit/mongomk/command/NodeExistsCommandMongo.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/command/NodeExistsCommandMongo.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/command/NodeExistsCommandMongo.java (working copy) @@ -18,9 +18,9 @@ import java.util.Set; -import org.apache.jackrabbit.mongomk.MongoConnection; import org.apache.jackrabbit.mongomk.api.command.AbstractCommand; import org.apache.jackrabbit.mongomk.api.model.Node; +import org.apache.jackrabbit.mongomk.impl.MongoConnection; import org.apache.jackrabbit.oak.commons.PathUtils; /** @@ -31,7 +31,7 @@ public class NodeExistsCommandMongo extends AbstractCommand { private final MongoConnection mongoConnection; - private final String revisionId; + private final Long revisionId; private Node parentNode; private String path; @@ -41,9 +41,10 @@ * * @param mongoConnection The {@link MongoConnection}. * @param path The root path of the nodes to get. - * @param revisionId The {@link RevisionId} or {@code null}. + * @param revisionId The revision id or null. */ - public NodeExistsCommandMongo(MongoConnection mongoConnection, String path, String revisionId) { + public NodeExistsCommandMongo(MongoConnection mongoConnection, String path, + Long revisionId) { this.mongoConnection = mongoConnection; this.path = path; this.revisionId = revisionId; Index: src/test/java/org/apache/jackrabbit/mongomk/command/NodeExistsCommandMongoTest.java =================================================================== --- src/test/java/org/apache/jackrabbit/mongomk/command/NodeExistsCommandMongoTest.java (revision 1390863) +++ src/test/java/org/apache/jackrabbit/mongomk/command/NodeExistsCommandMongoTest.java (working copy) @@ -38,7 +38,7 @@ @Test public void simple() throws Exception { SimpleNodeScenario scenario = new SimpleNodeScenario(mongoConnection); - String revisionId = scenario.create(); + Long revisionId = scenario.create(); NodeExistsCommandMongo command = new NodeExistsCommandMongo( mongoConnection, "/a", revisionId); @@ -85,7 +85,7 @@ scenario.create(); NodeExistsCommandMongo command = new NodeExistsCommandMongo( - mongoConnection, "/a", "123456789"); + mongoConnection, "/a", 123456789L); try { command.execute(); fail("Expected: Invalid revision id exception"); @@ -168,8 +168,8 @@ @Test public void existsInOldRevNotInNewRev() throws Exception { SimpleNodeScenario scenario = new SimpleNodeScenario(mongoConnection); - String rev1 = scenario.create(); - String rev2 = scenario.delete_A(); + Long rev1 = scenario.create(); + Long rev2 = scenario.delete_A(); NodeExistsCommandMongo command = new NodeExistsCommandMongo( mongoConnection, "/a", rev1); Index: src/main/java/org/apache/jackrabbit/mongomk/impl/model/NodeImpl.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/impl/model/NodeImpl.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/impl/model/NodeImpl.java (working copy) @@ -44,7 +44,7 @@ private String name; private String path; private Map properties; - private String revisionId; + private Long revisionId; /** * Constructs a new {@code NodeImpl}. @@ -209,12 +209,12 @@ } @Override - public String getRevisionId() { + public Long getRevisionId() { return revisionId; } @Override - public void setRevisionId(String revisionId) { + public void setRevisionId(Long revisionId) { this.revisionId = revisionId; } Index: src/main/java/org/apache/jackrabbit/mongomk/model/NodeMongo.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/model/NodeMongo.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/model/NodeMongo.java (working copy) @@ -27,7 +27,6 @@ import org.apache.jackrabbit.mongomk.api.model.Node; import org.apache.jackrabbit.mongomk.impl.model.NodeImpl; -import org.apache.jackrabbit.mongomk.util.MongoUtil; import org.apache.jackrabbit.oak.commons.PathUtils; import com.mongodb.BasicDBObject; @@ -61,7 +60,7 @@ String path = node.getPath(); nodeMongo.setPath(path); - String revisionId = node.getRevisionId(); + Long revisionId = node.getRevisionId(); if (revisionId != null) { nodeMongo.setRevisionId(revisionId); } @@ -104,7 +103,6 @@ } public static NodeImpl toNode(NodeMongo nodeMongo) { - String revisionId = String.valueOf(nodeMongo.getRevisionId()); String path = nodeMongo.getPath(); List childNames = nodeMongo.getChildren(); long childCount = childNames != null ? childNames.size() : 0; @@ -119,6 +117,7 @@ } } + Long revisionId = nodeMongo.getRevisionId(); NodeImpl nodeImpl = new NodeImpl(); nodeImpl.setPath(path); nodeImpl.setChildCount(childCount); @@ -247,10 +246,6 @@ put(KEY_REVISION_ID, revisionId); } - public void setRevisionId(String revisionId) { - this.setRevisionId(MongoUtil.toMongoRepresentation(revisionId)); - } - @Override public String toString() { StringBuilder sb = new StringBuilder(); Index: src/main/java/org/apache/jackrabbit/mongomk/query/ReadAndIncHeadRevisionQuery.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/query/ReadAndIncHeadRevisionQuery.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/query/ReadAndIncHeadRevisionQuery.java (working copy) @@ -16,7 +16,7 @@ */ package org.apache.jackrabbit.mongomk.query; -import org.apache.jackrabbit.mongomk.MongoConnection; +import org.apache.jackrabbit.mongomk.impl.MongoConnection; import org.apache.jackrabbit.mongomk.model.HeadMongo; import com.mongodb.BasicDBObject; @@ -43,7 +43,7 @@ @Override public HeadMongo execute() throws Exception { DBObject query = new BasicDBObject(); - DBObject inc = new BasicDBObject(HeadMongo.KEY_NEXT_REVISION_ID, Long.valueOf(1)); + DBObject inc = new BasicDBObject(HeadMongo.KEY_NEXT_REVISION_ID, 1L); DBObject update = new BasicDBObject("$inc", inc); DBCollection headCollection = mongoConnection.getHeadCollection(); Index: src/main/java/org/apache/jackrabbit/mongomk/command/ReadBlobCommandMongo.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/command/ReadBlobCommandMongo.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/command/ReadBlobCommandMongo.java (working copy) @@ -19,8 +19,8 @@ import java.io.InputStream; import org.apache.commons.io.IOUtils; -import org.apache.jackrabbit.mongomk.MongoConnection; import org.apache.jackrabbit.mongomk.api.command.AbstractCommand; +import org.apache.jackrabbit.mongomk.impl.MongoConnection; import com.mongodb.BasicDBObject; import com.mongodb.gridfs.GridFS; Index: src/main/java/org/apache/jackrabbit/mongomk/query/SaveAndSetHeadRevisionQuery.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/query/SaveAndSetHeadRevisionQuery.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/query/SaveAndSetHeadRevisionQuery.java (working copy) @@ -16,7 +16,7 @@ */ package org.apache.jackrabbit.mongomk.query; -import org.apache.jackrabbit.mongomk.MongoConnection; +import org.apache.jackrabbit.mongomk.impl.MongoConnection; import org.apache.jackrabbit.mongomk.model.HeadMongo; import com.mongodb.BasicDBObject; Index: src/main/java/org/apache/jackrabbit/mongomk/query/SaveCommitQuery.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/query/SaveCommitQuery.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/query/SaveCommitQuery.java (working copy) @@ -16,7 +16,7 @@ */ package org.apache.jackrabbit.mongomk.query; -import org.apache.jackrabbit.mongomk.MongoConnection; +import org.apache.jackrabbit.mongomk.impl.MongoConnection; import org.apache.jackrabbit.mongomk.model.CommitMongo; import com.mongodb.DBCollection; Index: src/main/java/org/apache/jackrabbit/mongomk/query/SaveNodesQuery.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/query/SaveNodesQuery.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/query/SaveNodesQuery.java (working copy) @@ -18,7 +18,7 @@ import java.util.Collection; -import org.apache.jackrabbit.mongomk.MongoConnection; +import org.apache.jackrabbit.mongomk.impl.MongoConnection; import org.apache.jackrabbit.mongomk.model.NodeMongo; import com.mongodb.DBCollection; Index: src/test/java/org/apache/jackrabbit/mongomk/scenario/SimpleNodeScenario.java =================================================================== --- src/test/java/org/apache/jackrabbit/mongomk/scenario/SimpleNodeScenario.java (revision 1390863) +++ src/test/java/org/apache/jackrabbit/mongomk/scenario/SimpleNodeScenario.java (working copy) @@ -19,10 +19,10 @@ import java.util.LinkedList; import java.util.List; -import org.apache.jackrabbit.mongomk.MongoConnection; import org.apache.jackrabbit.mongomk.api.model.Commit; import org.apache.jackrabbit.mongomk.api.model.Instruction; import org.apache.jackrabbit.mongomk.command.CommitCommandMongo; +import org.apache.jackrabbit.mongomk.impl.MongoConnection; import org.apache.jackrabbit.mongomk.impl.model.AddNodeInstructionImpl; import org.apache.jackrabbit.mongomk.impl.model.AddPropertyInstructionImpl; import org.apache.jackrabbit.mongomk.impl.model.CommitImpl; @@ -33,15 +33,14 @@ * * @author instructions = new LinkedList(); instructions.add(new AddNodeInstructionImpl("/a", "child" + i)); @@ -88,30 +84,17 @@ return revisionId; } - /** - * Deletes the a node. - * - *
-     * "-a"
-     * 
- * - * @return The {@link RevisionId}. - * @throws Exception - * If an error occurred. - */ - public String delete_A() throws Exception { + public Long delete_A() throws Exception { List instructions = new LinkedList(); instructions.add(new RemoveNodeInstructionImpl("/", "a")); Commit commit = new CommitImpl("/", "-a", "This is a commit with deleted /a", instructions); CommitCommandMongo command = new CommitCommandMongo(mongoConnection, commit); - String revisionId = command.execute(); - - return revisionId; + return command.execute(); } - public String delete_B() throws Exception { + public Long delete_B() throws Exception { List instructions = new LinkedList(); instructions.add(new RemoveNodeInstructionImpl("/a", "b")); Commit commit = new CommitImpl("/a", "-b", "This is a commit with deleted /a/b", @@ -120,18 +103,7 @@ return command.execute(); } - /** - * Updates the following nodes: - * - *
-     * TBD
-     * 
- * - * @return The {@link RevisionId}. - * @throws Exception - * If an error occurred. - */ - public String update_A_and_add_D_and_E() throws Exception { + public Long update_A_and_add_D_and_E() throws Exception { List instructions = new LinkedList(); instructions.add(new AddNodeInstructionImpl("/a", "d")); instructions.add(new AddNodeInstructionImpl("/a/b", "e")); @@ -143,8 +115,6 @@ Commit commit = new CommitImpl("", "TODO", "This is a commit with updated /a and added /a/d and /a/b/e", instructions); CommitCommandMongo command = new CommitCommandMongo(mongoConnection, commit); - String revisionId = command.execute(); - - return revisionId; + return command.execute(); } } Index: src/main/java/org/apache/jackrabbit/mongomk/command/WriteBlobCommandMongo.java =================================================================== --- src/main/java/org/apache/jackrabbit/mongomk/command/WriteBlobCommandMongo.java (revision 1390863) +++ src/main/java/org/apache/jackrabbit/mongomk/command/WriteBlobCommandMongo.java (working copy) @@ -21,8 +21,8 @@ import java.io.InputStream; import org.apache.commons.codec.digest.DigestUtils; -import org.apache.jackrabbit.mongomk.MongoConnection; import org.apache.jackrabbit.mongomk.api.command.AbstractCommand; +import org.apache.jackrabbit.mongomk.impl.MongoConnection; import com.mongodb.BasicDBObject; import com.mongodb.gridfs.GridFS;