You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by an...@apache.org on 2006/07/12 15:33:27 UTC

svn commit: r421270 [1/23] - in /jackrabbit/trunk/contrib/spi: ./ commons/ commons/src/ commons/src/main/ commons/src/main/java/ commons/src/main/java/org/ commons/src/main/java/org/apache/ commons/src/main/java/org/apache/jackrabbit/ commons/src/main/...

Author: angela
Date: Wed Jul 12 06:33:19 2006
New Revision: 421270

URL: http://svn.apache.org/viewvc?rev=421270&view=rev
Log:
SPI Contribution

Added:
    jackrabbit/trunk/contrib/spi/   (with props)
    jackrabbit/trunk/contrib/spi/FAQ.txt   (with props)
    jackrabbit/trunk/contrib/spi/LICENSE.txt   (with props)
    jackrabbit/trunk/contrib/spi/NOTICE.txt   (with props)
    jackrabbit/trunk/contrib/spi/README.txt   (with props)
    jackrabbit/trunk/contrib/spi/TODO.txt   (with props)
    jackrabbit/trunk/contrib/spi/commons/
    jackrabbit/trunk/contrib/spi/commons/maven.xml   (with props)
    jackrabbit/trunk/contrib/spi/commons/project.properties   (with props)
    jackrabbit/trunk/contrib/spi/commons/project.xml   (with props)
    jackrabbit/trunk/contrib/spi/commons/src/
    jackrabbit/trunk/contrib/spi/commons/src/main/
    jackrabbit/trunk/contrib/spi/commons/src/main/java/
    jackrabbit/trunk/contrib/spi/commons/src/main/java/org/
    jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/
    jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/
    jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/fs/
    jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/fs/FileSystem.java   (with props)
    jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/fs/FileSystemException.java   (with props)
    jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/fs/FileSystemPathUtil.java   (with props)
    jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/fs/FileSystemResource.java   (with props)
    jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/fs/RandomAccessOutputStream.java   (with props)
    jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/value/
    jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/value/QValue.java   (with props)
    jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/value/ValueFormat.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr-spi.ipr
    jackrabbit/trunk/contrib/spi/jcr2spi/
    jackrabbit/trunk/contrib/spi/jcr2spi/maven.xml   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/project.properties   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/project.xml   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/CachingHierarchyManager.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/DefaultIdKeyMap.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/HierarchyManager.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/HierarchyManagerImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/IdKeyMap.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemLifeCycleListener.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemManager.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemManagerImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/LazyItemIterator.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ManagerProvider.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/PropertyImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/RepositoryImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/SessionImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/SessionListener.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/XASession.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/XASessionImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ZombieHierarchyManager.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/config/
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/config/RepositoryConfig.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/DefaultLockManager.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockManager.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockManagerImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/name/
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/name/CachingNamespaceResolver.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/name/LocalNamespaceMappings.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/name/NamespaceRegistryImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/name/NamespaceStorage.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/DefinitionValidator.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeType.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeTypeCache.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeTypeImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/InvalidConstraintException.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/InvalidNodeTypeDefException.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/ItemDefinitionImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/ItemDefinitionManager.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeDefinitionImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeConflictException.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeManagerImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistry.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryListener.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeStorage.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/PropertyDefinitionImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/ValueConstraint.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/observation/
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/observation/EventFilter.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/observation/EventImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/observation/FilteredEventIterator.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/observation/InternalEventListener.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/observation/ObservationManagerImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AbstractCopy.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AbstractOperation.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AddLabel.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AddNode.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AddProperty.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Checkin.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Checkout.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Clone.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Copy.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/LockOperation.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/LockRefresh.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/LockRelease.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Merge.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Move.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Operation.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/OperationVisitor.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Remove.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/RemoveLabel.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/ReorderNodes.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/ResolveMergeConflict.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Restore.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/SetMixin.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/SetPropertyValue.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Update.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/NodeIteratorImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/QueryImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/QueryManagerImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/QueryResultImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/RowIteratorImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/ScoreNodeIterator.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/AccessManager.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/SecurityConstants.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/CachingItemStateManager.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ChangeLog.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemState.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateException.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateListener.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateManager.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateValidator.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NoSuchItemStateException.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeReferences.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeStateListener.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/PropertyState.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/StaleItemStateException.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/TransientChangeLog.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/TransientItemStateListener.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/TransientItemStateManager.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/UpdatableItemStateManager.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/util/
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/util/Dumpable.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/util/ReferenceChangeTracker.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/DefaultVersionManager.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionHistoryImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManager.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/AbstractSAXEventGenerator.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/DocViewImportHandler.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/DocViewSAXEventGenerator.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/ImportHandler.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/Importer.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/ImporterImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/SysViewImportHandler.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/SysViewSAXEventGenerator.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/TargetImportHandler.java   (with props)
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/WorkspaceContentHandler.java   (with props)
    jackrabbit/trunk/contrib/spi/maven.xml   (with props)
    jackrabbit/trunk/contrib/spi/project.properties   (with props)
    jackrabbit/trunk/contrib/spi/project.xml   (with props)
    jackrabbit/trunk/contrib/spi/spi/
    jackrabbit/trunk/contrib/spi/spi/maven.xml   (with props)
    jackrabbit/trunk/contrib/spi/spi/project.properties   (with props)
    jackrabbit/trunk/contrib/spi/spi/project.xml   (with props)
    jackrabbit/trunk/contrib/spi/spi/src/
    jackrabbit/trunk/contrib/spi/spi/src/main/
    jackrabbit/trunk/contrib/spi/spi/src/main/java/
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/Batch.java   (with props)
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/Event.java   (with props)
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/EventIterator.java   (with props)
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/EventListener.java   (with props)
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/IdFactory.java   (with props)
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/IdIterator.java   (with props)
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/ItemId.java   (with props)
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/ItemInfo.java   (with props)
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/LockInfo.java   (with props)
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/NodeId.java   (with props)
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/NodeInfo.java   (with props)
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/PropertyId.java   (with props)
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/PropertyInfo.java   (with props)
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/QItemDefinition.java   (with props)
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/QNodeDefinition.java   (with props)
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/QNodeTypeDefinition.java   (with props)
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/QNodeTypeDefinitionIterator.java   (with props)
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/QPropertyDefinition.java   (with props)
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/QueryInfo.java   (with props)
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/RepositoryService.java   (with props)
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/SessionInfo.java   (with props)
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/XASessionInfo.java   (with props)
    jackrabbit/trunk/contrib/spi/spi2dav/   (with props)
    jackrabbit/trunk/contrib/spi/spi2dav/maven.xml   (with props)
    jackrabbit/trunk/contrib/spi/spi2dav/project.properties   (with props)
    jackrabbit/trunk/contrib/spi/spi2dav/project.xml   (with props)
    jackrabbit/trunk/contrib/spi/spi2dav/src/
    jackrabbit/trunk/contrib/spi/spi2dav/src/main/
    jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/
    jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/
    jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/
    jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/
    jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/
    jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventIteratorImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/ExceptionConverter.java   (with props)
    jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/IdFactoryImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/ItemInfoImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/IteratorHelper.java   (with props)
    jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/LockInfoImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/NodeInfoImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/PropertyInfoImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QItemDefinitionImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QNodeDefinitionImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QNodeTypeDefinitionImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QPropertyDefinitionImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QueryInfoImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/SessionInfoImpl.java   (with props)
    jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolver.java   (with props)
    jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/ValueFactoryImpl.java   (with props)

