Initial revision
From-SVN: r102074
This commit is contained in:
parent
6f4434b39b
commit
f911ba985a
4557 changed files with 1000262 additions and 0 deletions
116
libjava/classpath/gnu/xml/libxmlj/dom/GnomeAttr.java
Normal file
116
libjava/classpath/gnu/xml/libxmlj/dom/GnomeAttr.java
Normal file
|
@ -0,0 +1,116 @@
|
|||
/* GnomeAttr.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.dom;
|
||||
|
||||
import org.w3c.dom.Attr;
|
||||
import org.w3c.dom.DOMException;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.TypeInfo;
|
||||
|
||||
/**
|
||||
* A DOM attribute node implemented in libxml2.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class GnomeAttr
|
||||
extends GnomeNode
|
||||
implements Attr
|
||||
{
|
||||
|
||||
GnomeAttr(Object id)
|
||||
{
|
||||
super(id);
|
||||
}
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return getNodeName();
|
||||
}
|
||||
|
||||
public native boolean getSpecified();
|
||||
|
||||
public native String getValue();
|
||||
|
||||
public native void setValue(String value)
|
||||
throws DOMException;
|
||||
|
||||
public Node getParentNode()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public Element getOwnerElement()
|
||||
{
|
||||
return (Element) super.getParentNode();
|
||||
}
|
||||
|
||||
// DOM Level 3 methods
|
||||
|
||||
public TypeInfo getSchemaTypeInfo()
|
||||
{
|
||||
return new GnomeTypeInfo(id);
|
||||
}
|
||||
|
||||
public boolean isId()
|
||||
{
|
||||
if (xmljIsId())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
GnomeElement element = (GnomeElement) getOwnerElement();
|
||||
return (element != null &&
|
||||
element.userIdAttrs != null &&
|
||||
element.userIdAttrs.contains(this));
|
||||
}
|
||||
|
||||
private native boolean xmljIsId();
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buffer = new StringBuffer(getClass().getName());
|
||||
buffer.append("[name=");
|
||||
buffer.append(getName());
|
||||
buffer.append(",value=");
|
||||
buffer.append(getValue());
|
||||
buffer.append("]");
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
57
libjava/classpath/gnu/xml/libxmlj/dom/GnomeCDATASection.java
Normal file
57
libjava/classpath/gnu/xml/libxmlj/dom/GnomeCDATASection.java
Normal file
|
@ -0,0 +1,57 @@
|
|||
/* GnomeCDATASection.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.dom;
|
||||
|
||||
import org.w3c.dom.CDATASection;
|
||||
|
||||
/**
|
||||
* A DOM CDATA section node implemented in libxml2.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class GnomeCDATASection
|
||||
extends GnomeText
|
||||
implements CDATASection
|
||||
{
|
||||
|
||||
GnomeCDATASection(Object id)
|
||||
{
|
||||
super(id);
|
||||
}
|
||||
|
||||
}
|
117
libjava/classpath/gnu/xml/libxmlj/dom/GnomeCharacterData.java
Normal file
117
libjava/classpath/gnu/xml/libxmlj/dom/GnomeCharacterData.java
Normal file
|
@ -0,0 +1,117 @@
|
|||
/* GnomeCharacterData.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.dom;
|
||||
|
||||
import org.w3c.dom.CharacterData;
|
||||
import org.w3c.dom.DOMException;
|
||||
|
||||
/**
|
||||
* A DOM character data node implemented in libxml2.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
abstract class GnomeCharacterData
|
||||
extends GnomeNode
|
||||
implements CharacterData
|
||||
{
|
||||
|
||||
GnomeCharacterData(Object id)
|
||||
{
|
||||
super(id);
|
||||
}
|
||||
|
||||
public String getData()
|
||||
throws DOMException
|
||||
{
|
||||
return getNodeValue();
|
||||
}
|
||||
|
||||
public void setData(String data)
|
||||
throws DOMException
|
||||
{
|
||||
setNodeValue(data);
|
||||
}
|
||||
|
||||
public int getLength()
|
||||
{
|
||||
return getData().length();
|
||||
}
|
||||
|
||||
public String substringData(int offset, int count)
|
||||
throws DOMException
|
||||
{
|
||||
return getData().substring(offset, offset + count);
|
||||
}
|
||||
|
||||
public void appendData(String arg)
|
||||
throws DOMException
|
||||
{
|
||||
setData(getData() + arg);
|
||||
}
|
||||
|
||||
public void insertData(int offset, String arg)
|
||||
throws DOMException
|
||||
{
|
||||
String data = getData();
|
||||
setData(data.substring(0, offset) + arg + data.substring(offset));
|
||||
}
|
||||
|
||||
public void deleteData(int offset, int count)
|
||||
throws DOMException
|
||||
{
|
||||
String data = getData();
|
||||
setData(data.substring(0, offset) + data.substring(offset + count));
|
||||
}
|
||||
|
||||
public void replaceData(int offset, int count, String arg)
|
||||
{
|
||||
String data = getData();
|
||||
setData(data.substring(0, offset) + arg +
|
||||
data.substring(offset + count));
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buffer = new StringBuffer(getClass().getName());
|
||||
buffer.append("[data=");
|
||||
buffer.append(getData());
|
||||
buffer.append("]");
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
}
|
57
libjava/classpath/gnu/xml/libxmlj/dom/GnomeComment.java
Normal file
57
libjava/classpath/gnu/xml/libxmlj/dom/GnomeComment.java
Normal file
|
@ -0,0 +1,57 @@
|
|||
/* GnomeComment.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.dom;
|
||||
|
||||
import org.w3c.dom.Comment;
|
||||
|
||||
/**
|
||||
* A DOM comment node implemented in libxml2.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class GnomeComment
|
||||
extends GnomeCharacterData
|
||||
implements Comment
|
||||
{
|
||||
|
||||
GnomeComment(Object id)
|
||||
{
|
||||
super(id);
|
||||
}
|
||||
|
||||
}
|
98
libjava/classpath/gnu/xml/libxmlj/dom/GnomeDOMException.java
Normal file
98
libjava/classpath/gnu/xml/libxmlj/dom/GnomeDOMException.java
Normal file
|
@ -0,0 +1,98 @@
|
|||
/* GnomeDOMException.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.dom;
|
||||
|
||||
import org.w3c.dom.DOMException;
|
||||
|
||||
class GnomeDOMException
|
||||
extends DOMException
|
||||
{
|
||||
|
||||
GnomeDOMException(short code, String message)
|
||||
{
|
||||
super(code, createMessage(code, message));
|
||||
}
|
||||
|
||||
private static String createMessage(int code, String message)
|
||||
{
|
||||
if (message != null)
|
||||
{
|
||||
return message;
|
||||
}
|
||||
switch (code)
|
||||
{
|
||||
case INDEX_SIZE_ERR:
|
||||
return "INDEX_SIZE_ERR";
|
||||
case DOMSTRING_SIZE_ERR:
|
||||
return "DOMSTRING_SIZE_ERR";
|
||||
case HIERARCHY_REQUEST_ERR:
|
||||
return "HIERARCHY_REQUEST_ERR";
|
||||
case WRONG_DOCUMENT_ERR:
|
||||
return "WRONG_DOCUMENT_ERR";
|
||||
case INVALID_CHARACTER_ERR:
|
||||
return "INVALID_CHARACTER_ERR";
|
||||
case NO_DATA_ALLOWED_ERR:
|
||||
return "NO_DATA_ALLOWED_ERR";
|
||||
case NO_MODIFICATION_ALLOWED_ERR:
|
||||
return "NO_MODIFICATION_ALLOWED_ERR";
|
||||
case NOT_FOUND_ERR:
|
||||
return "NOT_FOUND_ERR";
|
||||
case NOT_SUPPORTED_ERR:
|
||||
return "NOT_SUPPORTED_ERR";
|
||||
case INUSE_ATTRIBUTE_ERR:
|
||||
return "INUSE_ATTRIBUTE_ERR";
|
||||
case INVALID_STATE_ERR:
|
||||
return "INVALID_STATE_ERR";
|
||||
case SYNTAX_ERR:
|
||||
return "SYNTAX_ERR";
|
||||
case INVALID_MODIFICATION_ERR:
|
||||
return "INVALID_MODIFICATION_ERR";
|
||||
case NAMESPACE_ERR:
|
||||
return "NAMESPACE_ERR";
|
||||
case INVALID_ACCESS_ERR:
|
||||
return "INVALID_ACCESS_ERR";
|
||||
case VALIDATION_ERR:
|
||||
return "VALIDATION_ERR";
|
||||
case TYPE_MISMATCH_ERR:
|
||||
return "TYPE_MISMATCH_ERR";
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,84 @@
|
|||
/* GnomeDOMStringList.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.dom;
|
||||
|
||||
import org.w3c.dom.DOMStringList;
|
||||
|
||||
/**
|
||||
* Implementation of a string list using an array of strings.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class GnomeDOMStringList
|
||||
implements DOMStringList
|
||||
{
|
||||
|
||||
final String[] values;
|
||||
|
||||
GnomeDOMStringList(String[] values)
|
||||
{
|
||||
this.values = values;
|
||||
}
|
||||
|
||||
public int getLength()
|
||||
{
|
||||
return values.length;
|
||||
}
|
||||
|
||||
public String item(int index)
|
||||
{
|
||||
if (index < 0 || index >= values.length)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return values[index];
|
||||
}
|
||||
|
||||
public boolean contains(String value)
|
||||
{
|
||||
for (int i = 0; i < values.length; i++)
|
||||
{
|
||||
if (values[i].equalsIgnoreCase(value))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
561
libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocument.java
Normal file
561
libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocument.java
Normal file
|
@ -0,0 +1,561 @@
|
|||
/* GnomeDocument.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.dom;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.w3c.dom.Attr;
|
||||
import org.w3c.dom.CDATASection;
|
||||
import org.w3c.dom.Comment;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.DocumentFragment;
|
||||
import org.w3c.dom.DocumentType;
|
||||
import org.w3c.dom.DOMConfiguration;
|
||||
import org.w3c.dom.DOMErrorHandler;
|
||||
import org.w3c.dom.DOMException;
|
||||
import org.w3c.dom.DOMImplementation;
|
||||
import org.w3c.dom.DOMStringList;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.EntityReference;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.w3c.dom.ProcessingInstruction;
|
||||
import org.w3c.dom.Text;
|
||||
import org.w3c.dom.UserDataHandler;
|
||||
import org.w3c.dom.traversal.DocumentTraversal;
|
||||
import org.w3c.dom.traversal.NodeFilter;
|
||||
import org.w3c.dom.traversal.NodeIterator;
|
||||
import org.w3c.dom.traversal.TreeWalker;
|
||||
import org.w3c.dom.xpath.XPathEvaluator;
|
||||
import org.w3c.dom.xpath.XPathException;
|
||||
import org.w3c.dom.xpath.XPathExpression;
|
||||
import org.w3c.dom.xpath.XPathNSResolver;
|
||||
|
||||
import gnu.xml.dom.DomNodeIterator;
|
||||
|
||||
/**
|
||||
* A DOM document node implemented in libxml2.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
public class GnomeDocument
|
||||
extends GnomeNode
|
||||
implements Document, DOMConfiguration, XPathEvaluator, DocumentTraversal
|
||||
{
|
||||
|
||||
DOMImplementation dom;
|
||||
|
||||
/**
|
||||
* Not currently used.
|
||||
*/
|
||||
boolean strictErrorChecking;
|
||||
|
||||
/* DOMConfiguration */
|
||||
boolean canonicalForm = false;
|
||||
boolean cdataSections = true;
|
||||
boolean checkCharacterNormalization = false;
|
||||
boolean comments = true;
|
||||
boolean datatypeNormalization = false;
|
||||
boolean elementContentWhitespace = true;
|
||||
boolean entities = true;
|
||||
DOMErrorHandler errorHandler;
|
||||
boolean namespaces = true;
|
||||
boolean namespaceDeclarations = true;
|
||||
boolean normalizeCharacters = false;
|
||||
boolean splitCdataSections = true;
|
||||
boolean validate = false;
|
||||
boolean validateIfSchema = false;
|
||||
boolean wellFormed = true;
|
||||
|
||||
GnomeDocument(Object id)
|
||||
{
|
||||
super(id);
|
||||
strictErrorChecking = true;
|
||||
}
|
||||
|
||||
protected void finalize()
|
||||
{
|
||||
free(id);
|
||||
}
|
||||
|
||||
private native void free(Object id);
|
||||
|
||||
public native DocumentType getDoctype();
|
||||
|
||||
public DOMImplementation getImplementation()
|
||||
{
|
||||
return dom;
|
||||
}
|
||||
|
||||
public native Element getDocumentElement();
|
||||
|
||||
public Element createElement(String tagName)
|
||||
throws DOMException
|
||||
{
|
||||
return createElementNS(null, tagName);
|
||||
}
|
||||
|
||||
public native DocumentType createDocumentType(String name, String publicId,
|
||||
String systemId);
|
||||
|
||||
public native DocumentFragment createDocumentFragment();
|
||||
|
||||
public native Text createTextNode(String data);
|
||||
|
||||
public native Comment createComment(String data);
|
||||
|
||||
public native CDATASection createCDATASection(String data)
|
||||
throws DOMException;
|
||||
|
||||
public native ProcessingInstruction createProcessingInstruction(String target,
|
||||
String data)
|
||||
throws DOMException;
|
||||
|
||||
public Attr createAttribute(String name)
|
||||
throws DOMException
|
||||
{
|
||||
return createAttributeNS(null, name);
|
||||
}
|
||||
|
||||
public native EntityReference createEntityReference(String name)
|
||||
throws DOMException;
|
||||
|
||||
public native NodeList getElementsByTagName(String tagName);
|
||||
|
||||
public Node importNode(Node importedNode, boolean deep)
|
||||
throws DOMException
|
||||
{
|
||||
Node ret = xmljImportNode(importedNode, deep);
|
||||
if (importedNode instanceof GnomeNode)
|
||||
{
|
||||
((GnomeNode) importedNode)
|
||||
.notifyUserDataHandlers(UserDataHandler.NODE_IMPORTED,
|
||||
importedNode, ret);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
private native Node xmljImportNode(Node importedNode, boolean deep)
|
||||
throws DOMException;
|
||||
|
||||
public native Element createElementNS(String namespaceURI, String
|
||||
qualifiedName)
|
||||
throws DOMException;
|
||||
|
||||
public native Attr createAttributeNS(String namespaceURI, String
|
||||
qualifiedName)
|
||||
throws DOMException;
|
||||
|
||||
public native NodeList getElementsByTagNameNS(String namespaceURI,
|
||||
String localName);
|
||||
|
||||
public Element getElementById(String elementId)
|
||||
{
|
||||
Element element = xmljGetElementById(elementId);
|
||||
if (element == null)
|
||||
{
|
||||
TreeWalker walker = createTreeWalker(this, NodeFilter.SHOW_ELEMENT,
|
||||
null, false);
|
||||
for (Node node = walker.nextNode(); node != null;
|
||||
node = walker.nextNode())
|
||||
{
|
||||
GnomeElement e = (GnomeElement) node;
|
||||
if (e.userIdAttrs != null)
|
||||
{
|
||||
for (Iterator i = e.userIdAttrs.iterator(); i.hasNext(); )
|
||||
{
|
||||
Attr attr = (Attr) i.next();
|
||||
if (attr.getNodeValue().equals(elementId))
|
||||
{
|
||||
return e;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return element;
|
||||
}
|
||||
|
||||
private native Element xmljGetElementById(String elementId);
|
||||
|
||||
// DOM Level 3 methods
|
||||
|
||||
public native String getInputEncoding();
|
||||
|
||||
public native String getXmlEncoding();
|
||||
|
||||
public native boolean getXmlStandalone();
|
||||
|
||||
public native void setXmlStandalone(boolean xmlStandalone);
|
||||
|
||||
public native String getXmlVersion();
|
||||
|
||||
public native void setXmlVersion(String xmlVersion);
|
||||
|
||||
public boolean getStrictErrorChecking()
|
||||
{
|
||||
return strictErrorChecking;
|
||||
}
|
||||
|
||||
public void setStrictErrorChecking(boolean strictErrorChecking)
|
||||
{
|
||||
this.strictErrorChecking = strictErrorChecking;
|
||||
}
|
||||
|
||||
public native String getDocumentURI();
|
||||
|
||||
public native void setDocumentURI(String documentURI);
|
||||
|
||||
public Node adoptNode(Node source)
|
||||
throws DOMException
|
||||
{
|
||||
if (source == null || !(source instanceof GnomeNode))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
Node ret = xmljAdoptNode(source);
|
||||
if (source instanceof GnomeNode)
|
||||
{
|
||||
((GnomeNode) source).
|
||||
notifyUserDataHandlers(UserDataHandler.NODE_ADOPTED,
|
||||
source, ret);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
private native Node xmljAdoptNode(Node source)
|
||||
throws DOMException;
|
||||
|
||||
public DOMConfiguration getDomConfig()
|
||||
{
|
||||
return this;
|
||||
}
|
||||
|
||||
public void normalizeDocument()
|
||||
{
|
||||
normalize();
|
||||
}
|
||||
|
||||
public native Node renameNode(Node n, String namespaceURI,
|
||||
String qualifiedName);
|
||||
|
||||
// -- DOMConfiguration methods --
|
||||
|
||||
public void setParameter(String name, Object value)
|
||||
throws DOMException
|
||||
{
|
||||
name = name.toLowerCase();
|
||||
if ("canonical-form".equals(name))
|
||||
{
|
||||
/* optional
|
||||
canonicalForm = getBooleanValue(value);*/
|
||||
}
|
||||
else if ("cdata-sections".equals(name))
|
||||
{
|
||||
cdataSections = getBooleanValue(value);
|
||||
}
|
||||
else if ("check-character-normalization".equals(name))
|
||||
{
|
||||
/* optional
|
||||
checkCharacterNormalization = getBooleanValue(value);*/
|
||||
}
|
||||
else if ("comments".equals(name))
|
||||
{
|
||||
comments = getBooleanValue(value);
|
||||
}
|
||||
else if ("datatype-normalization".equals(name))
|
||||
{
|
||||
/* optional
|
||||
datatypeNormalization = getBooleanValue(value);*/
|
||||
}
|
||||
else if ("element-content-whitespace".equals(name))
|
||||
{
|
||||
/* optional
|
||||
elementContentWhitespace = getBooleanValue(value);*/
|
||||
}
|
||||
else if ("entities".equals(name))
|
||||
{
|
||||
entities = getBooleanValue(value);
|
||||
}
|
||||
else if ("error-handler".equals(name))
|
||||
{
|
||||
errorHandler = (DOMErrorHandler) value;
|
||||
}
|
||||
else if ("infoset".equals(name))
|
||||
{
|
||||
if (getBooleanValue(value))
|
||||
{
|
||||
validateIfSchema = false;
|
||||
entities = false;
|
||||
datatypeNormalization = false;
|
||||
cdataSections = false;
|
||||
namespaceDeclarations = true;
|
||||
wellFormed = true;
|
||||
elementContentWhitespace = true;
|
||||
comments = true;
|
||||
namespaces = true;
|
||||
}
|
||||
}
|
||||
else if ("namespaces".equals(name))
|
||||
{
|
||||
/* optional
|
||||
namespaces = getBooleanValue(value);*/
|
||||
}
|
||||
else if ("namespace-declarations".equals(name))
|
||||
{
|
||||
namespaceDeclarations = getBooleanValue(value);
|
||||
}
|
||||
else if ("normalize-characters".equals(name))
|
||||
{
|
||||
/* optional
|
||||
normalizeCharacters = getBooleanValue(value);*/
|
||||
}
|
||||
else if ("split-cdata-sections".equals(name))
|
||||
{
|
||||
splitCdataSections = getBooleanValue(value);
|
||||
}
|
||||
else if ("validate".equals(name))
|
||||
{
|
||||
/* optional
|
||||
validate = getBooleanValue(value);*/
|
||||
}
|
||||
else if ("validate-if-schema".equals(name))
|
||||
{
|
||||
/* optional
|
||||
validateIfSchema = getBooleanValue(value);*/
|
||||
}
|
||||
else if ("well-formed".equals(name))
|
||||
{
|
||||
/* optional
|
||||
wellFormed = getBooleanValue(value);*/
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new GnomeDOMException(DOMException.NOT_FOUND_ERR, name);
|
||||
}
|
||||
}
|
||||
|
||||
public Object getParameter(String name)
|
||||
throws DOMException
|
||||
{
|
||||
name = name.toLowerCase();
|
||||
if ("canonical-form".equals(name))
|
||||
{
|
||||
return new Boolean(canonicalForm);
|
||||
}
|
||||
else if ("cdata-sections".equals(name))
|
||||
{
|
||||
return new Boolean(cdataSections);
|
||||
}
|
||||
else if ("check-character-normalization".equals(name))
|
||||
{
|
||||
return new Boolean(checkCharacterNormalization);
|
||||
}
|
||||
else if ("comments".equals(name))
|
||||
{
|
||||
return new Boolean(comments);
|
||||
}
|
||||
else if ("datatype-normalization".equals(name))
|
||||
{
|
||||
return new Boolean(datatypeNormalization);
|
||||
}
|
||||
else if ("element-content-whitespace".equals(name))
|
||||
{
|
||||
return new Boolean(elementContentWhitespace);
|
||||
}
|
||||
else if ("entities".equals(name))
|
||||
{
|
||||
return new Boolean(entities);
|
||||
}
|
||||
else if ("error-handler".equals(name))
|
||||
{
|
||||
return errorHandler;
|
||||
}
|
||||
else if ("infoset".equals(name))
|
||||
{
|
||||
return new Boolean(!validateIfSchema &&
|
||||
!entities &&
|
||||
!datatypeNormalization &&
|
||||
!cdataSections &&
|
||||
namespaceDeclarations &&
|
||||
wellFormed &&
|
||||
elementContentWhitespace &&
|
||||
comments &&
|
||||
namespaces);
|
||||
}
|
||||
else if ("namespaces".equals(name))
|
||||
{
|
||||
return new Boolean(namespaces);
|
||||
}
|
||||
else if ("namespace-declarations".equals(name))
|
||||
{
|
||||
return new Boolean(namespaceDeclarations);
|
||||
}
|
||||
else if ("normalize-characters".equals(name))
|
||||
{
|
||||
return new Boolean(normalizeCharacters);
|
||||
}
|
||||
else if ("split-cdata-sections".equals(name))
|
||||
{
|
||||
return new Boolean(splitCdataSections);
|
||||
}
|
||||
else if ("validate".equals(name))
|
||||
{
|
||||
return new Boolean(validate);
|
||||
}
|
||||
else if ("validate-if-schema".equals(name))
|
||||
{
|
||||
return new Boolean(validateIfSchema);
|
||||
}
|
||||
else if ("well-formed".equals(name))
|
||||
{
|
||||
return new Boolean(wellFormed);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new GnomeDOMException(DOMException.NOT_FOUND_ERR, name);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean canSetParameter(String name, Object value)
|
||||
{
|
||||
name = name.toLowerCase();
|
||||
if ("error-handler".equals(name))
|
||||
{
|
||||
return (value == null || value instanceof DOMErrorHandler);
|
||||
}
|
||||
return ("cdata-sections".equals(name) ||
|
||||
"comments".equals(name) ||
|
||||
"entities".equals(name) ||
|
||||
"namespace-declarations".equals(name) ||
|
||||
"split-cdata-sections".equals(name));
|
||||
}
|
||||
|
||||
public DOMStringList getParameterNames()
|
||||
{
|
||||
String[] names = new String[] {
|
||||
"canonical-form",
|
||||
"cdata-sections",
|
||||
"check-character-normalization",
|
||||
"comments",
|
||||
"datatype-normalization",
|
||||
"element-content-whitespace",
|
||||
"entities",
|
||||
"error-handler",
|
||||
"infoset",
|
||||
"namespaces",
|
||||
"namespace-declarations",
|
||||
"normalize-characters",
|
||||
"split-cdata-sections",
|
||||
"validate",
|
||||
"validate-if-schema",
|
||||
"well-formed"
|
||||
};
|
||||
return new GnomeDOMStringList(names);
|
||||
}
|
||||
|
||||
private boolean getBooleanValue(Object value)
|
||||
{
|
||||
if (value instanceof Boolean)
|
||||
{
|
||||
return ((Boolean) value).booleanValue();
|
||||
}
|
||||
else if (value instanceof String)
|
||||
{
|
||||
return new Boolean ((String) value).booleanValue();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// -- XPathEvaluator methods --
|
||||
|
||||
public XPathExpression createExpression(String expression,
|
||||
XPathNSResolver resolver)
|
||||
throws XPathException, DOMException
|
||||
{
|
||||
return new GnomeXPathExpression(this, expression, resolver);
|
||||
}
|
||||
|
||||
public XPathNSResolver createNSResolver(Node nodeResolver)
|
||||
{
|
||||
return new GnomeXPathNSResolver(nodeResolver);
|
||||
}
|
||||
|
||||
public native Object evaluate(String expression,
|
||||
Node contextNode,
|
||||
XPathNSResolver resolver,
|
||||
short type,
|
||||
Object result)
|
||||
throws XPathException, DOMException;
|
||||
|
||||
// -- DocumentTraversal methods --
|
||||
|
||||
public NodeIterator createNodeIterator(Node root,
|
||||
int whatToShow,
|
||||
NodeFilter filter,
|
||||
boolean entityReferenceExpansion)
|
||||
throws DOMException
|
||||
{
|
||||
return new DomNodeIterator(root, whatToShow, filter,
|
||||
entityReferenceExpansion, false);
|
||||
}
|
||||
|
||||
public TreeWalker createTreeWalker(Node root,
|
||||
int whatToShow,
|
||||
NodeFilter filter,
|
||||
boolean entityReferenceExpansion)
|
||||
throws DOMException
|
||||
{
|
||||
return new DomNodeIterator(root, whatToShow, filter,
|
||||
entityReferenceExpansion, true);
|
||||
}
|
||||
|
||||
// -- Debugging --
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buffer = new StringBuffer(getClass().getName());
|
||||
buffer.append("[version=");
|
||||
buffer.append(getXmlVersion());
|
||||
buffer.append(",standalone=");
|
||||
buffer.append(getXmlStandalone());
|
||||
buffer.append("]");
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
}
|
326
libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentBuilder.java
Normal file
326
libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentBuilder.java
Normal file
|
@ -0,0 +1,326 @@
|
|||
/* GnomeDocumentBuilder.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.dom;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.DocumentType;
|
||||
import org.w3c.dom.DOMImplementation;
|
||||
import org.xml.sax.EntityResolver;
|
||||
import org.xml.sax.ErrorHandler;
|
||||
import org.xml.sax.InputSource;
|
||||
import org.xml.sax.Locator;
|
||||
import org.xml.sax.SAXException;
|
||||
import org.xml.sax.SAXParseException;
|
||||
|
||||
import gnu.xml.libxmlj.util.NamedInputStream;
|
||||
import gnu.xml.libxmlj.util.StandaloneDocumentType;
|
||||
import gnu.xml.libxmlj.util.StandaloneLocator;
|
||||
import gnu.xml.libxmlj.util.XMLJ;
|
||||
|
||||
/**
|
||||
* A JAXP DOM implementation that uses Gnome libxml2 as the underlying
|
||||
* parser and node representation.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
public class GnomeDocumentBuilder
|
||||
extends DocumentBuilder
|
||||
implements DOMImplementation
|
||||
{
|
||||
|
||||
static
|
||||
{
|
||||
XMLJ.init();
|
||||
}
|
||||
|
||||
// -- DocumentBuilder --
|
||||
|
||||
private boolean validate;
|
||||
private boolean coalesce;
|
||||
private boolean expandEntities;
|
||||
private EntityResolver entityResolver;
|
||||
private ErrorHandler errorHandler;
|
||||
private boolean seenFatalError;
|
||||
|
||||
/**
|
||||
* Constructs a new validating document builder.
|
||||
*/
|
||||
public GnomeDocumentBuilder()
|
||||
{
|
||||
this(true, false, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new document builder.
|
||||
* @param validate whether to validate during parsing
|
||||
* @param coalesce whether to merge CDATA as text nodes
|
||||
* @param expandEntities whether to expand entity references
|
||||
*/
|
||||
public GnomeDocumentBuilder(boolean validate,
|
||||
boolean coalesce,
|
||||
boolean expandEntities)
|
||||
{
|
||||
this.validate = validate;
|
||||
this.coalesce = coalesce;
|
||||
this.expandEntities = expandEntities;
|
||||
}
|
||||
|
||||
public DOMImplementation getDOMImplementation()
|
||||
{
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean isNamespaceAware()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean isValidating()
|
||||
{
|
||||
return validate;
|
||||
}
|
||||
|
||||
public Document newDocument()
|
||||
{
|
||||
return createDocument(null, null, null);
|
||||
}
|
||||
|
||||
public Document parse(InputSource input)
|
||||
throws SAXException, IOException
|
||||
{
|
||||
NamedInputStream in = XMLJ.getInputStream(input);
|
||||
byte[] detectBuffer = in.getDetectBuffer();
|
||||
String publicId = input.getPublicId();
|
||||
String systemId = input.getSystemId();
|
||||
String base = XMLJ.getBaseURI(systemId);
|
||||
// Handle zero-length document
|
||||
if (detectBuffer == null)
|
||||
{
|
||||
throw new SAXParseException("No document element", publicId,
|
||||
systemId, 0, 0);
|
||||
}
|
||||
seenFatalError = false;
|
||||
return parseStream(in,
|
||||
detectBuffer,
|
||||
publicId,
|
||||
systemId,
|
||||
base,
|
||||
validate,
|
||||
coalesce,
|
||||
expandEntities,
|
||||
true, //entityResolver != null,
|
||||
errorHandler != null);
|
||||
}
|
||||
|
||||
private native Document parseStream(InputStream in,
|
||||
byte[] detectBuffer,
|
||||
String publicId,
|
||||
String systemId,
|
||||
String base,
|
||||
boolean validate,
|
||||
boolean coalesce,
|
||||
boolean expandEntities,
|
||||
boolean entityResolver,
|
||||
boolean errorHandler);
|
||||
|
||||
public void setEntityResolver(EntityResolver resolver)
|
||||
{
|
||||
entityResolver = resolver;
|
||||
}
|
||||
|
||||
public void setErrorHandler(ErrorHandler handler)
|
||||
{
|
||||
errorHandler = handler;
|
||||
}
|
||||
|
||||
// -- DOMImplementation --
|
||||
|
||||
public boolean hasFeature(String name, String version)
|
||||
{
|
||||
if (name.length() == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
name = name.toLowerCase();
|
||||
if (name.charAt(0) == '+')
|
||||
{
|
||||
name = name.substring(1);
|
||||
}
|
||||
|
||||
if ("xml".equals(name) || "core".equals(name))
|
||||
{
|
||||
return (version == null ||
|
||||
"".equals(version) ||
|
||||
"1.0".equals(version) ||
|
||||
"2.0".equals(version) ||
|
||||
"3.0".equals(version));
|
||||
|
||||
}
|
||||
else if ("ls".equals(name) || "ls-async".equals(name))
|
||||
{
|
||||
// TODO
|
||||
/*
|
||||
return (version == null ||
|
||||
"".equals(version) ||
|
||||
"3.0".equals(version));
|
||||
*/
|
||||
return false;
|
||||
}
|
||||
else if ("traversal".equals(name))
|
||||
{
|
||||
return (version == null ||
|
||||
"".equals(version) ||
|
||||
"2.0".equals(version));
|
||||
}
|
||||
else if ("xpath".equals(name))
|
||||
{
|
||||
return (version == null ||
|
||||
"".equals(version) ||
|
||||
"3.0".equals(version));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// DOM Level 3
|
||||
|
||||
public Object getFeature(String feature, String version)
|
||||
{
|
||||
if (hasFeature(feature, version))
|
||||
{
|
||||
return this;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public native Document createDocument(String namespaceURI,
|
||||
String qualifiedName,
|
||||
DocumentType doctype);
|
||||
|
||||
public DocumentType createDocumentType(String qualifiedName,
|
||||
String publicId,
|
||||
String systemId)
|
||||
{
|
||||
return new StandaloneDocumentType(qualifiedName, publicId, systemId);
|
||||
}
|
||||
|
||||
// Callback hooks from JNI
|
||||
|
||||
private void setDocumentLocator(Object ctx, Object loc)
|
||||
{
|
||||
// ignore
|
||||
}
|
||||
|
||||
private InputStream resolveEntity(String publicId, String systemId,
|
||||
String base)
|
||||
throws SAXException, IOException
|
||||
{
|
||||
String url = XMLJ.getAbsoluteURI(base, systemId);
|
||||
InputStream in = null;
|
||||
if (entityResolver != null)
|
||||
{
|
||||
InputSource source = entityResolver.resolveEntity(publicId, url);
|
||||
if (source != null)
|
||||
{
|
||||
in = XMLJ.getInputStream(source);
|
||||
}
|
||||
}
|
||||
if (in == null)
|
||||
{
|
||||
in = XMLJ.getInputStream(new URL(url));
|
||||
}
|
||||
return in;
|
||||
}
|
||||
|
||||
private void warning(String message,
|
||||
int lineNumber,
|
||||
int columnNumber,
|
||||
String publicId,
|
||||
String systemId)
|
||||
throws SAXException
|
||||
{
|
||||
if (!seenFatalError && errorHandler != null)
|
||||
{
|
||||
Locator l = new StandaloneLocator(lineNumber,
|
||||
columnNumber,
|
||||
publicId,
|
||||
systemId);
|
||||
errorHandler.warning(new SAXParseException(message, l));
|
||||
}
|
||||
}
|
||||
|
||||
private void error(String message,
|
||||
int lineNumber,
|
||||
int columnNumber,
|
||||
String publicId,
|
||||
String systemId)
|
||||
throws SAXException
|
||||
{
|
||||
if (!seenFatalError && errorHandler != null)
|
||||
{
|
||||
Locator l = new StandaloneLocator(lineNumber,
|
||||
columnNumber,
|
||||
publicId,
|
||||
systemId);
|
||||
errorHandler.error(new SAXParseException(message, l));
|
||||
}
|
||||
}
|
||||
|
||||
private void fatalError(String message,
|
||||
int lineNumber,
|
||||
int columnNumber,
|
||||
String publicId,
|
||||
String systemId)
|
||||
throws SAXException
|
||||
{
|
||||
if (!seenFatalError && errorHandler != null)
|
||||
{
|
||||
seenFatalError = true;
|
||||
Locator l = new StandaloneLocator(lineNumber,
|
||||
columnNumber,
|
||||
publicId,
|
||||
systemId);
|
||||
errorHandler.fatalError(new SAXParseException(message, l));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,94 @@
|
|||
/* GnomeDocumentBuilderFactory.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.dom;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
|
||||
/**
|
||||
* Factory for JAXP document builders using the libxml2 implementation.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
public class GnomeDocumentBuilderFactory
|
||||
extends DocumentBuilderFactory
|
||||
{
|
||||
|
||||
public GnomeDocumentBuilderFactory ()
|
||||
{
|
||||
setNamespaceAware (true);
|
||||
}
|
||||
|
||||
public Object getAttribute (String name)
|
||||
{
|
||||
// TODO
|
||||
return null;
|
||||
}
|
||||
|
||||
public DocumentBuilder newDocumentBuilder ()
|
||||
throws ParserConfigurationException
|
||||
{
|
||||
/*
|
||||
if (!isNamespaceAware ())
|
||||
{
|
||||
String msg = "Parser must be namespace-aware";
|
||||
throw new ParserConfigurationException (msg);
|
||||
}
|
||||
if (isIgnoringComments ())
|
||||
{
|
||||
String msg = "Ignoring comments not supported";
|
||||
throw new ParserConfigurationException (msg);
|
||||
}
|
||||
if (isIgnoringElementContentWhitespace ())
|
||||
{
|
||||
String msg = "Ignoring element content whitespace not supported";
|
||||
throw new ParserConfigurationException (msg);
|
||||
}
|
||||
*/
|
||||
return new GnomeDocumentBuilder (isValidating (),
|
||||
isCoalescing (),
|
||||
isExpandEntityReferences ());
|
||||
}
|
||||
|
||||
public void setAttribute (String name, Object value)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
/* GnomeDocumentFragment.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.dom;
|
||||
|
||||
import org.w3c.dom.DocumentFragment;
|
||||
|
||||
/**
|
||||
* A DOM document fragment node implemented in libxml2.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class GnomeDocumentFragment
|
||||
extends GnomeNode
|
||||
implements DocumentFragment
|
||||
{
|
||||
|
||||
GnomeDocumentFragment (Object id)
|
||||
{
|
||||
super (id);
|
||||
}
|
||||
|
||||
}
|
96
libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentType.java
Normal file
96
libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentType.java
Normal file
|
@ -0,0 +1,96 @@
|
|||
/* GnomeDocumentType.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.dom;
|
||||
|
||||
import org.w3c.dom.DocumentType;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
|
||||
/**
|
||||
* A DOM document type node implemented in libxml2.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class GnomeDocumentType
|
||||
extends GnomeNode
|
||||
implements DocumentType
|
||||
{
|
||||
|
||||
GnomeDocumentType (Object id)
|
||||
{
|
||||
super (id);
|
||||
}
|
||||
|
||||
public String getName ()
|
||||
{
|
||||
return getNodeName ();
|
||||
}
|
||||
|
||||
public NamedNodeMap getEntities ()
|
||||
{
|
||||
return new GnomeNamedNodeMap (id, 1);
|
||||
}
|
||||
|
||||
public NamedNodeMap getNotations ()
|
||||
{
|
||||
return new GnomeNamedNodeMap (id, 2);
|
||||
}
|
||||
|
||||
public native String getPublicId ();
|
||||
|
||||
public native String getSystemId ();
|
||||
|
||||
public native String getInternalSubset ();
|
||||
|
||||
public String toString ()
|
||||
{
|
||||
String publicId = getPublicId ();
|
||||
StringBuffer buffer = new StringBuffer (getClass ().getName ());
|
||||
buffer.append ("[");
|
||||
if (publicId != null)
|
||||
{
|
||||
buffer.append ("publicId=");
|
||||
buffer.append (publicId);
|
||||
buffer.append (",");
|
||||
}
|
||||
buffer.append ("systemId=");
|
||||
buffer.append (getSystemId ());
|
||||
buffer.append ("]");
|
||||
return buffer.toString ();
|
||||
}
|
||||
|
||||
}
|
182
libjava/classpath/gnu/xml/libxmlj/dom/GnomeElement.java
Normal file
182
libjava/classpath/gnu/xml/libxmlj/dom/GnomeElement.java
Normal file
|
@ -0,0 +1,182 @@
|
|||
/* GnomeElement.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.dom;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.w3c.dom.Attr;
|
||||
import org.w3c.dom.DOMException;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.w3c.dom.TypeInfo;
|
||||
|
||||
/**
|
||||
* A DOM element node implemented in libxml2.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class GnomeElement
|
||||
extends GnomeNode
|
||||
implements Element
|
||||
{
|
||||
|
||||
/**
|
||||
* User-defined ID attributes.
|
||||
*/
|
||||
Set userIdAttrs;
|
||||
|
||||
GnomeElement(Object id)
|
||||
{
|
||||
super(id);
|
||||
}
|
||||
|
||||
public String getTagName()
|
||||
{
|
||||
return getNodeName();
|
||||
}
|
||||
|
||||
public native String getAttribute(String name);
|
||||
|
||||
public native void setAttribute(String name, String value)
|
||||
throws DOMException;
|
||||
|
||||
public void removeAttribute(String name)
|
||||
throws DOMException
|
||||
{
|
||||
Attr attr = getAttributeNode(name);
|
||||
if (attr != null)
|
||||
{
|
||||
removeAttributeNode(attr);
|
||||
}
|
||||
}
|
||||
|
||||
public native Attr getAttributeNode(String name);
|
||||
|
||||
public native Attr setAttributeNode(Attr newAttr)
|
||||
throws DOMException;
|
||||
|
||||
public native Attr removeAttributeNode(Attr oldAttr)
|
||||
throws DOMException;
|
||||
|
||||
public native NodeList getElementsByTagName(String name);
|
||||
|
||||
public native String getAttributeNS(String namespaceURI, String localName);
|
||||
|
||||
public native void setAttributeNS(String namespaceURI, String
|
||||
qualifiedName, String value)
|
||||
throws DOMException;
|
||||
|
||||
public void removeAttributeNS(String namespaceURI, String localName)
|
||||
throws DOMException
|
||||
{
|
||||
Attr attr = getAttributeNodeNS(namespaceURI, localName);
|
||||
if (attr != null)
|
||||
{
|
||||
removeAttributeNode(attr);
|
||||
}
|
||||
}
|
||||
|
||||
public native Attr getAttributeNodeNS(String namespaceURI,
|
||||
String localName);
|
||||
|
||||
public native Attr setAttributeNodeNS(Attr newAttr)
|
||||
throws DOMException;
|
||||
|
||||
public native NodeList getElementsByTagNameNS(String namespaceURI,
|
||||
String localName);
|
||||
|
||||
public native boolean hasAttribute(String name);
|
||||
|
||||
public native boolean hasAttributeNS(String namespaceURI,
|
||||
String localName);
|
||||
|
||||
// DOM Level 3 methods
|
||||
|
||||
public TypeInfo getSchemaTypeInfo()
|
||||
{
|
||||
return new GnomeTypeInfo(id);
|
||||
}
|
||||
|
||||
public void setIdAttribute(String name, boolean isId)
|
||||
{
|
||||
Attr attr = getAttributeNode(name);
|
||||
setIdAttributeNode(attr, isId);
|
||||
}
|
||||
|
||||
public void setIdAttributeNode(Attr attr, boolean isId)
|
||||
{
|
||||
if (attr == null)// FIXME || !attr.getOwnerElement().equals(this))
|
||||
{
|
||||
throw new GnomeDOMException(DOMException.NOT_FOUND_ERR, null);
|
||||
}
|
||||
if (isId)
|
||||
{
|
||||
if (userIdAttrs == null)
|
||||
{
|
||||
userIdAttrs = new HashSet();
|
||||
}
|
||||
userIdAttrs.add(attr);
|
||||
}
|
||||
else if (userIdAttrs != null)
|
||||
{
|
||||
userIdAttrs.remove(attr);
|
||||
if (userIdAttrs.isEmpty())
|
||||
{
|
||||
userIdAttrs = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setIdAttributeNS(String namespaceURI, String localName,
|
||||
boolean isId)
|
||||
{
|
||||
Attr attr = getAttributeNodeNS(namespaceURI, localName);
|
||||
setIdAttributeNode(attr, isId);
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buffer = new StringBuffer(getClass().getName());
|
||||
buffer.append("[tagName=");
|
||||
buffer.append(getTagName());
|
||||
buffer.append("]");
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
}
|
102
libjava/classpath/gnu/xml/libxmlj/dom/GnomeEntity.java
Normal file
102
libjava/classpath/gnu/xml/libxmlj/dom/GnomeEntity.java
Normal file
|
@ -0,0 +1,102 @@
|
|||
/* GnomeEntity.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.dom;
|
||||
|
||||
import org.w3c.dom.Entity;
|
||||
|
||||
/**
|
||||
* A DOM entity node implemented in libxml2.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class GnomeEntity
|
||||
extends GnomeNode
|
||||
implements Entity
|
||||
{
|
||||
|
||||
GnomeEntity (Object id)
|
||||
{
|
||||
super (id);
|
||||
}
|
||||
|
||||
public native String getPublicId ();
|
||||
|
||||
public native String getSystemId ();
|
||||
|
||||
public native String getNotationName ();
|
||||
|
||||
// DOM Level 3 methods
|
||||
|
||||
public String getInputEncoding ()
|
||||
{
|
||||
// TODO
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getXmlEncoding ()
|
||||
{
|
||||
// TODO
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getXmlVersion ()
|
||||
{
|
||||
// TODO
|
||||
return null;
|
||||
}
|
||||
|
||||
public String toString ()
|
||||
{
|
||||
String publicId = getPublicId ();
|
||||
StringBuffer buffer = new StringBuffer (getClass ().getName ());
|
||||
buffer.append ("[");
|
||||
if (publicId != null)
|
||||
{
|
||||
buffer.append ("publicId=");
|
||||
buffer.append (publicId);
|
||||
buffer.append (",");
|
||||
}
|
||||
buffer.append ("systemId=");
|
||||
buffer.append (getSystemId ());
|
||||
buffer.append (",notationName=");
|
||||
buffer.append (getNotationName ());
|
||||
buffer.append ("]");
|
||||
return buffer.toString ();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
/* GnomeEntityReference.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.dom;
|
||||
|
||||
import org.w3c.dom.EntityReference;
|
||||
|
||||
/**
|
||||
* A DOM entity reference node implemented in libxml2.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class GnomeEntityReference
|
||||
extends GnomeNode
|
||||
implements EntityReference
|
||||
{
|
||||
|
||||
GnomeEntityReference (Object id)
|
||||
{
|
||||
super (id);
|
||||
}
|
||||
|
||||
}
|
92
libjava/classpath/gnu/xml/libxmlj/dom/GnomeNamedNodeMap.java
Normal file
92
libjava/classpath/gnu/xml/libxmlj/dom/GnomeNamedNodeMap.java
Normal file
|
@ -0,0 +1,92 @@
|
|||
/* GnomeNamedNodeMap.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.dom;
|
||||
|
||||
import org.w3c.dom.DOMException;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
import org.w3c.dom.Node;
|
||||
|
||||
/**
|
||||
* A DOM named node map implemented in libxml2.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class GnomeNamedNodeMap
|
||||
implements NamedNodeMap
|
||||
{
|
||||
|
||||
/**
|
||||
* The node id.
|
||||
*/
|
||||
private final Object id;
|
||||
|
||||
/**
|
||||
* The map type.
|
||||
* 0=attributes
|
||||
* 1=entities
|
||||
* 2=notations
|
||||
*/
|
||||
private final int type;
|
||||
|
||||
GnomeNamedNodeMap (Object id, int type)
|
||||
{
|
||||
this.id = id;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public native Node getNamedItem (String name);
|
||||
|
||||
public native Node setNamedItem (Node arg)
|
||||
throws DOMException;
|
||||
|
||||
public native Node removeNamedItem (String name)
|
||||
throws DOMException;
|
||||
|
||||
public native Node item (int index);
|
||||
|
||||
public native int getLength ();
|
||||
|
||||
public native Node getNamedItemNS (String namespaceURI, String localName);
|
||||
|
||||
public native Node setNamedItemNS (Node arg)
|
||||
throws DOMException;
|
||||
|
||||
public native Node removeNamedItemNS (String namespaceURI,
|
||||
String localName);
|
||||
|
||||
}
|
499
libjava/classpath/gnu/xml/libxmlj/dom/GnomeNode.java
Normal file
499
libjava/classpath/gnu/xml/libxmlj/dom/GnomeNode.java
Normal file
|
@ -0,0 +1,499 @@
|
|||
/* GnomeNode.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.dom;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.DocumentType;
|
||||
import org.w3c.dom.DOMException;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.w3c.dom.Text;
|
||||
import org.w3c.dom.UserDataHandler;
|
||||
|
||||
import gnu.xml.libxmlj.util.StandaloneDocumentType;
|
||||
|
||||
/**
|
||||
* A DOM node implemented in libxml2.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class GnomeNode
|
||||
implements Node, Comparable
|
||||
{
|
||||
|
||||
/**
|
||||
* Maps document pointers to a map of node pointers to node instances.
|
||||
*/
|
||||
static Map instances;
|
||||
|
||||
/**
|
||||
* Retrieves the node instance for the specified node pointer.
|
||||
* This creates a new instance and adds it to the cache if required.
|
||||
* @param doc the document pointer
|
||||
* @param node the node pointer
|
||||
* @param type the node type
|
||||
*/
|
||||
static GnomeNode newInstance(final Object doc, final Object node,
|
||||
final int type)
|
||||
{
|
||||
if (doc == null)
|
||||
{
|
||||
throw new NullPointerException("doc");
|
||||
}
|
||||
if (node == null)
|
||||
{
|
||||
throw new NullPointerException("node");
|
||||
}
|
||||
if (instances == null)
|
||||
{
|
||||
instances = new HashMap();
|
||||
}
|
||||
Map docNodes = (Map) instances.get(doc);
|
||||
if (docNodes == null)
|
||||
{
|
||||
docNodes = new HashMap(1024); // TODO review optimal initial capacity
|
||||
instances.put(doc, docNodes);
|
||||
}
|
||||
GnomeNode nodeInstance = (GnomeNode) docNodes.get(node);
|
||||
if (nodeInstance != null)
|
||||
{
|
||||
return nodeInstance; // Return cached version
|
||||
}
|
||||
switch (type)
|
||||
{
|
||||
case ELEMENT_NODE:
|
||||
nodeInstance = new GnomeElement(node);
|
||||
break;
|
||||
case ATTRIBUTE_NODE:
|
||||
nodeInstance = new GnomeAttr(node);
|
||||
break;
|
||||
case TEXT_NODE:
|
||||
nodeInstance = new GnomeText(node);
|
||||
break;
|
||||
case CDATA_SECTION_NODE:
|
||||
nodeInstance = new GnomeCDATASection(node);
|
||||
break;
|
||||
case ENTITY_REFERENCE_NODE:
|
||||
nodeInstance = new GnomeEntityReference(node);
|
||||
break;
|
||||
case ENTITY_NODE:
|
||||
nodeInstance = new GnomeEntity(node);
|
||||
break;
|
||||
case PROCESSING_INSTRUCTION_NODE:
|
||||
nodeInstance = new GnomeProcessingInstruction(node);
|
||||
break;
|
||||
case COMMENT_NODE:
|
||||
nodeInstance = new GnomeComment(node);
|
||||
break;
|
||||
case DOCUMENT_NODE:
|
||||
nodeInstance = new GnomeDocument(node);
|
||||
break;
|
||||
case DOCUMENT_TYPE_NODE:
|
||||
nodeInstance = new GnomeDocumentType(node);
|
||||
break;
|
||||
case DOCUMENT_FRAGMENT_NODE:
|
||||
nodeInstance = new GnomeDocumentFragment(node);
|
||||
break;
|
||||
case NOTATION_NODE:
|
||||
nodeInstance = new GnomeNotation(node);
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("Unknown node type: " + type);
|
||||
}
|
||||
docNodes.put(node, nodeInstance);
|
||||
return nodeInstance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Frees the specified document.
|
||||
* This removes all its nodes from the cache.
|
||||
*/
|
||||
static void freeDocument(final Object doc)
|
||||
{
|
||||
if (instances == null || doc == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
instances.remove(doc);
|
||||
//System.out.println("Freed "+instances.remove(doc));
|
||||
}
|
||||
|
||||
/**
|
||||
* xmlNodePtr
|
||||
*/
|
||||
final Object id;
|
||||
|
||||
Map userData;
|
||||
Map userDataHandlers;
|
||||
|
||||
GnomeNode(final Object id)
|
||||
{
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public native String getNodeName();
|
||||
|
||||
public native String getNodeValue()
|
||||
throws DOMException;
|
||||
|
||||
public native void setNodeValue(String nodeValue)
|
||||
throws DOMException;
|
||||
|
||||
public native short getNodeType();
|
||||
|
||||
public native Node getParentNode();
|
||||
|
||||
public NodeList getChildNodes()
|
||||
{
|
||||
return new GnomeNodeList(id);
|
||||
}
|
||||
|
||||
public native Node getFirstChild();
|
||||
|
||||
public native Node getLastChild();
|
||||
|
||||
public native Node getPreviousSibling();
|
||||
|
||||
public native Node getNextSibling();
|
||||
|
||||
public NamedNodeMap getAttributes()
|
||||
{
|
||||
return new GnomeNamedNodeMap(id, 0);
|
||||
}
|
||||
|
||||
public native Document getOwnerDocument();
|
||||
|
||||
public Node insertBefore(Node newChild, Node refChild)
|
||||
throws DOMException
|
||||
{
|
||||
if (newChild instanceof StandaloneDocumentType)
|
||||
{
|
||||
DocumentType dt = (DocumentType) newChild;
|
||||
newChild = ((GnomeDocument) getOwnerDocument())
|
||||
.createDocumentType(dt.getName(), dt.getPublicId(),
|
||||
dt.getSystemId());
|
||||
}
|
||||
if (newChild == null)
|
||||
{
|
||||
throw new GnomeDOMException(DOMException.NOT_FOUND_ERR, null);
|
||||
}
|
||||
if (!(newChild instanceof GnomeNode))
|
||||
{
|
||||
throw new GnomeDOMException(DOMException.WRONG_DOCUMENT_ERR, null);
|
||||
}
|
||||
if (refChild == null || !(refChild instanceof GnomeNode))
|
||||
{
|
||||
throw new GnomeDOMException(DOMException.NOT_FOUND_ERR, null);
|
||||
}
|
||||
return xmljInsertBefore(newChild, refChild);
|
||||
}
|
||||
|
||||
private native Node xmljInsertBefore(Node newChild, Node refChild)
|
||||
throws DOMException;
|
||||
|
||||
public Node replaceChild(Node newChild, Node oldChild)
|
||||
throws DOMException
|
||||
{
|
||||
if (newChild instanceof StandaloneDocumentType)
|
||||
{
|
||||
DocumentType dt = (DocumentType) newChild;
|
||||
newChild = ((GnomeDocument) getOwnerDocument())
|
||||
.createDocumentType(dt.getName(), dt.getPublicId(),
|
||||
dt.getSystemId());
|
||||
}
|
||||
if (newChild == null)
|
||||
{
|
||||
throw new GnomeDOMException(DOMException.NOT_FOUND_ERR, null);
|
||||
}
|
||||
if (!(newChild instanceof GnomeNode))
|
||||
{
|
||||
throw new GnomeDOMException(DOMException.WRONG_DOCUMENT_ERR, newChild.toString());
|
||||
}
|
||||
if (oldChild == null || !(oldChild instanceof GnomeNode))
|
||||
{
|
||||
throw new GnomeDOMException(DOMException.NOT_FOUND_ERR, null);
|
||||
}
|
||||
return xmljReplaceChild(newChild, oldChild);
|
||||
}
|
||||
|
||||
private native Node xmljReplaceChild(Node newChild, Node oldChild)
|
||||
throws DOMException;
|
||||
|
||||
public Node removeChild(Node oldChild)
|
||||
throws DOMException
|
||||
{
|
||||
if (!(oldChild instanceof GnomeNode))
|
||||
{
|
||||
throw new GnomeDOMException(DOMException.WRONG_DOCUMENT_ERR, null);
|
||||
}
|
||||
return xmljRemoveChild(oldChild);
|
||||
}
|
||||
|
||||
private native Node xmljRemoveChild(Node oldChild)
|
||||
throws DOMException;
|
||||
|
||||
public Node appendChild(Node newChild)
|
||||
throws DOMException
|
||||
{
|
||||
if (newChild instanceof StandaloneDocumentType)
|
||||
{
|
||||
DocumentType dt = (DocumentType) newChild;
|
||||
newChild = ((GnomeDocument) getOwnerDocument())
|
||||
.createDocumentType(dt.getName(), dt.getPublicId(),
|
||||
dt.getSystemId());
|
||||
}
|
||||
if (!(newChild instanceof GnomeNode))
|
||||
{
|
||||
throw new GnomeDOMException(DOMException.WRONG_DOCUMENT_ERR, null);
|
||||
}
|
||||
return xmljAppendChild(newChild);
|
||||
}
|
||||
|
||||
private native Node xmljAppendChild(Node newChild)
|
||||
throws DOMException;
|
||||
|
||||
public native boolean hasChildNodes();
|
||||
|
||||
public Node cloneNode(boolean deep)
|
||||
{
|
||||
Node ret = xmljCloneNode(deep);
|
||||
notifyUserDataHandlers(UserDataHandler.NODE_CLONED, this, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
private native Node xmljCloneNode(boolean deep);
|
||||
|
||||
public native void normalize();
|
||||
|
||||
public boolean isSupported(String feature, String version)
|
||||
{
|
||||
return getOwnerDocument().getImplementation()
|
||||
.hasFeature(feature, version);
|
||||
}
|
||||
|
||||
public native String getNamespaceURI();
|
||||
|
||||
public native String getPrefix();
|
||||
|
||||
public native void setPrefix(String prefix)
|
||||
throws DOMException;
|
||||
|
||||
public native String getLocalName();
|
||||
|
||||
public native boolean hasAttributes();
|
||||
|
||||
public int hashCode()
|
||||
{
|
||||
return id.hashCode();
|
||||
}
|
||||
|
||||
public boolean equals(Object other)
|
||||
{
|
||||
if (other == this)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return (other instanceof GnomeNode &&
|
||||
((GnomeNode) other).id == id);
|
||||
}
|
||||
|
||||
// DOM Level 3 methods
|
||||
|
||||
public native String getBaseURI();
|
||||
|
||||
public short compareDocumentPosition(Node other)
|
||||
throws DOMException
|
||||
{
|
||||
return (short) compareTo(other);
|
||||
}
|
||||
|
||||
public final int compareTo(Object other)
|
||||
{
|
||||
if (other instanceof GnomeNode)
|
||||
{
|
||||
return xmljCompareTo(other);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
private native int xmljCompareTo(Object other);
|
||||
|
||||
public String getTextContent()
|
||||
throws DOMException
|
||||
{
|
||||
switch (getNodeType())
|
||||
{
|
||||
case ELEMENT_NODE:
|
||||
case ATTRIBUTE_NODE:
|
||||
case ENTITY_NODE:
|
||||
case ENTITY_REFERENCE_NODE:
|
||||
case DOCUMENT_FRAGMENT_NODE:
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
NodeList children = getChildNodes();
|
||||
int len = children.getLength();
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
Node child = children.item(i);
|
||||
String textContent = child.getTextContent();
|
||||
if (textContent != null)
|
||||
{
|
||||
buffer.append(textContent);
|
||||
}
|
||||
}
|
||||
return buffer.toString();
|
||||
case TEXT_NODE:
|
||||
case CDATA_SECTION_NODE:
|
||||
case COMMENT_NODE:
|
||||
case PROCESSING_INSTRUCTION_NODE:
|
||||
return getNodeValue();
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void setTextContent(String textContent)
|
||||
throws DOMException
|
||||
{
|
||||
switch (getNodeType())
|
||||
{
|
||||
case ENTITY_REFERENCE_NODE:
|
||||
// entity references are read only
|
||||
throw new GnomeDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR,
|
||||
null);
|
||||
case ELEMENT_NODE:
|
||||
case ATTRIBUTE_NODE:
|
||||
case ENTITY_NODE:
|
||||
case DOCUMENT_FRAGMENT_NODE:
|
||||
NodeList children = getChildNodes();
|
||||
int len = children.getLength();
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
Node child = children.item(i);
|
||||
removeChild(child);
|
||||
}
|
||||
if (textContent != null)
|
||||
{
|
||||
Text text = getOwnerDocument().createTextNode(textContent);
|
||||
appendChild(text);
|
||||
}
|
||||
break;
|
||||
case TEXT_NODE:
|
||||
case CDATA_SECTION_NODE:
|
||||
case COMMENT_NODE:
|
||||
case PROCESSING_INSTRUCTION_NODE:
|
||||
setNodeValue(textContent);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isSameNode(Node other)
|
||||
{
|
||||
return equals(other);
|
||||
}
|
||||
|
||||
public native String lookupPrefix(String namespaceURI);
|
||||
|
||||
public native boolean isDefaultNamespace(String namespaceURI);
|
||||
|
||||
public native String lookupNamespaceURI(String prefix);
|
||||
|
||||
public native boolean isEqualNode(Node arg);
|
||||
|
||||
public Object getFeature(String feature, String version)
|
||||
{
|
||||
return getOwnerDocument().getImplementation()
|
||||
.getFeature(feature, version);
|
||||
}
|
||||
|
||||
public Object setUserData(String key, Object data, UserDataHandler handler)
|
||||
{
|
||||
// TODO handler
|
||||
if (userData == null)
|
||||
{
|
||||
userData = new HashMap();
|
||||
}
|
||||
if (handler != null)
|
||||
{
|
||||
if (userDataHandlers == null)
|
||||
{
|
||||
userDataHandlers = new HashMap();
|
||||
}
|
||||
userDataHandlers.put(key, handler);
|
||||
}
|
||||
return userData.put(key, data);
|
||||
}
|
||||
|
||||
public Object getUserData(String key)
|
||||
{
|
||||
if (userData == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return userData.get(key);
|
||||
}
|
||||
|
||||
void notifyUserDataHandlers(short op, Node src, Node dst)
|
||||
{
|
||||
if (userDataHandlers != null)
|
||||
{
|
||||
for (Iterator i = userDataHandlers.entrySet().iterator(); i.hasNext(); )
|
||||
{
|
||||
Map.Entry entry = (Map.Entry) i.next();
|
||||
String key = (String) entry.getKey();
|
||||
UserDataHandler handler = (UserDataHandler) entry.getValue();
|
||||
Object data = userData.get(key);
|
||||
handler.handle(op, key, data, src, dst);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buffer = new StringBuffer(getClass().getName());
|
||||
buffer.append("[nodeName=");
|
||||
buffer.append(getNodeName());
|
||||
buffer.append("]");
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
}
|
66
libjava/classpath/gnu/xml/libxmlj/dom/GnomeNodeList.java
Normal file
66
libjava/classpath/gnu/xml/libxmlj/dom/GnomeNodeList.java
Normal file
|
@ -0,0 +1,66 @@
|
|||
/* GnomeNodeList.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.dom;
|
||||
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
|
||||
/**
|
||||
* A DOM node list implemented in libxml2.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class GnomeNodeList
|
||||
implements NodeList
|
||||
{
|
||||
|
||||
/**
|
||||
* The node id.
|
||||
*/
|
||||
private final Object id;
|
||||
|
||||
GnomeNodeList (Object id)
|
||||
{
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public native Node item (int index);
|
||||
|
||||
public native int getLength ();
|
||||
|
||||
}
|
78
libjava/classpath/gnu/xml/libxmlj/dom/GnomeNotation.java
Normal file
78
libjava/classpath/gnu/xml/libxmlj/dom/GnomeNotation.java
Normal file
|
@ -0,0 +1,78 @@
|
|||
/* GnomeNotation.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.dom;
|
||||
|
||||
import org.w3c.dom.Notation;
|
||||
|
||||
/**
|
||||
* A DOM notation node implemented in libxml2.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class GnomeNotation
|
||||
extends GnomeNode
|
||||
implements Notation
|
||||
{
|
||||
|
||||
GnomeNotation (Object id)
|
||||
{
|
||||
super (id);
|
||||
}
|
||||
|
||||
public native String getPublicId ();
|
||||
|
||||
public native String getSystemId ();
|
||||
|
||||
public String toString ()
|
||||
{
|
||||
String publicId = getPublicId ();
|
||||
StringBuffer buffer = new StringBuffer (getClass ().getName ());
|
||||
buffer.append ("[");
|
||||
if (publicId != null)
|
||||
{
|
||||
buffer.append ("publicId=");
|
||||
buffer.append (publicId);
|
||||
buffer.append (",");
|
||||
}
|
||||
buffer.append ("systemId=");
|
||||
buffer.append (getSystemId ());
|
||||
buffer.append ("]");
|
||||
return buffer.toString ();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,77 @@
|
|||
/* GnomeProcessingInstruction.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.dom;
|
||||
|
||||
import org.w3c.dom.DOMException;
|
||||
import org.w3c.dom.ProcessingInstruction;
|
||||
|
||||
/**
|
||||
* A DOM processing instruction node implemented in libxml2.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class GnomeProcessingInstruction
|
||||
extends GnomeNode
|
||||
implements ProcessingInstruction
|
||||
{
|
||||
|
||||
GnomeProcessingInstruction (Object id)
|
||||
{
|
||||
super (id);
|
||||
}
|
||||
|
||||
public String getTarget ()
|
||||
{
|
||||
return getNodeName ();
|
||||
}
|
||||
|
||||
public native String getData ();
|
||||
|
||||
public native void setData (String data)
|
||||
throws DOMException;
|
||||
|
||||
public String toString ()
|
||||
{
|
||||
StringBuffer buffer = new StringBuffer (getClass ().getName ());
|
||||
buffer.append ("[data=");
|
||||
buffer.append (getData ());
|
||||
buffer.append ("]");
|
||||
return buffer.toString ();
|
||||
}
|
||||
|
||||
}
|
130
libjava/classpath/gnu/xml/libxmlj/dom/GnomeText.java
Normal file
130
libjava/classpath/gnu/xml/libxmlj/dom/GnomeText.java
Normal file
|
@ -0,0 +1,130 @@
|
|||
/* GnomeText.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.dom;
|
||||
|
||||
import org.w3c.dom.DOMException;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.Text;
|
||||
|
||||
/**
|
||||
* A DOM text node implemented in libxml2.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class GnomeText
|
||||
extends GnomeCharacterData
|
||||
implements Text
|
||||
{
|
||||
|
||||
GnomeText (Object id)
|
||||
{
|
||||
super (id);
|
||||
}
|
||||
|
||||
public Text splitText (int offset)
|
||||
throws DOMException
|
||||
{
|
||||
String value = getNodeValue ();
|
||||
String part1 = value.substring (0, offset);
|
||||
String part2 = value.substring (offset);
|
||||
Text text = getOwnerDocument ().createTextNode (part1);
|
||||
getParentNode ().insertBefore (text, this);
|
||||
setNodeValue (part2);
|
||||
return text;
|
||||
}
|
||||
|
||||
// DOM Level 3
|
||||
|
||||
public boolean isElementContentWhitespace ()
|
||||
{
|
||||
return getTextContent ().trim ().length () == 0;
|
||||
}
|
||||
|
||||
public String getWholeText ()
|
||||
{
|
||||
Node first = this;
|
||||
Node node = getPreviousSibling ();
|
||||
while (node != null && node instanceof Text)
|
||||
{
|
||||
first = node;
|
||||
node = node.getPreviousSibling ();
|
||||
}
|
||||
StringBuffer buf = new StringBuffer (first.getNodeValue ());
|
||||
node = first.getNextSibling ();
|
||||
while (node != null && node instanceof Text)
|
||||
{
|
||||
buf.append (node.getNodeValue ());
|
||||
node = node.getNextSibling ();
|
||||
}
|
||||
return buf.toString ();
|
||||
}
|
||||
|
||||
public Text replaceWholeText (String content) throws DOMException
|
||||
{
|
||||
boolean isEmpty = (content == null || content.length () == 0);
|
||||
if (!isEmpty)
|
||||
{
|
||||
setNodeValue (content);
|
||||
}
|
||||
|
||||
Node first = this;
|
||||
Node node = getPreviousSibling ();
|
||||
while (node != null && node instanceof Text)
|
||||
{
|
||||
first = node;
|
||||
node = node.getPreviousSibling ();
|
||||
}
|
||||
node = first.getNextSibling ();
|
||||
Node parent = getParentNode ();
|
||||
if (first != this || isEmpty)
|
||||
{
|
||||
parent.removeChild (first);
|
||||
}
|
||||
while (node != null && node instanceof Text)
|
||||
{
|
||||
Node tmp = node;
|
||||
node = node.getNextSibling ();
|
||||
if (tmp != this || isEmpty)
|
||||
{
|
||||
parent.removeChild (tmp);
|
||||
}
|
||||
}
|
||||
return (isEmpty) ? null : this;
|
||||
}
|
||||
|
||||
}
|
65
libjava/classpath/gnu/xml/libxmlj/dom/GnomeTypeInfo.java
Normal file
65
libjava/classpath/gnu/xml/libxmlj/dom/GnomeTypeInfo.java
Normal file
|
@ -0,0 +1,65 @@
|
|||
/* GnomeTypeInfo.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.dom;
|
||||
|
||||
import org.w3c.dom.TypeInfo;
|
||||
|
||||
/**
|
||||
* Provides XML Schema information about an element or attribute.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class GnomeTypeInfo implements TypeInfo
|
||||
{
|
||||
|
||||
final Object id;
|
||||
|
||||
GnomeTypeInfo(Object id)
|
||||
{
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public native String getTypeName ();
|
||||
|
||||
public native String getTypeNamespace ();
|
||||
|
||||
public native boolean isDerivedFrom (String typeNamespaceArg,
|
||||
String typeNameArg,
|
||||
int derivationMethod);
|
||||
|
||||
}
|
|
@ -0,0 +1,86 @@
|
|||
/* GnomeXPathExpression.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.dom;
|
||||
|
||||
import org.w3c.dom.DOMException;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.xpath.XPathException;
|
||||
import org.w3c.dom.xpath.XPathExpression;
|
||||
import org.w3c.dom.xpath.XPathNSResolver;
|
||||
|
||||
/**
|
||||
* A compiled XPath expression implemented in libxml2.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class GnomeXPathExpression
|
||||
implements XPathExpression
|
||||
{
|
||||
|
||||
/**
|
||||
* xmlXPathCompExprPtr
|
||||
*/
|
||||
final Object expr;
|
||||
|
||||
GnomeXPathExpression (GnomeDocument doc, String expression,
|
||||
XPathNSResolver resolver)
|
||||
{
|
||||
expr = init (expression);
|
||||
// TODO resolver
|
||||
}
|
||||
|
||||
protected void finalize ()
|
||||
{
|
||||
free (expr);
|
||||
}
|
||||
|
||||
private native Object init (String expression);
|
||||
|
||||
private native void free (Object expr);
|
||||
|
||||
public Object evaluate (Node contextNode, short type, Object result)
|
||||
throws XPathException, DOMException
|
||||
{
|
||||
return doEvaluate (expr, contextNode, type, result);
|
||||
}
|
||||
|
||||
private native Object doEvaluate (Object expr, Node contextNode,
|
||||
short type, Object result)
|
||||
throws XPathException, DOMException;
|
||||
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
/* GnomeXPathNSResolver.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.dom;
|
||||
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.xpath.XPathNSResolver;
|
||||
|
||||
/**
|
||||
* XPath namespace URI resolver implemented in libxml2.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class GnomeXPathNSResolver
|
||||
implements XPathNSResolver
|
||||
{
|
||||
|
||||
Node node;
|
||||
|
||||
GnomeXPathNSResolver(Node node)
|
||||
{
|
||||
this.node = node;
|
||||
}
|
||||
|
||||
public String lookupNamespaceURI(String prefix)
|
||||
{
|
||||
return node.lookupNamespaceURI(prefix);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
/* GnomeXPathNodeList.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.dom;
|
||||
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
|
||||
/**
|
||||
* A node list that uses an XPath result object.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class GnomeXPathNodeList
|
||||
implements NodeList
|
||||
{
|
||||
|
||||
/**
|
||||
* xmlXPathObjectPtr
|
||||
*/
|
||||
final Object obj;
|
||||
|
||||
GnomeXPathNodeList (Object obj)
|
||||
{
|
||||
this.obj = obj;
|
||||
}
|
||||
|
||||
protected void finalize ()
|
||||
{
|
||||
free(obj);
|
||||
}
|
||||
|
||||
private native void free (Object obj);
|
||||
|
||||
public native int getLength ();
|
||||
|
||||
public native Node item (int index);
|
||||
|
||||
}
|
132
libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathResult.java
Normal file
132
libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathResult.java
Normal file
|
@ -0,0 +1,132 @@
|
|||
/* GnomeXPathResult.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.dom;
|
||||
|
||||
import org.w3c.dom.DOMException;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.xpath.XPathException;
|
||||
import org.w3c.dom.xpath.XPathResult;
|
||||
|
||||
/**
|
||||
* An XPath result object implemented in libxml2.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class GnomeXPathResult
|
||||
implements XPathResult
|
||||
{
|
||||
|
||||
/**
|
||||
* xmlXPathObjectPtr
|
||||
*/
|
||||
final Object obj;
|
||||
|
||||
GnomeXPathResult (Object obj)
|
||||
{
|
||||
this.obj = obj;
|
||||
}
|
||||
|
||||
protected void finalize ()
|
||||
{
|
||||
free (obj);
|
||||
}
|
||||
|
||||
private native void free (Object obj);
|
||||
|
||||
public native short getResultType ();
|
||||
|
||||
public native double getNumberValue ()
|
||||
throws XPathException;
|
||||
|
||||
public native String getStringValue ()
|
||||
throws XPathException;
|
||||
|
||||
public native boolean getBooleanValue ()
|
||||
throws XPathException;
|
||||
|
||||
public native Node getSingleNodeValue ()
|
||||
throws XPathException;
|
||||
|
||||
public native boolean getInvalidIteratorState();
|
||||
|
||||
public native int getSnapshotLength ()
|
||||
throws XPathException;
|
||||
|
||||
public native Node iterateNext ()
|
||||
throws XPathException, DOMException;
|
||||
|
||||
public native Node snapshotItem (int index)
|
||||
throws XPathException;
|
||||
|
||||
public String toString ()
|
||||
{
|
||||
short type = getResultType ();
|
||||
switch (type)
|
||||
{
|
||||
case STRING_TYPE:
|
||||
return getStringValue ();
|
||||
case NUMBER_TYPE:
|
||||
return new Double (getNumberValue ()).toString ();
|
||||
case BOOLEAN_TYPE:
|
||||
return Boolean.valueOf (getBooleanValue ()).toString ();
|
||||
case UNORDERED_NODE_SNAPSHOT_TYPE:
|
||||
int len = getSnapshotLength ();
|
||||
switch (len) {
|
||||
case 0:
|
||||
return "[no matches]";
|
||||
case 1:
|
||||
return getSingleNodeValue ().toString ();
|
||||
default:
|
||||
StringBuffer buffer = new StringBuffer ();
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
if (i > 0)
|
||||
{
|
||||
buffer.append (',');
|
||||
}
|
||||
buffer.append (snapshotItem (i));
|
||||
}
|
||||
return buffer.toString ();
|
||||
}
|
||||
default:
|
||||
return getClass ().getName () + "[type=" + type + ",length=" +
|
||||
getSnapshotLength () + ']';
|
||||
}
|
||||
}
|
||||
|
||||
}
|
99
libjava/classpath/gnu/xml/libxmlj/sax/GnomeLocator.java
Normal file
99
libjava/classpath/gnu/xml/libxmlj/sax/GnomeLocator.java
Normal file
|
@ -0,0 +1,99 @@
|
|||
/* GnomeLocator.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.sax;
|
||||
|
||||
import org.xml.sax.Locator;
|
||||
|
||||
/**
|
||||
* SAX Locator implementation that uses libxml2.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class GnomeLocator
|
||||
implements Locator
|
||||
{
|
||||
|
||||
// An xmlParserCtxtPtr
|
||||
private final Object ctx;
|
||||
|
||||
// An xmlSAXLocatorPtr
|
||||
private final Object loc;
|
||||
|
||||
GnomeLocator (Object ctx, Object loc)
|
||||
{
|
||||
this.ctx = ctx;
|
||||
this.loc = loc;
|
||||
if (ctx == null)
|
||||
{
|
||||
throw new NullPointerException ("ctx");
|
||||
}
|
||||
if (loc == null)
|
||||
{
|
||||
throw new NullPointerException ("loc");
|
||||
}
|
||||
}
|
||||
|
||||
public String getPublicId ()
|
||||
{
|
||||
return publicId (ctx, loc);
|
||||
}
|
||||
|
||||
private native String publicId (Object ctx, Object loc);
|
||||
|
||||
public String getSystemId ()
|
||||
{
|
||||
return systemId (ctx, loc);
|
||||
}
|
||||
|
||||
private native String systemId (Object ctx, Object loc);
|
||||
|
||||
public int getLineNumber ()
|
||||
{
|
||||
return lineNumber (ctx, loc);
|
||||
}
|
||||
|
||||
private native int lineNumber (Object ctx, Object loc);
|
||||
|
||||
public int getColumnNumber ()
|
||||
{
|
||||
return columnNumber (ctx, loc);
|
||||
}
|
||||
|
||||
private native int columnNumber (Object ctx, Object loc);
|
||||
|
||||
}
|
105
libjava/classpath/gnu/xml/libxmlj/sax/GnomeSAXParser.java
Normal file
105
libjava/classpath/gnu/xml/libxmlj/sax/GnomeSAXParser.java
Normal file
|
@ -0,0 +1,105 @@
|
|||
/* GnomeSAXParser.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.sax;
|
||||
|
||||
import javax.xml.parsers.SAXParser;
|
||||
|
||||
import org.xml.sax.Parser;
|
||||
import org.xml.sax.SAXException;
|
||||
import org.xml.sax.SAXNotRecognizedException;
|
||||
import org.xml.sax.SAXNotSupportedException;
|
||||
import org.xml.sax.XMLReader;
|
||||
|
||||
/**
|
||||
* JAXP SAX parser implementation that uses libxml2.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class GnomeSAXParser
|
||||
extends SAXParser
|
||||
{
|
||||
|
||||
private boolean namespaceAware;
|
||||
private boolean validating;
|
||||
|
||||
/**
|
||||
* Creates a new SAX parser.
|
||||
*/
|
||||
GnomeSAXParser (boolean namespaceAware, boolean validating)
|
||||
{
|
||||
this.namespaceAware = namespaceAware;
|
||||
this.validating = validating;
|
||||
}
|
||||
|
||||
public Parser getParser ()
|
||||
throws SAXException
|
||||
{
|
||||
throw new SAXNotSupportedException ("SAX version 1 not supported");
|
||||
}
|
||||
|
||||
public XMLReader getXMLReader ()
|
||||
throws SAXException
|
||||
{
|
||||
return new GnomeXMLReader (namespaceAware, validating);
|
||||
}
|
||||
|
||||
public Object getProperty (String name)
|
||||
throws SAXNotRecognizedException, SAXNotSupportedException
|
||||
{
|
||||
GnomeXMLReader.checkPropertyName (name);
|
||||
throw new SAXNotSupportedException (name);
|
||||
}
|
||||
|
||||
public void setProperty (String name, Object value)
|
||||
throws SAXNotRecognizedException, SAXNotSupportedException
|
||||
{
|
||||
GnomeXMLReader.checkPropertyName (name);
|
||||
throw new SAXNotSupportedException (name);
|
||||
}
|
||||
|
||||
public boolean isNamespaceAware ()
|
||||
{
|
||||
return namespaceAware;
|
||||
}
|
||||
|
||||
public boolean isValidating ()
|
||||
{
|
||||
return validating;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,92 @@
|
|||
/* GnomeSAXParserFactory.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.sax;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
|
||||
import javax.xml.parsers.SAXParser;
|
||||
import javax.xml.parsers.SAXParserFactory;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
|
||||
import org.xml.sax.SAXException;
|
||||
import org.xml.sax.SAXNotRecognizedException;
|
||||
import org.xml.sax.SAXNotSupportedException;
|
||||
|
||||
/**
|
||||
* JAXP SAX parser factory implementation that uses libxml2.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
public class GnomeSAXParserFactory
|
||||
extends SAXParserFactory
|
||||
{
|
||||
|
||||
private Map features;
|
||||
|
||||
/**
|
||||
* Creates a new SAX parser factory.
|
||||
*/
|
||||
public GnomeSAXParserFactory ()
|
||||
{
|
||||
features = new HashMap ();
|
||||
}
|
||||
|
||||
public SAXParser newSAXParser ()
|
||||
throws ParserConfigurationException, SAXException
|
||||
{
|
||||
// TODO features
|
||||
return new GnomeSAXParser (isNamespaceAware (), isValidating ());
|
||||
}
|
||||
|
||||
public boolean getFeature (String name)
|
||||
throws ParserConfigurationException, SAXNotRecognizedException, SAXNotSupportedException
|
||||
{
|
||||
GnomeXMLReader.checkFeatureName (name);
|
||||
Boolean val = (Boolean) features.get (name);
|
||||
return (val == null) ? false : val.booleanValue ();
|
||||
}
|
||||
|
||||
public void setFeature (String name, boolean flag)
|
||||
throws ParserConfigurationException, SAXNotRecognizedException, SAXNotSupportedException
|
||||
{
|
||||
GnomeXMLReader.checkFeatureName (name);
|
||||
features.put (name, flag ? Boolean.TRUE : Boolean.FALSE);
|
||||
}
|
||||
|
||||
}
|
1065
libjava/classpath/gnu/xml/libxmlj/sax/GnomeXMLReader.java
Normal file
1065
libjava/classpath/gnu/xml/libxmlj/sax/GnomeXMLReader.java
Normal file
File diff suppressed because it is too large
Load diff
122
libjava/classpath/gnu/xml/libxmlj/sax/Namespaces.java
Normal file
122
libjava/classpath/gnu/xml/libxmlj/sax/Namespaces.java
Normal file
|
@ -0,0 +1,122 @@
|
|||
/* Namespaces.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.sax;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
|
||||
/**
|
||||
* Helper class for managing namespaces.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class Namespaces
|
||||
{
|
||||
|
||||
ArrayList stack = new ArrayList ();
|
||||
|
||||
/**
|
||||
* Increments the tree depth.
|
||||
* This allocates a new potential namespace entry.
|
||||
*/
|
||||
void push ()
|
||||
{
|
||||
stack.add (null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Decrements the tree depth.
|
||||
* This removes namespaces defined at the extremity.
|
||||
*/
|
||||
void pop ()
|
||||
{
|
||||
stack.remove (stack.size() - 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Searches for the namespace URI corresponding to the specified prefix.
|
||||
*/
|
||||
String getURI (String prefix)
|
||||
{
|
||||
for (int i = stack.size () - 1; i >= 0; i--)
|
||||
{
|
||||
HashMap ns = (HashMap) stack.get (i);
|
||||
if (ns != null && ns.containsKey (prefix))
|
||||
{
|
||||
String ret = (String) ns.get (prefix);
|
||||
return (ret == null) ? "" : ret;
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* Defines the specified prefix-URI mapping at the current depth in the
|
||||
* tree.
|
||||
*/
|
||||
void define (String prefix, String uri)
|
||||
{
|
||||
int index = stack.size () - 1;
|
||||
HashMap ns = (HashMap) stack.get (index);
|
||||
if (ns == null)
|
||||
{
|
||||
ns = new HashMap ();
|
||||
stack.set (index, ns);
|
||||
}
|
||||
ns.put (prefix, uri);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an iterator over the prefixes defined at the current depth.
|
||||
*/
|
||||
Iterator currentPrefixes ()
|
||||
{
|
||||
HashMap ns = (HashMap) stack.get (stack.size () - 1);
|
||||
if (ns == null)
|
||||
{
|
||||
return Collections.EMPTY_LIST.iterator ();
|
||||
}
|
||||
else
|
||||
{
|
||||
return ns.keySet ().iterator ();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
171
libjava/classpath/gnu/xml/libxmlj/sax/StringArrayAttributes.java
Normal file
171
libjava/classpath/gnu/xml/libxmlj/sax/StringArrayAttributes.java
Normal file
|
@ -0,0 +1,171 @@
|
|||
/* StringArrayAttributes.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.sax;
|
||||
|
||||
import org.xml.sax.Attributes;
|
||||
|
||||
/**
|
||||
* An implementation of Attributes that reads values from an array of
|
||||
* strings, supplied by libxml2.
|
||||
* Each pair of elements in the array represents a key followed by a value.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class StringArrayAttributes
|
||||
implements Attributes
|
||||
{
|
||||
|
||||
private int len;
|
||||
private XMLName[] keys;
|
||||
private String[] values;
|
||||
|
||||
StringArrayAttributes (GnomeXMLReader parser, String[] pairs)
|
||||
{
|
||||
len = (pairs == null) ? 0 : pairs.length / 2;
|
||||
keys = new XMLName[len];
|
||||
values = new String[len];
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
int pairIndex = i * 2;
|
||||
keys[i] = new XMLName (parser, pairs[pairIndex]);
|
||||
values[i] = pairs[pairIndex + 1];
|
||||
}
|
||||
}
|
||||
|
||||
public int getLength ()
|
||||
{
|
||||
return len;
|
||||
}
|
||||
|
||||
public String getURI (int index)
|
||||
{
|
||||
if (index < 0 || index >= len)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return keys[index].uri;
|
||||
}
|
||||
|
||||
public String getLocalName (int index)
|
||||
{
|
||||
if (index < 0 || index >= len)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return keys[index].localName;
|
||||
}
|
||||
|
||||
public String getQName (int index)
|
||||
{
|
||||
if (index < 0 || index >= len)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return keys[index].qName;
|
||||
}
|
||||
|
||||
public String getType (int index)
|
||||
{
|
||||
if (index < 0 || index >= len)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
// TODO can we get this information from libxml2?
|
||||
return "CDATA";
|
||||
}
|
||||
|
||||
public String getValue (int index)
|
||||
{
|
||||
if (index < 0 || index >= len)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return values[index];
|
||||
}
|
||||
|
||||
public int getIndex (String uri, String localName)
|
||||
{
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
XMLName key = keys[i];
|
||||
if (key.localName.equals (localName))
|
||||
{
|
||||
if ((key.uri == null && uri == null) ||
|
||||
(key.uri != null && key.uri.equals(uri)))
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
public int getIndex (String qName)
|
||||
{
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
if (keys[i].qName.equals (qName))
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
public String getType (String uri, String localName)
|
||||
{
|
||||
return getType (getIndex (uri, localName));
|
||||
}
|
||||
|
||||
public String getType (String qName)
|
||||
{
|
||||
return getType (getIndex (qName));
|
||||
}
|
||||
|
||||
public String getValue (String uri, String localName)
|
||||
{
|
||||
return getValue (getIndex (uri, localName));
|
||||
}
|
||||
|
||||
public String getValue (String qName)
|
||||
{
|
||||
return getValue (getIndex (qName));
|
||||
}
|
||||
|
||||
}
|
||||
|
92
libjava/classpath/gnu/xml/libxmlj/sax/XMLName.java
Normal file
92
libjava/classpath/gnu/xml/libxmlj/sax/XMLName.java
Normal file
|
@ -0,0 +1,92 @@
|
|||
/* XMLName.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.sax;
|
||||
|
||||
/**
|
||||
* Structure containing the components of an XML element/attribute name.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class XMLName
|
||||
{
|
||||
|
||||
private static final String XML_URI = "http://www.w3.org/XML/1998/namespace";
|
||||
|
||||
final String uri;
|
||||
final String localName;
|
||||
final String qName;
|
||||
final String prefix;
|
||||
|
||||
XMLName (GnomeXMLReader parser, String qName)
|
||||
{
|
||||
this.qName = qName;
|
||||
int ci = qName.lastIndexOf (':');
|
||||
if (ci < 1)
|
||||
{
|
||||
localName = qName;
|
||||
prefix = null;
|
||||
uri = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
localName = qName.substring (ci + 1);
|
||||
prefix = qName.substring (0, ci);
|
||||
if ("xml".equals (prefix))
|
||||
{
|
||||
if ("lang".equals (localName) || "space".equals (localName))
|
||||
{
|
||||
uri = XML_URI;
|
||||
}
|
||||
else
|
||||
{
|
||||
uri = parser.getURI (prefix);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
uri = parser.getURI (prefix);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public String toString ()
|
||||
{
|
||||
return qName;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,111 @@
|
|||
/* ErrorListenerErrorHandler.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.transform;
|
||||
|
||||
import javax.xml.transform.ErrorListener;
|
||||
import javax.xml.transform.TransformerException;
|
||||
import org.xml.sax.ErrorHandler;
|
||||
import org.xml.sax.SAXException;
|
||||
import org.xml.sax.SAXParseException;
|
||||
|
||||
/**
|
||||
* Provides a SAX ErrorHandler interface to an ErrorListener.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class ErrorListenerErrorHandler
|
||||
implements ErrorHandler
|
||||
{
|
||||
|
||||
private ErrorListener listener;
|
||||
|
||||
ErrorListenerErrorHandler (ErrorListener listener)
|
||||
{
|
||||
this.listener = listener;
|
||||
}
|
||||
|
||||
public void warning (SAXParseException e)
|
||||
throws SAXException
|
||||
{
|
||||
try
|
||||
{
|
||||
listener.warning (new TransformerException (e));
|
||||
}
|
||||
catch (TransformerException te)
|
||||
{
|
||||
throw getSAXException (te);
|
||||
}
|
||||
}
|
||||
|
||||
public void error (SAXParseException e)
|
||||
throws SAXException
|
||||
{
|
||||
try
|
||||
{
|
||||
listener.error (new TransformerException (e));
|
||||
}
|
||||
catch (TransformerException te)
|
||||
{
|
||||
throw getSAXException (te);
|
||||
}
|
||||
}
|
||||
|
||||
public void fatalError (SAXParseException e)
|
||||
throws SAXException
|
||||
{
|
||||
try
|
||||
{
|
||||
listener.fatalError (new TransformerException (e));
|
||||
}
|
||||
catch (TransformerException te)
|
||||
{
|
||||
throw getSAXException (te);
|
||||
}
|
||||
}
|
||||
|
||||
private SAXException getSAXException (TransformerException e)
|
||||
{
|
||||
Throwable cause = e.getCause ();
|
||||
if (cause instanceof SAXException)
|
||||
{
|
||||
return (SAXException) cause;
|
||||
}
|
||||
return new SAXException (e);
|
||||
}
|
||||
|
||||
}
|
572
libjava/classpath/gnu/xml/libxmlj/transform/GnomeTransformer.java
Executable file
572
libjava/classpath/gnu/xml/libxmlj/transform/GnomeTransformer.java
Executable file
|
@ -0,0 +1,572 @@
|
|||
/* GnomeTransformer.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.transform;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
|
||||
import java.net.URL;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
|
||||
import javax.xml.transform.ErrorListener;
|
||||
import javax.xml.transform.Source;
|
||||
import javax.xml.transform.SourceLocator;
|
||||
import javax.xml.transform.Result;
|
||||
import javax.xml.transform.Templates;
|
||||
import javax.xml.transform.Transformer;
|
||||
import javax.xml.transform.TransformerConfigurationException;
|
||||
import javax.xml.transform.TransformerException;
|
||||
import javax.xml.transform.URIResolver;
|
||||
|
||||
import javax.xml.transform.dom.DOMSource;
|
||||
import javax.xml.transform.dom.DOMResult;
|
||||
import javax.xml.transform.sax.SAXResult;
|
||||
import javax.xml.transform.stream.StreamSource;
|
||||
import javax.xml.transform.stream.StreamResult;
|
||||
|
||||
import org.w3c.dom.Node;
|
||||
|
||||
import org.xml.sax.EntityResolver;
|
||||
import org.xml.sax.ErrorHandler;
|
||||
|
||||
import gnu.xml.libxmlj.dom.GnomeDocument;
|
||||
import gnu.xml.libxmlj.sax.GnomeXMLReader;
|
||||
import gnu.xml.libxmlj.util.NamedInputStream;
|
||||
import gnu.xml.libxmlj.util.StandaloneLocator;
|
||||
import gnu.xml.libxmlj.util.XMLJ;
|
||||
|
||||
/**
|
||||
* An implementation of {@link javax.xml.transform.Transformer} which
|
||||
* performs XSLT transformation using <code>libxslt</code>.
|
||||
*
|
||||
* @author Julian Scheid
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
public class GnomeTransformer
|
||||
extends Transformer
|
||||
implements Templates
|
||||
{
|
||||
|
||||
/**
|
||||
* The parameters added by the user via {@link setParameter()}.
|
||||
*/
|
||||
private Map parameters;
|
||||
|
||||
/**
|
||||
* The output properties set by the user.
|
||||
*/
|
||||
private Properties outputProperties;
|
||||
|
||||
/**
|
||||
* The URI resolver to use during transformation.
|
||||
*/
|
||||
private URIResolver resolver;
|
||||
|
||||
/**
|
||||
* The error listener for transformation errors.
|
||||
*/
|
||||
private ErrorListener errorListener;
|
||||
|
||||
/**
|
||||
* Handle to the source stylesheet.
|
||||
* This is a native pointer of type xsltStylesheetPtr.
|
||||
*/
|
||||
private Object stylesheet;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
* @param source the XSLT stylesheet document source
|
||||
* @param resolver the resolver to use during transformation
|
||||
* @param errorListener the error listener for transformation errors
|
||||
*/
|
||||
GnomeTransformer (Source source,
|
||||
URIResolver resolver,
|
||||
ErrorListener errorListener)
|
||||
throws TransformerConfigurationException
|
||||
{
|
||||
this.resolver = resolver;
|
||||
this.errorListener = errorListener;
|
||||
parameters = new HashMap ();
|
||||
outputProperties = new Properties ();
|
||||
|
||||
if (source == null)
|
||||
{
|
||||
stylesheet = newStylesheet ();
|
||||
}
|
||||
else if (source instanceof StreamSource)
|
||||
{
|
||||
try
|
||||
{
|
||||
StreamSource ss = (StreamSource) source;
|
||||
NamedInputStream in = XMLJ.getInputStream (ss);
|
||||
String systemId = ss.getSystemId ();
|
||||
String publicId = ss.getPublicId ();
|
||||
String base = XMLJ.getBaseURI (systemId);
|
||||
byte[] detectBuffer = in.getDetectBuffer ();
|
||||
if (detectBuffer == null)
|
||||
{
|
||||
String msg = "No document element";
|
||||
throw new TransformerConfigurationException (msg);
|
||||
}
|
||||
stylesheet = newStylesheetFromStream (in, detectBuffer, publicId,
|
||||
systemId, base,
|
||||
(resolver != null),
|
||||
(errorListener != null));
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
throw new TransformerConfigurationException (e);
|
||||
}
|
||||
}
|
||||
else if (source instanceof DOMSource)
|
||||
{
|
||||
DOMSource ds = (DOMSource) source;
|
||||
Node node = ds.getNode ();
|
||||
if (!(node instanceof GnomeDocument))
|
||||
{
|
||||
String msg = "Node is not a GnomeDocument";
|
||||
throw new TransformerConfigurationException (msg);
|
||||
}
|
||||
GnomeDocument doc = (GnomeDocument) node;
|
||||
stylesheet = newStylesheetFromDoc (doc);
|
||||
}
|
||||
else
|
||||
{
|
||||
String msg = "Source type not supported (" + source + ")";
|
||||
throw new TransformerConfigurationException (msg);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy constructor.
|
||||
*/
|
||||
private GnomeTransformer (Object stylesheet,
|
||||
URIResolver resolver,
|
||||
ErrorListener errorListener,
|
||||
Map parameters,
|
||||
Properties outputProperties)
|
||||
{
|
||||
this.stylesheet = stylesheet;
|
||||
this.resolver = resolver;
|
||||
this.errorListener = errorListener;
|
||||
this.parameters = parameters;
|
||||
this.outputProperties = outputProperties;
|
||||
}
|
||||
|
||||
private native Object newStylesheet ()
|
||||
throws TransformerConfigurationException;
|
||||
|
||||
private native Object newStylesheetFromStream (InputStream in,
|
||||
byte[] detectBuffer,
|
||||
String publicId,
|
||||
String systemId,
|
||||
String base,
|
||||
boolean entityResolver,
|
||||
boolean errorHandler)
|
||||
throws TransformerConfigurationException;
|
||||
|
||||
private native Object newStylesheetFromDoc (GnomeDocument doc)
|
||||
throws TransformerConfigurationException;
|
||||
|
||||
//--- Implementation of javax.xml.transform.Transformer follows.
|
||||
|
||||
// Set, get and clear the parameters to use on transformation
|
||||
|
||||
public synchronized void setParameter (String parameter, Object value)
|
||||
{
|
||||
parameters.put (parameter, value);
|
||||
}
|
||||
|
||||
public synchronized Object getParameter (String name)
|
||||
{
|
||||
return parameters.get (name);
|
||||
}
|
||||
|
||||
public synchronized void clearParameters ()
|
||||
{
|
||||
parameters.clear ();
|
||||
}
|
||||
|
||||
// Set and get the ErrorListener to use on transformation
|
||||
|
||||
public void setErrorListener (ErrorListener listener)
|
||||
{
|
||||
this.errorListener = listener;
|
||||
}
|
||||
|
||||
public ErrorListener getErrorListener ()
|
||||
{
|
||||
return errorListener;
|
||||
}
|
||||
|
||||
// Set and get the URIResolver to use on transformation
|
||||
|
||||
public void setURIResolver (URIResolver resolver)
|
||||
{
|
||||
this.resolver = resolver;
|
||||
}
|
||||
|
||||
public URIResolver getURIResolver ()
|
||||
{
|
||||
return resolver;
|
||||
}
|
||||
|
||||
// Set the output properties to use on transformation; get default
|
||||
// output properties and output properties specified in the
|
||||
// stylesheet or by the user.
|
||||
|
||||
public void setOutputProperties (Properties outputProperties)
|
||||
{
|
||||
// Note: defensive copying
|
||||
this.outputProperties = new Properties (outputProperties);
|
||||
}
|
||||
|
||||
public void setOutputProperty (String name, String value)
|
||||
{
|
||||
outputProperties.setProperty (name, value);
|
||||
}
|
||||
|
||||
public Properties getOutputProperties ()
|
||||
{
|
||||
// Note: defensive copying
|
||||
return new Properties (this.outputProperties);
|
||||
}
|
||||
|
||||
public String getOutputProperty (String name)
|
||||
{
|
||||
return outputProperties.getProperty (name);
|
||||
}
|
||||
|
||||
// -- Templates --
|
||||
|
||||
public Transformer newTransformer ()
|
||||
{
|
||||
return new GnomeTransformer (stylesheet, resolver, errorListener,
|
||||
new HashMap (parameters),
|
||||
new Properties (outputProperties));
|
||||
}
|
||||
|
||||
// -- transform --
|
||||
|
||||
/**
|
||||
* Transforms the given source and writes the result to the
|
||||
* given target.
|
||||
*/
|
||||
public void transform (Source source, Result result)
|
||||
throws TransformerException
|
||||
{
|
||||
if (source instanceof StreamSource)
|
||||
{
|
||||
try
|
||||
{
|
||||
StreamSource ss = (StreamSource) source;
|
||||
NamedInputStream in = XMLJ.getInputStream (ss);
|
||||
String publicId = ss.getPublicId ();
|
||||
String systemId = ss.getSystemId ();
|
||||
String base = XMLJ.getBaseURI (systemId);
|
||||
byte[] detectBuffer = in.getDetectBuffer ();
|
||||
if (detectBuffer == null)
|
||||
{
|
||||
throw new TransformerException ("No document element");
|
||||
}
|
||||
if (result instanceof StreamResult)
|
||||
{
|
||||
OutputStream out = XMLJ.getOutputStream ((StreamResult) result);
|
||||
transformStreamToStream (in, detectBuffer, publicId, systemId,
|
||||
base, (resolver != null),
|
||||
(errorListener != null), out);
|
||||
}
|
||||
else if (result instanceof DOMResult)
|
||||
{
|
||||
DOMResult dr = (DOMResult) result;
|
||||
GnomeDocument ret =
|
||||
transformStreamToDoc (in, detectBuffer, publicId, systemId,
|
||||
base, (resolver != null),
|
||||
(errorListener != null));
|
||||
dr.setNode (ret);
|
||||
dr.setSystemId (null);
|
||||
}
|
||||
else if (result instanceof SAXResult)
|
||||
{
|
||||
SAXResult sr = (SAXResult) result;
|
||||
transformStreamToSAX (in, detectBuffer, publicId, systemId,
|
||||
base, (resolver != null),
|
||||
(errorListener != null),
|
||||
getSAXContext (sr));
|
||||
}
|
||||
else
|
||||
{
|
||||
String msg = "Result type not supported (" + result + ")";
|
||||
throw new TransformerConfigurationException (msg);
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
throw new TransformerException (e);
|
||||
}
|
||||
}
|
||||
else if (source instanceof DOMSource)
|
||||
{
|
||||
DOMSource ds = (DOMSource) source;
|
||||
Node node = ds.getNode ();
|
||||
if (!(node instanceof GnomeDocument))
|
||||
{
|
||||
String msg = "Node is not a GnomeDocument (" + node + ")";
|
||||
throw new TransformerException (msg);
|
||||
}
|
||||
GnomeDocument doc = (GnomeDocument) node;
|
||||
if (result instanceof StreamResult)
|
||||
{
|
||||
try
|
||||
{
|
||||
OutputStream out = XMLJ.getOutputStream ((StreamResult) result);
|
||||
transformDocToStream (doc, out);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
throw new TransformerException (e);
|
||||
}
|
||||
}
|
||||
else if (result instanceof DOMResult)
|
||||
{
|
||||
DOMResult dr = (DOMResult) result;
|
||||
GnomeDocument ret = transformDocToDoc (doc);
|
||||
dr.setNode (ret);
|
||||
dr.setSystemId (null);
|
||||
}
|
||||
else if (result instanceof SAXResult)
|
||||
{
|
||||
SAXResult sr = (SAXResult) result;
|
||||
transformDocToSAX (doc, getSAXContext (sr));
|
||||
}
|
||||
else
|
||||
{
|
||||
String msg = "Result type not supported";
|
||||
throw new TransformerConfigurationException (msg);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
String msg = "Source type not supported";
|
||||
throw new TransformerConfigurationException (msg);
|
||||
}
|
||||
}
|
||||
|
||||
private GnomeXMLReader getSAXContext (SAXResult result)
|
||||
{
|
||||
GnomeXMLReader ctx = new GnomeXMLReader ();
|
||||
ctx.setContentHandler (result.getHandler ());
|
||||
ctx.setLexicalHandler (result.getLexicalHandler ());
|
||||
if (errorListener != null)
|
||||
{
|
||||
ErrorHandler errorHandler =
|
||||
new ErrorListenerErrorHandler (errorListener);
|
||||
ctx.setErrorHandler (errorHandler);
|
||||
}
|
||||
if (resolver != null)
|
||||
{
|
||||
EntityResolver entityResolver =
|
||||
new URIResolverEntityResolver (resolver);
|
||||
ctx.setEntityResolver (entityResolver);
|
||||
}
|
||||
return ctx;
|
||||
}
|
||||
|
||||
private native void transformStreamToStream (InputStream in,
|
||||
byte[] detectBuffer,
|
||||
String publicId,
|
||||
String systemId,
|
||||
String base,
|
||||
boolean entityResolver,
|
||||
boolean errorHandler,
|
||||
OutputStream out)
|
||||
throws TransformerException;
|
||||
|
||||
private native GnomeDocument transformStreamToDoc (InputStream in,
|
||||
byte[] detectBuffer,
|
||||
String publicId,
|
||||
String systemId,
|
||||
String base,
|
||||
boolean entityResolver,
|
||||
boolean errorHandler)
|
||||
throws TransformerException;
|
||||
|
||||
private native void transformStreamToSAX (InputStream in,
|
||||
byte[] detectBuffer,
|
||||
String publicId,
|
||||
String systemId,
|
||||
String base,
|
||||
boolean entityResolver,
|
||||
boolean errorHandler,
|
||||
GnomeXMLReader out)
|
||||
throws TransformerException;
|
||||
|
||||
private native void transformDocToStream (GnomeDocument in,
|
||||
OutputStream out)
|
||||
throws TransformerException;
|
||||
|
||||
private native GnomeDocument transformDocToDoc (GnomeDocument in)
|
||||
throws TransformerException;
|
||||
|
||||
private native void transformDocToSAX (GnomeDocument in,
|
||||
GnomeXMLReader out)
|
||||
throws TransformerException;
|
||||
|
||||
/*
|
||||
* Retrieve parameters as a string array.
|
||||
* This is a convenience method called from native code.
|
||||
*/
|
||||
private String[] getParameterArray ()
|
||||
{
|
||||
String[] parameterArray = new String[parameters.size () * 2];
|
||||
int index = 0;
|
||||
for (Iterator it = parameters.keySet ().iterator ();
|
||||
it.hasNext ();
|
||||
++index)
|
||||
{
|
||||
String parameterKey = (String) it.next ();
|
||||
String parameterValue = (String) parameters.get (parameterKey);
|
||||
parameterArray[index * 2 + 0] = parameterKey;
|
||||
parameterArray[index * 2 + 1] =
|
||||
"'" + ((parameterValue != null) ? parameterValue : "") + "'";
|
||||
// FIXME encode parameter value correctly for XPath
|
||||
}
|
||||
return parameterArray;
|
||||
}
|
||||
|
||||
// -- Free xsltStylesheet handle --
|
||||
|
||||
public void finalize ()
|
||||
{
|
||||
if (stylesheet != null)
|
||||
{
|
||||
free ();
|
||||
stylesheet = null;
|
||||
}
|
||||
}
|
||||
|
||||
private native void free ();
|
||||
|
||||
// -- Callbacks --
|
||||
|
||||
private InputStream resolveEntity (String publicId, String systemId)
|
||||
throws TransformerException
|
||||
{
|
||||
if (resolver != null)
|
||||
{
|
||||
systemId = resolver.resolve (null, systemId).getSystemId ();
|
||||
}
|
||||
if (systemId == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
try
|
||||
{
|
||||
URL url = new URL (systemId);
|
||||
return XMLJ.getInputStream (url);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
throw new TransformerException (e);
|
||||
}
|
||||
}
|
||||
|
||||
private void setDocumentLocator (Object ctx, Object loc)
|
||||
{
|
||||
}
|
||||
|
||||
private void warning (String message,
|
||||
int lineNumber,
|
||||
int columnNumber,
|
||||
String publicId,
|
||||
String systemId)
|
||||
throws TransformerException
|
||||
{
|
||||
if (errorListener == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
SourceLocator l = new StandaloneLocator (lineNumber,
|
||||
columnNumber,
|
||||
publicId,
|
||||
systemId);
|
||||
errorListener.warning (new TransformerException (message, l));
|
||||
}
|
||||
|
||||
private void error (String message,
|
||||
int lineNumber,
|
||||
int columnNumber,
|
||||
String publicId,
|
||||
String systemId)
|
||||
throws TransformerException
|
||||
{
|
||||
if (errorListener == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
SourceLocator l = new StandaloneLocator (lineNumber,
|
||||
columnNumber,
|
||||
publicId,
|
||||
systemId);
|
||||
errorListener.error (new TransformerException (message, l));
|
||||
}
|
||||
|
||||
private void fatalError (String message,
|
||||
int lineNumber,
|
||||
int columnNumber,
|
||||
String publicId,
|
||||
String systemId)
|
||||
throws TransformerException
|
||||
{
|
||||
if (errorListener == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
SourceLocator l = new StandaloneLocator (lineNumber,
|
||||
columnNumber,
|
||||
publicId,
|
||||
systemId);
|
||||
errorListener.fatalError (new TransformerException (message, l));
|
||||
}
|
||||
|
||||
}
|
349
libjava/classpath/gnu/xml/libxmlj/transform/GnomeTransformerFactory.java
Executable file
349
libjava/classpath/gnu/xml/libxmlj/transform/GnomeTransformerFactory.java
Executable file
|
@ -0,0 +1,349 @@
|
|||
/* GnomeTransformerFactory.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.transform;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.xml.parsers.FactoryConfigurationError;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
import javax.xml.parsers.SAXParser;
|
||||
import javax.xml.parsers.SAXParserFactory;
|
||||
|
||||
import javax.xml.transform.ErrorListener;
|
||||
import javax.xml.transform.Source;
|
||||
import javax.xml.transform.Templates;
|
||||
import javax.xml.transform.Transformer;
|
||||
import javax.xml.transform.TransformerFactory;
|
||||
import javax.xml.transform.TransformerConfigurationException;
|
||||
import javax.xml.transform.URIResolver;
|
||||
|
||||
import javax.xml.transform.dom.DOMResult;
|
||||
import javax.xml.transform.dom.DOMSource;
|
||||
import javax.xml.transform.sax.SAXSource;
|
||||
import javax.xml.transform.stream.StreamResult;
|
||||
import javax.xml.transform.stream.StreamSource;
|
||||
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Node;
|
||||
import org.xml.sax.InputSource;
|
||||
import org.xml.sax.SAXException;
|
||||
import org.xml.sax.XMLReader;
|
||||
import org.xml.sax.helpers.DefaultHandler;
|
||||
|
||||
import gnu.xml.libxmlj.util.XMLJ;
|
||||
|
||||
/**
|
||||
* An implementation of <code>TransformerFactory</code> producing
|
||||
* <code>Transformer</code> objects which use <code>libxslt</code>
|
||||
* for transformation.
|
||||
*
|
||||
* @author Julian Scheid
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
public class GnomeTransformerFactory
|
||||
extends TransformerFactory
|
||||
{
|
||||
|
||||
static
|
||||
{
|
||||
XMLJ.init ();
|
||||
}
|
||||
|
||||
/**
|
||||
* URIResolver set by user, or default implementation.
|
||||
*/
|
||||
private URIResolver uriResolver;
|
||||
|
||||
/**
|
||||
* ErrorListener set by user, or default implementation.
|
||||
*/
|
||||
private ErrorListener errorListener;
|
||||
|
||||
/**
|
||||
* Attributes set by user.
|
||||
*/
|
||||
private Map attributes = new HashMap ();
|
||||
|
||||
//--- Implementation of javax.xml.transform.TransformerFactory
|
||||
//--- follows.
|
||||
|
||||
// -- begin getAssociatedStylesheet implementation --
|
||||
|
||||
/**
|
||||
* Returns the stylesheet associated with the specified XML source, or
|
||||
* <code>null</code> if no associated stylesheet could be found.
|
||||
*/
|
||||
public Source getAssociatedStylesheet(Source source, String media,
|
||||
String title, String charset)
|
||||
throws TransformerConfigurationException
|
||||
{
|
||||
String href= null;
|
||||
String base = source.getSystemId();
|
||||
if (source instanceof DOMSource)
|
||||
{
|
||||
Node node = ((DOMSource) source).getNode();
|
||||
Document doc = (node.getNodeType() == Node.DOCUMENT_NODE) ?
|
||||
(Document) node : node.getOwnerDocument();
|
||||
if (base == null)
|
||||
{
|
||||
base = doc.getDocumentURI();
|
||||
}
|
||||
for (node = doc.getFirstChild(); node != null;
|
||||
node = node.getNextSibling())
|
||||
{
|
||||
if (node.getNodeType() == Node.PROCESSING_INSTRUCTION_NODE &&
|
||||
"xml-stylesheet".equals(node.getNodeName()))
|
||||
{
|
||||
String data = node.getNodeValue();
|
||||
if (media != null &&
|
||||
!media.equals(parseParameter(data, "type")))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (title != null &&
|
||||
!title.equals(parseParameter(data, "title")))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
href = parseParameter(data, "href");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
InputSource input;
|
||||
XMLReader parser = null;
|
||||
try
|
||||
{
|
||||
if (source instanceof SAXSource)
|
||||
{
|
||||
SAXSource sax = (SAXSource) source;
|
||||
input = sax.getInputSource();
|
||||
parser = sax.getXMLReader();
|
||||
}
|
||||
else
|
||||
{
|
||||
StreamSource stream = (StreamSource) source;
|
||||
InputStream in = stream.getInputStream();
|
||||
input = new InputSource(in);
|
||||
}
|
||||
input.setSystemId(base);
|
||||
if (parser == null)
|
||||
{
|
||||
parser = createXMLReader();
|
||||
}
|
||||
AssociatedStylesheetHandler ash =
|
||||
new AssociatedStylesheetHandler();
|
||||
ash.media = media;
|
||||
ash.title = title;
|
||||
parser.setContentHandler(ash);
|
||||
parser.parse(input);
|
||||
href = ash.href;
|
||||
}
|
||||
catch (SAXException e)
|
||||
{
|
||||
throw new TransformerConfigurationException(e);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
throw new TransformerConfigurationException(e);
|
||||
}
|
||||
}
|
||||
if (href == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
if (base != null)
|
||||
{
|
||||
base = XMLJ.getBaseURI(base);
|
||||
}
|
||||
href = XMLJ.getAbsoluteURI(base, href);
|
||||
return new StreamSource(href);
|
||||
}
|
||||
|
||||
private XMLReader createXMLReader()
|
||||
throws TransformerConfigurationException
|
||||
{
|
||||
try
|
||||
{
|
||||
SAXParserFactory factory = SAXParserFactory.newInstance();
|
||||
SAXParser parser = factory.newSAXParser();
|
||||
return parser.getXMLReader();
|
||||
}
|
||||
catch (FactoryConfigurationError e)
|
||||
{
|
||||
throw new TransformerConfigurationException(e);
|
||||
}
|
||||
catch (ParserConfigurationException e)
|
||||
{
|
||||
throw new TransformerConfigurationException(e);
|
||||
}
|
||||
catch (SAXException e)
|
||||
{
|
||||
throw new TransformerConfigurationException(e);
|
||||
}
|
||||
}
|
||||
|
||||
class AssociatedStylesheetHandler
|
||||
extends DefaultHandler
|
||||
{
|
||||
|
||||
String media;
|
||||
String title;
|
||||
String href;
|
||||
|
||||
public void processingInstruction(String target, String data)
|
||||
throws SAXException
|
||||
{
|
||||
if ("xml-stylesheet".equals(target))
|
||||
{
|
||||
if (media != null && !media.equals(parseParameter(data, "type")))
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (title != null && !title.equals(parseParameter(data, "title")))
|
||||
{
|
||||
return;
|
||||
}
|
||||
href = parseParameter(data, "href");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
String parseParameter(String data, String name)
|
||||
{
|
||||
int start = data.indexOf(name + "=");
|
||||
if (start != -1)
|
||||
{
|
||||
start += name.length() + 2;
|
||||
char delim = data.charAt(start - 1);
|
||||
int end = data.indexOf(delim, start);
|
||||
if (end != -1)
|
||||
{
|
||||
return data.substring(start, end);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// -- end getAssociatedStylesheet implementation --
|
||||
|
||||
public synchronized void setAttribute (String name, Object value)
|
||||
{
|
||||
this.attributes.put (name, value);
|
||||
}
|
||||
|
||||
public synchronized Object getAttribute (String name)
|
||||
{
|
||||
return attributes.get (name);
|
||||
}
|
||||
|
||||
public void setErrorListener (ErrorListener errorListener)
|
||||
{
|
||||
this.errorListener = errorListener;
|
||||
}
|
||||
|
||||
public ErrorListener getErrorListener ()
|
||||
{
|
||||
return errorListener;
|
||||
}
|
||||
|
||||
public void setURIResolver (URIResolver uriResolver)
|
||||
{
|
||||
this.uriResolver = uriResolver;
|
||||
}
|
||||
|
||||
public URIResolver getURIResolver ()
|
||||
{
|
||||
return uriResolver;
|
||||
}
|
||||
|
||||
public boolean getFeature (String name)
|
||||
{
|
||||
return (StreamSource.FEATURE.equals (name) ||
|
||||
StreamResult.FEATURE.equals (name) ||
|
||||
DOMSource.FEATURE.equals (name) ||
|
||||
DOMResult.FEATURE.equals (name));
|
||||
}
|
||||
|
||||
public void setFeature(String name, boolean value)
|
||||
throws TransformerConfigurationException
|
||||
{
|
||||
throw new TransformerConfigurationException(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new instance of class {@link Transformer} for a
|
||||
* null souce.
|
||||
*/
|
||||
public Transformer newTransformer ()
|
||||
throws TransformerConfigurationException
|
||||
{
|
||||
return newTransformer (null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new instance of class {@link Transformer} for
|
||||
* the given souce.
|
||||
*/
|
||||
public Transformer newTransformer (Source source)
|
||||
throws TransformerConfigurationException
|
||||
{
|
||||
return new GnomeTransformer (source, uriResolver, errorListener);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new instance of class {@link Templates} for
|
||||
* the given souce.
|
||||
*/
|
||||
public Templates newTemplates (Source source)
|
||||
throws TransformerConfigurationException
|
||||
{
|
||||
return new GnomeTransformer (source, uriResolver, errorListener);
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform native cleanup.
|
||||
*/
|
||||
public static native void freeLibxsltGlobal ();
|
||||
|
||||
}
|
|
@ -0,0 +1,87 @@
|
|||
/* URIResolverEntityResolver.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.transform;
|
||||
|
||||
import java.io.IOException;
|
||||
import javax.xml.transform.URIResolver;
|
||||
import javax.xml.transform.TransformerException;
|
||||
import javax.xml.transform.sax.SAXSource;
|
||||
import org.xml.sax.EntityResolver;
|
||||
import org.xml.sax.InputSource;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
/**
|
||||
* Provides an EntityResolver interface to a URIResolver.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class URIResolverEntityResolver
|
||||
implements EntityResolver
|
||||
{
|
||||
|
||||
private URIResolver resolver;
|
||||
|
||||
URIResolverEntityResolver (URIResolver resolver)
|
||||
{
|
||||
this.resolver = resolver;
|
||||
}
|
||||
|
||||
public InputSource resolveEntity (String publicId, String systemId)
|
||||
throws SAXException, IOException
|
||||
{
|
||||
try
|
||||
{
|
||||
return SAXSource.sourceToInputSource (resolver.resolve (systemId,
|
||||
null));
|
||||
}
|
||||
catch (TransformerException e)
|
||||
{
|
||||
Throwable cause = e.getCause ();
|
||||
if (cause instanceof SAXException)
|
||||
{
|
||||
throw (SAXException) cause;
|
||||
}
|
||||
else if (cause instanceof IOException)
|
||||
{
|
||||
throw (IOException) cause;
|
||||
}
|
||||
throw new SAXException (e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
14
libjava/classpath/gnu/xml/libxmlj/transform/package.html
Executable file
14
libjava/classpath/gnu/xml/libxmlj/transform/package.html
Executable file
|
@ -0,0 +1,14 @@
|
|||
<body>
|
||||
<p>
|
||||
A JAXP-compliant wrapper for the XSLT C library for Gnome, also
|
||||
known as libxslt. Allows to use libxslt via the Java API for XML
|
||||
processing.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<b>Usage:</b>
|
||||
<li>Set the system property <code>javax.xml.transform.TransformerFactory</code>
|
||||
to <code>gnu.xml.libxmlj.GnomeTransformerFactory</code>.</li>
|
||||
</ul>
|
||||
</p>
|
||||
</body>
|
62
libjava/classpath/gnu/xml/libxmlj/util/EmptyNodeList.java
Normal file
62
libjava/classpath/gnu/xml/libxmlj/util/EmptyNodeList.java
Normal file
|
@ -0,0 +1,62 @@
|
|||
/* EmptyNodeList.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.util;
|
||||
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
|
||||
/**
|
||||
* An empty node list.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class EmptyNodeList
|
||||
implements NodeList
|
||||
{
|
||||
|
||||
public Node item (int index)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public int getLength ()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
99
libjava/classpath/gnu/xml/libxmlj/util/NamedInputStream.java
Normal file
99
libjava/classpath/gnu/xml/libxmlj/util/NamedInputStream.java
Normal file
|
@ -0,0 +1,99 @@
|
|||
/* NamedInputStream.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.util;
|
||||
|
||||
import java.io.FilterInputStream;
|
||||
import java.io.InputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.PushbackInputStream;
|
||||
|
||||
/**
|
||||
* An input stream associated with an XML system ID.
|
||||
* It can report the system ID and the first few bytes of the stream
|
||||
* in order to detect the character encoding of the stream.
|
||||
*
|
||||
* @author <a href='dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
public class NamedInputStream
|
||||
extends FilterInputStream
|
||||
{
|
||||
|
||||
private static int DETECT_BUFFER_SIZE = 50;
|
||||
|
||||
private String name;
|
||||
|
||||
NamedInputStream (String name, InputStream in, int size)
|
||||
{
|
||||
super (new PushbackInputStream (in, size));
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the stream (the XML system ID).
|
||||
*/
|
||||
public String getName ()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the first few bytes of the stream for character encoding
|
||||
* purposes. The entire stream can thereafter be read normally from the
|
||||
* beginning. This method is only valid if no bytes have yet been read
|
||||
* from the stream.
|
||||
*/
|
||||
public byte[] getDetectBuffer ()
|
||||
throws IOException
|
||||
{
|
||||
PushbackInputStream p = (PushbackInputStream) in;
|
||||
byte[] buffer = new byte[DETECT_BUFFER_SIZE];
|
||||
int len = p.read (buffer);
|
||||
if (len < 0)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
p.unread (buffer, 0, len);
|
||||
byte[] ret = new byte[len];
|
||||
System.arraycopy (buffer, 0, ret, 0, len);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,294 @@
|
|||
/* StandaloneDocumentType.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.util;
|
||||
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.DocumentType;
|
||||
import org.w3c.dom.DOMException;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.w3c.dom.UserDataHandler;
|
||||
|
||||
/**
|
||||
* A "standalone" document type, i.e. one that isn't attached to a document
|
||||
* node.
|
||||
* This can be used to create new documents.
|
||||
*/
|
||||
public final class StandaloneDocumentType
|
||||
implements DocumentType
|
||||
{
|
||||
|
||||
private final String name;
|
||||
private final String publicId;
|
||||
private final String systemId;
|
||||
|
||||
public StandaloneDocumentType (String name, String publicId, String systemId)
|
||||
{
|
||||
this.name = name;
|
||||
this.publicId = publicId;
|
||||
this.systemId = systemId;
|
||||
}
|
||||
|
||||
public String getName ()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
public NamedNodeMap getEntities ()
|
||||
{
|
||||
// TODO
|
||||
return null;
|
||||
}
|
||||
|
||||
public NamedNodeMap getNotations ()
|
||||
{
|
||||
// TODO
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getPublicId ()
|
||||
{
|
||||
return publicId;
|
||||
}
|
||||
|
||||
public String getSystemId ()
|
||||
{
|
||||
return systemId;
|
||||
}
|
||||
|
||||
public String getInternalSubset ()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
// -- Node --
|
||||
|
||||
public String getNodeName ()
|
||||
{
|
||||
return getName ();
|
||||
}
|
||||
|
||||
public String getNodeValue ()
|
||||
throws DOMException
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public void setNodeValue (String nodeValue)
|
||||
throws DOMException
|
||||
{
|
||||
}
|
||||
|
||||
public short getNodeType ()
|
||||
{
|
||||
return DOCUMENT_TYPE_NODE;
|
||||
}
|
||||
|
||||
public Node getParentNode ()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public NodeList getChildNodes ()
|
||||
{
|
||||
return new EmptyNodeList ();
|
||||
}
|
||||
|
||||
public Node getFirstChild ()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public Node getLastChild ()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public Node getPreviousSibling ()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public Node getNextSibling ()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public NamedNodeMap getAttributes ()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public Document getOwnerDocument ()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public Node insertBefore (Node newChild, Node refChild)
|
||||
throws DOMException
|
||||
{
|
||||
throw new DOMException (DOMException.NO_MODIFICATION_ALLOWED_ERR, null);
|
||||
}
|
||||
|
||||
public Node replaceChild (Node newChild, Node oldChild)
|
||||
throws DOMException
|
||||
{
|
||||
throw new DOMException (DOMException.NO_MODIFICATION_ALLOWED_ERR, null);
|
||||
}
|
||||
|
||||
public Node removeChild (Node oldChild)
|
||||
throws DOMException
|
||||
{
|
||||
throw new DOMException (DOMException.NO_MODIFICATION_ALLOWED_ERR, null);
|
||||
}
|
||||
|
||||
public Node appendChild (Node oldChild)
|
||||
throws DOMException
|
||||
{
|
||||
throw new DOMException (DOMException.NO_MODIFICATION_ALLOWED_ERR, null);
|
||||
}
|
||||
|
||||
public boolean hasChildNodes ()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public Node cloneNode (boolean deep)
|
||||
{
|
||||
return new StandaloneDocumentType (name, publicId, systemId);
|
||||
}
|
||||
|
||||
public void normalize ()
|
||||
{
|
||||
}
|
||||
|
||||
public boolean isSupported (String feature, String version)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public String getNamespaceURI ()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getPrefix ()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public void setPrefix (String prefix)
|
||||
{
|
||||
throw new DOMException (DOMException.NO_MODIFICATION_ALLOWED_ERR, null);
|
||||
}
|
||||
|
||||
public String getLocalName ()
|
||||
{
|
||||
return getName ();
|
||||
}
|
||||
|
||||
public boolean hasAttributes ()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// DOM Level 3
|
||||
|
||||
public String getBaseURI ()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public short compareDocumentPosition (Node node)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
public String getTextContent ()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public void setTextContent (String content)
|
||||
{
|
||||
throw new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, null);
|
||||
}
|
||||
|
||||
public boolean isSameNode (Node other)
|
||||
{
|
||||
return equals (other);
|
||||
}
|
||||
|
||||
public String lookupPrefix (String namespace)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean isDefaultNamespace (String namespace)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public String lookupNamespaceURI (String prefix)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean isEqualNode (Node other)
|
||||
{
|
||||
return equals (other);
|
||||
}
|
||||
|
||||
public Object getFeature (String feature, String version)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public Object setUserData (String name, Object value,
|
||||
UserDataHandler handler)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public Object getUserData (String name)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,89 @@
|
|||
/* StandaloneLocator.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.util;
|
||||
|
||||
import javax.xml.transform.SourceLocator;
|
||||
import org.xml.sax.Locator;
|
||||
|
||||
/**
|
||||
* SAX Locator implementation that uses the specified values.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
public final class StandaloneLocator
|
||||
implements Locator, SourceLocator
|
||||
{
|
||||
|
||||
private final int lineNumber;
|
||||
|
||||
private final int columnNumber;
|
||||
|
||||
private final String publicId;
|
||||
|
||||
private final String systemId;
|
||||
|
||||
public StandaloneLocator (int lineNumber, int columnNumber,
|
||||
String publicId, String systemId)
|
||||
{
|
||||
this.lineNumber = lineNumber;
|
||||
this.columnNumber = columnNumber;
|
||||
this.publicId = publicId;
|
||||
this.systemId = systemId;
|
||||
}
|
||||
|
||||
public String getPublicId ()
|
||||
{
|
||||
return publicId;
|
||||
}
|
||||
|
||||
public String getSystemId ()
|
||||
{
|
||||
return systemId;
|
||||
}
|
||||
|
||||
public int getLineNumber ()
|
||||
{
|
||||
return lineNumber;
|
||||
}
|
||||
|
||||
public int getColumnNumber ()
|
||||
{
|
||||
return columnNumber;
|
||||
}
|
||||
|
||||
}
|
280
libjava/classpath/gnu/xml/libxmlj/util/XMLJ.java
Normal file
280
libjava/classpath/gnu/xml/libxmlj/util/XMLJ.java
Normal file
|
@ -0,0 +1,280 @@
|
|||
/* XMLJ.java -
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.util;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.InputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.io.Reader;
|
||||
import java.io.Writer;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
|
||||
import javax.xml.transform.Result;
|
||||
import javax.xml.transform.Source;
|
||||
import javax.xml.transform.sax.SAXSource;
|
||||
import javax.xml.transform.stream.StreamResult;
|
||||
import javax.xml.transform.stream.StreamSource;
|
||||
|
||||
import org.xml.sax.InputSource;
|
||||
|
||||
import gnu.xml.libxmlj.transform.GnomeTransformerFactory;
|
||||
|
||||
import gnu.xml.dom.ls.ReaderInputStream;
|
||||
import gnu.xml.dom.ls.WriterOutputStream;
|
||||
|
||||
/**
|
||||
* Utility functions for libxmlj.
|
||||
*/
|
||||
public final class XMLJ
|
||||
{
|
||||
|
||||
static class XMLJShutdownHook
|
||||
implements Runnable
|
||||
{
|
||||
|
||||
public void run ()
|
||||
{
|
||||
// Make sure finalizers are run
|
||||
System.gc ();
|
||||
Runtime.getRuntime ().runFinalization ();
|
||||
|
||||
// Perform global cleanup on the native level
|
||||
GnomeTransformerFactory.freeLibxsltGlobal ();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static boolean initialised = false;
|
||||
|
||||
public static void init ()
|
||||
{
|
||||
if (!initialised)
|
||||
{
|
||||
System.loadLibrary ("xmlj");
|
||||
|
||||
XMLJShutdownHook hook = new XMLJShutdownHook ();
|
||||
Runtime.getRuntime ().addShutdownHook (new Thread (hook));
|
||||
}
|
||||
initialised = true;
|
||||
}
|
||||
|
||||
private static final int LOOKAHEAD = 50;
|
||||
|
||||
/**
|
||||
* Returns an input stream for the specified input source.
|
||||
* This returns a pushback stream that libxmlj can use to detect the
|
||||
* character encoding of the stream.
|
||||
*/
|
||||
public static NamedInputStream getInputStream (InputSource input)
|
||||
throws IOException
|
||||
{
|
||||
InputStream in = input.getByteStream ();
|
||||
String systemId = input.getSystemId ();
|
||||
if (in == null)
|
||||
{
|
||||
Reader r = input.getCharacterStream();
|
||||
if (r != null)
|
||||
in = new ReaderInputStream(r);
|
||||
}
|
||||
if (in == null)
|
||||
{
|
||||
in = getInputStream(systemId);
|
||||
}
|
||||
return new NamedInputStream (systemId, in, LOOKAHEAD);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an input stream for the specified transformer source.
|
||||
* This returns a pushback stream that libxmlj can use to detect the
|
||||
* character encoding of the stream.
|
||||
*/
|
||||
public static NamedInputStream getInputStream (Source source)
|
||||
throws IOException
|
||||
{
|
||||
if (source instanceof SAXSource)
|
||||
{
|
||||
return getInputStream (((SAXSource) source).getInputSource ());
|
||||
}
|
||||
InputStream in = null;
|
||||
String systemId = source.getSystemId ();
|
||||
if (source instanceof StreamSource)
|
||||
{
|
||||
in = ((StreamSource) source).getInputStream ();
|
||||
}
|
||||
if (in == null)
|
||||
{
|
||||
in = getInputStream(systemId);
|
||||
}
|
||||
return new NamedInputStream (systemId, in, LOOKAHEAD);
|
||||
}
|
||||
|
||||
private static InputStream getInputStream(String systemId)
|
||||
throws IOException
|
||||
{
|
||||
if (systemId == null)
|
||||
{
|
||||
throw new IOException("no system ID");
|
||||
}
|
||||
try
|
||||
{
|
||||
return new URL(systemId).openStream();
|
||||
}
|
||||
catch (MalformedURLException e)
|
||||
{
|
||||
return new FileInputStream(systemId);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an input stream for the specified URL.
|
||||
* This returns a pushback stream that libxmlj can use to detect the
|
||||
* character encoding of the stream.
|
||||
*/
|
||||
public static NamedInputStream getInputStream (URL url)
|
||||
throws IOException
|
||||
{
|
||||
return new NamedInputStream (url.toString (), url.openStream(),
|
||||
LOOKAHEAD);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convenience method for xmljDocLoader
|
||||
*/
|
||||
static NamedInputStream xmljGetInputStream(String base, String url)
|
||||
throws IOException
|
||||
{
|
||||
try
|
||||
{
|
||||
if (base != null)
|
||||
{
|
||||
url = new URL(new URL(base), url).toString();
|
||||
}
|
||||
}
|
||||
catch (MalformedURLException e)
|
||||
{
|
||||
}
|
||||
InputStream in = getInputStream(url);
|
||||
return new NamedInputStream(url, in, LOOKAHEAD);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an output stream for the specified transformer result.
|
||||
*/
|
||||
public static OutputStream getOutputStream (Result result)
|
||||
throws IOException
|
||||
{
|
||||
OutputStream out = null;
|
||||
if (result instanceof StreamResult)
|
||||
{
|
||||
out = ((StreamResult) result).getOutputStream ();
|
||||
}
|
||||
if (out == null)
|
||||
{
|
||||
Writer w = ((StreamResult) result).getWriter ();
|
||||
if (w != null)
|
||||
out = new WriterOutputStream (w);
|
||||
}
|
||||
if (out == null)
|
||||
{
|
||||
String systemId = result.getSystemId ();
|
||||
if (systemId == null)
|
||||
{
|
||||
throw new IOException ("no system ID");
|
||||
}
|
||||
try
|
||||
{
|
||||
URL url = new URL (systemId);
|
||||
URLConnection connection = url.openConnection ();
|
||||
connection.setDoOutput (true);
|
||||
out = connection.getOutputStream ();
|
||||
}
|
||||
catch (MalformedURLException e)
|
||||
{
|
||||
out = new FileOutputStream (systemId);
|
||||
}
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the absolute form of the specified URI.
|
||||
* If the URI is already absolute, returns it as-is.
|
||||
* Otherwise returns a new URI relative to the given base URI.
|
||||
*/
|
||||
public static String getAbsoluteURI (String base, String uri)
|
||||
{
|
||||
if (uri != null &&
|
||||
base != null &&
|
||||
(uri.length() > 0) &&
|
||||
(uri.indexOf(':') == -1) &&
|
||||
(uri.charAt(0) != '/'))
|
||||
{
|
||||
// URI is relative
|
||||
if (base.charAt(base.length() - 1) != '/')
|
||||
{
|
||||
int i = base.lastIndexOf('/');
|
||||
base = base.substring(0, i + 1);
|
||||
}
|
||||
return base + uri;
|
||||
}
|
||||
else
|
||||
{
|
||||
// URI is absolute or no base specified
|
||||
return uri;
|
||||
}
|
||||
}
|
||||
|
||||
public static String getBaseURI(String uri)
|
||||
{
|
||||
if (uri != null)
|
||||
{
|
||||
int si = uri.lastIndexOf('/');
|
||||
if (si != -1)
|
||||
{
|
||||
uri = uri.substring(0, si + 1);
|
||||
}
|
||||
}
|
||||
return uri;
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue