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