/*
* $Header: /home/cvs/jakarta-slide/src/stores/slidestore/file/Attic/AbstractUriProperties.java,v 1.5.2.2 2004/03/03 09:58:47 ozeigermann Exp $
* $Revision: 1.5.2.2 $
* $Date: 2004/03/03 09:58:47 $
*
* ====================================================================
*
* Copyright 1999-2002 The Apache Software Foundation
*
* 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.
*
*/
package slidestore.file;
//----------------------------------------
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;
import org.apache.slide.common.ServiceAccessException;
import org.apache.slide.common.Uri;
import org.apache.slide.content.NodeRevisionDescriptor;
import org.apache.slide.content.NodeRevisionDescriptors;
import org.apache.slide.content.NodeRevisionNumber;
import org.apache.slide.content.RevisionDescriptorNotFoundException;
import org.apache.slide.lock.LockTokenNotFoundException;
import org.apache.slide.lock.NodeLock;
import org.apache.slide.security.NodePermission;
import org.apache.slide.structure.ObjectAlreadyExistsException;
import org.apache.slide.structure.ObjectNode;
import org.apache.slide.structure.ObjectNotFoundException;
//----------------------------------------
//----------------------------------------
//----------------------------------------
//----------------------------------------
/**
* Handles the descriptions attached to an Uri</a>
* @author <a href="mailto:mdecugis@mds-desing.fr">Marc D�cugis</a>
* @contact <a href="mailto:remm@apache.org">Remy Maucherat</a>
* @version $Revision: 1.5.2.2 $ , $Date: 2004/03/03 09:58:47 $
* @deprecated will be removed in 2.1
*/
//----------------------------------------
public class AbstractUriProperties {
/** Stored object.*/
protected ObjectNode object;
/** Permissions vector. */
protected Vector permissions;
/** Locks vector.*/
protected Vector locks;
/** Revision descriptors.*/
protected NodeRevisionDescriptors revisionDescriptors;
/** Revision descriptor hashtable.*/
protected Hashtable descriptor;
/** The rootpath user to store uri descriptions.*/
protected String rootpath;
//----------------------------------------
public AbstractUriProperties(String aRootPath,Uri aUri) {
rootpath=aRootPath;
}
//----------------------------------------
protected void save(Uri aUri) throws ServiceAccessException {
// System.out.println("------------------------------------------------------------------------");
// System.out.println("----------- AbstractUriProperties save aUri="+aUri);
// System.out.println("----------- AbstractUriProperties save object="+object);
// System.out.println("----------- AbstractUriProperties save permissions="+permissions);
// System.out.println("----------- AbstractUriProperties save locks="+locks);
// System.out.println("----------- AbstractUriProperties save revisionDescriptors="+revisionDescriptors);
// System.out.println("----------- AbstractUriProperties save descriptor="+descriptor);
// System.out.println("------------------------------------------------------------------------");
}
//----------------------------------------
//----------------------------------------
//----------------------------------------
//----------------------------------------
/**
* Retrive an object from the Descriptors Store.
*
* @param uri Uri of the object we want to retrieve
* @exception ServiceAccessException Error accessing the Descriptors Store
* @exception ObjectNotFoundException The object to retrieve was not found
*/
//----------------------------------------
public ObjectNode retrieveObject(Uri uri)
throws ServiceAccessException, ObjectNotFoundException {
// System.out.println("----------- AbstractUriProperties retrieveObject uri="+uri+" object="+object);
if (object == null) {
throw new ObjectNotFoundException(uri);
}
// System.out.println("----------- AbstractUriProperties retrieveObject uri="+uri+" object="+object);
return object.cloneObject();
}
//----------------------------------------
/**
* Store an object in the Descriptors Store.
*
* @param object Object to update
* @exception ServiceAccessException Error accessing the Descriptors Store
* @exception ObjectNotFoundException The object to update was not found
*/
//----------------------------------------
public void storeObject(Uri uri,ObjectNode aObject)
throws ServiceAccessException, ObjectNotFoundException {
// System.out.println("----------- AbstractUriProperties storeObject uri="+uri+" object="+object);
object=aObject.cloneObject();
save(uri);
}
//----------------------------------------
/**
* Create a new object in the Descriptors Store.
*
* @param object SlideObject
* @param uri Uri of the object we want to create
* @exception ServiceAccessException Error accessing the Descriptors Store
* @exception ObjectAlreadyExistsException An object already exists
* at this Uri
*/
//----------------------------------------
public void createObject(Uri uri,ObjectNode aObject)
throws ServiceAccessException, ObjectAlreadyExistsException {
try {
if (object.getUri().equals(uri.toString())) {
throw new ObjectAlreadyExistsException(uri.toString());
}
storeObject(uri,aObject);
} catch(ObjectNotFoundException e) {
// Never happens
}
// System.out.println("----------- AbstractUriProperties createObject uri="+uri+" object="+object);
}
//----------------------------------------
/**
* Remove an object from the Descriptors Store.
*
* @param object Object to remove
* @exception ServiceAccessException Error accessing the Descriptors Store
* @exception ObjectNotFoundException The object to remove was not found
*/
//----------------------------------------
public void removeObject(Uri uri, ObjectNode aObject)
throws ServiceAccessException, ObjectNotFoundException {
object=null;
// System.out.println("----------- AbstractUriProperties removeObject uri="+uri+" object="+object);
}
//----------------------------------------
/**
* Store an object permissions in the Descriptors Store.
*
* @param permission Permission we want to create
* @exception ServiceAccessException Error accessing the Descriptors Store
*/
//----------------------------------------
public void grantPermission(Uri uri,NodePermission permission)
throws ServiceAccessException {
if (permissions == null) permissions = new Vector();
permissions.addElement(permission.cloneObject());
save(uri);
}
//----------------------------------------
/**
* Store an object permissions in the Descriptors Store.
*
* @param permission Permission we want to create
* @exception ServiceAccessException Error accessing the Descriptors Store
*/
//----------------------------------------
public void revokePermission(Uri uri,NodePermission permission)
throws ServiceAccessException {
if (permissions != null)
permissions.removeElement(permission);
save(uri);
}
//----------------------------------------
/**
* Revoke all the permissions on the object .
*
* @param permission Permission we want to create
* @exception ServiceAccessException Error accessing the Descriptors Store
*/
//----------------------------------------
public void revokePermissions(Uri uri)
throws ServiceAccessException {
if (permissions != null)
permissions.removeAllElements();
save(uri);
}
//----------------------------------------
/**
* Store an object permissions in the Descriptors Store.
*
* @param permission Permission we want to create
* @exception ServiceAccessException Error accessing the Descriptors Store
*/
//----------------------------------------
public Enumeration enumeratePermissions()
throws ServiceAccessException {
if (permissions == null) permissions = new Vector();
return permissions.elements();
}
//----------------------------------------
/**
* Puts a lock on a subject.
*
* @param lock Lock token
* @exception ServiceAccessException Service access error
*/
//----------------------------------------
public void putLock(Uri uri, NodeLock lock)
throws ServiceAccessException {
if (locks == null) locks = new Vector();
locks.addElement(lock.cloneObject());
save(uri);
}
//----------------------------------------
/**
* Renews a lock.
*
* @param lock Token to renew
* @exception ServiceAccessException Service access error
* @exception LockTokenNotFoundException Lock token was not found
*/
//----------------------------------------
public void renewLock(Uri uri, NodeLock lock) throws ServiceAccessException, LockTokenNotFoundException {
if (locks == null) locks = new Vector();
boolean wasPresent = locks.removeElement(lock);
if (!wasPresent) {
throw new LockTokenNotFoundException(lock);
}
locks.addElement(lock.cloneObject());
save(uri);
}
//----------------------------------------
/**
* Removes (cancels) a lock.
*
* @param lock Token to remove
* @exception ServiceAccessException Service access error
* @exception LockTokenNotFoundException Lock token was not found
*/
//----------------------------------------
public void removeLock(Uri uri,NodeLock lock)
throws ServiceAccessException, LockTokenNotFoundException {
if (locks == null) {
throw new LockTokenNotFoundException(lock);
}
boolean wasPresent = locks.removeElement(lock);
if (!wasPresent) {
throw new LockTokenNotFoundException(lock);
}
save(uri);
}
//----------------------------------------
/**
* Returns the list of locks put on a subject.
*
* @param subject Subject
* @return Enumeration List of locks which have been put on the subject
* @exception ServiceAccessException Service access error
*/
//----------------------------------------
public Enumeration enumerateLocks()
throws ServiceAccessException {
if (locks == null) locks = new Vector();
return locks.elements();
}
//----------------------------------------
/**
* Retrieve a revision descriptors.
*
* @param uri Uri
* @exception ServiceAccessException Service access error
* @exception RevisionDescriptorNotFoundException Revision descriptor
* was not found
*/
//----------------------------------------
public NodeRevisionDescriptors retrieveRevisionDescriptors(Uri uri)
throws ServiceAccessException, RevisionDescriptorNotFoundException {
if (revisionDescriptors == null) {
throw new RevisionDescriptorNotFoundException(uri.toString());
}
return revisionDescriptors.cloneObject();
}
//----------------------------------------
/**
* Create new revision descriptors.
*
* @param uri Uri
* @param revisionDescriptors Node revision descriptors
* @exception ServiceAccessException Service access error
*/
//----------------------------------------
public void createRevisionDescriptors (Uri uri,NodeRevisionDescriptors aRevisionDescriptors)
throws ServiceAccessException {
revisionDescriptors = aRevisionDescriptors.cloneObject();
save(uri);
}
//----------------------------------------
/**
* Update revision descriptors.
*
* @param uri Uri
* @param revisionDescriptors Node revision descriptors
* @exception ServiceAccessException Service access error
* @exception RevisionDescriptorNotFoundException Revision descriptor
* was not found
*/
//----------------------------------------
public void storeRevisionDescriptors(Uri uri, NodeRevisionDescriptors aRevisionDescriptors)
throws ServiceAccessException, RevisionDescriptorNotFoundException {
if (!revisionDescriptors.getUri().equals(uri.toString())) {
throw new RevisionDescriptorNotFoundException(uri.toString());
}
revisionDescriptors = aRevisionDescriptors.cloneObject();
save(uri);
}
//----------------------------------------
/**
* Remove revision descriptors.
*
* @param uri Uri
* @exception ServiceAccessException Service access error
*/
//----------------------------------------
public void removeRevisionDescriptors(Uri uri)
throws ServiceAccessException {
revisionDescriptors = null;
save(uri);
}
//----------------------------------------
/**
* Retrieve revision descriptor.
*
* @param Uri uri
* @param revisionNumber Node revision number
*/
//----------------------------------------
public NodeRevisionDescriptor retrieveRevisionDescriptor(Uri uri, NodeRevisionNumber revisionNumber)
throws ServiceAccessException, RevisionDescriptorNotFoundException {
Object result = null;
if (descriptor!=null && revisionNumber!=null) result = descriptor.get(revisionNumber.toString());
if (result == null) {
throw new RevisionDescriptorNotFoundException(uri.toString());
}
return ((NodeRevisionDescriptor) result).cloneObject();
}
//----------------------------------------
/**
* Create new revision descriptor.
*
* @param uri Uri
* @param revisionDescriptor Node revision descriptor
* @exception ServiceAccessException Service access error
*/
//----------------------------------------
public void createRevisionDescriptor(Uri uri, NodeRevisionDescriptor aRevisionDescriptor)
throws ServiceAccessException {
if (descriptor==null) descriptor=new Hashtable();
descriptor.put(aRevisionDescriptor.getRevisionNumber().toString(),
aRevisionDescriptor.cloneObject());
save(uri);
}
//----------------------------------------
/**
* Update revision descriptor.
*
* @param uri Uri
* @param revisionDescriptors Node revision descriptor
* @exception ServiceAccessException Service access error
* @exception RevisionDescriptorNotFoundException Revision descriptor
* was not found
*/
//----------------------------------------
public void storeRevisionDescriptor(Uri uri, NodeRevisionDescriptor aRevisionDescriptor)
throws ServiceAccessException, RevisionDescriptorNotFoundException {
String key = aRevisionDescriptor.getRevisionNumber().toString();
if (descriptor==null || !descriptor.containsKey(key)) {
throw new RevisionDescriptorNotFoundException(uri.toString());
}
descriptor.put(key, aRevisionDescriptor.cloneObject());
save(uri);
}
//----------------------------------------
/**
* Remove revision descriptor.
*
* @param uri Uri
* @param revisionNumber Revision number
* @exception ServiceAccessException Service access error
*/
//----------------------------------------
public void removeRevisionDescriptor(Uri uri, NodeRevisionNumber number)
throws ServiceAccessException {
if (descriptor==null) return;
descriptor.remove(number.toString());
save(uri);
}
}