You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2010/10/14 14:28:57 UTC
svn commit: r1022488 - in /jackrabbit/trunk:
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/
jackrabbit-core/src/main/java/org/apache/jackrabbit...
Author: jukka
Date: Thu Oct 14 12:28:57 2010
New Revision: 1022488
URL: http://svn.apache.org/viewvc?rev=1022488&view=rev
Log:
JCR-2762: Optimize bundle serialization
Add common names used by the access control features. Reorder names by popularity.
Rename read/writeInt() to read/writeVarInt() as suggested by Thomas. Remove recursion from writeVarInt().
Minor optimizations in read/writeName(), including a fix to the case where the local name is more than 15 characters long.
Extend the use of read/writeVarInt() and read/writeString() to more places in the code.
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleNames.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleWriter.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/AccessControlConstants.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/principalbased/ACLTemplate.java
jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/NameConstants.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleNames.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleNames.java?rev=1022488&r1=1022487&r2=1022488&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleNames.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleNames.java Thu Oct 14 12:28:57 2010
@@ -32,7 +32,6 @@ import org.apache.jackrabbit.spi.commons
// //
// WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING //
-
/**
* Static collection of common JCR names. This class is used by the
* {@link BundleWriter} and {@link BundleReader} classes to optimize the
@@ -46,119 +45,147 @@ class BundleNames {
private static final Name[] NAME_ARRAY = {
// WARNING: Only edit if you really know what you're doing!
null,
- NameConstants.JCR_ACTIVITIES,
- NameConstants.JCR_ACTIVITY,
- NameConstants.JCR_ACTIVITY_TITLE,
- NameConstants.JCR_AUTOCREATED,
- NameConstants.JCR_BASEVERSION,
- NameConstants.JCR_CHILDNODEDEFINITION,
- NameConstants.JCR_CHILDVERSIONHISTORY,
- NameConstants.JCR_CONFIGURATION,
- NameConstants.JCR_CONFIGURATIONS,
- NameConstants.JCR_CONTENT,
- NameConstants.JCR_COPIEDFROM,
+ // Most frequently used names
+ NameConstants.NT_UNSTRUCTURED,
+ NameConstants.NT_RESOURCE,
+ NameConstants.NT_FILE,
+ NameConstants.NT_FOLDER,
+ NameConstants.NT_HIERARCHYNODE,
+ NameConstants.MIX_REFERENCEABLE,
NameConstants.JCR_CREATED,
NameConstants.JCR_CREATEDBY,
- NameConstants.JCR_CURRENT_LIFECYCLE_STATE,
+ NameConstants.JCR_LASTMODIFIED,
+ NameConstants.JCR_LASTMODIFIEDBY,
+ NameConstants.JCR_CONTENT,
+ NameConstants.JCR_MIMETYPE,
NameConstants.JCR_DATA,
- NameConstants.JCR_DEFAULTPRIMARYTYPE,
- NameConstants.JCR_DEFAULTVALUES,
+ NameConstants.JCR_TITLE,
+ NameConstants.JCR_LANGUAGE,
NameConstants.JCR_ENCODING,
- NameConstants.JCR_ETAG,
- NameConstants.JCR_FROZENMIXINTYPES,
- NameConstants.JCR_FROZENNODE,
+ NameConstants.JCR_SYSTEM,
+ NameConstants.REP_ROOT,
+ NameConstants.REP_SYSTEM,
+
+ // Access control
+ NameConstants.JCR_ADD_CHILD_NODES,
+ NameConstants.JCR_LIFECYCLE_MANAGEMENT,
+ NameConstants.JCR_LOCK_MANAGEMENT,
+ NameConstants.JCR_MODIFY_ACCESS_CONTROL,
+ NameConstants.JCR_MODIFY_PROPERTIES,
+ NameConstants.JCR_NODE_TYPE_MANAGEMENT,
+ NameConstants.JCR_READ,
+ NameConstants.JCR_READ_ACCESS_CONTROL,
+ NameConstants.JCR_REMOVE_CHILD_NODES,
+ NameConstants.JCR_REMOVE_NODE,
+ NameConstants.JCR_VERSION_MANAGEMENT,
+ NameConstants.REP_ACCESSCONTROL,
+ NameConstants.REP_ACCESS_CONTROL,
+ NameConstants.REP_ACCESS_CONTROLLABLE,
+ NameConstants.REP_ACE,
+ NameConstants.REP_ACL,
+ NameConstants.REP_DENY_ACE,
+ NameConstants.REP_GLOB,
+ NameConstants.REP_GRANT_ACE,
+ NameConstants.REP_POLICY,
+ NameConstants.REP_PRINCIPAL_ACCESS_CONTROL,
+ NameConstants.REP_PRINCIPAL_NAME,
+ NameConstants.REP_PRIVILEGES,
+
+ // Locking
+ NameConstants.MIX_LOCKABLE,
+ NameConstants.JCR_LOCKISDEEP,
+ NameConstants.JCR_LOCKOWNER,
+
+ // Versioning
+ NameConstants.MIX_VERSIONABLE,
+ NameConstants.NT_FROZENNODE,
+ NameConstants.NT_VERSION,
+ NameConstants.NT_VERSIONEDCHILD,
+ NameConstants.NT_VERSIONHISTORY,
+ NameConstants.NT_VERSIONLABELS,
+ NameConstants.JCR_VERSIONSTORAGE,
NameConstants.JCR_FROZENPRIMARYTYPE,
NameConstants.JCR_FROZENUUID,
- NameConstants.JCR_HASORDERABLECHILDNODES,
- NameConstants.JCR_HOST,
- NameConstants.JCR_ID,
+ NameConstants.JCR_FROZENNODE,
+ NameConstants.JCR_PREDECESSORS,
+ NameConstants.JCR_SUCCESSORS,
+ NameConstants.JCR_VERSIONLABELS,
+ NameConstants.JCR_VERSIONHISTORY,
+ NameConstants.JCR_VERSIONABLEUUID,
+ NameConstants.JCR_ROOTVERSION,
NameConstants.JCR_ISCHECKEDOUT,
- NameConstants.JCR_ISMIXIN,
- NameConstants.JCR_LANGUAGE,
- NameConstants.JCR_LASTMODIFIED,
- NameConstants.JCR_LASTMODIFIEDBY,
- NameConstants.JCR_LIFECYCLE_POLICY,
- NameConstants.JCR_LOCKISDEEP,
- NameConstants.JCR_LOCKOWNER,
- NameConstants.JCR_MANDATORY,
+ NameConstants.JCR_BASEVERSION,
NameConstants.JCR_MERGEFAILED,
- NameConstants.JCR_MIMETYPE,
- NameConstants.JCR_MIXINTYPES,
- NameConstants.JCR_MULTIPLE,
- NameConstants.JCR_NAME,
- NameConstants.JCR_NODETYPENAME,
+ NameConstants.REP_NODETYPES,
+
+ // Node types
+ NameConstants.NT_NODETYPE,
+ NameConstants.NT_PROPERTYDEFINITION,
+ NameConstants.NT_CHILDNODEDEFINITION,
+ NameConstants.NT_BASE,
NameConstants.JCR_NODETYPES,
- NameConstants.JCR_ONPARENTVERSION,
- NameConstants.JCR_PATH,
- NameConstants.JCR_PORT,
- NameConstants.JCR_PREDECESSORS,
- NameConstants.JCR_PRIMARYITEMNAME,
- NameConstants.JCR_PRIMARYTYPE,
- NameConstants.JCR_PROPERTYDEFINITION,
NameConstants.JCR_PROTECTED,
- NameConstants.JCR_PROTOCOL,
- NameConstants.JCR_REPOSITORY,
- NameConstants.JCR_REQUIREDPRIMARYTYPES,
+ NameConstants.JCR_ONPARENTVERSION,
+ NameConstants.JCR_MANDATORY,
+ NameConstants.JCR_AUTOCREATED,
+ NameConstants.JCR_FROZENMIXINTYPES,
+ NameConstants.JCR_NAME,
+ NameConstants.JCR_VALUECONSTRAINTS,
NameConstants.JCR_REQUIREDTYPE,
- NameConstants.JCR_ROOT,
- NameConstants.JCR_ROOTVERSION,
- NameConstants.JCR_SAMENAMESIBLINGS,
- NameConstants.JCR_SCORE,
- NameConstants.JCR_STATEMENT,
- NameConstants.JCR_SUCCESSORS,
+ NameConstants.JCR_PROPERTYDEFINITION,
+ NameConstants.JCR_MULTIPLE,
+ NameConstants.JCR_DEFAULTVALUES,
NameConstants.JCR_SUPERTYPES,
- NameConstants.JCR_SYSTEM,
- NameConstants.JCR_UUID,
- NameConstants.JCR_VALUECONSTRAINTS,
- NameConstants.JCR_VERSIONHISTORY,
- NameConstants.JCR_VERSIONLABELS,
- NameConstants.JCR_VERSIONSTORAGE,
- NameConstants.JCR_VERSIONABLEUUID,
- NameConstants.JCR_WORKSPACE,
- NameConstants.JCR_XMLCHARACTERS,
- NameConstants.JCR_XMLTEXT,
+ NameConstants.JCR_NODETYPENAME,
+ NameConstants.JCR_ISMIXIN,
+ NameConstants.JCR_HASORDERABLECHILDNODES,
+ NameConstants.JCR_SAMENAMESIBLINGS,
+ NameConstants.JCR_REQUIREDPRIMARYTYPES,
+ NameConstants.JCR_CHILDNODEDEFINITION,
+ NameConstants.JCR_DEFAULTPRIMARYTYPE,
+ NameConstants.JCR_PRIMARYITEMNAME,
+ NameConstants.JCR_CHILDVERSIONHISTORY,
+ NameConstants.REP_VERSIONS,
+ NameConstants.REP_VERSIONSTORAGE,
+ NameConstants.REP_VERSION_REFERENCE,
+ NameConstants.REP_BASEVERSIONS,
+
+ // Miscellaneous node types
NameConstants.MIX_CREATED,
NameConstants.MIX_ETAG,
NameConstants.MIX_LANGUAGE,
NameConstants.MIX_LASTMODIFIED,
NameConstants.MIX_LIFECYCLE,
- NameConstants.MIX_LOCKABLE,
NameConstants.MIX_MIMETYPE,
- NameConstants.MIX_REFERENCEABLE,
NameConstants.MIX_SHAREABLE,
NameConstants.MIX_SIMPLE_VERSIONABLE,
NameConstants.MIX_TITLE,
- NameConstants.MIX_VERSIONABLE,
NameConstants.NT_ACTIVITY,
NameConstants.NT_ADDRESS,
- NameConstants.NT_BASE,
- NameConstants.NT_CHILDNODEDEFINITION,
NameConstants.NT_CONFIGURATION,
- NameConstants.NT_FILE,
- NameConstants.NT_FOLDER,
- NameConstants.NT_FROZENNODE,
- NameConstants.NT_HIERARCHYNODE,
- NameConstants.NT_NODETYPE,
- NameConstants.NT_PROPERTYDEFINITION,
NameConstants.NT_QUERY,
- NameConstants.NT_RESOURCE,
NameConstants.NT_SHARE,
- NameConstants.NT_UNSTRUCTURED,
- NameConstants.NT_VERSION,
- NameConstants.NT_VERSIONEDCHILD,
- NameConstants.NT_VERSIONHISTORY,
- NameConstants.NT_VERSIONLABELS,
+
+ // Miscellaneous names
NameConstants.REP_ACTIVITIES,
+ NameConstants.JCR_ACTIVITIES,
+ NameConstants.JCR_ACTIVITY,
+ NameConstants.JCR_ACTIVITY_TITLE,
+ NameConstants.JCR_XMLCHARACTERS,
+ NameConstants.JCR_XMLTEXT,
NameConstants.REP_CONFIGURATIONS,
- NameConstants.REP_VERSION_REFERENCE,
- NameConstants.REP_BASEVERSIONS,
- NameConstants.REP_NODETYPES,
- NameConstants.REP_ROOT,
- NameConstants.REP_SYSTEM,
- NameConstants.REP_VERSIONS,
- NameConstants.REP_VERSIONSTORAGE
- }; // WARNING: Only edit if you really know what you're doing!
+ NameConstants.JCR_CONFIGURATION,
+ NameConstants.JCR_CONFIGURATIONS,
+ NameConstants.JCR_COPIEDFROM,
+ NameConstants.JCR_CURRENT_LIFECYCLE_STATE,
+ NameConstants.JCR_ETAG,
+ NameConstants.JCR_HOST,
+ NameConstants.JCR_ID,
+ NameConstants.JCR_LIFECYCLE_POLICY,
+ NameConstants.JCR_PATH,
+ NameConstants.JCR_STATEMENT,
+ }; // WARNING: Only edit if you really know what you're doing!
private static final Map<Name, Integer> NAME_MAP =
new HashMap<Name, Integer>();
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java?rev=1022488&r1=1022487&r2=1022488&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java Thu Oct 14 12:28:57 2010
@@ -141,7 +141,7 @@ class BundleReader {
// read modcount, since version 1.0
if (version >= BundleBinding.VERSION_3) {
- bundle.setModCount((short) readInt());
+ bundle.setModCount((short) readVarInt());
} else if (version >= BundleBinding.VERSION_1) {
bundle.setModCount(in.readShort());
}
@@ -182,13 +182,13 @@ class BundleReader {
if (len != 0) {
entry.setMultiValued(true);
if (len == 0x0f) {
- count = readInt() + 0x0f - 1;
+ count = readVarInt() + 0x0f - 1;
} else {
count = len - 1;
}
}
- entry.setModCount((short) readInt());
+ entry.setModCount((short) readVarInt());
} else {
// type and modcount
int type = in.readInt();
@@ -215,9 +215,9 @@ class BundleReader {
case PropertyType.BINARY:
int size = in.readInt();
if (size == BundleBinding.BINARY_IN_DATA_STORE) {
- val = InternalValue.create(binding.dataStore, in.readUTF());
+ val = InternalValue.create(binding.dataStore, readString());
} else if (size == BundleBinding.BINARY_IN_BLOB_STORE) {
- blobIds[i] = in.readUTF();
+ blobIds[i] = readString();
try {
BLOBStore blobStore = binding.getBlobStore();
if (blobStore instanceof ResourceBasedBLOBStore) {
@@ -264,18 +264,18 @@ class BundleReader {
val = InternalValue.create(readNodeId(), false);
break;
default:
- // because writeUTF(String) has a size limit of 64k,
- // Strings are serialized as <length><byte[]>
- int len;
if (version >= BundleBinding.VERSION_3) {
- len = readInt();
+ val = InternalValue.valueOf(
+ readString(), entry.getType());
} else {
- len = in.readInt();
+ // because writeUTF(String) has a size limit of 64k,
+ // Strings are serialized as <length><byte[]>
+ int len = in.readInt();
+ byte[] bytes = new byte[len];
+ in.readFully(bytes);
+ val = InternalValue.valueOf(
+ new String(bytes, "UTF-8"), entry.getType());
}
- byte[] bytes = new byte[len];
- in.readFully(bytes);
- val = InternalValue.valueOf(
- new String(bytes, "UTF-8"), entry.getType());
}
values[i] = val;
}
@@ -310,7 +310,7 @@ class BundleReader {
private BigDecimal readDecimal() throws IOException {
if (in.readBoolean()) {
// TODO more efficient serialization format
- return new BigDecimal(in.readUTF());
+ return new BigDecimal(readString());
} else {
return null;
}
@@ -369,21 +369,13 @@ class BundleReader {
if (ns < namespaces.length && namespaces[ns] != null) {
uri = namespaces[ns];
} else {
- uri = in.readUTF();
+ uri = readString();
if (ns < namespaces.length) {
namespaces[ns] = uri;
}
}
- String local;
- int len = b & 0x0f;
- if (b != 0x0f) {
- byte[] buffer = new byte[len + 1];
- in.readFully(buffer);
- local = new String(buffer, "UTF-8");
- } else {
- local = in.readUTF();
- }
+ String local = new String(readBytes((b & 0x0f) + 1, 0x10), "UTF-8");
return NameFactoryImpl.getInstance().create(uri, local);
}
@@ -396,13 +388,30 @@ class BundleReader {
* @return deserialized name
* @throws IOException if an I/O error occurs
*/
- private int readInt() throws IOException {
+ private int readVarInt() throws IOException {
int b = in.readUnsignedByte();
if ((b & 0x80) == 0) {
return b;
} else {
- return readInt() << 7 | b & 0x7f;
+ return readVarInt() << 7 | b & 0x7f;
}
}
+ private String readString() throws IOException {
+ if (version >= BundleBinding.VERSION_3) {
+ return new String(readBytes(0, 0), "UTF-8");
+ } else {
+ return in.readUTF();
+ }
+ }
+
+ private byte[] readBytes(int len, int base) throws IOException {
+ if (len == base) {
+ len += readVarInt();
+ }
+ byte[] bytes = new byte[len];
+ in.readFully(bytes);
+ return bytes;
+ }
+
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleWriter.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleWriter.java?rev=1022488&r1=1022487&r2=1022488&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleWriter.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleWriter.java Thu Oct 14 12:28:57 2010
@@ -124,7 +124,7 @@ class BundleWriter {
writeNodeId(null);
// write mod count
- writeInt(bundle.getModCount());
+ writeVarInt(bundle.getModCount());
// write shared set
for (NodeId nodeId: bundle.getSharedSet()) {
@@ -155,7 +155,7 @@ class BundleWriter {
* the number of property values plus one and truncated at 15 (the highest
* four-bit value). If there are 14 or more (14 + 1 == 15) property values,
* then the number of additional values is serialized as a variable-length
- * integer (see {@link #writeInt(int)}) right after this byte.
+ * integer (see {@link #writeVarInt(int)}) right after this byte.
* <p>
* The modification count of the property state is written next as a
* variable-length integer, followed by the serializations of all the
@@ -176,14 +176,14 @@ class BundleWriter {
out.writeByte(len << 4 | type);
} else {
out.writeByte(0xf0 | type);
- writeInt(len - 0x0f);
+ writeVarInt(len - 0x0f);
}
} else {
assert values.length == 1;
out.writeByte(type);
}
- writeInt(state.getModCount());
+ writeVarInt(state.getModCount());
// values
for (int i = 0; i < values.length; i++) {
@@ -200,7 +200,7 @@ class BundleWriter {
} else {
out.writeInt(BundleBinding.BINARY_IN_DATA_STORE);
val.store(dataStore);
- out.writeUTF(val.toString());
+ writeString(val.toString());
}
break;
}
@@ -248,7 +248,7 @@ class BundleWriter {
val.discard();
}
// store id of blob as property value
- out.writeUTF(blobId); // value
+ writeString(blobId); // value
} else {
// delete evt. blob
byte[] data = writeSmallBinary(val, state, i);
@@ -309,11 +309,8 @@ class BundleWriter {
writeNodeId(val.getNodeId());
break;
default:
- // because writeUTF(String) has a size limit of 64k,
- // we're using write(byte[]) instead
- byte[] bytes = val.toString().getBytes("UTF-8");
- writeInt(bytes.length); // length of byte[]
- out.write(bytes); // byte[]
+ writeString(val.toString());
+ break;
}
}
}
@@ -379,7 +376,7 @@ class BundleWriter {
} else {
out.writeBoolean(true);
// TODO more efficient serialization format
- out.writeUTF(decimal.toString());
+ writeString(decimal.toString());
}
}
@@ -408,7 +405,7 @@ class BundleWriter {
* most six other other namespaces (values 1-6), in the order they appear
* in the bundle. When one of these six custom namespaces first appears
* in the bundle, then the namespace URI is written using
- * {@link DataOutputStream#writeUTF(String)} right after this byte.
+ * {@link #writeString(String)} right after this byte.
* Later uses of such a namespace simply refers back to the already read
* namespace URI string. Any other namespaces are identified with value 7
* and always written to the bundle after this byte.
@@ -419,8 +416,9 @@ class BundleWriter {
* field. The UTF-8 byte sequence is written out after this byte and the
* possible namespace URI string. If the length of the local name is
* larger than 15 (i.e. would be stored as 0x0f or more), then the value
- * 0x0f is stored as the name length and the name string is written
- * using {@link DataOutputStream#writeUTF(String)}.
+ * 0x0f is stored as the name length and the name string is written as
+ * UTF-8 using {@link #writeBytes(byte[], int)} with a base length of
+ * 0x10 (0x0f + 1).
*
* @param name the name
* @throws IOException in an I/O error occurs.
@@ -445,7 +443,7 @@ class BundleWriter {
out.writeByte(0x80 | ns << 4 | len);
if (ns == namespaces.length || namespaces[ns] == null) {
- out.writeUTF(uri);
+ writeString(uri);
if (ns < namespaces.length) {
namespaces[ns] = uri;
}
@@ -453,7 +451,7 @@ class BundleWriter {
if (len != 0x0f) {
out.write(bytes);
} else {
- out.writeUTF(local);
+ writeBytes(bytes, 0x0f + 1);
}
}
}
@@ -482,14 +480,44 @@ class BundleWriter {
* @param integer integer value
* @throws IOException if an I/O error occurs
*/
- private void writeInt(int value) throws IOException {
- int b = value & 0x7f;
- if (b == value) {
- out.writeByte(b);
- } else {
- out.writeByte(b | 0x80);
- writeInt(value >>> 7);
+ private void writeVarInt(int value) throws IOException {
+ while (true) {
+ int b = value & 0x7f;
+ if (b != value) {
+ out.writeByte(b | 0x80);
+ value >>>= 7; // unsigned shift
+ } else {
+ out.writeByte(b);
+ return;
+ }
}
}
+ /**
+ * Serializes a string in UTF-8. The length of the UTF-8 byte sequence
+ * is first written as a variable-length string (see
+ * {@link #writeVarInt(int)}), and then the sequence itself is written.
+ *
+ * @param value string value
+ * @throws IOException if an I/O error occurs
+ */
+ private void writeString(String value) throws IOException {
+ writeBytes(value.getBytes("UTF-8"), 0);
+ }
+
+ /**
+ * Serializes the given array of bytes. The length of the byte array is
+ * first written as a {@link #writeVarInt(int) variable length integer},
+ * followed by the given bytes.
+ *
+ * @param bytes the bytes to be serialized
+ * @param base optional base length
+ * @throws IOException if an I/O error occurs
+ */
+ private void writeBytes(byte[] bytes, int base) throws IOException {
+ assert bytes.length >= base;
+ writeVarInt(bytes.length - base);
+ out.write(bytes);
+ }
+
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/AccessControlConstants.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/AccessControlConstants.java?rev=1022488&r1=1022487&r2=1022488&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/AccessControlConstants.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/AccessControlConstants.java Thu Oct 14 12:28:57 2010
@@ -17,21 +17,18 @@
package org.apache.jackrabbit.core.security.authorization;
import org.apache.jackrabbit.spi.Name;
-import org.apache.jackrabbit.spi.NameFactory;
-import org.apache.jackrabbit.spi.commons.name.NameFactoryImpl;
+import org.apache.jackrabbit.spi.commons.name.NameConstants;
/**
* <code>AccessControlConstants</code>...
*/
public interface AccessControlConstants {
- NameFactory NF = NameFactoryImpl.getInstance();
-
//---------------------------------------------------------< node names >---
/**
* Default name for a node of type rep:Policy.
*/
- Name N_POLICY = NF.create(Name.NS_REP_URI, "policy");
+ Name N_POLICY = NameConstants.REP_POLICY;
/**
* PrincipalBased-ACL:
@@ -39,55 +36,55 @@ public interface AccessControlConstants
* privileges for individual principals. This node is created upon
* initializing this provider.
*/
- Name N_ACCESSCONTROL = NF.create(Name.NS_REP_URI, "accesscontrol");
+ Name N_ACCESSCONTROL = NameConstants.REP_ACCESSCONTROL;
//-----------------------------------------------------< property names >---
/**
* rep:privileges property name
*/
- Name P_PRIVILEGES = NF.create(Name.NS_REP_URI, "privileges");
+ Name P_PRIVILEGES = NameConstants.REP_PRIVILEGES;
/**
* rep:principalName property name
*/
- Name P_PRINCIPAL_NAME = NF.create(Name.NS_REP_URI, "principalName");
+ Name P_PRINCIPAL_NAME = NameConstants.REP_PRINCIPAL_NAME;
/**
* rep:glob property name used to restrict the number of child nodes
* or properties that are affected by an ACL inherited from a parent node.
*/
- Name P_GLOB = NF.create(Name.NS_REP_URI, "glob");
+ Name P_GLOB = NameConstants.REP_GLOB;
//----------------------------------------------------< node type names >---
/**
* rep:AccessControllable nodetype
*/
- Name NT_REP_ACCESS_CONTROLLABLE = NF.create(Name.NS_REP_URI, "AccessControllable");
+ Name NT_REP_ACCESS_CONTROLLABLE = NameConstants.REP_ACCESS_CONTROLLABLE;
/**
* rep:ACL nodetype
*/
- Name NT_REP_ACL = NF.create(Name.NS_REP_URI, "ACL");
+ Name NT_REP_ACL = NameConstants.REP_ACL;
/**
* rep:ACE nodetype
*/
- Name NT_REP_ACE = NF.create(Name.NS_REP_URI, "ACE");
+ Name NT_REP_ACE = NameConstants.REP_ACE;
/**
* rep:GrantACE nodetype
*/
- Name NT_REP_GRANT_ACE = NF.create(Name.NS_REP_URI, "GrantACE");
+ Name NT_REP_GRANT_ACE = NameConstants.REP_GRANT_ACE;
/**
* rep:DenyACE nodetype
*/
- Name NT_REP_DENY_ACE = NF.create(Name.NS_REP_URI, "DenyACE");
+ Name NT_REP_DENY_ACE = NameConstants.REP_DENY_ACE;
//----------------------------------< node types for principal based ac >---
/**
* rep:AccessControl nodetype
*/
- Name NT_REP_ACCESS_CONTROL = NF.create(Name.NS_REP_URI, "AccessControl");
+ Name NT_REP_ACCESS_CONTROL = NameConstants.REP_ACCESS_CONTROL;
/**
* rep:PrincipalAccessControl nodetype
*/
- Name NT_REP_PRINCIPAL_ACCESS_CONTROL = NF.create(Name.NS_REP_URI, "PrincipalAccessControl");
-
+ Name NT_REP_PRINCIPAL_ACCESS_CONTROL = NameConstants.REP_PRINCIPAL_ACCESS_CONTROL;
+
}
\ No newline at end of file
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/principalbased/ACLTemplate.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/principalbased/ACLTemplate.java?rev=1022488&r1=1022487&r2=1022488&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/principalbased/ACLTemplate.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/principalbased/ACLTemplate.java Thu Oct 14 12:28:57 2010
@@ -25,6 +25,7 @@ import org.apache.jackrabbit.core.securi
import org.apache.jackrabbit.spi.Name;
import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
import org.apache.jackrabbit.spi.commons.conversion.NameResolver;
+import org.apache.jackrabbit.spi.commons.name.NameConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -62,7 +63,7 @@ class ACLTemplate extends AbstractACLTem
* rep:nodePath property name (optional if the ACL is stored with the
* node itself).
*/
- static final Name P_NODE_PATH = NF.create(Name.NS_REP_URI, "nodePath");
+ static final Name P_NODE_PATH = NameConstants.REP_NODE_PATH;
private final Principal principal;
Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/NameConstants.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/NameConstants.java?rev=1022488&r1=1022487&r2=1022488&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/NameConstants.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/NameConstants.java Thu Oct 14 12:28:57 2010
@@ -16,6 +16,9 @@
*/
package org.apache.jackrabbit.spi.commons.name;
+import javax.jcr.Property;
+import javax.jcr.security.Privilege;
+
import org.apache.jackrabbit.spi.Name;
import org.apache.jackrabbit.spi.NameFactory;
@@ -131,6 +134,9 @@ public class NameConstants {
*/
public static final Name JCR_ID = FACTORY.create(Name.NS_JCR_URI, "id");
+ /** jcr:title */
+ public static final Name JCR_TITLE = FACTORY.create(Property.JCR_TITLE);
+
//--------------------------------------< xml related item name constants >
/**
@@ -562,50 +568,77 @@ public class NameConstants {
public static final Name NT_CONFIGURATION = FACTORY.create(Name.NS_NT_URI, "configuration");
//--------------------------------------------------------------------------
- /**
- * rep:root
- */
- public static final Name REP_ROOT = FACTORY.create(Name.NS_REP_URI, "root");
- /**
- * rep:system
- */
- public static final Name REP_SYSTEM = FACTORY.create(Name.NS_REP_URI, "system");
+ private static final Name rep(String local) {
+ return FACTORY.create(Name.NS_REP_URI, local);
+ }
- /**
- * rep:versionStorage
- */
- public static final Name REP_VERSIONSTORAGE = FACTORY.create(Name.NS_REP_URI, "versionStorage");
+ /** rep:root */
+ public static final Name REP_ROOT = rep("root");
- /**
- * rep:Activities
- */
- public static final Name REP_ACTIVITIES = FACTORY.create(Name.NS_REP_URI, "Activities");
+ /** rep:system */
+ public static final Name REP_SYSTEM = rep("system");
- /**
- * rep:Configurations
- */
- public static final Name REP_CONFIGURATIONS = FACTORY.create(Name.NS_REP_URI, "Configurations");
+ /** rep:versionStorage */
+ public static final Name REP_VERSIONSTORAGE = rep("versionStorage");
- /**
- * rep:baseVersions
- */
- public static final Name REP_BASEVERSIONS = FACTORY.create(Name.NS_REP_URI, "baseVersions");
+ /** rep:Activities */
+ public static final Name REP_ACTIVITIES = rep("Activities");
- /**
- * rep:VersionReference
- */
- public static final Name REP_VERSION_REFERENCE = FACTORY.create(Name.NS_REP_URI, "VersionReference");
+ /** rep:Configurations */
+ public static final Name REP_CONFIGURATIONS = rep("Configurations");
- /**
- * rep:versions
- */
- public static final Name REP_VERSIONS = FACTORY.create(Name.NS_REP_URI, "versions");
+ /** rep:baseVersions */
+ public static final Name REP_BASEVERSIONS = rep("baseVersions");
+
+ /** rep:VersionReference */
+ public static final Name REP_VERSION_REFERENCE = rep("VersionReference");
+
+ /** rep:versions */
+ public static final Name REP_VERSIONS = rep("versions");
- /**
- * rep:nodeTypes
- */
- public static final Name REP_NODETYPES = FACTORY.create(Name.NS_REP_URI, "nodeTypes");
+ /** rep:nodeTypes */
+ public static final Name REP_NODETYPES = rep("nodeTypes");
+
+ /** rep:policy */
+ public static final Name REP_POLICY = rep("policy");
+
+ /** rep:accesscontrol */
+ public static final Name REP_ACCESSCONTROL = rep("accesscontrol");
+
+ /** rep:privileges */
+ public static final Name REP_PRIVILEGES = rep("privileges");
+
+ /** rep:principalName */
+ public static final Name REP_PRINCIPAL_NAME = rep("principalName");
+
+ /** rep:glob */
+ public static final Name REP_GLOB = rep("glob");
+
+ /** rep:AccessControllable */
+ public static final Name REP_ACCESS_CONTROLLABLE = rep("AccessControllable");
+
+ /** rep:ACL */
+ public static final Name REP_ACL = rep("ACL");
+
+ /** rep:ACE */
+ public static final Name REP_ACE = rep("ACE");
+
+ /** rep:GrantACE */
+ public static final Name REP_GRANT_ACE = rep("GrantACE");
+
+ /** rep:DenyACE */
+ public static final Name REP_DENY_ACE = rep("DenyACE");
+
+ /** rep:AccessControl */
+ public static final Name REP_ACCESS_CONTROL = rep("AccessControl");
+
+ /** rep:PrincipalAccessControl */
+ public static final Name REP_PRINCIPAL_ACCESS_CONTROL =
+ rep("PrincipalAccessControl");
+
+ /** rep:nodePath */
+ public static final Name REP_NODE_PATH = rep("nodePath");
/**
* The special wildcard name used as the name of residual item definitions.
@@ -638,4 +671,54 @@ public class NameConstants {
*/
public static final Name SV_MULTIPLE = FACTORY.create(Name.NS_SV_URI, "multiple");
+ //--------------------------------------------< privilege name constants >
+
+ /** jcr:read */
+ public static final Name JCR_READ =
+ FACTORY.create(Privilege.JCR_READ);
+
+ /** jcr:modifyProperties */
+ public static final Name JCR_MODIFY_PROPERTIES =
+ FACTORY.create(Privilege.JCR_MODIFY_PROPERTIES);
+
+ /** jcr:addChildNodes */
+ public static final Name JCR_ADD_CHILD_NODES =
+ FACTORY.create(Privilege.JCR_ADD_CHILD_NODES);
+
+ /** jcr:removeChildNodes */
+ public static final Name JCR_REMOVE_CHILD_NODES =
+ FACTORY.create(Privilege.JCR_REMOVE_CHILD_NODES);
+
+ /** jcr:removeNode */
+ public static final Name JCR_REMOVE_NODE =
+ FACTORY.create(Privilege.JCR_REMOVE_NODE);
+
+ /** jcr:readAccessControl */
+ public static final Name JCR_READ_ACCESS_CONTROL =
+ FACTORY.create(Privilege.JCR_READ_ACCESS_CONTROL);
+
+ /** jcr:modifyAccessControl */
+ public static final Name JCR_MODIFY_ACCESS_CONTROL =
+ FACTORY.create(Privilege.JCR_MODIFY_ACCESS_CONTROL);
+
+ /** jcr:nodeTypeManagement */
+ public static final Name JCR_NODE_TYPE_MANAGEMENT =
+ FACTORY.create(Privilege.JCR_NODE_TYPE_MANAGEMENT);
+
+ /** jcr:versionManagement */
+ public static final Name JCR_VERSION_MANAGEMENT =
+ FACTORY.create(Privilege.JCR_VERSION_MANAGEMENT);
+
+ /** jcr:lockManagement */
+ public static final Name JCR_LOCK_MANAGEMENT =
+ FACTORY.create(Privilege.JCR_LOCK_MANAGEMENT);
+
+ /** jcr:lifecycleManagement */
+ public static final Name JCR_LIFECYCLE_MANAGEMENT =
+ FACTORY.create(Privilege.JCR_LIFECYCLE_MANAGEMENT);
+
+ /** jcr:retentionManagement */
+ public static final Name JCR_RETENTION_MANAGEMENT =
+ FACTORY.create(Privilege.JCR_RETENTION_MANAGEMENT);
+
}
\ No newline at end of file