Propchange: jackrabbit/trunk/contrib/spi/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Wed Jul 12 06:33:19 2006
@@ -0,0 +1,6 @@
+target
+*.log
+*.iws
+*.ipr
+*.iml
+junit*.properties

Added: jackrabbit/trunk/contrib/spi/FAQ.txt
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/FAQ.txt?rev=421270&view=auto
==============================================================================
--- jackrabbit/trunk/contrib/spi/FAQ.txt (added)
+++ jackrabbit/trunk/contrib/spi/FAQ.txt Wed Jul 12 06:33:19 2006
@@ -0,0 +1,94 @@
+===============================================================================
+Apache Jackrabbit SPI - FAQ
+===============================================================================
+
+Q: why defining a SPI?
+A: see README.txt
+
+
+Q: why doesn't it work?
+A: please note the the SPI contribution is still in an early stage and work
+   in progress. interfaces and implementations are still matter to change
+   and up to now almost no tests have been performed.
+   As soon as the SPI is more or less stable the normal JCR test suite can
+   be used to assert JSR 170 compliance.
+
+
+Q: Is there a working plan for the SPI? 
+A: No. we work in this as time permits.
+
+
+Q: Is there any schedule for the SPI project?
+A: No. See above.
+
+
+Q: What is the difference between JCR API and the SPI? They look similar.
+A: The SPI is basically a low level API that covers all the functionality 
+   provided by the existing JCR API but does not require implementing 
+   the transient layer of the JCR stack.
+
+
+Q: What is the status of the SPI project?
+A: The SPI is still in an early draft version. The next step would be to
+   complete the prototype (jcr2spi) in order test the feasibility of the SPI.
+
+
+Q: Can the SPI be addressed directly by clients? And what would this mean for
+   the current SPI api?
+A: Up to now, we considered, that clients should use the JSR 170 API and should
+   not operate on the SPI directly.
+
+
+Q: why does the core project not use the SPI?
+A: The jackrabbit core project represents the reference implementation of
+   JSR 170. Introducing an SPI is a recent approach that hopefully allows to
+   provide a JCR client covering the transient layer only. See also the
+   README.txt for some rationals regarding defining a SPI. 
+
+
+Q: why does the SPI subproject have a dependency to jackrabbit commons?
+A: see next Q.
+
+
+Q: why do the SPI interfaces used a final QName/Path class instead of defining
+   interfaces?
+A: this has been matter of long discussions.
+   originally no QName/Path classes were present in the SPI. instead they were
+   represented by Strings.
+   In a second step we introduced QName and QPath interfaces to the SPI
+   and added the implementation to our own 'commons' project.
+   While preparing the existing efforts for a checkin into jackrabbit, we 
+   decided, that there should be only one commons project within Jackrabbit.
+   therefore we removed the interfaces again from the SPI project, since it would
+   not be possible to have jackrabbit code depend on a contribution.
+   -> we will probably address this issue again.
+
+
+Q: jcr2spi looks like jackrabbit/core code. why are all the classes copied?
+A: originally we planned to use jackrabbit/core for the jcr2spi implementation.
+   however, we realized that its not feasible to plug different implementations
+   of the crucial interfaces in the core. Therefore we decided to copy over
+   the code and modify it according to the needs of the SPI.
+   we tried to keep track of modifications by adding a lot of //DIFF comments,
+   indication areas, where the original jackrabbit code has been modified.
+
+
+Some questions arising from issues still being discussed:
+
+Q: Why does the RepositoryService does not provide methods batch reads? 
+Q: Is there need for special handling of very large values in SPI?
+Q: Should the SPI define a XASessionInfo or should the transaction handling
+   be left out from the interfaces?
+Q: Should credentials, workspaceName and all kind of tokens be passed to every 
+   RepositoryService call instead of having a SessionInfo?
+   (currently we don't thinks so. we had that in the beginning).
+Q: RepositoryService.executeQuery(): should it take an offset?
+Q: QueryInfo: should it take a flag rating the results?
+Q: QueryInfo: should it rather return NodeInfos instead of Ids?   
+
+
+
+
+
+
+

Propchange: jackrabbit/trunk/contrib/spi/FAQ.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/trunk/contrib/spi/FAQ.txt
------------------------------------------------------------------------------
    svn:keywords = author date id revision

Added: jackrabbit/trunk/contrib/spi/LICENSE.txt
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/LICENSE.txt?rev=421270&view=auto
==============================================================================
--- jackrabbit/trunk/contrib/spi/LICENSE.txt (added)
+++ jackrabbit/trunk/contrib/spi/LICENSE.txt Wed Jul 12 06:33:19 2006
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.

Propchange: jackrabbit/trunk/contrib/spi/LICENSE.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/trunk/contrib/spi/LICENSE.txt
------------------------------------------------------------------------------
    svn:keywords = author date id revision

Added: jackrabbit/trunk/contrib/spi/NOTICE.txt
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/NOTICE.txt?rev=421270&view=auto
==============================================================================
--- jackrabbit/trunk/contrib/spi/NOTICE.txt (added)
+++ jackrabbit/trunk/contrib/spi/NOTICE.txt Wed Jul 12 06:33:19 2006
@@ -0,0 +1,8 @@
+Apache Jackrabbit
+Copyright 2006 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+Based on source code originally developed by
+Day Software (http://www.day.com/).

Propchange: jackrabbit/trunk/contrib/spi/NOTICE.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/trunk/contrib/spi/NOTICE.txt
------------------------------------------------------------------------------
    svn:keywords = author date id revision

Added: jackrabbit/trunk/contrib/spi/README.txt
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/README.txt?rev=421270&view=auto
==============================================================================
--- jackrabbit/trunk/contrib/spi/README.txt (added)
+++ jackrabbit/trunk/contrib/spi/README.txt Wed Jul 12 06:33:19 2006
@@ -0,0 +1,110 @@
+===============================================================================
+Welcome to Apache Jackrabbit  - SPI
+===============================================================================
+
+License (see also LICENSE.txt)
+===============================================================================
+
+Collective work: Copyright 2006 The Apache Software Foundation.
+
+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.
+
+
+
+Introduction
+===============================================================================
+
+This contribution within the Jackrabbit project contains a Service Provider
+Interface (SPI) and an example implementation:
+
+- JCR2SPI : implementation of the JSR170 API covering the transient layer
+            
+- SPI2DAV : SPI implementation on top of WebDAV currently connecting to
+            a Jackrabbit Jcr-Server.
+            
+This means that the current environment contains the following layers
+
+  JCR -> SPI -> WebDAV -> JCR
+           
+In a next step the JCR layer at the end of the chain will be replaced
+by another SPI implementation, avoiding the extra costs caused by 
+having JCR (including transient space and Session management) again:
+
+  JCR -> SPI -> WebDAV -> SPI    (WebDAV only being an example).
+  
+ 
+
+Aim of the SPI
+===============================================================================
+
+The goal of JSR-170 was to specify an API that is easy to use and intuitive 
+for a java "application" developer. This means that the API is designed to 
+cover the needs of the "consumer" of the API.
+Having an additional SPI layer would allow to cover network protocol mappings 
+in an abstract manner and also lower the bar for a JCR implementation.
+
+The SPI is layered underneith the transient space, and is not designed
+to be used by the application programmer directly. 
+Instead it is implemented by a "repository server" (still missing) and used 
+by a "repository client" (JCR2SPI) which exposes the JCR API to the
+application programmer.
+
+The original design goal was to define a mostly flat, non-"object oriented" 
+API. The reasons for this are:
+
+(1) Defined support of a client/server architecture
+A flat SPI-API lends itself to protocol mappings to protocols 
+like WebDAV, SOAP or others in a straightforward yet meaningful way.
+An SPI allows that a repository client and a repository server 
+can interact without explicitely specifying protocol mappings.
+
+(2) Implementation Support
+Drawing the boundaries between the repository client and the
+repository server allows repository implementation to implement
+only the "server" portion and leverage existing generic 
+(opensource) clients for things like the "transient space" etc.
+This should ease the implementation of the JSR-170 api.
+ 
+
+
+Requirements
+===============================================================================
+
+This project assumes that you have already successfully compiled and 
+installed the Jackrabbit commons module as well as the Jackrabbit
+Jcr-Server into your maven repository. If this is not the case:
+
+> cd ../../jackrabbit/modules/commons
+> maven jar:install
+
+> cd ../../../jcr-server
+> maven
+
+> cd ../contrib/spi
+> maven
+
+
+
+Limitations
+===============================================================================
+
+The SPI contribution is still under development and not yet tested.
+This applies to the API as well as to the implementations.
+  
+
+
+
+

Propchange: jackrabbit/trunk/contrib/spi/README.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/trunk/contrib/spi/README.txt
------------------------------------------------------------------------------
    svn:keywords = author date id revision

Added: jackrabbit/trunk/contrib/spi/TODO.txt
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/TODO.txt?rev=421270&view=auto
==============================================================================
--- jackrabbit/trunk/contrib/spi/TODO.txt (added)
+++ jackrabbit/trunk/contrib/spi/TODO.txt Wed Jul 12 06:33:19 2006
@@ -0,0 +1,142 @@
+===============================================================================
+Apache Jackrabbit SPI - TODOs
+===============================================================================
+
+NOTE: This list only contains major open issues.
+      Minor known issues and problems are marked throughout the code with TODO.
+
+
+1) RepositoryService  (missing)
+   
+   missing implementation for:
+   > Clone
+   > RegisterNodeType
+   > ReregisterNodeTypes
+   > UnregisterNodeType
+   > Subscribe/Unsubscribe und Event retrieval
+
+
+2) RepositoryService, Batch (improve)
+
+   > check consistency of throw clauses.
+
+
+3) Usage of SPI ids instead of JR-ids in jcr2spi  (missing)
+
+   a) using SPI NodeIds which don't have a mandatory UUID, requires fundamental
+   rework of the transient space (modified after jackrabbit code).
+   this mainly affects the following methods:
+      > remove
+      > move
+      > reorder
+      > refresh
+
+   see 10) AccessManager
+
+   b) all maps and caches using ItemId as key must be refactored in order
+   to account for the differences between SPI id and Jackrabbit/core-Ids.
+   This affects the following classes:
+
+      > ItemManagerImpl
+      > LockManagerImpl
+      > ChangeLog
+
+   c) all references to the root id
+     
+      > WorkspaceManager
+      > SessionItemStateManager
+      > HierarchyManagerImpl
+
+
+   Currently the original maps where replaced by a non-functional IdKeyMap,
+   in order to easily detect this issue within the jcr2spi project.
+   In addition the code has been marked with // TODO: TO-BE-FIXED comments. 
+
+
+5) Locking: SessionScoped locks (missing)
+   
+   Up to now, the SPI does not provide the possibility to transport the lock
+   scope. We would argue, that the 'server' does not have to care about the
+   scope of a lock.
+   
+   Therefore Lock.isSessionScoped does not return the proper value unless the
+   Session is the lock holder. 
+
+   If the scope flag is included in RepositoryService.lock the following steps
+   are required:
+
+     > RS.lock      -> additional param
+     > RSImpl.lock
+       iss=fales    -> scope = Scope.EXCLUSIVE
+       iss=true     -> ItemResourceConstants.EXLUSIVE_SESSION
+     > LockInfo     -> additional method
+     > LockInfoImpl -> retrieve scope from lockDiscovery
+     > LockImpl     -> mod. constructor (no iss flag)
+                    -> retrive isSessionScoped flag from the lockInfo
+                    -> remove todo bei getLock() methode, der
+                       zur zeit 'iss' auf false setzt.
+
+
+6) Locking: Handling of LockTokens  (problem)
+
+   There are 2 methods in JSR 170 that deal with handling of LockTokens:
+   Session.addLockToken, Session.removeLockToken. The spec defines, that
+    
+   a) session-scoped locks may not be transfered to another session
+   b) only one Session object must be lock holder. adding a token that is
+      still present with another session is not possible.
+
+   This causes the following issues with the SPI
+
+   a) session-scoped locks are currently not implemented properly (see 5)
+   b) no session info is transfered over the SPI boundary nor are the addLT/
+      removeLT methods passed over the SPI.
+      consequently its (with the current design) not possible to detect, whether
+      the given locktoken is still hold by another Session object.
+
+
+7) Observation (missing)
+
+   - RepositoryService: return value (events) von RS-calls
+   - RepositoryService: subscription/event-discovery completely missing
+
+   - EventImpl: with the current setup spi2dav connects to a default 
+     jackrabbit jcr-server reflecting JCR calls. consequently event discovery
+     will only return JCR events.
+     Additional information defined by the SPI Event interface cannot be 
+     retrieved from the information sent by jcr-server.
+
+
+8) AddNode (problem)
+ 
+   In order to be able to return the created Node, it would be required to
+   now its Id if the operation succeeded, since the Node name passed to the
+   call may not identify the new Node in case of same-name-siblings.
+
+
+9) Merge (problem)
+   
+   similar to 8)
+   The call defines a NodeIterator as return value.
+
+
+10) AccessManager (improve)
+
+   isGranted(NodeId, QPath, String[]) is redundant, since SPI to non-existing
+   Items can be created from the parent Id and a relative path pointing to the
+   Item to be checked.
+
+   -> remove method and replaces usage.
+
+
+11) Transactions (work in progress)
+
+   Definition of XASessionInfo must be reviewed.
+
+
+
+
+
+
+
+

