You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-dev@jakarta.apache.org by re...@locus.apache.org on 2000/10/09 06:58:31 UTC
cvs commit: jakarta-slide/src/stores/slidestore/file FileDescriptorsStoreNoVersioning.java
remm 00/10/08 21:58:31
Modified: src/doc conf-lib.xml
src/share/org/apache/slide slide.properties
Added: src/stores/slidestore/file
FileDescriptorsStoreNoVersioning.java
Log:
- Disabling security now works properly (it was the last spot where I forgot
to update the old package name was still there ...)
Thanks to Pill Juergen <Ju...@softwareag.com> for the report.
Revision Changes Path
1.11 +3 -3 jakarta-slide/src/doc/conf-lib.xml
Index: conf-lib.xml
===================================================================
RCS file: /home/cvs/jakarta-slide/src/doc/conf-lib.xml,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- conf-lib.xml 2000/09/24 17:20:06 1.10
+++ conf-lib.xml 2000/10/09 04:58:30 1.11
@@ -46,16 +46,16 @@
# way of handling blocks configuration. See the Avalon documentation on the
# Avalon website for more information.
# Default : Will look for domain.xml in current directory
- #org.exolab.slide.domain=domain.xml
+ #org.apache.slide.domain=domain.xml
# Automatically perform security checks. If set to false, no security checks
# will be performed. It's equivalent to giving root access to each principal.
# Default : true
- #org.exolab.slide.security=true
+ #org.apache.slide.security=true
# Automatically perform locking checks. Locking is disabled if set to false.
# Default : true
- #org.exolab.slide.lock=true
+ #org.apache.slide.lock=true
</pre>
</p>
1.2 +3 -3 jakarta-slide/src/share/org/apache/slide/slide.properties
Index: slide.properties
===================================================================
RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/slide.properties,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- slide.properties 2000/05/09 02:47:18 1.1
+++ slide.properties 2000/10/09 04:58:31 1.2
@@ -1,11 +1,11 @@
# Domain XML definition file
# Default : Will look for domain.xml in current directory
-#org.exolab.slide.domain=Domain.xml
+#org.apache.slide.domain=Domain.xml
# Automatically perform security checks
# Default : true
-org.exolab.slide.security=true
+org.apache.slide.security=true
# Automatically perform locking checks
# Default : true
-#org.exolab.slide.lock=true
+#org.apache.slide.lock=true
1.1 jakarta-slide/src/stores/slidestore/file/FileDescriptorsStoreNoVersioning.java
Index: FileDescriptorsStoreNoVersioning.java
===================================================================
/*
* $Header: /home/cvs/jakarta-slide/src/stores/slidestore/file/FileDescriptorsStoreNoVersioning.java,v 1.1 2000/10/09 04:58:31 remm Exp $
* $Revision: 1.1 $
* $Date: 2000/10/09 04:58:31 $
*
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
* [Additional notices, if required by prior licensing conditions]
*
*/
package slidestore.file;
import java.util.Hashtable;
import java.util.Enumeration;
import java.util.Date;
import java.io.*;
import org.apache.slide.common.*;
import org.apache.slide.store.*;
import org.apache.slide.structure.*;
import org.apache.slide.content.*;
/**
* Filesystem implementation of Store.
*
* @author <a href="mailto:remm@apache.org">Remy Maucherat</a>
* @version $Revision: 1.1 $
*/
public class FileDescriptorsStoreNoVersioning extends ServiceImpl
implements ContentStore {
// -------------------------------------------------------------- Constants
public static final int BUFFER_SIZE = 2048;
public static final String CHARACTER_ENCODING = "8859_1";
// ----------------------------------------------------- Instance Variables
/**
* Path from which files are stored.
*/
private String rootpath;
// ---------------------------------------------------- ServiceImpl Methods
/**
* Read parameters.
*
* @param parameters Hashtable containing the parameters' name
* and associated value
*/
public synchronized void setParameters(Hashtable parameters)
throws ServiceParameterErrorException,
ServiceParameterMissingException {
// A parameter will tell were serialization files are.
rootpath = (String) parameters.get("rootpath");
if (rootpath == null) {
// Default is that files are stored starting in the
// current directory
rootpath = "";
}
}
/**
* Connects to store.
*
* @exception VersionException
*/
public synchronized void connect()
throws ServiceConnectionFailedException {
}
/**
* Disconnects from content store.
*
* @exception ServiceDisconnectionFailedException
*/
public synchronized void disconnect()
throws ServiceDisconnectionFailedException {
}
/**
* Initializes content store.
*
* @exception ServiceInitializationFailedException Throws an exception
* if the store has already been initialized before
*/
public synchronized void initialize(NamespaceAccessToken token)
throws ServiceInitializationFailedException {
try {
File baseDir = new File(rootpath);
baseDir.mkdirs();
} catch (Exception e) {
e.printStackTrace();
throw new ServiceInitializationFailedException(this, e);
}
}
/**
* Deletes content store.
*
* @exception ServiceResetFailedException
*/
public void reset()
throws ServiceResetFailedException {
}
/**
* This function tells whether or not the service is connected.
*
* @return boolean true if we are connected
* @exception ServiceAccessException Service access error
*/
public boolean isConnected()
throws ServiceAccessException {
return true;
}
/**
* Does nothing here.
*
* @exception ServiceAccessException Unspecified service access error
*/
public synchronized void commit()
throws ServiceAccessException {
}
// --------------------------------------------------- ContentStore Methods
/**
* Retrive revision content.
*
* @param uri Uri
* @param revisionNumber Node revision number
*/
public NodeRevisionContent retrieveRevisionContent
(Uri uri, NodeRevisionNumber revisionNumber)
throws ServiceAccessException, RevisionNotFoundException {
NodeRevisionContent result = null;
String revisionUri = uri.toString();
try {
File file = new File(rootpath + revisionUri);
FileInputStream is = new FileInputStream(file);
InputStreamReader reader = new InputStreamReader
(is, CHARACTER_ENCODING);
result = new NodeRevisionContent();
result.setContent(reader);
result.setContent(is);
} catch (FileNotFoundException e) {
e.printStackTrace();
throw new RevisionNotFoundException(uri.toString(),
revisionNumber);
} catch (IOException e) {
e.printStackTrace();
throw new ServiceAccessException(this, e.getMessage());
}
return result;
}
/**
* Create a new revision
*
* @param uri Uri
* @param revisionDescriptor Node revision descriptor
* @param revisionContent Node revision content
*/
public void createRevisionContent
(Uri uri, NodeRevisionDescriptor revisionDescriptor,
NodeRevisionContent revisionContent)
throws ServiceAccessException, RevisionAlreadyExistException {
String revisionUri = uri.toString();
try {
File file = new File(rootpath + revisionUri);
File parentFile = new File(file.getParent());
if ((parentFile != null) && (!parentFile.exists())) {
parentFile.mkdirs();
}
boolean created = !file.exists();
if (!created) {
throw new RevisionAlreadyExistException
(uri.toString(), revisionDescriptor.getRevisionNumber());
}
InputStream is = revisionContent.streamContent();
if (is != null) {
OutputStream os = new FileOutputStream(file);
// We copy 8 ko with each read
byte[] buffer = new byte[BUFFER_SIZE];
long position = 0;
long contentLength = revisionDescriptor.getContentLength();
int nChar = 0;
while (position < contentLength) {
nChar = is.read(buffer, 0, BUFFER_SIZE);
if (nChar == -1) {
break;
}
os.write(buffer, 0, nChar);
position = position + nChar;
}
is.close();
os.close();
if (position < contentLength) {
// Not enough bytes read !!!
throw new IOException("Not enough bytes read");
}
} else {
}
} catch (IOException e) {
e.printStackTrace();
throw new ServiceAccessException(this, e.getMessage());
} catch (Exception e) {
e.printStackTrace();
throw new ServiceAccessException(this, e.getMessage());
}
}
/**
* Modify the latest revision of an object.
*
* @param uri Uri
* @param revisionDescriptor Node revision descriptor
* @param revisionContent Node revision content
*/
public void storeRevisionContent
(Uri uri, NodeRevisionDescriptor revisionDescriptor,
NodeRevisionContent revisionContent)
throws ServiceAccessException, RevisionNotFoundException {
String revisionUri = uri.toString();
try {
File file = new File(rootpath + revisionUri);
InputStream is = revisionContent.streamContent();
if (is != null) {
OutputStream os = null;
try {
os = new FileOutputStream(file);
} catch (FileNotFoundException ex) {
// Try to create the parent directory and try again
File parentFile = new File(file.getParent());
if ((parentFile != null) && (!parentFile.exists())) {
parentFile.mkdirs();
}
os = new FileOutputStream(file);
}
// We copy 8 ko with each read
byte[] buffer = new byte[BUFFER_SIZE];
long position = 0;
long contentLength = revisionDescriptor.getContentLength();
int nChar = 0;
while (position < contentLength) {
nChar = is.read(buffer, 0, BUFFER_SIZE);
if (nChar == -1) {
break;
}
os.write(buffer, 0, nChar);
position = position + nChar;
}
is.close();
os.close();
if (position < contentLength) {
// Not enough bytes read !!!
throw new IOException("Not enough bytes read");
}
} else {
}
} catch (FileNotFoundException e) {
e.printStackTrace();
throw new RevisionNotFoundException
(uri.toString(), revisionDescriptor.getRevisionNumber());
} catch (IOException e) {
e.printStackTrace();
throw new ServiceAccessException(this, e.getMessage());
}
}
/**
* Remove revision.
*
* @param uri Uri
* @param revisionNumber Node revision number
*/
public void removeRevisionContent(Uri uri,
NodeRevisionNumber revisionNumber)
throws ServiceAccessException {
String revisionUri = uri.toString();
try {
File file = new File(rootpath + revisionUri);
boolean deleted = file.delete();
File parentFile = new File(file.getParent());
if (parentFile != null) {
parentFile.delete();
}
} catch (Exception e) {
e.printStackTrace();
throw new ServiceAccessException(this, e.getMessage());
}
}
}