You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by fr...@apache.org on 2002/09/20 20:16:10 UTC
cvs commit: xml-cocoon2/src/java/org/apache/cocoon/components/store JispFilesystemStore.java
froehlich 2002/09/20 11:16:10
Modified: src/java/org/apache/cocoon/components/store
JispFilesystemStore.java
Log:
added missing clear() and keys() method and a little bit refactoring
Revision Changes Path
1.7 +120 -62 xml-cocoon2/src/java/org/apache/cocoon/components/store/JispFilesystemStore.java
Index: JispFilesystemStore.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/store/JispFilesystemStore.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- JispFilesystemStore.java 4 Sep 2002 10:20:24 -0000 1.6
+++ JispFilesystemStore.java 20 Sep 2002 18:16:10 -0000 1.7
@@ -64,6 +64,7 @@
import org.apache.cocoon.util.IOUtils;
import com.coyotegulch.jisp.BTreeIndex;
+import com.coyotegulch.jisp.BTreeObjectIterator;
import com.coyotegulch.jisp.IndexedObjectDatabase;
import com.coyotegulch.jisp.KeyNotFound;
import com.coyotegulch.jisp.KeyObject;
@@ -90,24 +91,24 @@
Initializable,
Parameterizable {
- protected File workDir;
- protected File cacheDir;
+ protected File m_workDir;
+ protected File m_cacheDir;
/**
* The directory repository
*/
- protected File directoryFile;
- protected volatile String directoryPath;
+ protected File m_directoryFile;
+ protected volatile String m_directoryPath;
/**
* The database
*/
- private File databaseFile;
- private File indexFile;
+ private File m_databaseFile;
+ private File m_indexFile;
- private int mOrder;
- private IndexedObjectDatabase mDatabase;
- private BTreeIndex mIndex;
+ private int m_Order;
+ private IndexedObjectDatabase m_Database;
+ private BTreeIndex m_Index;
/**
* Sets the repository's location
@@ -129,28 +130,28 @@
public void setDirectory(final File directory)
throws IOException {
- this.directoryFile = directory;
+ this.m_directoryFile = directory;
/* Save directory path prefix */
- this.directoryPath = IOUtils.getFullFilename(this.directoryFile);
- this.directoryPath += File.separator;
+ this.m_directoryPath = IOUtils.getFullFilename(this.m_directoryFile);
+ this.m_directoryPath += File.separator;
- if (!this.directoryFile.exists()) {
+ if (!this.m_directoryFile.exists()) {
/* Create it new */
- if (!this.directoryFile.mkdir()) {
+ if (!this.m_directoryFile.mkdir()) {
throw new IOException("Error creating store directory '" +
- this.directoryPath + "'");
+ this.m_directoryPath + "'");
}
}
/* Is given file actually a directory? */
- if (!this.directoryFile.isDirectory()) {
- throw new IOException("'" + this.directoryPath + "' is not a directory");
+ if (!this.m_directoryFile.isDirectory()) {
+ throw new IOException("'" + this.m_directoryPath + "' is not a directory");
}
/* Is directory readable and writable? */
- if (!(this.directoryFile.canRead() && this.directoryFile.canWrite())) {
- throw new IOException("Directory '" + this.directoryPath +
+ if (!(this.m_directoryFile.canRead() && this.m_directoryFile.canWrite())) {
+ throw new IOException("Directory '" + this.m_directoryPath +
"' is not readable/writable");
}
}
@@ -162,8 +163,8 @@
* @exception ContextException
*/
public void contextualize(final Context context) throws ContextException {
- this.workDir = (File)context.get(Constants.CONTEXT_WORK_DIR);
- this.cacheDir = (File)context.get(Constants.CONTEXT_CACHE_DIR);
+ this.m_workDir = (File)context.get(Constants.CONTEXT_WORK_DIR);
+ this.m_cacheDir = (File)context.get(Constants.CONTEXT_CACHE_DIR);
}
/**
@@ -172,7 +173,7 @@
* <UL>
* <LI> datafile = the name of the data file (Default: cocoon.dat)
* </LI>
- * <LI> indexfile = the name of the index file (Default: cocoon.idx)
+ * <LI> m_indexFile = the name of the index file (Default: cocoon.idx)
* </LI>
* <LI> order = The page size of the B-Tree</LI>
* </UL>
@@ -185,22 +186,22 @@
try {
if (params.getParameterAsBoolean("use-cache-directory", false)) {
if (this.getLogger().isDebugEnabled())
- getLogger().debug("Using cache directory: " + cacheDir);
- setDirectory(cacheDir);
+ getLogger().debug("Using cache directory: " + m_cacheDir);
+ setDirectory(m_cacheDir);
} else if (params.getParameterAsBoolean("use-work-directory", false)) {
if (this.getLogger().isDebugEnabled())
- getLogger().debug("Using work directory: " + workDir);
- setDirectory(workDir);
+ getLogger().debug("Using work directory: " + m_workDir);
+ setDirectory(m_workDir);
} else if (params.getParameter("directory", null) != null) {
String dir = params.getParameter("directory");
- dir = IOUtils.getContextFilePath(workDir.getPath(), dir);
+ dir = IOUtils.getContextFilePath(m_workDir.getPath(), dir);
if (this.getLogger().isDebugEnabled())
getLogger().debug("Using directory: " + dir);
setDirectory(new File(dir));
} else {
try {
// Default
- setDirectory(workDir);
+ setDirectory(m_workDir);
} catch (IOException e) {
// Ignored
}
@@ -210,16 +211,16 @@
}
String databaseName = params.getParameter("datafile", "cocoon.dat");
- String indexName = params.getParameter("indexfile", "cocoon.idx");
- mOrder = params.getParameterAsInteger("order", 301);
+ String indexName = params.getParameter("m_indexFile", "cocoon.idx");
+ m_Order = params.getParameterAsInteger("order", 301);
if (getLogger().isDebugEnabled()) {
this.getLogger().debug("Database file name = " + databaseName);
this.getLogger().debug("Index file name = " + indexName);
- this.getLogger().debug("Order=" + mOrder);
+ this.getLogger().debug("Order=" + m_Order);
}
- databaseFile = new File(directoryFile, databaseName);
- indexFile = new File(directoryFile, indexName);
+ m_databaseFile = new File(m_directoryFile, databaseName);
+ m_indexFile = new File(m_directoryFile, indexName);
}
/**
@@ -231,21 +232,21 @@
}
try {
- if (databaseFile.exists()) {
+ if (m_databaseFile.exists()) {
if (getLogger().isDebugEnabled()) {
this.getLogger().debug("initialize(): Datafile exists");
}
- mDatabase = new IndexedObjectDatabase(databaseFile.toString(), false);
- mIndex = new BTreeIndex(indexFile.toString());
- mDatabase.attachIndex(mIndex);
+ m_Database = new IndexedObjectDatabase(m_databaseFile.toString(), false);
+ m_Index = new BTreeIndex(m_indexFile.toString());
+ m_Database.attachIndex(m_Index);
} else {
if (getLogger().isDebugEnabled()) {
this.getLogger().debug("initialize(): Datafile does not exist");
}
- mDatabase = new IndexedObjectDatabase(databaseFile.toString(), false);
- mIndex = new BTreeIndex(indexFile.toString(),
- mOrder, new JispStringKey(), false);
- mDatabase.attachIndex(mIndex);
+ m_Database = new IndexedObjectDatabase(m_databaseFile.toString(), false);
+ m_Index = new BTreeIndex(m_indexFile.toString(),
+ m_Order, new JispStringKey(), false);
+ m_Database.attachIndex(m_Index);
}
} catch (KeyNotFound ignore) {
} catch (Exception e) {
@@ -259,7 +260,7 @@
* @return the directory as String
*/
public String getDirectoryPath() {
- return this.directoryPath;
+ return this.m_directoryPath;
}
/**
@@ -268,10 +269,10 @@
* @param key the Key object
* @return the Object associated with Key Object
*/
- public Object get(Object key) {
+ public synchronized Object get(Object key) {
Object value = null;
try {
- value = mDatabase.read(this.wrapKeyObject(key), mIndex);
+ value = m_Database.read(this.wrapKeyObject(key), m_Index);
if (getLogger().isDebugEnabled()) {
if (value != null) {
getLogger().debug("Found key: " + key);
@@ -292,7 +293,7 @@
* @param value the value object
* @exception IOException
*/
- public void store(Object key, Object value)
+ public synchronized void store(Object key, Object value)
throws IOException {
if (getLogger().isDebugEnabled()) {
@@ -306,7 +307,7 @@
try {
KeyObject[] keyArray = new KeyObject[1];
keyArray[0] = this.wrapKeyObject(key);
- mDatabase.write(keyArray, (Serializable) value);
+ m_Database.write(keyArray, (Serializable) value);
} catch (Exception e) {
this.getLogger().error("store(..): Exception", e);
}
@@ -322,7 +323,7 @@
* @param value the value object
* @exception IOException
*/
- public void hold(Object key, Object value)
+ public synchronized void hold(Object key, Object value)
throws IOException {
this.store(key, value);
}
@@ -331,7 +332,7 @@
* Frees some values of the data file.<br>
* TODO: implementation
*/
- public void free() {
+ public synchronized void free() {
//TODO: implementation
}
@@ -339,12 +340,18 @@
* Clear the Store of all elements
*/
public synchronized void clear() {
- Enumeration enum = this.keys();
- while (enum.hasMoreElements()) {
- Object key = enum.nextElement();
- if (null != key) {
- this.remove(key);
+ BTreeObjectEnumeration enum = new BTreeObjectEnumeration(m_Database.createIterator(m_Index),this);
+
+ if (getLogger().isDebugEnabled()) {
+ this.getLogger().debug("clear(): Clearing the database ");
+ }
+
+ while(enum.hasMoreElements()) {
+ Object tmp = enum.nextElement();
+ if (getLogger().isDebugEnabled()) {
+ this.getLogger().debug("clear(): Removing key: " + tmp.toString());
}
+ this.remove(tmp);
}
}
@@ -353,7 +360,7 @@
*
* @param key the key object
*/
- public void remove(Object key) {
+ public synchronized void remove(Object key) {
if (getLogger().isDebugEnabled()) {
this.getLogger().debug("remove(..) Remove item");
}
@@ -361,7 +368,7 @@
try {
KeyObject[] keyArray = new KeyObject[1];
keyArray[0] = this.wrapKeyObject(key);
- mDatabase.remove(keyArray);
+ m_Database.remove(keyArray);
} catch (KeyNotFound ignore) {
} catch (Exception e) {
this.getLogger().error("remove(..): Exception", e);
@@ -374,11 +381,11 @@
* @param key the key object
* @return true if Key exists and false if not
*/
- public boolean containsKey(Object key) {
+ public synchronized boolean containsKey(Object key) {
long res = -1;
try {
- res = mIndex.findKey(this.wrapKeyObject(key));
+ res = m_Index.findKey(this.wrapKeyObject(key));
if (getLogger().isDebugEnabled()) {
this.getLogger().debug("containsKey(..): res=" + res);
}
@@ -400,13 +407,19 @@
* @return Enumeration Object with all existing keys
*/
public Enumeration keys() {
- // TODO: Implementation
- throw new RuntimeException("JispFilesystemStore does not implement method keys().");
+ BTreeObjectEnumeration enum = new BTreeObjectEnumeration(m_Database.createIterator(m_Index),this);
+ return enum;
}
public int size() {
- // TODO: Unsupported
- return 0;
+ int cnt = 0;
+
+ BTreeObjectEnumeration enum = new BTreeObjectEnumeration(m_Database.createIterator(m_Index),this);
+
+ while(enum.hasMoreElements()) {
+ cnt++;
+ }
+ return cnt;
}
/**
@@ -419,5 +432,50 @@
// TODO: Implementation of Integer and Long keys
String skey = String.valueOf(key);
return new JispStringKey(key.toString());
+ }
+
+ class BTreeObjectEnumeration implements Enumeration {
+ private BTreeObjectIterator m_Iterator;
+ private JispFilesystemStore m_Store;
+
+ public BTreeObjectEnumeration(BTreeObjectIterator iterator, JispFilesystemStore store) {
+ m_Iterator = iterator;
+ m_Store = store;
+ }
+
+ public boolean hasMoreElements() {
+ boolean hasMore = false;
+ Object tmp = null;
+
+ try {
+ tmp = m_Iterator.getKey();
+
+ if(m_Iterator.moveNext()) {
+ hasMore = true;
+ }
+
+ /* resets iterator to the old state **/
+ m_Iterator.moveTo((KeyObject)tmp);
+ } catch (IOException ioe) {
+ m_Store.getLogger().error("store(..): Exception", ioe);
+ } catch (ClassNotFoundException cnfe) {
+ m_Store.getLogger().error("store(..): Exception", cnfe);
+ }
+ return hasMore;
+ }
+
+ public Object nextElement() {
+ Object tmp = null;
+
+ try {
+ tmp = m_Iterator.getKey();
+ m_Iterator.moveNext();
+ } catch (IOException ioe) {
+ m_Store.getLogger().error("store(..): Exception", ioe);
+ } catch (ClassNotFoundException cnfe) {
+ m_Store.getLogger().error("store(..): Exception", cnfe);
+ }
+ return tmp;
+ }
}
}
----------------------------------------------------------------------
In case of troubles, e-mail: webmaster@xml.apache.org
To unsubscribe, e-mail: cocoon-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-cvs-help@xml.apache.org