Author: vgritsenko
Date: Wed Feb 28 19:10:46 2007
New Revision: 513115
URL: http://svn.apache.org/viewvc?view=rev&rev=513115
Log:
<action dev="VG" type="fix" fixes-bug="41605" due-to="Natalia Shilenkova">
Fix support of uncompressed collections. Add test cases.
</action>
Modified:
xml/xindice/trunk/build.bat
xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/embed/CollectionImpl.java
xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java
xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/IndexManager.java
xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DOMCompressor.java
xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/ElementImpl.java
xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/NodeImpl.java
xml/xindice/trunk/java/src/org/apache/xindice/xml/sax/SAXEventGenerator.java
xml/xindice/trunk/java/tests/src/org/apache/xindice/xml/sax/SAXEventGeneratorTest.java
xml/xindice/trunk/src/documentation/content/xdocs/mail.xml
xml/xindice/trunk/src/documentation/content/xdocs/related.xml
xml/xindice/trunk/status.xml
Modified: xml/xindice/trunk/build.bat
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/build.bat?view=diff&rev=513115&r1=513114&r2=513115
==============================================================================
--- xml/xindice/trunk/build.bat (original)
+++ xml/xindice/trunk/build.bat Wed Feb 28 19:10:46 2007
@@ -45,7 +45,7 @@
set PATH=%JAVA_HOME%\bin
:noJavaHome
-:: ----- Use Ant shipped with Cocoon. Ignore installed in the system Ant
+:: ----- Use Ant shipped with Xindice. Ignore installed in the system Ant
set OLD_ANT_HOME=%ANT_HOME%
set ANT_HOME=tools
Modified: xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/embed/CollectionImpl.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/embed/CollectionImpl.java?view=diff&rev=513115&r1=513114&r2=513115
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/embed/CollectionImpl.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/embed/CollectionImpl.java Wed Feb 28 19:10:46 2007
@@ -30,6 +30,7 @@
import org.apache.xindice.core.meta.MetaData;
import org.apache.xindice.core.query.QueryUtil;
import org.apache.xindice.util.Configuration;
+import org.apache.xindice.xml.TextWriter;
import org.apache.xindice.xml.dom.DocumentImpl;
import org.w3c.dom.Document;
@@ -119,9 +120,11 @@
DocumentImpl doc = (DocumentImpl) entry;
// This should probably just pass the document.
- return new XMLResourceImpl(id, id, this,
- doc.getSymbols(),
- doc.getDataBytes());
+ if (doc.getDataBytes() == null) {
+ return new XMLResourceImpl(id, id, this, TextWriter.toString(doc));
+ } else {
+ return new XMLResourceImpl(id, id, this, doc.getSymbols(), doc.getDataBytes());
+ }
} else if (entry instanceof byte[]) {
return new BinaryResourceImpl(id, this, (byte[])entry);
@@ -201,13 +204,12 @@
} else if (res instanceof XMLResource) {
try {
- String name = "";
Node content = ((XMLResourceImpl) res).getContentAsDOM();
if (content != null && content instanceof Document) {
if (res.getId() != null) {
col.insertDocument(res.getId(), (Document) content);
} else {
- name = col.insertDocument((Document) content).toString();
+ String name = col.insertDocument((Document) content).toString();
((XMLResourceImpl) res).setId(name);
}
} else {
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?view=diff&rev=513115&r1=513114&r2=513115
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java Wed Feb 28 19:10:46 2007
@@ -742,6 +742,11 @@
}
document = parseDocument(key, value.toString());
+ flushSymbolTable();
+
+ if (documentCache != null) {
+ documentCache.putDocument(this, key, document);
+ }
}
DBObserver.getInstance().loadDocument(this, record, document);
@@ -1038,7 +1043,8 @@
}
/**
- * Turns an XML string into a parsed document and caches it.
+ * Turns an XML string into a parsed document retrieved
+ * from the uncompressed collection.
*
* @param key The key to use when caching
* @param xml The string to parse
@@ -1047,14 +1053,11 @@
private Document parseDocument(Key key, String xml) throws DBException {
try {
Document doc = DOMParser.toDocument(xml);
+ ((DBDocument) doc).setSource(new NodeSource(this, key));
- // Have to move it to Xindice DOM for XMLObject AutoLinking
- byte[] b = DOMCompressor.Compress(doc, symbols);
- doc = new DocumentImpl(b, symbols, new NodeSource(this, key));
-
- if (documentCache != null) {
- documentCache.putDocument(this, key, b);
- }
+ // Have to compress to update collection's SymbolTable,
+ // which is used even for uncompressed collections
+ DOMCompressor.Compress(doc, symbols);
return doc;
} catch (Exception e) {
Modified: xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/IndexManager.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/IndexManager.java?view=diff&rev=513115&r1=513114&r2=513115
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/IndexManager.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/IndexManager.java Wed Feb 28 19:10:46 2007
@@ -469,19 +469,13 @@
this.action = action;
try {
- SAXEventGenerator events = new SAXEventGenerator(doc);
+ SAXEventGenerator events = new SAXEventGenerator(symbols, doc);
events.setContentHandler(this);
events.setProperty(HANDLER, this);
events.start();
if (action == ACTION_CREATE || action == ACTION_UPDATE) {
- try {
- collection.flushSymbolTable();
- } catch (Exception e) {
- if (log.isWarnEnabled()) {
- log.warn("ignored exception", e);
- }
- }
+ collection.flushSymbolTable();
}
} catch (Exception e) {
if (log.isWarnEnabled()) {
Modified: xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DOMCompressor.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DOMCompressor.java?view=diff&rev=513115&r1=513114&r2=513115
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DOMCompressor.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DOMCompressor.java Wed Feb 28 19:10:46 2007
@@ -295,6 +295,7 @@
* @throws XindiceException if an Exception occurs
*/
public static byte[] Compress(Node node, SymbolTable symbols) throws XindiceException {
+ // FIXME ByteArrayOutputStream throws no IOExceptions, so throws clause on method isn't necessary.
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
BufferedOutputStream buf = new BufferedOutputStream(bos, 4096);
Modified: xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/ElementImpl.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/ElementImpl.java?view=diff&rev=513115&r1=513114&r2=513115
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/ElementImpl.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/ElementImpl.java Wed Feb 28 19:10:46 2007
@@ -541,6 +541,10 @@
nodeName = qualifiedName;
if (prefix != null) {
setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:" + prefix, namespaceURI);
+ nsURI = namespaceURI;
+ } else {
+ removeAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:" + nsURI);
+ nsURI = null;
}
invokeHandlers(UserDataHandler.NODE_RENAMED, this, null);
Modified: xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/NodeImpl.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/NodeImpl.java?view=diff&rev=513115&r1=513114&r2=513115
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/NodeImpl.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/NodeImpl.java Wed Feb 28 19:10:46 2007
@@ -142,6 +142,7 @@
protected String nodeValue;
// DOM Level 2 Stuff
+ protected Document ownerDocument; // The Document object associated with this node
protected String nsURI; // Just for caching so we don't have to walk the tree
// DOM Level 3 Stuff
@@ -162,10 +163,24 @@
public NodeImpl(NodeImpl parentNode, byte[] data, int pos, int len) {
this(data, pos, len);
this.parentNode = parentNode;
+ if (parentNode == null) {
+ ownerDocument = null;
+ } else if (parentNode.getNodeType() == DOCUMENT_TYPE_NODE) {
+ this.ownerDocument = (Document) parentNode;
+ } else {
+ this.ownerDocument = parentNode.getOwnerDocument();
+ }
}
public NodeImpl(NodeImpl parentNode, boolean dirty) {
this.parentNode = parentNode;
+ if (parentNode == null) {
+ ownerDocument = null;
+ } else if (parentNode.getNodeType() == DOCUMENT_TYPE_NODE) {
+ this.ownerDocument = (Document) parentNode;
+ } else {
+ this.ownerDocument = parentNode.getOwnerDocument();
+ }
if (dirty) {
setDirty();
}
@@ -335,8 +350,7 @@
return (Document) this;
}
- return parentNode != null ? parentNode.getOwnerDocument()
- : null;
+ return ownerDocument;
}
/**
@@ -520,8 +534,8 @@
protected final synchronized Node cloneNode(boolean deep, boolean invokeHandler) {
DocumentImpl doc = (DocumentImpl) getOwnerDocument();
- if (deep) {
- // FIXME Does not account for non compressed documents
+ // compressed documents
+ if (deep && this.data != null) {
byte[] data = this.data;
int pos = this.pos;
int len = this.len;
@@ -566,6 +580,7 @@
case Node.ELEMENT_NODE:
newNode = new ElementImpl(this, data, pos, len);
+ newNode.setNodeName(getNodeName());
break;
case Node.ENTITY_REFERENCE_NODE:
@@ -590,6 +605,8 @@
}
}
if (newNode != null) {
+ // cloned node must not have a parent
+ newNode.parentNode = null;
if (invokeHandler) {
invokeHandlers(UserDataHandler.NODE_CLONED, this, newNode);
}
@@ -598,47 +615,54 @@
}
checkLoaded();
- Node node = null;
+ NodeImpl node = null;
switch (getNodeType()) {
case Node.ATTRIBUTE_NODE:
- Attr attr = doc.createAttribute(nodeName);
+ AttrImpl attr = (AttrImpl) doc.createAttribute(nodeName);
attr.setValue(nodeValue);
node = attr;
break;
case Node.CDATA_SECTION_NODE:
- node = doc.createCDATASection(nodeValue);
+ node = (NodeImpl) doc.createCDATASection(nodeValue);
break;
case Node.COMMENT_NODE:
- node = doc.createComment(nodeValue);
+ node = (NodeImpl) doc.createComment(nodeValue);
break;
case Node.DOCUMENT_FRAGMENT_NODE:
- node = doc.createDocumentFragment();
+ node = (NodeImpl) doc.createDocumentFragment();
break;
case Node.ELEMENT_NODE:
- Element elem = doc.createElement(nodeName);
+ ElementImpl elem = (ElementImpl) doc.createElement(nodeName);
NamedNodeMap attrs = getAttributes();
int size = attrs.getLength();
for (int i = 0; i < size; i++) {
Attr a = (Attr) attrs.item(i);
elem.setAttribute(a.getName(), a.getValue());
}
+
+ if (getPrefix() != null) {
+ elem.nsURI = lookupNamespaceURI(getPrefix());
+ } else {
+ elem.nsURI = lookupDefaultNamespaceURI();
+ }
+
node = elem;
break;
case Node.ENTITY_REFERENCE_NODE:
- node = doc.createEntityReference(nodeValue);
+ node = (NodeImpl) doc.createEntityReference(nodeValue);
break;
case Node.PROCESSING_INSTRUCTION_NODE:
- node = doc.createProcessingInstruction(nodeName, nodeValue);
+ node = (NodeImpl) doc.createProcessingInstruction(nodeName, nodeValue);
break;
case Node.TEXT_NODE:
- node = doc.createTextNode(nodeValue);
+ node = (NodeImpl) doc.createTextNode(nodeValue);
break;
default:
@@ -648,7 +672,15 @@
break;
}
+ if (node != null && deep) {
+ NodeList list = getChildNodes();
+ for (int i = 0; i < list.getLength(); i++) {
+ node.appendChild(list.item(i).cloneNode(deep));
+ }
+ }
+
if (node != null && invokeHandler) {
+ node.parentNode = null;
invokeHandlers(UserDataHandler.NODE_CLONED, this, node);
}
Modified: xml/xindice/trunk/java/src/org/apache/xindice/xml/sax/SAXEventGenerator.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/xml/sax/SAXEventGenerator.java?view=diff&rev=513115&r1=513114&r2=513115
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/xml/sax/SAXEventGenerator.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/xml/sax/SAXEventGenerator.java Wed Feb 28 19:10:46 2007
@@ -24,9 +24,7 @@
import org.apache.xindice.util.ByteArrayInput;
import org.apache.xindice.xml.SymbolTable;
import org.apache.xindice.xml.XMLCompressedInput;
-import org.apache.xindice.xml.dom.CompressedDocument;
import org.apache.xindice.xml.dom.DOMCompressor;
-import org.apache.xindice.xml.dom.DocumentImpl;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
@@ -116,20 +114,12 @@
this.len = len;
}
- public SAXEventGenerator(Document doc) {
+ public SAXEventGenerator(SymbolTable symbols, Document doc) {
try {
- if (doc instanceof CompressedDocument) {
- CompressedDocument cDoc = new DocumentImpl(doc);
- symbols = cDoc.getSymbols();
- data = cDoc.getDataBytes();
- pos = cDoc.getDataPos();
- len = cDoc.getDataLen();
- } else {
- symbols = new SymbolTable();
- data = DOMCompressor.Compress(doc, symbols);
- pos = 0;
- len = data.length;
- }
+ this.symbols = symbols != null ? symbols : new SymbolTable();
+ data = DOMCompressor.Compress(doc, this.symbols);
+ pos = 0;
+ len = data.length;
} catch (Exception e) {
// This shouldn't happen
if (log.isErrorEnabled()) {
@@ -230,7 +220,7 @@
public void parse(String systemId) throws IOException, SAXException {
}
- private final String getLocalName(String qname) {
+ private String getLocalName(String qname) {
int idx = qname.indexOf(":");
if (idx != -1) {
return qname.substring(idx + 1);
@@ -239,8 +229,8 @@
}
}
- private final boolean isNSAttr(final String qName) {
- return (("xmlns".equals(qName)) || qName.startsWith("xmlns:"));
+ private boolean isNSAttr(final String qName) {
+ return "xmlns".equals(qName) || qName.startsWith("xmlns:");
}
public boolean processContainer(boolean element, int pos, int len) throws IOException, SAXException {
Modified: xml/xindice/trunk/java/tests/src/org/apache/xindice/xml/sax/SAXEventGeneratorTest.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/tests/src/org/apache/xindice/xml/sax/SAXEventGeneratorTest.java?view=diff&rev=513115&r1=513114&r2=513115
==============================================================================
--- xml/xindice/trunk/java/tests/src/org/apache/xindice/xml/sax/SAXEventGeneratorTest.java (original)
+++ xml/xindice/trunk/java/tests/src/org/apache/xindice/xml/sax/SAXEventGeneratorTest.java Wed Feb 28 19:10:46 2007
@@ -88,7 +88,7 @@
protected void setUp() throws Exception {
// Xindice parsing
doc = DOMParser.toDocument(XML);
- generator = new SAXEventGenerator(doc);
+ generator = new SAXEventGenerator(null, doc);
xindiceHandler = new LoggingContentHandler();
generator.setContentHandler(xindiceHandler);
generator.start();
Modified: xml/xindice/trunk/src/documentation/content/xdocs/mail.xml
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/src/documentation/content/xdocs/mail.xml?view=diff&rev=513115&r1=513114&r2=513115
==============================================================================
--- xml/xindice/trunk/src/documentation/content/xdocs/mail.xml (original)
+++ xml/xindice/trunk/src/documentation/content/xdocs/mail.xml Wed Feb 28 19:10:46 2007
@@ -39,7 +39,7 @@
<li>
<link href="faq.html">FAQs</link>
</li>
- <li>Mailing list archives - a veritable goldmine of Cocoon-specific information - if you know where to look!</li>
+ <li>Mailing list archives - a veritable goldmine of Xindice-specific information - if you know where to look!</li>
</ol>
</section>
Modified: xml/xindice/trunk/src/documentation/content/xdocs/related.xml
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/src/documentation/content/xdocs/related.xml?view=diff&rev=513115&r1=513114&r2=513115
==============================================================================
--- xml/xindice/trunk/src/documentation/content/xdocs/related.xml (original)
+++ xml/xindice/trunk/src/documentation/content/xdocs/related.xml Wed Feb 28 19:10:46 2007
@@ -295,7 +295,7 @@
</td>
<td>
CocoBlog is a
- <fork href="http://xml.apache.org/cocoon">Cocoon</fork>
+ <fork href="http://cocoon.apache.org/">Cocoon</fork>
and Xindice-based weblogging software tool developed by
<fork href="http://www.beblogging.com">Ugo Cei</fork>.
</td>
Modified: xml/xindice/trunk/status.xml
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/status.xml?view=diff&rev=513115&r1=513114&r2=513115
==============================================================================
--- xml/xindice/trunk/status.xml (original)
+++ xml/xindice/trunk/status.xml Wed Feb 28 19:10:46 2007
@@ -98,6 +98,9 @@
<changes>
<release version="1.1b5-dev" date="Feb 22 2007">
+ <action dev="VG" type="fix" fixes-bug="41605" due-to="Natalia Shilenkova">
+ Fix support of uncompressed collections. Add test cases.
+ </action>
<action dev="VG" type="update">
Updated Xindice docs to work with latest Forrest (0.8-dev, trunk).
</action>
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.