Propchange: jackrabbit/trunk/contrib/spi/TODO.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/trunk/contrib/spi/TODO.txt
------------------------------------------------------------------------------
    svn:keywords = author date id revision

Added: jackrabbit/trunk/contrib/spi/commons/maven.xml
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/commons/maven.xml?rev=421270&view=auto
==============================================================================
--- jackrabbit/trunk/contrib/spi/commons/maven.xml (added)
+++ jackrabbit/trunk/contrib/spi/commons/maven.xml Wed Jul 12 06:33:19 2006
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+<project default="jar">
+    <!--
+        the 'clean' goal is already redefined in the maven.xml
+        of the parent project. we need to redefine it here
+        again to 'maven clean' works.
+    -->
+    <goal name="clean">
+        <attainGoal name="clean:clean"/>
+    </goal>
+</project>

Propchange: jackrabbit/trunk/contrib/spi/commons/maven.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: jackrabbit/trunk/contrib/spi/commons/project.properties
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/commons/project.properties?rev=421270&view=auto
==============================================================================
--- jackrabbit/trunk/contrib/spi/commons/project.properties (added)
+++ jackrabbit/trunk/contrib/spi/commons/project.properties Wed Jul 12 06:33:19 2006
@@ -0,0 +1,2 @@
+maven.javadoc.links=http://java.sun.com/j2se/1.4.2/docs/api/,http://www.day.com/maven/jsr170/javadocs/jcr-0.16.1-pfd/
+maven.repo.remote = http://www.ibiblio.org/maven/,http://www.day.com/maven/

Propchange: jackrabbit/trunk/contrib/spi/commons/project.properties
------------------------------------------------------------------------------
    svn = 

Propchange: jackrabbit/trunk/contrib/spi/commons/project.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Added: jackrabbit/trunk/contrib/spi/commons/project.xml
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/commons/project.xml?rev=421270&view=auto
==============================================================================
--- jackrabbit/trunk/contrib/spi/commons/project.xml (added)
+++ jackrabbit/trunk/contrib/spi/commons/project.xml Wed Jul 12 06:33:19 2006
@@ -0,0 +1,70 @@
+<?xml version="1.0"?>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+<project>
+    <!-- ====================================================================== -->
+    <!-- P R O J E C T  D E S C R I P T I O N                                   -->
+    <!-- ====================================================================== -->
+    <extend>${basedir}/../project.xml</extend>
+    <artifactId>jackrabbit-spi-commons</artifactId>
+    <name>Jackrabbit SPI Commons</name>
+    <description>Extensions to the Jackrabbit commons package.</description>
+    <package>org.apache.jackrabbit.*</package>
+
+    <!-- ====================================================================== -->
+    <!-- D E P E N D E N C I E S                                                -->
+    <!-- ====================================================================== -->
+    <dependencies>
+        <!-- jackrabbit dependencies -->
+        <dependency>
+            <groupId>org.apache.jackrabbit</groupId>
+            <artifactId>jackrabbit-jcr-commons</artifactId>
+            <version>${jackrabbit.build.version.jackrabbit}</version>
+        </dependency>
+        <!-- external dependencies -->
+        <dependency>
+            <groupId>jsr170</groupId>
+            <artifactId>jcr</artifactId>
+            <version>${jackrabbit.build.version.jcr}</version>
+            <url>http://jcp.org/en/jsr/detail?id=170</url>
+        </dependency>
+    </dependencies>
+
+    <!-- ====================================================================== -->
+    <!-- B U I L D  D E S C R I P T I O N                                       -->
+    <!-- ====================================================================== -->
+    <build>
+        <sourceDirectory>${basedir}/src/main/java</sourceDirectory>
+        <unitTestSourceDirectory>src/test/java</unitTestSourceDirectory>
+        <unitTest>
+            <includes>
+                <include>**/*Test.java</include>
+            </includes>
+        </unitTest>
+        <resources>
+            <resource>
+                <directory>src/main/java</directory>
+                <includes>
+                    <include>**/*.xml</include>
+                    <include>**/*.xsd</include>
+                    <include>**/*.properties</include>
+                    <include>**/*.dtd</include>
+                </includes>
+            </resource>
+        </resources>
+    </build>
+</project>

Propchange: jackrabbit/trunk/contrib/spi/commons/project.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/fs/FileSystem.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/fs/FileSystem.java?rev=421270&view=auto
==============================================================================
--- jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/fs/FileSystem.java (added)
+++ jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/fs/FileSystem.java Wed Jul 12 06:33:19 2006
@@ -0,0 +1,247 @@
+/*
+ * 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.fs;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+
+/**
+ * The <code>FileSystem</code> interface is an abstraction of a virtual
+ * file system. The similarities of its method names with with the methods
+ * of the <code>java.io.File</code> class are intentional.
+ * <br>
+ * Implementations of this interface expose a file system-like resource.
+ * File system-like resources include WebDAV-enabled servers, local file systems,
+ * and so forth.
+ */
+public interface FileSystem {
+
+    /**
+     * File separator
+     */
+    String SEPARATOR = "/";
+
+    /**
+     * File separator character
+     */
+    char SEPARATOR_CHAR = '/';
+
+    /**
+     * Initialize the file system
+     *
+     * @throws FileSystemException if the file system initialization fails
+     */
+    void init() throws FileSystemException;
+
+    /**
+     * Close the file system. After calling this method, the file system is no
+     * longer accessible.
+     *
+     * @throws FileSystemException
+     */
+    void close() throws FileSystemException;
+
+    /**
+     * Returns an input stream of the contents of the file denoted by this path.
+     *
+     * @param filePath the path of the file.
+     * @return an input stream of the contents of the file.
+     * @throws FileSystemException if the file does not exist
+     *                             or if it cannot be read from
+     */
+    InputStream getInputStream(String filePath) throws FileSystemException;
+
+    /**
+     * Returns an output stream for writing bytes to the file denoted by this path.
+     * The file will be created if it doesn't exist. If the file exists, its contents
+     * will be overwritten.
+     *
+     * @param filePath the path of the file.
+     * @return an output stream for writing bytes to the file.
+     * @throws FileSystemException if the file cannot be written to or created
+     */
+    OutputStream getOutputStream(String filePath) throws FileSystemException;
+
+    /**
+     * Returns an output stream for writing bytes to the file denoted by this path.
+     * The file will be created if it doesn't exist. The current position of the
+     * file pointer is set to <code>0</code>. See also
+     * {@link RandomAccessOutputStream#seek(long)};
+     *
+     * @param filePath the path of the file.
+     * @return an random access output stream for writing bytes to the file.
+     * @throws FileSystemException           if the file could not be created or
+     *                                       if the output stream cannot be obtained.
+     * @throws UnsupportedOperationException if the implementation does
+     *                                       not support file access through a
+     *                                      {@link RandomAccessOutputStream}.
+     */
+    RandomAccessOutputStream getRandomAccessOutputStream(String filePath)
+            throws FileSystemException, UnsupportedOperationException;
+
+    /**
+     * Creates the folder named by this path, including any necessary but
+     * nonexistent parent folders. Note that if this operation fails it
+     * may have succeeded in creating some of the necessary parent folders.
+     *
+     * @param folderPath the path of the folder to be created.
+     * @throws FileSystemException if a file system entry denoted by path
+     *                             already exists or if another error occurs.
+     */
+    void createFolder(String folderPath) throws FileSystemException;
+
+    /**
+     * Tests whether the file system entry denoted by this path exists.
+     *
+     * @param path the path of a file system entry.
+     * @return true if the file system entry at path is a file; false otherwise.
+     * @throws FileSystemException
+     */
+    boolean exists(String path) throws FileSystemException;
+
+    /**
+     * Tests whether the file system entry denoted by this path is a file.
+     *
+     * @param path the path of a file system entry.
+     * @return true if the file system entry at path is a file; false otherwise.
+     * @throws FileSystemException
+     */
+    boolean isFile(String path) throws FileSystemException;
+
+    /**
+     * Tests whether the file system entry denoted by this path is a folder.
+     *
+     * @param path the path of a file system entry.
+     * @return true if the file system entry at path is a folder; false otherwise.
+     * @throws FileSystemException
+     */
+    boolean isFolder(String path) throws FileSystemException;
+
+    /**
+     * Tests whether the file system entry denoted by this path has child entries.
+     *
+     * @param path the path of a file system entry.
+     * @return true if the file system entry at path has child entries; false otherwise.
+     * @throws FileSystemException
+     */
+    boolean hasChildren(String path) throws FileSystemException;
+
+    /**
+     * Returns the length of the file denoted by this path.
+     *
+     * @param filePath the path of the file.
+     * @return The length, in bytes, of the file denoted by this path,
+     *         or -1L if the length can't be determined.
+     * @throws FileSystemException if the path does not denote an existing file.
+     */
+    long length(String filePath) throws FileSystemException;
+
+    /**
+     * Returns the time that the file system entry denoted by this path
+     * was last modified.
+     *
+     * @param path the path of a file system entry.
+     * @return A long value representing the time the file system entry was
+     *         last modified, measured in milliseconds since the epoch
+     *         (00:00:00 GMT, January 1, 1970), or 0L if the modification
+     *         time can't be determined.
+     * @throws FileSystemException if the file system entry does not exist.
+     */
+    long lastModified(String path) throws FileSystemException;
+
+    /**
+     * Set the modified time of an existing file to now.
+     *
+     * @param filePath the path of the file.
+     * @throws FileSystemException if the path does not denote an existing file.
+     */
+    void touch(String filePath) throws FileSystemException;
+
+    /**
+     * Returns an array of strings naming the files and folders
+     * in the folder denoted by this path.
+     *
+     * @param folderPath the path of the folder whose contents is to be listed.
+     * @return an array of strings naming the files and folders
+     *         in the folder denoted by this path.
+     * @throws FileSystemException if this path does not denote a folder or if
+     *                             another error occurs.
+     */
+    String[] list(String folderPath) throws FileSystemException;
+
+    /**
+     * Returns an array of strings naming the files in the folder
+     * denoted by this path.
+     *
+     * @param folderPath the path of the folder whose contents is to be listed.
+     * @return an array of strings naming the files in the folder
+     *         denoted by this path.
+     * @throws FileSystemException if this path does not denote a folder or if
+     *                             another error occurs.
+     */
+    String[] listFiles(String folderPath) throws FileSystemException;
+
+    /**
+     * Returns an array of strings naming the folders in the folder
+     * denoted by this path.
+     *
+     * @param folderPath the path of the folder whose contents is to be listed.
+     * @return an array of strings naming the folders in the folder
+     *         denoted by this path.
+     * @throws FileSystemException if this path does not denote a folder or if
+     *                             another error occurs.
+     */
+    String[] listFolders(String folderPath) throws FileSystemException;
+
+    /**
+     * Deletes the file denoted by this path.
+     *
+     * @param filePath the path of the file to be deleted.
+     * @throws FileSystemException if this path does not denote a file or if
+     *                             another error occurs.
+     */
+    void deleteFile(String filePath) throws FileSystemException;
+
+    /**
+     * Deletes the folder denoted by this path. Any contents of this folder
+     * (folders and files) will be deleted recursively.
+     *
+     * @param folderPath the path of the folder to be deleted.
+     * @throws FileSystemException if this path does not denote a folder or if
+     *                             another error occurs.
+     */
+    void deleteFolder(String folderPath) throws FileSystemException;
+
+    /**
+     * Moves a file or folder to a new location.
+     *
+     * @param srcPath  the path of the file or folder to be moved.
+     * @param destPath the destination path to which the file or folder is to be moved.
+     * @throws FileSystemException if the move fails
+     */
+    void move(String srcPath, String destPath) throws FileSystemException;
+
+    /**
+     * Copies a file or folder to a new location.
+     *
+     * @param srcPath  the path of the file or folder to be copied.
+     * @param destPath the destination path to which the file or folder is to be copied.
+     * @throws FileSystemException if the copy fails
+     */
+    void copy(String srcPath, String destPath) throws FileSystemException;
+
+}

Propchange: jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/fs/FileSystem.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/fs/FileSystem.java
------------------------------------------------------------------------------
    svn:keywords = author date id revision url

Added: jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/fs/FileSystemException.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/fs/FileSystemException.java?rev=421270&view=auto
==============================================================================
--- jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/fs/FileSystemException.java (added)
+++ jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/fs/FileSystemException.java Wed Jul 12 06:33:19 2006
@@ -0,0 +1,51 @@
+/*
+ * 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.fs;
+
+import org.apache.jackrabbit.BaseException;
+
+/**
+ * The <code>FileSystemException</code> signals an error within a file system
+ * operation. FileSystemExceptions are thrown by {@link FileSystem}
+ * implementations.
+ */
+public class FileSystemException extends BaseException {
+
+    /**
+     * Constructs a new instance of this class with the specified detail
+     * message.
+     *
+     * @param message the detail message. The detail message is saved for
+     *                later retrieval by the {@link #getMessage()} method.
+     */
+    public FileSystemException(String message) {
+        super(message);
+    }
+
+    /**
+     * Constructs a new instance of this class with the specified detail
+     * message and root cause.
+     *
+     * @param message   the detail message. The detail message is saved for
+     *                  later retrieval by the {@link #getMessage()} method.
+     * @param rootCause root failure cause
+     */
+    public FileSystemException(String message, Throwable rootCause) {
+        super(message, rootCause);
+    }
+
+}

