You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by th...@apache.org on 2010/03/28 17:43:20 UTC

svn commit: r928437 [2/3] - in /jackrabbit/sandbox/jackrabbit-j3: ./ src/main/java/org/apache/jackrabbit/j3/ src/main/java/org/apache/jackrabbit/j3/lock/ src/main/java/org/apache/jackrabbit/j3/mc/ src/main/java/org/apache/jackrabbit/j3/mc/jdbc/ src/mai...

Added: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/lock/LockManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/lock/LockManagerImpl.java?rev=928437&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/lock/LockManagerImpl.java (added)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/lock/LockManagerImpl.java Sun Mar 28 15:43:18 2010
@@ -0,0 +1,96 @@
+/*
+ * 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.j3.lock;
+
+import java.util.HashSet;
+import javax.jcr.AccessDeniedException;
+import javax.jcr.InvalidItemStateException;
+import javax.jcr.PathNotFoundException;
+import javax.jcr.RepositoryException;
+import javax.jcr.lock.Lock;
+import javax.jcr.lock.LockException;
+import javax.jcr.lock.LockManager;
+import org.apache.jackrabbit.j3.NodeImpl;
+import org.apache.jackrabbit.j3.SessionImpl;
+import org.apache.jackrabbit.j3.mc.Val;
+
+/**
+ * A lock manager implementation.
+ */
+public class LockManagerImpl implements LockManager {
+
+    private final LockSystem lockSystem;
+    private final SessionImpl session;
+    private HashSet<Val> lockTokens = new HashSet<Val>();
+
+    public LockManagerImpl(SessionImpl session, LockSystem lockSystem) {
+        this.session = session;
+        this.lockSystem = lockSystem;
+    }
+
+    public boolean hasLockToken(Val lockToken) {
+        return lockTokens.contains(lockToken);
+    }
+
+    public Lock lock(String absPath, boolean isDeep, boolean isSessionScoped, long timeoutHint, String ownerInfo)
+            throws LockException, PathNotFoundException, AccessDeniedException, InvalidItemStateException,
+            RepositoryException {
+        NodeImpl node = session.getNode(absPath);
+        LockImpl lock = node.lock(isDeep, isSessionScoped);
+        lockTokens.add(lock.getInternalLockToken());
+        return lock;
+    }
+
+    public void addLockToken(String lockToken) throws LockException, RepositoryException {
+        synchronized (session) {
+            lockTokens.add(Val.get(lockToken));
+        }
+    }
+
+    public Lock getLock(String absPath) throws PathNotFoundException, LockException, AccessDeniedException,
+            RepositoryException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public String[] getLockTokens() throws RepositoryException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public boolean holdsLock(String absPath) throws PathNotFoundException, RepositoryException {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public boolean isLocked(String absPath) throws PathNotFoundException, RepositoryException {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public void removeLockToken(String lockToken) throws LockException, RepositoryException {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void unlock(String absPath) throws PathNotFoundException, LockException, AccessDeniedException,
+            InvalidItemStateException, RepositoryException {
+        // TODO Auto-generated method stub
+
+    }
+
+}

Added: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/lock/LockSystem.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/lock/LockSystem.java?rev=928437&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/lock/LockSystem.java (added)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/lock/LockSystem.java Sun Mar 28 15:43:18 2010
@@ -0,0 +1,34 @@
+/*
+ * 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.j3.lock;
+
+import javax.jcr.Repository;
+
+/**
+ * A lock system. It is only used if there are any locks used.
+ */
+public class LockSystem {
+
+    // Actually, maybe it's not required at all.
+
+    private final Repository rep;
+
+    public LockSystem(Repository rep) {
+        this.rep = rep;
+    }
+
+}

Modified: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/Bundle.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/Bundle.java?rev=928437&r1=928436&r2=928437&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/Bundle.java (original)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/Bundle.java Sun Mar 28 15:43:18 2010
@@ -18,16 +18,20 @@ package org.apache.jackrabbit.j3.mc;
 
 import javax.jcr.PropertyType;
 
+/**
+ * A byte buffer that contains serialized data.
+ */
 public class Bundle {
 
     // types 0 (PropertyType.UNDEFINED) - 12 (PropertyType.DECIMAL) are used
 
-    private static final int BACK_POINTER = 42;
-    private static final int MULTI_VALUE = 43;
-    private static final int BINARY_REFERENCE = 44;
-    private static final int BOOLEAN_FALSE = 45;
-    private static final int BOOLEAN_TRUE = 46;
-    private static final int LONG_NEGATIVE = 47;
+    private static final int BACK_POINTER = 38;
+    private static final int MULTI_VALUE = 39;
+    private static final int BINARY_REFERENCE = 40;
+    private static final int BOOLEAN_FALSE = 41;
+    private static final int BOOLEAN_TRUE = 42;
+    private static final int LONG_NEGATIVE = 43;
+    private static final int MULTI_VALUE_LEN_0_3 = 44;
     private static final int STRING_LEN_0_15 = 48;
     private static final int INDEXED = 64;
 
@@ -233,8 +237,13 @@ public class Bundle {
         int type = v.getType();
         switch (type) {
         case Val.TYPE_MULTI_VALUE: {
-            writeByte((byte) MULTI_VALUE);
-            writeVarInt(v.getArray().length);
+            int len = v.getArray().length;
+            if (len < 4) {
+                writeByte((byte) (MULTI_VALUE_LEN_0_3 + len));
+            } else {
+                writeByte((byte) MULTI_VALUE);
+                writeVarInt(len);
+            }
             for (Val x : v.getArray()) {
                 writeVal(x);
             }
@@ -334,7 +343,12 @@ public class Bundle {
         switch (type) {
         case Val.TYPE_MULTI_VALUE: {
             Val[] array = v.getArray();
-            int len = 1 + getVarLongLen(array.length);
+            int len = array.length;
+            if (len < 4) {
+                len = 1;
+            } else {
+                len = 1 + getVarLongLen(len);
+            }
             for (Val x : array) {
                 len += getValLen(x);
             }
@@ -405,8 +419,8 @@ public class Bundle {
         }
         case MULTI_VALUE: {
             int len = readVarInt();
-            Val array[] = new Val[len];
-            for (int i=0; i<len; i++) {
+            Val[] array = new Val[len];
+            for (int i = 0; i < len; i++) {
                 array[i] = readVal();
             }
             return Val.get(array);
@@ -442,6 +456,12 @@ public class Bundle {
         default:
             if (type >= STRING_LEN_0_15 && type < STRING_LEN_0_15 + 16) {
                 return Val.get(readString(type - STRING_LEN_0_15));
+            } else if (type >= MULTI_VALUE_LEN_0_3 && type < MULTI_VALUE_LEN_0_3 + 4) {
+                Val[] array = new Val[type - MULTI_VALUE_LEN_0_3];
+                for (int i = 0; i < array.length; i++) {
+                    array[i] = readVal();
+                }
+                return Val.get(array);
             }
             throw new IllegalArgumentException("type:" + type);
         }

Modified: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/McException.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/McException.java?rev=928437&r1=928436&r2=928437&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/McException.java (original)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/McException.java Sun Mar 28 15:43:18 2010
@@ -16,6 +16,9 @@
  */
 package org.apache.jackrabbit.j3.mc;
 
+/**
+ * A runtime exception.
+ */
 public class McException extends RuntimeException {
 
     public McException(String message) {

Modified: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/NodeData.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/NodeData.java?rev=928437&r1=928436&r2=928437&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/NodeData.java (original)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/NodeData.java Sun Mar 28 15:43:18 2010
@@ -16,11 +16,22 @@
  */
 package org.apache.jackrabbit.j3.mc;
 
+/**
+ * The data container of a node.
+ */
 public class NodeData {
 
+    private static final int BIT_VERSION = 1;
+    private static final int BIT_CHILDREN = 2;
+    private static final int BIT_PROPERTIES = 4;
+    private static final int BIT_PRIMARY_TYPE = 8;
+    private static final int BIT_LOCKED = 16;
+
     private final Val id;
     private final Val primaryParentId;
     private long version;
+    private Val primaryType;
+    private Val lockToken;
     private Val[] propertyValuePairs;
     private Val[] childNameIdPairs;
     private int cachedParentIndex;
@@ -31,7 +42,7 @@ public class NodeData {
         this.version = version;
     }
 
-    public NodeData clone() {
+    public NodeData createCopy() {
         NodeData copy = new NodeData(id, primaryParentId, version);
         copy.propertyValuePairs = propertyValuePairs;
         copy.childNameIdPairs = childNameIdPairs;
@@ -206,32 +217,77 @@ public class NodeData {
         if (mainParentId == Val.FALSE) {
             mainParentId = null;
         }
-        int version = bundle.readVarInt();
+        int flags = bundle.readVarInt();
+        int version = 0;
+        if ((flags & BIT_VERSION) != 0) {
+            version = bundle.readVarInt();
+        }
         NodeData data = new NodeData(id, mainParentId, version);
-        Val children = bundle.readVal();
-        if (children != Val.FALSE) {
-            data.childNameIdPairs = children.getArray();
-        }
-        Val properties = bundle.readVal();
-        if (properties != Val.FALSE) {
-            data.propertyValuePairs = properties.getArray();
+        if ((flags & BIT_LOCKED) != 0) {
+            data.lockToken = bundle.readVal();
+        }
+        if ((flags & BIT_PRIMARY_TYPE) != 0) {
+            data.primaryType = bundle.readVal();
+        }
+        if ((flags & BIT_CHILDREN) != 0) {
+            int count = bundle.readVarInt();
+            data.childNameIdPairs = readArray(bundle, count * 2);
+        }
+        if ((flags & BIT_PROPERTIES) != 0) {
+            int count = bundle.readVarInt();
+            data.propertyValuePairs = readArray(bundle, count * 2);
         }
         return data;
     }
 
+    private static Val[] readArray(Bundle bundle, int count) {
+        Val[] array = new Val[count];
+        for (int i = 0; i < count; i++) {
+            array[i] = bundle.readVal();
+        }
+        return array;
+    }
+
     public void writeTo(Bundle bundle) {
         bundle.writeVal(id);
         bundle.writeVal(primaryParentId == null ? Val.FALSE : primaryParentId);
-        bundle.writeVarLong(version);
-        if (childNameIdPairs == null) {
-            bundle.writeVal(Val.FALSE);
-        } else {
-            bundle.writeVal(Val.get(childNameIdPairs));
+        int flags = 0;
+        if (version != 0) {
+            flags |= BIT_VERSION;
         }
-        if (propertyValuePairs == null) {
-            bundle.writeVal(Val.FALSE);
-        } else {
-            bundle.writeVal(Val.get(propertyValuePairs));
+        if (lockToken != null) {
+            flags |= BIT_LOCKED;
+        }
+        if (primaryType != null) {
+            flags |= BIT_PRIMARY_TYPE;
+        }
+        if (childNameIdPairs != null) {
+            flags |= BIT_CHILDREN;
+        }
+        if (propertyValuePairs != null) {
+            flags |= BIT_PROPERTIES;
+        }
+        bundle.writeVarLong(flags);
+        if (version != 0) {
+            bundle.writeVarLong(version);
+        }
+        if (lockToken != null) {
+            bundle.writeVal(lockToken);
+        }
+        if (primaryType != null) {
+            bundle.writeVal(primaryType);
+        }
+        if (childNameIdPairs != null) {
+            bundle.writeVarInt(childNameIdPairs.length / 2);
+            for (Val v : childNameIdPairs) {
+                bundle.writeVal(v);
+            }
+        }
+        if (propertyValuePairs != null) {
+            bundle.writeVarInt(propertyValuePairs.length / 2);
+            for (Val v : propertyValuePairs) {
+                bundle.writeVal(v);
+            }
         }
     }
 
@@ -243,6 +299,22 @@ public class NodeData {
         return primaryParentId;
     }
 
+    public Val getLockToken() {
+        return lockToken;
+    }
+
+    public void setLockToken(Val lockToken) {
+        this.lockToken = lockToken;
+    }
+
+    public Val getPrimaryType() {
+        return primaryType;
+    }
+
+    public void setPrimaryType(Val primaryType) {
+        this.primaryType = primaryType;
+    }
+
     public void incrementVersion() {
         version++;
     }

Modified: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/Storage.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/Storage.java?rev=928437&r1=928436&r2=928437&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/Storage.java (original)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/Storage.java Sun Mar 28 15:43:18 2010
@@ -16,6 +16,9 @@
  */
 package org.apache.jackrabbit.j3.mc;
 
+/**
+ * The storage interface.
+ */
 public interface Storage {
 
     StorageSession openSession(String user, String password);

Modified: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/StorageSession.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/StorageSession.java?rev=928437&r1=928436&r2=928437&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/StorageSession.java (original)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/StorageSession.java Sun Mar 28 15:43:18 2010
@@ -16,6 +16,9 @@
  */
 package org.apache.jackrabbit.j3.mc;
 
+/**
+ * A session bound to a storage.
+ */
 public interface StorageSession {
 
     void close();

Modified: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/Val.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/Val.java?rev=928437&r1=928436&r2=928437&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/Val.java (original)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/Val.java Sun Mar 28 15:43:18 2010
@@ -20,6 +20,9 @@ import java.util.Arrays;
 import java.util.HashMap;
 import javax.jcr.PropertyType;
 
+/**
+ * A value.
+ */
 public class Val implements Comparable<Val> {
 
     public static final Val TRUE = new Val(PropertyType.BOOLEAN, 0, true);
@@ -341,6 +344,9 @@ public class Val implements Comparable<V
     }
 
     public int compareTo(Val o) {
+        if (this == o) {
+            return 0;
+        }
         int result = compareInt(type, o.type);
         if (result != 0) {
             return result;
@@ -381,4 +387,32 @@ public class Val implements Comparable<V
         return Integer.signum(data1.length - data2.length);
     }
 
+    public Val addOrdered(Val x) {
+        // if this is a performance problem,
+        // use java.util.TreeMap<Val, Integer> where the value is the count
+        // or java.util.ArrayList<Val>
+        Val[] oldArray = getArray();
+        int pos = Arrays.binarySearch(oldArray, x);
+        if (pos < 0) {
+            pos = -1 - pos;
+        }
+        Val[] newArray = new Val[oldArray.length + 1];
+        System.arraycopy(oldArray, 0, newArray, 0, pos);
+        System.arraycopy(oldArray, pos, newArray, pos + 1, oldArray.length - pos);
+        newArray[pos] = x;
+        return Val.get(newArray);
+    }
+
+    public Val removeOrdered(Val x) {
+        Val[] oldArray = getArray();
+        int pos = Arrays.binarySearch(oldArray, x);
+        if (pos < 0) {
+            return this;
+        }
+        Val[] newArray = new Val[oldArray.length - 1];
+        System.arraycopy(oldArray, 0, newArray, 0, pos);
+        System.arraycopy(oldArray, pos + 1, newArray, pos, oldArray.length - pos - 1);
+        return Val.get(newArray);
+    }
+
 }

Modified: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/jdbc/JdbcStorage.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/jdbc/JdbcStorage.java?rev=928437&r1=928436&r2=928437&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/jdbc/JdbcStorage.java (original)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/jdbc/JdbcStorage.java Sun Mar 28 15:43:18 2010
@@ -27,11 +27,14 @@ import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.concurrent.atomic.AtomicLong;
 
+/**
+ * A storage that uses the JDBC API.
+ */
 public class JdbcStorage implements Storage {
 
     private final String url;
     private boolean initDone;
-    private final static Val rootNodeId = Val.get(0);
+    private static final Val rootNodeId = Val.get(0);
     private AtomicLong nextNodeId;
 
     public JdbcStorage(String url) {

Modified: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/jdbc/JdbcStorageSession.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/jdbc/JdbcStorageSession.java?rev=928437&r1=928436&r2=928437&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/jdbc/JdbcStorageSession.java (original)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/jdbc/JdbcStorageSession.java Sun Mar 28 15:43:18 2010
@@ -27,6 +27,9 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.HashMap;
 
+/**
+ * A session for the JDBC storage.
+ */
 public class JdbcStorageSession implements StorageSession {
 
     private final JdbcStorage storage;

Modified: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/mem/MemStorage.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/mem/MemStorage.java?rev=928437&r1=928436&r2=928437&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/mem/MemStorage.java (original)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/mem/MemStorage.java Sun Mar 28 15:43:18 2010
@@ -23,9 +23,12 @@ import org.apache.jackrabbit.j3.mc.Stora
 import java.util.HashMap;
 import java.util.concurrent.atomic.AtomicLong;
 
+/**
+ * A storage that keeps all data in memory.
+ */
 public class MemStorage implements Storage {
 
-    private final static Val rootNodeId = Val.get(0);
+    private static final Val rootNodeId = Val.get(0);
     private final HashMap<Val, NodeData> content = new HashMap<Val, NodeData>();
     private AtomicLong nextNodeId = new AtomicLong(1);
 

Modified: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/mem/MemStorageSession.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/mem/MemStorageSession.java?rev=928437&r1=928436&r2=928437&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/mem/MemStorageSession.java (original)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/mem/MemStorageSession.java Sun Mar 28 15:43:18 2010
@@ -21,6 +21,9 @@ import org.apache.jackrabbit.j3.mc.NodeD
 import org.apache.jackrabbit.j3.mc.StorageSession;
 import org.apache.jackrabbit.j3.mc.Val;
 
+/**
+ * A session for the memory storage.
+ */
 public class MemStorageSession implements StorageSession {
 
     private final MemStorage storage;

Added: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/ItemDefinitionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/ItemDefinitionImpl.java?rev=928437&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/ItemDefinitionImpl.java (added)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/ItemDefinitionImpl.java Sun Mar 28 15:43:18 2010
@@ -0,0 +1,64 @@
+/*
+ * 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.j3.nodetype;
+
+import javax.jcr.nodetype.ItemDefinition;
+import javax.jcr.nodetype.NodeType;
+import org.apache.jackrabbit.j3.mc.Val;
+
+/**
+ * The item definition implementation.
+ */
+public class ItemDefinitionImpl implements ItemDefinition {
+
+    protected final NodeTypeManagerImpl manager;
+    protected Val name;
+    protected int onParentVersion;
+    protected boolean isAutoCreated;
+    protected boolean isMandatory;
+    protected boolean isProtected;
+
+    ItemDefinitionImpl(NodeTypeManagerImpl manager) {
+        this.manager = manager;
+    }
+
+    public NodeType getDeclaringNodeType() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public String getName() {
+        return manager.nameToString(name);
+    }
+
+    public int getOnParentVersion() {
+        return onParentVersion;
+    }
+
+    public boolean isAutoCreated() {
+        return isAutoCreated;
+    }
+
+    public boolean isMandatory() {
+        return isMandatory;
+    }
+
+    public boolean isProtected() {
+        return isProtected;
+    }
+
+}

Added: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeDefinitionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeDefinitionImpl.java?rev=928437&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeDefinitionImpl.java (added)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeDefinitionImpl.java Sun Mar 28 15:43:18 2010
@@ -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.j3.nodetype;
+
+import javax.jcr.nodetype.NodeDefinition;
+import javax.jcr.nodetype.NodeType;
+
+/**
+ * The node definition implementation.
+ */
+public class NodeDefinitionImpl extends ItemDefinitionImpl implements NodeDefinition {
+
+    protected NodeType defaultPrimaryType;
+    protected boolean allowsSameNameSiblings;
+
+    NodeDefinitionImpl(NodeTypeManagerImpl manager) {
+        super(manager);
+    }
+
+    public boolean allowsSameNameSiblings() {
+        return allowsSameNameSiblings;
+    }
+
+    public NodeType getDefaultPrimaryType() {
+        return defaultPrimaryType;
+    }
+
+    public String getDefaultPrimaryTypeName() {
+        return defaultPrimaryType == null ? null : defaultPrimaryType.getName();
+    }
+
+    public String[] getRequiredPrimaryTypeNames() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public NodeType[] getRequiredPrimaryTypes() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}

Added: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeDefinitionTemplateImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeDefinitionTemplateImpl.java?rev=928437&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeDefinitionTemplateImpl.java (added)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeDefinitionTemplateImpl.java Sun Mar 28 15:43:18 2010
@@ -0,0 +1,70 @@
+/*
+ * 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.j3.nodetype;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.nodetype.ConstraintViolationException;
+import javax.jcr.nodetype.NodeDefinitionTemplate;
+
+/**
+ * The node definition template implementation.
+ */
+public class NodeDefinitionTemplateImpl extends NodeDefinitionImpl implements NodeDefinitionTemplate {
+
+    NodeDefinitionTemplateImpl(NodeTypeManagerImpl manager) {
+        super(manager);
+    }
+
+    public void setName(String name) throws ConstraintViolationException {
+        this.name = manager.parseName(name);
+    }
+
+    public void setAutoCreated(boolean autoCreated) {
+        this.isAutoCreated = autoCreated;
+    }
+
+    public void setDefaultPrimaryTypeName(String name) throws ConstraintViolationException {
+        try {
+            this.defaultPrimaryType = manager.getNodeType(name);
+        } catch (RepositoryException e) {
+            throw new ConstraintViolationException(e);
+        }
+    }
+
+    public void setMandatory(boolean mandatory) {
+        this.isMandatory = mandatory;
+    }
+
+    public void setOnParentVersion(int opv) {
+        this.onParentVersion = opv;
+    }
+
+    public void setProtected(boolean protectedStatus) {
+        this.isProtected = protectedStatus;
+    }
+
+    public void setRequiredPrimaryTypeNames(String[] names) throws ConstraintViolationException {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void setSameNameSiblings(boolean allowSameNameSiblings) {
+        this.allowsSameNameSiblings = allowSameNameSiblings;
+    }
+
+
+}

Added: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeTypeDefinitionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeTypeDefinitionImpl.java?rev=928437&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeTypeDefinitionImpl.java (added)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeTypeDefinitionImpl.java Sun Mar 28 15:43:18 2010
@@ -0,0 +1,80 @@
+/*
+ * 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.j3.nodetype;
+
+import javax.jcr.nodetype.NodeDefinition;
+import javax.jcr.nodetype.NodeTypeDefinition;
+import javax.jcr.nodetype.PropertyDefinition;
+import org.apache.jackrabbit.j3.mc.Val;
+
+/**
+ * The node type definition implementation.
+ */
+public class NodeTypeDefinitionImpl implements NodeTypeDefinition {
+
+    protected final NodeTypeManagerImpl manager;
+    protected Val name;
+    protected boolean hasOrderableChildNodes;
+    protected boolean isAbstract;
+    protected boolean isMixin;
+    protected boolean isQueryable;
+    protected Val primaryItemName;
+
+    NodeTypeDefinitionImpl(NodeTypeManagerImpl manager) {
+        this.manager = manager;
+    }
+
+    public String getName() {
+        return manager.nameToString(name);
+    }
+
+    public NodeDefinition[] getDeclaredChildNodeDefinitions() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public PropertyDefinition[] getDeclaredPropertyDefinitions() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public String[] getDeclaredSupertypeNames() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public String getPrimaryItemName() {
+        return manager.nameToString(primaryItemName);
+    }
+
+    public boolean hasOrderableChildNodes() {
+        return hasOrderableChildNodes;
+    }
+
+    public boolean isAbstract() {
+        return isAbstract;
+    }
+
+    public boolean isMixin() {
+        return isMixin;
+    }
+
+    public boolean isQueryable() {
+        return isQueryable;
+    }
+
+}

Added: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeTypeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeTypeImpl.java?rev=928437&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeTypeImpl.java (added)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeTypeImpl.java Sun Mar 28 15:43:18 2010
@@ -0,0 +1,105 @@
+/*
+ * 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.j3.nodetype;
+
+import javax.jcr.Value;
+import javax.jcr.nodetype.NodeDefinition;
+import javax.jcr.nodetype.NodeType;
+import javax.jcr.nodetype.NodeTypeIterator;
+import javax.jcr.nodetype.PropertyDefinition;
+
+/**
+ * The node type implementation.
+ */
+public class NodeTypeImpl extends NodeTypeDefinitionImpl implements NodeType {
+
+    NodeTypeImpl(NodeTypeManagerImpl manager) {
+        super(manager);
+    }
+
+    public boolean canAddChildNode(String childNodeName) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public boolean canAddChildNode(String childNodeName, String nodeTypeName) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public boolean canRemoveItem(String itemName) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public boolean canRemoveNode(String nodeName) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public boolean canRemoveProperty(String propertyName) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public boolean canSetProperty(String propertyName, Value value) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public boolean canSetProperty(String propertyName, Value[] values) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public NodeDefinition[] getChildNodeDefinitions() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public NodeTypeIterator getDeclaredSubtypes() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public NodeType[] getDeclaredSupertypes() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public PropertyDefinition[] getPropertyDefinitions() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public NodeTypeIterator getSubtypes() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public NodeType[] getSupertypes() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public boolean isNodeType(String nodeTypeName) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+
+}

Added: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeTypeManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeTypeManagerImpl.java?rev=928437&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeTypeManagerImpl.java (added)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeTypeManagerImpl.java Sun Mar 28 15:43:18 2010
@@ -0,0 +1,218 @@
+/*
+ * 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.j3.nodetype;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import javax.jcr.RepositoryException;
+import javax.jcr.UnsupportedRepositoryOperationException;
+import javax.jcr.nodetype.InvalidNodeTypeDefinitionException;
+import javax.jcr.nodetype.NoSuchNodeTypeException;
+import javax.jcr.nodetype.NodeDefinitionTemplate;
+import javax.jcr.nodetype.NodeType;
+import javax.jcr.nodetype.NodeTypeDefinition;
+import javax.jcr.nodetype.NodeTypeExistsException;
+import javax.jcr.nodetype.NodeTypeIterator;
+import javax.jcr.nodetype.NodeTypeManager;
+import javax.jcr.nodetype.NodeTypeTemplate;
+import javax.jcr.nodetype.PropertyDefinitionTemplate;
+import org.apache.jackrabbit.j3.SessionImpl;
+import org.apache.jackrabbit.j3.mc.Val;
+
+/**
+ * A node type manager implementation.
+ */
+public class NodeTypeManagerImpl implements NodeTypeManager {
+
+    private final HashMap<Val, NodeTypeImpl> nodeTypes = new HashMap<Val, NodeTypeImpl>();
+    private final SessionImpl session;
+
+    void initSystemNodeTypes() {
+        String[] name = {
+                "nt:base",
+                "nt:hierarchyNode",
+                "nt:file",
+                "nt:linkedFile",
+                "nt:folder",
+                "nt:resource",
+                "mix:title",
+                "mix:created",
+                "mix:lastModified",
+                "mix:language",
+                "mix:mimeType",
+                "nt:address",
+                "mix:etag",
+                "nt:unstructured",
+                "nt:nodeType",
+                "nt:propertyDefinition",
+                "nt:childNodeDefinition",
+                "mix:referenceable",
+                "mix:lockable",
+                "mix:shareable",
+                "mix:lifecycle",
+                "mix:simpleVersionable",
+                "mix:versionable",
+                "nt:version",
+                "nt:versionHistory",
+                "nt:frozenNode",
+                "nt:versionLabels",
+                "nt:versionedChild"
+        };
+        for (String n : name) {
+            NodeTypeImpl nt = new NodeTypeImpl(this);
+            nt.name = parseName(n);
+            nodeTypes.put(nt.name, nt);
+        }
+    }
+
+    public NodeTypeManagerImpl(SessionImpl session) {
+        this.session = session;
+        initSystemNodeTypes();
+    }
+
+    String nameToString(Val name) {
+        return session.nameToString(name);
+    }
+
+    Val parseName(String name) {
+        return session.parseName(name);
+    }
+
+    public NodeType getNodeType(Val nodeTypeName) {
+        return nodeTypes.get(nodeTypeName);
+    }
+
+    public NodeType getNodeType(String nodeTypeName) throws NoSuchNodeTypeException, RepositoryException {
+        return getNodeType(parseName(nodeTypeName));
+    }
+
+    public NodeDefinitionTemplate createNodeDefinitionTemplate() throws UnsupportedRepositoryOperationException,
+            RepositoryException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public NodeTypeTemplate createNodeTypeTemplate() throws UnsupportedRepositoryOperationException,
+            RepositoryException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public NodeTypeTemplate createNodeTypeTemplate(NodeTypeDefinition ntd)
+            throws UnsupportedRepositoryOperationException, RepositoryException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public PropertyDefinitionTemplate createPropertyDefinitionTemplate()
+            throws UnsupportedRepositoryOperationException, RepositoryException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public NodeTypeIterator getAllNodeTypes() throws RepositoryException {
+        return new NodeTypeIteratorImpl(nodeTypes.values());
+    }
+
+    public NodeTypeIterator getMixinNodeTypes() throws RepositoryException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public NodeTypeIterator getPrimaryNodeTypes() throws RepositoryException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public boolean hasNodeType(String name) throws RepositoryException {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public NodeType registerNodeType(NodeTypeDefinition ntd, boolean allowUpdate)
+            throws InvalidNodeTypeDefinitionException, NodeTypeExistsException,
+            UnsupportedRepositoryOperationException, RepositoryException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public NodeTypeIterator registerNodeTypes(NodeTypeDefinition[] ntds, boolean allowUpdate)
+            throws InvalidNodeTypeDefinitionException, NodeTypeExistsException,
+            UnsupportedRepositoryOperationException, RepositoryException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void unregisterNodeType(String name) throws UnsupportedRepositoryOperationException,
+            NoSuchNodeTypeException, RepositoryException {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void unregisterNodeTypes(String[] names) throws UnsupportedRepositoryOperationException,
+            NoSuchNodeTypeException, RepositoryException {
+        // TODO Auto-generated method stub
+
+    }
+
+    /**
+     * The node type iterator implementation.
+     */
+    class NodeTypeIteratorImpl implements NodeTypeIterator {
+
+        private final Iterator<NodeTypeImpl> iterator;
+        private int pos;
+
+        NodeTypeIteratorImpl(Collection<NodeTypeImpl> coll) {
+            this.iterator = coll.iterator();
+        }
+
+        public NodeType nextNodeType() {
+            pos++;
+            return iterator.next();
+        }
+
+        public long getPosition() {
+            return pos;
+        }
+
+        public long getSize() {
+            return nodeTypes.size();
+        }
+
+        public void skip(long skipNum) {
+            for (long i = 0; i < skipNum; i++) {
+                next();
+            }
+        }
+
+        public boolean hasNext() {
+            return iterator.hasNext();
+        }
+
+        public Object next() {
+            return nextNodeType();
+        }
+
+        public void remove() {
+            iterator.remove();
+        }
+
+    }
+
+}

Added: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeTypeRegistry.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeTypeRegistry.java?rev=928437&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeTypeRegistry.java (added)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeTypeRegistry.java Sun Mar 28 15:43:18 2010
@@ -0,0 +1,24 @@
+/*
+ * 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.j3.nodetype;
+
+/**
+ * The node type registry.
+ */
+public class NodeTypeRegistry {
+
+}

Added: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeTypeTemplateImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeTypeTemplateImpl.java?rev=928437&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeTypeTemplateImpl.java (added)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/NodeTypeTemplateImpl.java Sun Mar 28 15:43:18 2010
@@ -0,0 +1,73 @@
+/*
+ * 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.j3.nodetype;
+
+import java.util.List;
+import javax.jcr.nodetype.ConstraintViolationException;
+import javax.jcr.nodetype.NodeDefinitionTemplate;
+import javax.jcr.nodetype.NodeTypeTemplate;
+import javax.jcr.nodetype.PropertyDefinitionTemplate;
+
+/**
+ * The node type template implementation.
+ */
+public class NodeTypeTemplateImpl extends NodeTypeDefinitionImpl implements NodeTypeTemplate {
+
+    NodeTypeTemplateImpl(NodeTypeManagerImpl manager) {
+        super(manager);
+    }
+
+    public void setName(String name) throws ConstraintViolationException {
+        this.name = manager.parseName(name);
+    }
+
+    public List<NodeDefinitionTemplate> getNodeDefinitionTemplates() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public List<PropertyDefinitionTemplate> getPropertyDefinitionTemplates() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void setAbstract(boolean abstractStatus) {
+        this.isAbstract = abstractStatus;
+    }
+
+    public void setDeclaredSuperTypeNames(String[] names) throws ConstraintViolationException {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void setMixin(boolean mixin) {
+        this.isMixin = mixin;
+    }
+
+    public void setOrderableChildNodes(boolean orderable) {
+        this.hasOrderableChildNodes = orderable;
+    }
+
+    public void setPrimaryItemName(String name) throws ConstraintViolationException {
+        this.primaryItemName = manager.parseName(name);
+    }
+
+    public void setQueryable(boolean queryable) {
+        this.isQueryable = queryable;
+    }
+
+}

Added: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/PropertyDefinitionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/PropertyDefinitionImpl.java?rev=928437&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/PropertyDefinitionImpl.java (added)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/PropertyDefinitionImpl.java Sun Mar 28 15:43:18 2010
@@ -0,0 +1,67 @@
+/*
+ * 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.j3.nodetype;
+
+import javax.jcr.Value;
+import javax.jcr.nodetype.PropertyDefinition;
+
+/**
+ * The property definition implementation.
+ */
+public class PropertyDefinitionImpl extends ItemDefinitionImpl implements PropertyDefinition {
+
+    protected int requiredType;
+    protected boolean isFullTextSearchable;
+    protected boolean isMultiple;
+    protected boolean isQueryOrderable;
+
+    PropertyDefinitionImpl(NodeTypeManagerImpl manager) {
+        super(manager);
+    }
+
+    public String[] getAvailableQueryOperators() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Value[] getDefaultValues() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public int getRequiredType() {
+        return requiredType;
+    }
+
+    public String[] getValueConstraints() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public boolean isFullTextSearchable() {
+        return isFullTextSearchable;
+    }
+
+    public boolean isMultiple() {
+        return isMultiple;
+    }
+
+    public boolean isQueryOrderable() {
+        return isQueryOrderable;
+    }
+
+}

Added: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/PropertyDefinitionTemplateImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/PropertyDefinitionTemplateImpl.java?rev=928437&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/PropertyDefinitionTemplateImpl.java (added)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/nodetype/PropertyDefinitionTemplateImpl.java Sun Mar 28 15:43:18 2010
@@ -0,0 +1,83 @@
+/*
+ * 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.j3.nodetype;
+
+import javax.jcr.Value;
+import javax.jcr.nodetype.ConstraintViolationException;
+import javax.jcr.nodetype.PropertyDefinitionTemplate;
+
+/**
+ * The property definition template implementation.
+ */
+public class PropertyDefinitionTemplateImpl extends PropertyDefinitionImpl implements PropertyDefinitionTemplate {
+
+    PropertyDefinitionTemplateImpl(NodeTypeManagerImpl manager) {
+        super(manager);
+    }
+
+    public void setName(String name) throws ConstraintViolationException {
+        this.name = manager.parseName(name);
+    }
+
+    public void setAutoCreated(boolean autoCreated) {
+        this.isAutoCreated = autoCreated;
+    }
+
+    public void setAvailableQueryOperators(String[] operators) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void setDefaultValues(Value[] defaultValues) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void setFullTextSearchable(boolean fullTextSearchable) {
+        this.isFullTextSearchable = fullTextSearchable;
+    }
+
+    public void setMandatory(boolean mandatory) {
+        this.isMandatory = mandatory;
+    }
+
+    public void setMultiple(boolean multiple) {
+        this.isMultiple = multiple;
+    }
+
+    public void setOnParentVersion(int opv) {
+        this.onParentVersion = opv;
+    }
+
+    public void setProtected(boolean protectedStatus) {
+        this.isProtected = protectedStatus;
+    }
+
+    public void setQueryOrderable(boolean queryOrderable) {
+        this.isQueryOrderable = queryOrderable;
+    }
+
+    public void setRequiredType(int type) {
+        this.requiredType = type;
+    }
+
+    public void setValueConstraints(String[] constraints) {
+        // TODO Auto-generated method stub
+
+    }
+
+}

Added: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/observation/EventConsumer.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/observation/EventConsumer.java?rev=928437&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/observation/EventConsumer.java (added)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/observation/EventConsumer.java Sun Mar 28 15:43:18 2010
@@ -0,0 +1,168 @@
+/*
+ * 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.j3.observation;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import javax.jcr.RepositoryException;
+import javax.jcr.observation.Event;
+import javax.jcr.observation.EventIterator;
+import javax.jcr.observation.EventListener;
+import org.apache.jackrabbit.j3.Change;
+import org.apache.jackrabbit.j3.ChangeList;
+import org.apache.jackrabbit.j3.SessionImpl;
+
+/**
+ * A observation listener wrapper.
+ */
+public class EventConsumer {
+
+    private final SessionImpl session;
+    private final EventListener listener;
+    private final int eventTypes;
+    private final String absPath;
+    private final boolean isDeep;
+    private final HashSet<String> identifierSet;
+    private final HashSet<String> nodeTypeNameSet;
+    private final boolean noLocal;
+
+    EventConsumer(SessionImpl session, EventListener listener, int eventTypes, String absPath, boolean isDeep, String[] identifiers, String[] nodeTypeName, boolean noLocal) {
+        this.session = session;
+        this.listener = listener;
+        this.eventTypes = eventTypes;
+        this.absPath = absPath;
+        this.isDeep = isDeep;
+        if (identifiers == null) {
+            identifierSet = null;
+        } else {
+            identifierSet = new HashSet<String>();
+            for (String id : identifiers) {
+                identifierSet.add(id);
+            }
+        }
+        if (nodeTypeName == null) {
+            nodeTypeNameSet = null;
+        } else {
+            nodeTypeNameSet = new HashSet<String>();
+            for (String name : nodeTypeName) {
+                nodeTypeNameSet.add(name);
+            }
+        }
+        this.noLocal = noLocal;
+    }
+
+    public EventListener getListener() {
+        return listener;
+    }
+
+    boolean matchesType(int type) {
+        return (type & eventTypes) != 0;
+    }
+
+    boolean matchesIdentifier(String identifier) {
+        if (identifier == null || identifierSet == null) {
+            return true;
+        }
+        return identifierSet.contains(identifier);
+    }
+
+    boolean matchesNodeTypeName(String nodeTypeName) {
+        if (nodeTypeName == null || nodeTypeNameSet == null) {
+            return true;
+        }
+        return nodeTypeNameSet.contains(nodeTypeName);
+    }
+
+    void dispatch(ChangeList events) {
+        if (noLocal && events.getSession() == session) {
+            return;
+        }
+        listener.onEvent(new FilteredEventIterator(events));
+    }
+
+    /**
+     * An event iterator that filters events for a given event listener.
+     */
+    class FilteredEventIterator implements EventIterator {
+
+        private final Iterator<Change> iterator;
+        private Event next;
+        private int pos;
+
+        FilteredEventIterator(ChangeList events) {
+            iterator = events.getChangeList().iterator();
+            go();
+        }
+
+        private void go() {
+            try {
+                while (true) {
+                    if (!iterator.hasNext()) {
+                        next = null;
+                        return;
+                    }
+                    next = iterator.next();
+                    if (!matchesType(next.getType())) {
+                        continue;
+                    }
+                    if (!matchesIdentifier(next.getIdentifier())) {
+                        continue;
+                    }
+                    // TODO matchesNodeTypeName
+                    // TODO matchesPath
+                    return;
+                }
+            } catch (RepositoryException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        public Event nextEvent() {
+            Event result = next;
+            go();
+            return result;
+        }
+
+        public long getPosition() {
+            return pos;
+        }
+
+        public long getSize() {
+            return -1;
+        }
+
+        public void skip(long skipNum) {
+            for (int i = 0; i < skipNum; i++) {
+                go();
+            }
+        }
+
+        public boolean hasNext() {
+            return next != null;
+        }
+
+        public Object next() {
+            return nextEvent();
+        }
+
+        public void remove() {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+}

Added: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/observation/ObservationManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/observation/ObservationManagerImpl.java?rev=928437&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/observation/ObservationManagerImpl.java (added)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/observation/ObservationManagerImpl.java Sun Mar 28 15:43:18 2010
@@ -0,0 +1,127 @@
+/*
+ * 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.j3.observation;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import javax.jcr.RepositoryException;
+import javax.jcr.observation.EventJournal;
+import javax.jcr.observation.EventListener;
+import javax.jcr.observation.EventListenerIterator;
+import javax.jcr.observation.ObservationManager;
+import org.apache.jackrabbit.j3.ChangeList;
+import org.apache.jackrabbit.j3.SessionImpl;
+
+/**
+ * The observation manager implementation.
+ */
+public class ObservationManagerImpl implements ObservationManager {
+
+    private final SessionImpl session;
+    private final ArrayList<EventConsumer> eventConsumers = new ArrayList<EventConsumer>();
+
+    public ObservationManagerImpl(SessionImpl session) {
+        this.session = session;
+    }
+
+    public void setUserData(String userData) throws RepositoryException {
+        session.setObservationUserData(userData);
+    }
+
+    public void addEventListener(EventListener listener, int eventTypes, String absPath, boolean isDeep, String[] uuid,
+            String[] nodeTypeName, boolean noLocal) throws RepositoryException {
+        EventConsumer consumer = new EventConsumer(session, listener, eventTypes, absPath, isDeep, uuid, nodeTypeName, noLocal);
+        eventConsumers.add(consumer);
+    }
+
+    public void removeEventListener(EventListener listener) throws RepositoryException {
+        for (EventConsumer consumer : eventConsumers) {
+            if (consumer.getListener() == listener) {
+                // TODO block until the listener has completed
+                eventConsumers.remove(consumer);
+                return;
+            }
+        }
+    }
+
+    public EventListenerIterator getRegisteredEventListeners() throws RepositoryException {
+        return new EventListenerIteratorImpl();
+    }
+
+    public EventJournal getEventJournal() throws RepositoryException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public EventJournal getEventJournal(int eventTypes, String absPath, boolean isDeep, String[] uuid,
+            String[] nodeTypeName) throws RepositoryException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /**
+     * A event listener iterator implementation.
+     */
+    class EventListenerIteratorImpl implements EventListenerIterator {
+
+        private final Iterator<EventConsumer> iterator;
+        private int pos;
+
+        EventListenerIteratorImpl() {
+            iterator = eventConsumers.iterator();
+        }
+
+        public EventListener nextEventListener() {
+            pos++;
+            return iterator.next().getListener();
+        }
+
+        public long getPosition() {
+            return pos;
+        }
+
+        public long getSize() {
+            return eventConsumers.size();
+        }
+
+        public void skip(long skipNum) {
+            for (long i = 0; i < skipNum; i++) {
+                next();
+            }
+        }
+
+        public boolean hasNext() {
+            return iterator.hasNext();
+        }
+
+        public Object next() {
+            return nextEventListener();
+        }
+
+        public void remove() {
+            iterator.remove();
+        }
+
+    }
+
+    public void dispatchEvents(ChangeList events) {
+        for (EventConsumer consumer : eventConsumers) {
+            consumer.dispatch(events);
+        }
+    }
+
+}

Added: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/security/PrivilegeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/security/PrivilegeImpl.java?rev=928437&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/security/PrivilegeImpl.java (added)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/security/PrivilegeImpl.java Sun Mar 28 15:43:18 2010
@@ -0,0 +1,45 @@
+/*
+ * 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.j3.security;
+
+/**
+ * A privilege implementation.
+ */
+public class PrivilegeImpl {
+
+    public static final int ADD_CHILD_NODES = 1;
+    public static final int LIFECYCLE_MANAGEMENT = 2;
+    public static final int LOCK_MANAGEMENT = 4;
+    public static final int MODIFY_ACCESS_CONTROL = 8;
+    public static final int MODIFY_PROPERTIES = 16;
+    public static final int NODE_TYPE_MANAGEMENT = 32;
+    public static final int READ = 64;
+    public static final int READ_ACCESS_CONTROL = 128;
+    public static final int REMOVE_CHILD_NODES = 256;
+    public static final int REMOVE_NODE = 512;
+    public static final int RETENTION_MANAGEMENT = 1024;
+    public static final int VERSION_MANAGEMENT = 2048;
+
+    public static final int LOCK_OK = 4096;
+
+    public static final int WRITE = MODIFY_PROPERTIES |
+            ADD_CHILD_NODES | REMOVE_NODE | REMOVE_CHILD_NODES;
+    public static final int ALL = READ | WRITE | READ_ACCESS_CONTROL |
+            MODIFY_ACCESS_CONTROL | LOCK_MANAGEMENT |
+            VERSION_MANAGEMENT | NODE_TYPE_MANAGEMENT |
+            RETENTION_MANAGEMENT | LIFECYCLE_MANAGEMENT;
+}

Added: jackrabbit/sandbox/jackrabbit-j3/src/site/resources/images/drawing.png
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/site/resources/images/drawing.png?rev=928437&view=auto
==============================================================================
Binary file - no diff available.

Propchange: jackrabbit/sandbox/jackrabbit-j3/src/site/resources/images/drawing.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream