package org.jdom;
import java.util.*;
/**
* Special factory for building documents without any content or structure
* checking. This should only be used when you are 100% positive that the
* input is absolutely correct. This factory can speed builds, but any
* problems in the input will be uncaught until later when they could cause
* infinite loops, malformed XML, or worse. Use with extreme caution.
*/
public class
UncheckedJDOMFactory implements
JDOMFactory {
// =====================================================================
// Element Factory
// =====================================================================
public
Element element(
String name,
Namespace namespace) {
Element e = new
Element();
e.
name =
name;
if (
namespace == null) {
namespace =
Namespace.
NO_NAMESPACE;
}
e.
namespace =
namespace;
return
e;
}
public
Element element(
String name) {
Element e = new
Element();
e.
name =
name;
e.
namespace =
Namespace.
NO_NAMESPACE;
return
e;
}
public
Element element(
String name,
String uri) {
return
element(
name,
Namespace.
getNamespace("",
uri));
}
public
Element element(
String name,
String prefix,
String uri) {
return
element(
name,
Namespace.
getNamespace(
prefix,
uri));
}
// =====================================================================
// Attribute Factory
// =====================================================================
public
Attribute attribute(
String name,
String value,
Namespace namespace) {
Attribute a = new
Attribute();
a.
name =
name;
a.
value =
value;
if (
namespace == null) {
namespace =
Namespace.
NO_NAMESPACE;
}
a.
namespace =
namespace;
return
a;
}
public
Attribute attribute(
String name,
String value, int
type,
Namespace namespace) {
Attribute a = new
Attribute();
a.
name =
name;
a.
type =
type;
a.
value =
value;
if (
namespace == null) {
namespace =
Namespace.
NO_NAMESPACE;
}
a.
namespace =
namespace;
return
a;
}
public
Attribute attribute(
String name,
String value) {
Attribute a = new
Attribute();
a.
name =
name;
a.
value =
value;
a.
namespace =
Namespace.
NO_NAMESPACE;
return
a;
}
public
Attribute attribute(
String name,
String value, int
type) {
Attribute a = new
Attribute();
a.
name =
name;
a.
type =
type;
a.
value =
value;
a.
namespace =
Namespace.
NO_NAMESPACE;
return
a;
}
// =====================================================================
// Text Factory
// =====================================================================
public
Text text(
String str) {
Text t = new
Text();
t.
value =
str;
return
t;
}
// =====================================================================
// CDATA Factory
// =====================================================================
public
CDATA cdata(
String str) {
CDATA c = new
CDATA();
c.
value =
str;
return
c;
}
// =====================================================================
// Comment Factory
// =====================================================================
public
Comment comment(
String str) {
Comment c = new
Comment();
c.
text =
str;
return
c;
}
// =====================================================================
// Processing Instruction Factory
// =====================================================================
public
ProcessingInstruction processingInstruction(
String target,
Map data) {
ProcessingInstruction p = new
ProcessingInstruction();
p.
target =
target;
p.
setData(
data);
return
p;
}
public
ProcessingInstruction processingInstruction(
String target,
String data) {
ProcessingInstruction p = new
ProcessingInstruction();
p.
target =
target;
p.
setData(
data);
return
p;
}
// =====================================================================
// Entity Ref Factory
// =====================================================================
public
EntityRef entityRef(
String name) {
EntityRef e = new org.jdom.
EntityRef();
e.
name =
name;
return
e;
}
public
EntityRef entityRef(
String name,
String systemID) {
EntityRef e = new
EntityRef();
e.
name =
name;
e.
systemID =
systemID;
return
e;
}
public
EntityRef entityRef(
String name,
String publicID,
String systemID) {
EntityRef e = new
EntityRef();
e.
name =
name;
e.
publicID =
publicID;
e.
systemID =
systemID;
return
e;
}
// =====================================================================
// DocType Factory
// =====================================================================
public
DocType docType(
String elementName,
String publicID,
String systemID) {
DocType d = new
DocType();
d.
elementName =
elementName;
d.
publicID =
publicID;
d.
systemID =
systemID;
return
d;
}
public
DocType docType(
String elementName,
String systemID) {
return
docType(
elementName, null,
systemID);
}
public
DocType docType(
String elementName) {
return
docType(
elementName, null, null);
}
// =====================================================================
// Document Factory
// =====================================================================
public
Document document(
Element rootElement,
DocType docType,
String baseURI) {
Document d = new
Document();
if (
docType != null) {
addContent(
d,
docType);
}
if (
rootElement != null) {
addContent(
d,
rootElement);
}
if (
baseURI != null) {
d.
baseURI =
baseURI;
}
return
d;
}
public
Document document(
Element rootElement,
DocType docType) {
return
document(
rootElement,
docType, null);
}
public
Document document(
Element rootElement) {
return
document(
rootElement, null, null);
}
// =====================================================================
// List manipulation
// =====================================================================
public void
addContent(
Parent parent,
Content child) {
if (
parent instanceof
Element) {
Element elt = (
Element)
parent;
elt.
content.
uncheckedAddContent(
child);
}
else {
Document doc = (
Document)
parent;
doc.
content.
uncheckedAddContent(
child);
}
}
public void
setAttribute(
Element parent,
Attribute a) {
parent.
attributes.
uncheckedAddAttribute(
a);
}
public void
addNamespaceDeclaration(
Element parent,
Namespace additional) {
if (
parent.
additionalNamespaces == null) {
parent.
additionalNamespaces = new
ArrayList(5); //Element.INITIAL_ARRAY_SIZE
}
parent.
additionalNamespaces.
add(
additional);
}
}