You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by st...@apache.org on 2011/04/21 17:04:46 UTC
svn commit: r1095740 - in
/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk:
MicroKernelImpl.java Repository.java store/Commit.java
store/CommitBuilder.java store/MutableCommit.java store/MutableNode.java
store/ObjectStore.java
Author: stefan
Date: Thu Apr 21 15:04:46 2011
New Revision: 1095740
URL: http://svn.apache.org/viewvc?rev=1095740&view=rev
Log:
MicroKernel prototype (WIP)
Modified:
jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/MicroKernelImpl.java
jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/Repository.java
jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/Commit.java
jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/CommitBuilder.java
jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/MutableCommit.java
jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/MutableNode.java
jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/ObjectStore.java
Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/MicroKernelImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/MicroKernelImpl.java?rev=1095740&r1=1095739&r2=1095740&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/MicroKernelImpl.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/MicroKernelImpl.java Thu Apr 21 15:04:46 2011
@@ -2,8 +2,11 @@ package org.apache.jackrabbit.mk;
import org.apache.jackrabbit.mk.api.MicroKernel;
import org.apache.jackrabbit.mk.api.MicroKernelException;
+import org.apache.jackrabbit.mk.store.Commit;
import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
/**
*
@@ -53,9 +56,40 @@ public class MicroKernelImpl implements
throw new IllegalStateException("this instance has already been disposed");
}
- // todo implement
+ List<Commit> history = new ArrayList<Commit>();
+ try {
+ Commit commit = rep.getHeadCommit();
+ while (commit != null
+ && history.size() < maxEntries
+ && commit.getCommitTS() >= since) {
+ history.add(commit);
+
+ String commitId = commit.getParentId();
+ if (commitId == null) {
+ break;
+ }
+ commit = rep.getCommit(commitId);
+ }
+ } catch (Exception e) {
+ throw new MicroKernelException(e);
+ }
- return null;
+ StringBuilder buf = new StringBuilder();
+ buf.append("[");
+ for (Commit commit : history) {
+ if (buf.charAt(buf.length() - 1) != '[') {
+ buf.append(",{");
+ } else {
+ buf.append("{");
+ }
+ buf.append("\"id\":\"");
+ buf.append(commit.getId());
+ buf.append("\",\"ts\":\"");
+ buf.append(commit.getCommitTS());
+ buf.append("\"}");
+ }
+ buf.append("]");
+ return buf.toString();
}
public String getJournal(String fromRevisionId, String toRevisionId) throws MicroKernelException {
Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/Repository.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/Repository.java?rev=1095740&r1=1095739&r2=1095740&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/Repository.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/Repository.java Thu Apr 21 15:04:46 2011
@@ -75,6 +75,20 @@ public class Repository {
return store.getHeadCommit().getId();
}
+ public Commit getHeadCommit() throws Exception {
+ if (!initialized) {
+ throw new IllegalStateException("not initialized");
+ }
+ return store.getHeadCommit();
+ }
+
+ public Commit getCommit(String id) throws Exception {
+ if (!initialized) {
+ throw new IllegalStateException("not initialized");
+ }
+ return store.getCommit(id);
+ }
+
public Node getNode(String revId, String path) throws Exception {
if (!initialized) {
throw new IllegalStateException("not initialized");
Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/Commit.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/Commit.java?rev=1095740&r1=1095739&r2=1095740&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/Commit.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/Commit.java Thu Apr 21 15:04:46 2011
@@ -26,8 +26,8 @@ import java.util.List;
*/
public class Commit extends StoredObject {
- // id's of parent commits
- final String[] parentIds;
+ // id of parent commit
+ final String parentId;
// id of root node associated with this commit
final String rootNodeId;
@@ -35,11 +35,11 @@ public class Commit extends StoredObject
// commit timestamp
final long commitTS;
- protected Commit(String id, String rootNodeId, long commitTS, List<String> parentIds) {
+ protected Commit(String id, String rootNodeId, long commitTS, String parentId) {
super(id);
this.rootNodeId = rootNodeId;
- this.parentIds = parentIds.toArray(new String[parentIds.size()]);
+ this.parentId = parentId;
this.commitTS = commitTS;
}
@@ -47,8 +47,8 @@ public class Commit extends StoredObject
return rootNodeId;
}
- public String[] getParentIds() {
- return parentIds;
+ public String getParentId() {
+ return parentId;
}
public long getCommitTS() {
@@ -65,12 +65,8 @@ public class Commit extends StoredObject
}
String rootNodeId = in.readUTF();
long commitTS = in.readLong();
- int count = in.readInt();
- List<String> parentIds = new ArrayList<String>(count);
- while (count-- > 0) {
- parentIds.add(in.readUTF());
- }
+ String parentId = in.readUTF();
in.close();
- return new Commit(id, rootNodeId, commitTS, parentIds);
+ return new Commit(id, rootNodeId, commitTS, "".equals(parentId) ? null : parentId);
}
}
Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/CommitBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/CommitBuilder.java?rev=1095740&r1=1095739&r2=1095740&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/CommitBuilder.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/CommitBuilder.java Thu Apr 21 15:04:46 2011
@@ -52,7 +52,7 @@ public class CommitBuilder {
if (modParent.getChildNodeEntries().containsKey(nodeName)) {
throw new Exception("there's already a child node with name '" + nodeName + "'");
}
- MutableNode newChild = new MutableNode(baseRevId);
+ MutableNode newChild = new MutableNode();
newChild.getProperties().putAll(properties);
modParent.getChildNodeEntries().put(nodeName, ""); // value will be computed on commit
@@ -126,7 +126,7 @@ public class CommitBuilder {
}
MutableCommit newCommit = new MutableCommit();
- newCommit.getParentIds().add(baseRevId);
+ newCommit.setParentId(baseRevId);
newCommit.setCommitTS(System.currentTimeMillis());
newCommit.setRootNodeId(rootNodeId);
String newRevId = store.putCommit(newCommit);
@@ -141,7 +141,7 @@ public class CommitBuilder {
MutableNode getOrCreateStagedNode(String nodePath) throws Exception {
MutableNode node = staged.get(nodePath);
if (node == null) {
- node = new MutableNode(baseRevId, rep.getNode(baseRevId, nodePath));
+ node = new MutableNode(rep.getNode(baseRevId, nodePath));
staged.put(nodePath, node);
// make sure all direct ancestors are staged as well
String p1 = nodePath;
@@ -151,7 +151,7 @@ public class CommitBuilder {
if (n0 != null) {
break;
}
- n0 = new MutableNode(baseRevId, rep.getNode(baseRevId, p0));
+ n0 = new MutableNode(rep.getNode(baseRevId, p0));
staged.put(p0, n0);
p1 = p0;
}
Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/MutableCommit.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/MutableCommit.java?rev=1095740&r1=1095739&r2=1095740&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/MutableCommit.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/MutableCommit.java Thu Apr 21 15:04:46 2011
@@ -33,17 +33,19 @@ public class MutableCommit {
// commit timestamp
long commitTS;
- // id's of parent commits
- final List<String> parentIds;
+ // id of parent commit
+ String parentId;
public MutableCommit() {
- parentIds = new ArrayList<String>();
}
- public List<String> getParentIds() {
- return parentIds;
+ public String getParentId() {
+ return parentId;
}
+ public void setParentId(String parentId) {
+ this.parentId = parentId;
+ }
public String getRootNodeId() {
return rootNodeId;
@@ -70,10 +72,7 @@ public class MutableCommit {
out.write(Constants.COMMIT);
out.writeUTF(rootNodeId);
out.writeLong(commitTS);
- out.writeInt(parentIds.size());
- for (String commitId : parentIds) {
- out.writeUTF(commitId);
- }
+ out.writeUTF(parentId == null ? "" : parentId);
out.close();
} catch (IOException safeToIgnore) {
}
Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/MutableNode.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/MutableNode.java?rev=1095740&r1=1095739&r2=1095740&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/MutableNode.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/MutableNode.java Thu Apr 21 15:04:46 2011
@@ -28,30 +28,22 @@ import java.util.Map;
*/
public class MutableNode {
- final String baseRevId;
-
final Map<String, String> properties;
// map keeping insertion order
final LinkedHashMap<String, String> childEntries;
- public MutableNode(String baseRevId) {
- this.baseRevId = baseRevId;
+ public MutableNode() {
this.properties = new HashMap<String, String>();
this.childEntries = new LinkedHashMap<String, String>();
}
- public MutableNode(String baseRevId, Node existing) {
- this.baseRevId = baseRevId;
+ public MutableNode(Node existing) {
this.properties = new HashMap<String, String>(existing.getProperties());
this.childEntries = new LinkedHashMap<String, String>(existing.getChildNodeEntries());
}
- public String getBaseRevId() {
- return baseRevId;
- }
-
public Map<String, String> getProperties() {
return properties;
}
Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/ObjectStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/ObjectStore.java?rev=1095740&r1=1095739&r2=1095740&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/ObjectStore.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/ObjectStore.java Thu Apr 21 15:04:46 2011
@@ -41,7 +41,7 @@ public class ObjectStore implements Cons
// make sure we've got a HEAD commit
String head = store.getHeadCommitId();
if (head == null) {
- String rootNodeId = store.put(new MutableNode(null).toBytes());
+ String rootNodeId = store.put(new MutableNode().toBytes());
MutableCommit initialCommit = new MutableCommit();
initialCommit.setCommitTS(System.currentTimeMillis());
initialCommit.setRootNodeId(rootNodeId);