Propchange: jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/fs/FileSystemException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/fs/FileSystemException.java
------------------------------------------------------------------------------
    svn:keywords = author date id revision url

Added: jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/fs/FileSystemPathUtil.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/fs/FileSystemPathUtil.java?rev=421270&view=auto
==============================================================================
--- jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/fs/FileSystemPathUtil.java (added)
+++ jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/fs/FileSystemPathUtil.java Wed Jul 12 06:33:19 2006
@@ -0,0 +1,226 @@
+/*
+ * 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.fs;
+
+import java.io.ByteArrayOutputStream;
+import java.util.BitSet;
+
+/**
+ * Utility class for handling paths in a file system.
+ */
+public final class FileSystemPathUtil {
+
+    /**
+     * Array of lowercase hexadecimal characters used in creating hex escapes.
+     */
+    private static final char[] HEX_TABLE = "0123456789abcdef".toCharArray();
+
+    /**
+     * The escape character used to mark hex escape sequences. 
+     */
+    private static final char ESCAPE_CHAR = '%';
+
+    /**
+     * The list of characters that are not encoded by the <code>escapeName(String)</code>
+     * and <code>unescape(String)</code> methods. They contains the characters
+     * which can safely be used in file names:
+     */
+    public static final BitSet SAFE_NAMECHARS;
+
+    /**
+     * The list of characters that are not encoded by the <code>escapePath(String)</code>
+     * and <code>unescape(String)</code> methods. They contains the characters
+     * which can safely be used in file paths:
+     */
+    public static final BitSet SAFE_PATHCHARS;
+
+    static {
+        // build list of valid name characters
+        SAFE_NAMECHARS = new BitSet(256);
+        int i;
+        for (i = 'a'; i <= 'z'; i++) {
+            SAFE_NAMECHARS.set(i);
+        }
+        for (i = 'A'; i <= 'Z'; i++) {
+            SAFE_NAMECHARS.set(i);
+        }
+        for (i = '0'; i <= '9'; i++) {
+            SAFE_NAMECHARS.set(i);
+        }
+        SAFE_NAMECHARS.set('-');
+        SAFE_NAMECHARS.set('_');
+        SAFE_NAMECHARS.set('.');
+
+        // build list of valid path characters (inlcudes name characters)
+        SAFE_PATHCHARS = (BitSet) SAFE_NAMECHARS.clone();
+        SAFE_PATHCHARS.set(FileSystem.SEPARATOR_CHAR);
+    }
+
+    /**
+     * private constructor
+     */
+    private FileSystemPathUtil() {
+    }
+
+    /**
+     * Escapes the given string using URL encoding for all bytes not included
+     * in the given set of safe characters.
+     *
+     * @param s the string to escape
+     * @param safeChars set of safe characters (bytes)
+     * @return escaped string
+     */
+    private static String escape(String s, BitSet safeChars) {
+        byte[] bytes = s.getBytes();
+        StringBuffer out = new StringBuffer(bytes.length);
+        for (int i = 0; i < bytes.length; i++) {
+            int c = bytes[i] & 0xff;
+            if (safeChars.get(c) && c != ESCAPE_CHAR) {
+                out.append((char) c);
+            } else {
+                out.append(ESCAPE_CHAR);
+                out.append(HEX_TABLE[(c >> 4) & 0x0f]);
+                out.append(HEX_TABLE[(c) & 0x0f]);
+            }
+        }
+        return out.toString();
+    }
+
+    /**
+     * Encodes the specified <code>path</code>. Same as
+     * <code>{@link #escapeName(String)}</code> except that the separator
+     * character <b><code>/</code></b> is regarded as a legal path character
+     * that needs no escaping.
+     *
+     * @param path the path to encode.
+     * @return the escaped path
+     */
+    public static String escapePath(String path) {
+        return escape(path, SAFE_PATHCHARS);
+    }
+
+    /**
+     * Encodes the specified <code>name</code>. Same as
+     * <code>{@link #escapePath(String)}</code> except that the separator character
+     * <b><code>/</code></b> is regarded as an illegal character that needs
+     * escaping.
+     *
+     * @param name the name to encode.
+     * @return the escaped name
+     */
+    public static String escapeName(String name) {
+        return escape(name, SAFE_NAMECHARS);
+    }
+
+    /**
+     * Decodes the specified path/name.
+     *
+     * @param pathOrName the escaped path/name
+     * @return the unescaped path/name
+     */
+    public static String unescape(String pathOrName) {
+        ByteArrayOutputStream out = new ByteArrayOutputStream(pathOrName.length());
+        for (int i = 0; i < pathOrName.length(); i++) {
+            char c = pathOrName.charAt(i);
+            if (c == ESCAPE_CHAR) {
+                try {
+                    out.write(Integer.parseInt(pathOrName.substring(i + 1, i + 3), 16));
+                } catch (NumberFormatException e) {
+                    throw new IllegalArgumentException();
+                }
+                i += 2;
+            } else {
+                out.write(c);
+            }
+        }
+        return new String(out.toByteArray());
+    }
+
+    /**
+     * Tests whether the specified path represents the root path, i.e. "/".
+     *
+     * @param path path to test
+     * @return true if the specified path represents the root path; false otherwise.
+     */
+    public static boolean denotesRoot(String path) {
+        return path.equals(FileSystem.SEPARATOR);
+    }
+
+    /**
+     * Checks if <code>path</code> is a valid path.
+     *
+     * @param path the path to be checked
+     * @throws FileSystemException If <code>path</code> is not a valid path
+     */
+    public static void checkFormat(String path) throws FileSystemException {
+        if (path == null) {
+            throw new FileSystemException("null path");
+        }
+
+        // path must be absolute, i.e. starting with '/'
+        if (!path.startsWith(FileSystem.SEPARATOR)) {
+            throw new FileSystemException("not an absolute path: " + path);
+        }
+
+        // trailing '/' is not allowed (except for root path)
+        if (path.endsWith(FileSystem.SEPARATOR) && path.length() > 1) {
+            throw new FileSystemException("malformed path: " + path);
+        }
+
+        String[] names = path.split(FileSystem.SEPARATOR);
+        for (int i = 1; i < names.length; i++) {
+            // name must not be empty
+            if (names[i].length() == 0) {
+                throw new FileSystemException("empty name: " + path);
+            }
+            // leading/trailing whitespace is not allowed
+            String trimmed = names[i].trim();
+            if (!trimmed.equals(names[i])) {
+                throw new FileSystemException("illegal leading or trailing whitespace in name: " + path);
+            }
+        }
+    }
+
+    /**
+     * Returns the parent directory of the specified <code>path</code>.
+     *
+     * @param path a file system path denoting a directory or a file.
+     * @return the parent directory.
+     */
+    public static String getParentDir(String path) {
+        int pos = path.lastIndexOf(FileSystem.SEPARATOR_CHAR);
+        if (pos > 0) {
+            return path.substring(0, pos);
+        }
+        return FileSystem.SEPARATOR;
+    }
+
+    /**
+     * Returns the name of the specified <code>path</code>.
+     *
+     * @param path a file system path denoting a directory or a file.
+     * @return the name.
+     */
+    public static String getName(String path) {
+        int pos = path.lastIndexOf(FileSystem.SEPARATOR_CHAR);
+        if (pos != -1) {
+            return path.substring(pos + 1);
+        }
+        return path;
+    }
+
+}

Propchange: jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/fs/FileSystemPathUtil.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/trunk/contrib/spi/commons/src/main/java/org/apache/jackrabbit/fs/FileSystemPathUtil.java
------------------------------------------------------------------------------
    svn:keywords = author date id revision url