Author: vgritsenko
Date: Tue Nov 13 12:16:05 2007
New Revision: 594628

URL: http://svn.apache.org/viewvc?rev=594628&view=rev
Log:
some refactoring

Modified:
    xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java
    xml/xindice/trunk/java/tests/src/org/apache/xindice/core/CollectionTest.java

Modified: xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java
URL: 
http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java?rev=594628&r1=594627&r2=594628&view=diff
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java 
(original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java Tue Nov 
13 12:16:05 2007
@@ -21,6 +21,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.xindice.core.cache.DocumentCache;
 import org.apache.xindice.core.data.DocumentSet;
 import org.apache.xindice.core.data.EmptyDocumentSet;
 import org.apache.xindice.core.data.EmptyNodeSet;
@@ -38,7 +39,6 @@
 import org.apache.xindice.core.meta.inline.InlineMetaService;
 import org.apache.xindice.core.meta.inline.ResourceTypeReader;
 import org.apache.xindice.core.query.QueryEngine;
-import org.apache.xindice.core.cache.DocumentCache;
 import org.apache.xindice.util.Configurable;
 import org.apache.xindice.util.Configuration;
 import org.apache.xindice.util.Named;
@@ -783,6 +783,24 @@
 
     // -- Core Collection API Public Methods: Data Management ---------------
 
+    private Record writeRecord(Key key, boolean isDocument, byte[] bytes) 
throws DBException {
+        // Construct the Value object that is stored in the BTree.
+        Value value;
+        if (inlineMetaService == null) {
+            value = new Value(bytes);
+        } else {
+            InlineMetaMap map = inlineMetaService.getEmptyMap();
+            if (isDocument) {
+                map.put("type", ResourceTypeReader.XML);
+            } else {
+                map.put("type", ResourceTypeReader.BINARY);
+            }
+            value = inlineMetaService.createValue(map, bytes, 0, bytes.length);
+        }
+
+        return filer.writeRecord(key, value);
+    }
+
     /**
      * createNewOID allocates a new Object ID to be used as a Key in the
      * Collection.
@@ -835,14 +853,9 @@
 
         Key key = getIdentityKey(createNewKey(id));
         synchronized (key) {
-
             /*
              * If the key has a corresponding value in the cache, return it
              * and save a disk access.
-             *
-             * At some point the current document-centric cache implementation
-             * needs to be converted to an entry cache which can hold both
-             * Document and byte[].
              */
             if (cache != null) {
                 Entry entry = cache.getEntry(this, key);
@@ -871,12 +884,12 @@
                 }
             } else {
                 InlineMetaService.DatabaseEntry databaseEntry = 
inlineMetaService.readDatabaseEntry(record.getValue());
-                InlineMetaMap metaMap = databaseEntry.map;
+                Object type = databaseEntry.map.get("type");
                 value = databaseEntry.value;
-                isDocument = 
metaMap.get("type").equals(ResourceTypeReader.XML);
+                isDocument = type.equals(ResourceTypeReader.XML);
 
                 if (log.isTraceEnabled()) {
-                    log.trace(localDebugHeader + "Type=" + metaMap.get("type") 
+ ", Length=" + value.getLength());
+                    log.trace(localDebugHeader + "Type=" + type + ", Length=" 
+ value.getLength());
                 }
             }
 
@@ -889,27 +902,24 @@
                         log.trace(localDebugHeader +
                                   "Compressed XML document=<" + 
TextWriter.toString(document) + ">");
                     }
-
-                    if (cache != null) {
-                        cache.putEntry(this, key, DocumentCache.COMPRESSED, 
value, entryMeta);
-                    }
                 } else {
-                    String documentChars = value.toString();
-                    if (log.isTraceEnabled()) {
-                        log.trace(localDebugHeader + "Pre parseDocument(): 
value=<" + documentChars + ">");
-                    }
-
                     // FIXME There should be no reason here to re-compress the 
document & flush symbols table?
-                    document = parseDocument(key, documentChars);
-
-                    if (cache != null) {
-                        cache.putEntry(this, key, DocumentCache.UNCOMPRESSED, 
value, entryMeta);
+                    document = parseDocument(key, value.toString());
+                    if (log.isTraceEnabled()) {
+                        log.trace(localDebugHeader +
+                                  "Uncompressed XML document=<" + 
TextWriter.toString(document) + ">");
                     }
                 }
 
                 // Symbol table could have been updated above, flush it to the 
disk.
                 flushSymbolTable();
 
+                if (cache != null) {
+                    cache.putEntry(this, key,
+                                   compressed ? DocumentCache.COMPRESSED : 
DocumentCache.UNCOMPRESSED,
+                                   value, entryMeta);
+                }
+
                 DBObserver.getInstance().loadDocument(this, record, document);
                 return new Entry(key, document, entryMeta);
             } else {
@@ -1316,24 +1326,14 @@
             }
             indexManager.addDocument(key, document);
 
-            // Construct the Value object that is stored in the BTree.
-            Value value;
-            if (inlineMetaService == null) {
-                value = new Value(documentBytes);
-            } else {
-                InlineMetaMap map = inlineMetaService.getEmptyMap();
-                map.put("type", ResourceTypeReader.XML);
-                value = inlineMetaService.createValue(map, documentBytes, 0, 
documentBytes.length);
-            }
-            Record record = filer.writeRecord(key, value);
+            // Construct the Value object and store in the filer.
+            Record record = writeRecord(key, true, documentBytes);
 
             // Cache Stuff
             if (cache != null) {
-                if (compressed) {
-                    cache.putEntry(this, key, DocumentCache.COMPRESSED, new 
Value(documentBytes), Entry.createMetaMap(record));
-                } else {
-                    cache.putEntry(this, key, DocumentCache.UNCOMPRESSED, new 
Value(documentBytes), Entry.createMetaMap(record));
-                }
+                cache.putEntry(this, key,
+                               compressed ? DocumentCache.COMPRESSED : 
DocumentCache.UNCOMPRESSED,
+                               new Value(documentBytes), 
Entry.createMetaMap(record));
             }
 
             // Update the meta for this document
@@ -1396,10 +1396,8 @@
                 indexManager.removeDocument(key, (Document) entry.getValue());
             }
 
-            InlineMetaMap map = inlineMetaService.getEmptyMap();
-            map.put("type", ResourceTypeReader.BINARY);
-            Value value = inlineMetaService.createValue(map, bytes, 0, 
bytes.length);
-            Record record = filer.writeRecord(key, value);
+            // Construct the Value object and store in the filer.
+            Record record = writeRecord(key, false, bytes);
 
             if (cache != null) {
                 cache.putEntry(this, key, DocumentCache.BINARY, new 
Value(bytes), Entry.createMetaMap(record));

Modified: 
xml/xindice/trunk/java/tests/src/org/apache/xindice/core/CollectionTest.java
URL: 
http://svn.apache.org/viewvc/xml/xindice/trunk/java/tests/src/org/apache/xindice/core/CollectionTest.java?rev=594628&r1=594627&r2=594628&view=diff
==============================================================================
--- 
xml/xindice/trunk/java/tests/src/org/apache/xindice/core/CollectionTest.java 
(original)
+++ 
xml/xindice/trunk/java/tests/src/org/apache/xindice/core/CollectionTest.java 
Tue Nov 13 12:16:05 2007
@@ -138,7 +138,7 @@
     }
 
     public void testCompressedDocument() throws Exception {
-        // Compress the document with own symbol table
+        // Compress the document with its own symbol table
         Document document = DOMParser.toDocument(XML);
         SymbolTable symbols = new SymbolTable();
         byte[] data = DOMCompressor.compress(document, symbols);


Reply via email to