smile-xml 1.0.2-jruby → 1.0.3-jruby
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/smile-xml.jar +0 -0
- data/src/main/java/smile/xml/AttrJ.java +6 -1
- data/src/main/java/smile/xml/AttributesJ.java +23 -16
- data/src/main/java/smile/xml/DocumentJ.java +6 -6
- data/src/main/java/smile/xml/ErrorJ.java +16 -23
- data/src/main/java/smile/xml/NamespaceJ.java +114 -49
- data/src/main/java/smile/xml/NamespacesJ.java +145 -49
- data/src/main/java/smile/xml/NodeJ.java +28 -17
- data/src/main/java/smile/xml/util/UtilJ.java +30 -7
- data/src/main/main.iml +13 -0
- data/src/test/ruby/ets_test.xml +2 -2
- data/src/test/ruby/model/atom.xml +12 -12
- data/src/test/ruby/model/bands.iso-8859-1.xml +4 -4
- data/src/test/ruby/model/bands.utf-8.xml +4 -4
- data/src/test/ruby/model/bands.xml +4 -4
- data/src/test/ruby/model/books.xml +145 -145
- data/src/test/ruby/model/merge_bug_data.xml +58 -58
- data/src/test/ruby/model/ruby-lang.html +238 -238
- data/src/test/ruby/model/rubynet.xml +79 -79
- data/src/test/ruby/model/shiporder.rnc +28 -28
- data/src/test/ruby/model/shiporder.rng +86 -86
- data/src/test/ruby/model/shiporder.xml +22 -22
- data/src/test/ruby/model/shiporder.xsd +30 -30
- data/src/test/ruby/model/soap.xml +27 -27
- data/src/test/ruby/model/xinclude.xml +4 -4
- data/src/test/ruby/tc_namespace.rb +4 -4
- metadata +3 -2
data/lib/smile-xml.jar
CHANGED
Binary file
|
@@ -38,6 +38,11 @@ public class AttrJ extends NodeJ {
|
|
38
38
|
return (AttrJ) getRubyClass(context.getRuntime()).newInstance(context,
|
39
39
|
new IRubyObject[0], null);
|
40
40
|
}
|
41
|
+
|
42
|
+
public static AttrJ newInstance(ThreadContext context, NodeJ node, RubyString name, RubyString value, NamespaceJ ns) {
|
43
|
+
IRubyObject[] args = { node, name, value, ns };
|
44
|
+
return (AttrJ) getRubyClass(context.getRuntime()).newInstance(context, args, null);
|
45
|
+
}
|
41
46
|
|
42
47
|
private NodeJ parent;
|
43
48
|
|
@@ -51,7 +56,7 @@ public class AttrJ extends NodeJ {
|
|
51
56
|
|
52
57
|
@JRubyMethod(name = "initialize", optional = 4)
|
53
58
|
public void initialize(ThreadContext context, IRubyObject[] args) {
|
54
|
-
NodeJ node = (NodeJ) (
|
59
|
+
NodeJ node = (NodeJ) (args.length > 0 ? args[0] : null);
|
55
60
|
RubyString name = (RubyString) (args.length > 1 ? args[1] : null);
|
56
61
|
RubyString value = (RubyString) (args.length > 2 ? args[2] : null);
|
57
62
|
NamespaceJ ns = (NamespaceJ) (args.length > 3 ? args[3] : null);
|
@@ -122,14 +122,18 @@ public class AttributesJ extends BaseJ<Node> {
|
|
122
122
|
|
123
123
|
@JRubyMethod(name = { "first" })
|
124
124
|
public IRubyObject first(ThreadContext context) {
|
125
|
-
|
126
|
-
|
125
|
+
AttrJ attr = null;
|
126
|
+
NamedNodeMap attributes = getJavaObject().getAttributes();
|
127
|
+
for (int i = 0; i < attributes.getLength(); i++) {
|
128
|
+
Node item = attributes.item(i);
|
129
|
+
if (UtilJ.isAttr(item)) {
|
130
|
+
attr = AttrJ.newInstance(context);
|
131
|
+
attr.setJavaObject(item);
|
132
|
+
attr.setParent(parent);
|
133
|
+
break;
|
134
|
+
}
|
127
135
|
}
|
128
|
-
|
129
|
-
NamedNodeMap aa = getJavaObject().getAttributes();
|
130
|
-
attr.setJavaObject(aa.item(0));
|
131
|
-
attr.setParent(parent);
|
132
|
-
return attr;
|
136
|
+
return UtilJ.nvl(attr, context.getRuntime().getNil());
|
133
137
|
}
|
134
138
|
|
135
139
|
@JRubyMethod(name = { "get_attribute" })
|
@@ -172,9 +176,8 @@ public class AttributesJ extends BaseJ<Node> {
|
|
172
176
|
|
173
177
|
@JRubyMethod(name = { "length" })
|
174
178
|
public RubyFixnum getLength(ThreadContext context) {
|
175
|
-
int
|
176
|
-
|
177
|
-
return context.getRuntime().newFixnum(r);
|
179
|
+
int length = attributesAsList(context).size();
|
180
|
+
return context.getRuntime().newFixnum(length);
|
178
181
|
}
|
179
182
|
|
180
183
|
@JRubyMethod(name = { "node" })
|
@@ -199,14 +202,18 @@ public class AttributesJ extends BaseJ<Node> {
|
|
199
202
|
}
|
200
203
|
|
201
204
|
private List<AttrJ> attributesAsList(ThreadContext context) {
|
202
|
-
NamedNodeMap
|
203
|
-
List
|
204
|
-
for (int i = 0; i <
|
205
|
+
NamedNodeMap attributes = ((Node) getJavaObject()).getAttributes();
|
206
|
+
List<AttrJ> list = new ArrayList<AttrJ>();
|
207
|
+
for (int i = 0; i < attributes.getLength(); i++) {
|
208
|
+
Node item = attributes.item(i);
|
209
|
+
if (! UtilJ.isAttr(item)) {
|
210
|
+
continue;
|
211
|
+
}
|
205
212
|
AttrJ node = AttrJ.newInstance(context);
|
206
|
-
node.setJavaObject(
|
213
|
+
node.setJavaObject(item);
|
207
214
|
node.setParent(parent);
|
208
|
-
|
215
|
+
list.add(node);
|
209
216
|
}
|
210
|
-
return
|
217
|
+
return list;
|
211
218
|
}
|
212
219
|
}
|
@@ -321,25 +321,25 @@ public class DocumentJ extends BaseJ<Document> {
|
|
321
321
|
|
322
322
|
@JRubyMethod(name="to_s", rest=true)
|
323
323
|
public RubyString toString(ThreadContext context, IRubyObject[] args ) throws Exception {
|
324
|
-
|
325
|
-
EncodingJ
|
324
|
+
Boolean indent = null;
|
325
|
+
EncodingJ encoding = null;
|
326
326
|
if( args.length > 0 ) {
|
327
327
|
if( args[0] instanceof RubyHash ) {
|
328
328
|
RubyHash hash = (RubyHash) args[0];
|
329
329
|
RubySymbol key = context.getRuntime().newSymbol( "indent" );
|
330
|
-
indent =
|
330
|
+
indent = UtilJ.toJavaBoolean(context, hash.get(key));
|
331
331
|
key = context.getRuntime().newSymbol( "encoding" );
|
332
332
|
encoding = EncodingJ.get(context, hash.get( key ) );
|
333
333
|
} else if( args[0] instanceof RubyBoolean ) {
|
334
|
-
indent = (
|
334
|
+
indent = UtilJ.toJavaBoolean(context, args[0]);
|
335
335
|
} else if( args[0] instanceof RubyNil ) {
|
336
|
-
|
336
|
+
// do nothing
|
337
337
|
} else {
|
338
338
|
throw context.getRuntime().newArgumentError("");
|
339
339
|
}
|
340
340
|
}
|
341
341
|
|
342
|
-
String string = UtilJ.toString( getJavaObject(), true, encoding );
|
342
|
+
String string = UtilJ.toString( getJavaObject(), nvl(indent, true), encoding );
|
343
343
|
return context.getRuntime().newString(string);
|
344
344
|
}
|
345
345
|
|
@@ -5,7 +5,6 @@ import java.util.concurrent.atomic.AtomicReference;
|
|
5
5
|
import org.jruby.Ruby;
|
6
6
|
import org.jruby.RubyClass;
|
7
7
|
import org.jruby.RubyException;
|
8
|
-
import org.jruby.RubyModule;
|
9
8
|
import org.jruby.anno.JRubyClass;
|
10
9
|
import org.jruby.anno.JRubyConstant;
|
11
10
|
import org.jruby.anno.JRubyMethod;
|
@@ -29,26 +28,6 @@ public class ErrorJ extends RubyException {
|
|
29
28
|
};
|
30
29
|
|
31
30
|
private static final AtomicReference<Block> handler = new AtomicReference<Block>();
|
32
|
-
|
33
|
-
public static RubyClass define(Ruby runtime) {
|
34
|
-
return UtilJ.defineClass(runtime, ErrorJ.class, ALLOCATOR);
|
35
|
-
}
|
36
|
-
|
37
|
-
private static RubyClass getRubyClass(Ruby runtime) {
|
38
|
-
return UtilJ.getClass(runtime, ErrorJ.class );
|
39
|
-
}
|
40
|
-
|
41
|
-
public static RaiseException newRaiseException(ThreadContext context,
|
42
|
-
String message) {
|
43
|
-
Ruby run = context.getRuntime();
|
44
|
-
return new RaiseException(run, getRubyClass(context.getRuntime()), message, true);
|
45
|
-
}
|
46
|
-
|
47
|
-
public static RubyException newInstance(ThreadContext context,
|
48
|
-
String message) {
|
49
|
-
return RubyException.newException(context.getRuntime(),getRubyClass(context.getRuntime()), message);
|
50
|
-
}
|
51
|
-
|
52
31
|
|
53
32
|
@JRubyConstant
|
54
33
|
public static final IRubyObject VERBOSE_HANDLER = null;
|
@@ -77,8 +56,23 @@ public class ErrorJ extends RubyException {
|
|
77
56
|
@JRubyConstant
|
78
57
|
public static final IRubyObject ERROR = null;
|
79
58
|
|
59
|
+
public static RubyClass define(Ruby runtime) {
|
60
|
+
return UtilJ.defineClass(runtime, ErrorJ.class, ALLOCATOR);
|
61
|
+
}
|
80
62
|
|
81
|
-
|
63
|
+
private static RubyClass getRubyClass(Ruby runtime) {
|
64
|
+
return UtilJ.getClass(runtime, ErrorJ.class );
|
65
|
+
}
|
66
|
+
|
67
|
+
public static RaiseException newRaiseException(ThreadContext context, String message) {
|
68
|
+
Ruby run = context.getRuntime();
|
69
|
+
return new RaiseException(run, getRubyClass(run), message, true);
|
70
|
+
}
|
71
|
+
|
72
|
+
public static RubyException newInstance(ThreadContext context, String message) {
|
73
|
+
Ruby run = context.getRuntime();
|
74
|
+
return RubyException.newException(run, getRubyClass(run), message);
|
75
|
+
}
|
82
76
|
|
83
77
|
private ErrorJ(Ruby runtime, RubyClass metaClass) {
|
84
78
|
super(runtime, metaClass);
|
@@ -151,7 +145,6 @@ public class ErrorJ extends RubyException {
|
|
151
145
|
|
152
146
|
@JRubyMethod(name = "reset_handler", module=true)
|
153
147
|
public static void resetHandler(ThreadContext context, IRubyObject self) {
|
154
|
-
|
155
148
|
handler.set(null);
|
156
149
|
}
|
157
150
|
|
@@ -2,66 +2,131 @@ package smile.xml;
|
|
2
2
|
|
3
3
|
import org.jruby.Ruby;
|
4
4
|
import org.jruby.RubyClass;
|
5
|
-
import org.jruby.
|
5
|
+
import org.jruby.RubyFixnum;
|
6
6
|
import org.jruby.RubyObject;
|
7
7
|
import org.jruby.RubyString;
|
8
|
+
import org.jruby.anno.JRubyClass;
|
8
9
|
import org.jruby.anno.JRubyMethod;
|
9
10
|
import org.jruby.runtime.ObjectAllocator;
|
10
11
|
import org.jruby.runtime.ThreadContext;
|
11
12
|
import org.jruby.runtime.builtin.IRubyObject;
|
13
|
+
|
12
14
|
import smile.xml.util.UtilJ;
|
13
15
|
|
14
|
-
|
15
|
-
{
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
16
|
+
@JRubyClass( name="LibXML::XML::Namespace" )
|
17
|
+
public class NamespaceJ extends RubyObject {
|
18
|
+
|
19
|
+
private static final long serialVersionUID = 4128551928821799987L;
|
20
|
+
|
21
|
+
private static final ObjectAllocator ALLOCATOR = new ObjectAllocator() {
|
22
|
+
public IRubyObject allocate(Ruby runtime, RubyClass klass) {
|
23
|
+
return new NamespaceJ(runtime, klass);
|
24
|
+
}
|
25
|
+
};
|
26
|
+
|
27
|
+
public static RubyClass define(Ruby runtime) {
|
28
|
+
return UtilJ.defineClass(runtime, NamespaceJ.class, ALLOCATOR);
|
29
|
+
}
|
30
|
+
|
31
|
+
private static RubyClass getRubyClass(Ruby runtime) {
|
32
|
+
return UtilJ.getClass(runtime, NamespaceJ.class);
|
33
|
+
}
|
34
|
+
|
35
|
+
public static NamespaceJ newInstance(ThreadContext context) {
|
36
|
+
return new NamespaceJ(context.getRuntime(), getRubyClass(context.getRuntime()));
|
37
|
+
}
|
38
|
+
|
39
|
+
public static NamespaceJ newInstance(ThreadContext context, IRubyObject node, IRubyObject prefix, IRubyObject href) {
|
40
|
+
IRubyObject[] args = { node, prefix, href };
|
41
|
+
return (NamespaceJ) getRubyClass(context.getRuntime()).newInstance(context, args, null);
|
42
|
+
}
|
43
|
+
|
44
|
+
private NodeJ node;
|
45
|
+
private RubyString prefix;
|
46
|
+
private RubyString href;
|
25
47
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
return result; }
|
48
|
+
public NamespaceJ(Ruby runtime, RubyClass metaClass) {
|
49
|
+
super(runtime, metaClass);
|
50
|
+
}
|
30
51
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
52
|
+
@JRubyMethod(name = { "initialize" })
|
53
|
+
public void initialize(ThreadContext context, IRubyObject pNode, IRubyObject pPrefix, IRubyObject pHref) {
|
54
|
+
if ( ! (pNode instanceof NodeJ)) {
|
55
|
+
throw context.getRuntime().newTypeError("wrong argument type " + UtilJ.getRubyClassName(pNode) + " (expected Data)");
|
56
|
+
}
|
57
|
+
|
58
|
+
node = ((NodeJ) pNode);
|
59
|
+
if (! pPrefix.isNil()) {
|
60
|
+
prefix = (RubyString) pPrefix;
|
61
|
+
}
|
62
|
+
href = (RubyString) pHref;
|
63
|
+
|
64
|
+
// define namespace as "xmlns" attribute
|
65
|
+
String name = prefix == null ? "xmlns" : "xmlns:" + prefix.asJavaString();
|
66
|
+
String value = href.asJavaString();
|
67
|
+
AttrJ.newInstance(context, node, UtilJ.toRubyString(context, name).asString(),
|
68
|
+
UtilJ.toRubyString(context, value).asString(), this);
|
69
|
+
}
|
35
70
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
}
|
71
|
+
@JRubyMethod(name = { "prefix" })
|
72
|
+
public IRubyObject getPrefix(ThreadContext context) {
|
73
|
+
return UtilJ.nvl(this.prefix, context.getRuntime().getNil());
|
74
|
+
}
|
41
75
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
@JRubyMethod(name={"initialize"})
|
47
|
-
public void initialize(ThreadContext context, IRubyObject pNode, IRubyObject pHref, IRubyObject pPrefix) {
|
48
|
-
this.node = ((NodeJ)pNode);
|
49
|
-
if (!pHref.isNil())
|
50
|
-
this.href = ((RubyString)pHref);
|
51
|
-
if (!pPrefix.isNil())
|
52
|
-
this.prefix = ((RubyString)pPrefix);
|
53
|
-
}
|
76
|
+
@JRubyMethod(name = { "href" })
|
77
|
+
public IRubyObject getHref(ThreadContext context) {
|
78
|
+
return UtilJ.nvl(this.href, context.getRuntime().getNil());
|
79
|
+
}
|
54
80
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
81
|
+
@JRubyMethod(name = { "node" })
|
82
|
+
public IRubyObject getNode(ThreadContext context) {
|
83
|
+
return this.node;
|
84
|
+
}
|
85
|
+
|
86
|
+
@JRubyMethod(name = { "node_type" })
|
87
|
+
public IRubyObject getNodeType(ThreadContext context) {
|
88
|
+
return new RubyFixnum(context.getRuntime(), NodeJ.NAMESPACE_DECL);
|
89
|
+
}
|
90
|
+
|
91
|
+
@JRubyMethod(name = { "next" })
|
92
|
+
public IRubyObject getNext(ThreadContext context) {
|
93
|
+
// TODO
|
94
|
+
return context.getRuntime().getNil();
|
95
|
+
}
|
96
|
+
|
97
|
+
@JRubyMethod(name = { "==" })
|
98
|
+
public IRubyObject isEqual(ThreadContext context, IRubyObject pOther) {
|
99
|
+
if (pOther instanceof NamespaceJ) {
|
100
|
+
NamespaceJ otherNS = (NamespaceJ) pOther;
|
101
|
+
if (href.equals(otherNS.href) && node.equals(otherNS.node)
|
102
|
+
&& (prefix == null && otherNS.prefix == null
|
103
|
+
|| prefix.equals(otherNS.prefix))) {
|
104
|
+
return context.getRuntime().getTrue();
|
105
|
+
}
|
106
|
+
}
|
107
|
+
return context.getRuntime().getFalse();
|
108
|
+
}
|
109
|
+
|
110
|
+
@JRubyMethod(name = { "to_s" })
|
111
|
+
public IRubyObject toS(ThreadContext context) {
|
112
|
+
String str;
|
113
|
+
if (prefix != null) {
|
114
|
+
str = prefix.asJavaString() + ":" + href.asJavaString();
|
115
|
+
} else {
|
116
|
+
str = href.asJavaString();
|
117
|
+
}
|
118
|
+
return context.getRuntime().newString(str);
|
119
|
+
}
|
120
|
+
|
121
|
+
public void setNode(NodeJ node) {
|
122
|
+
this.node = node;
|
123
|
+
}
|
124
|
+
|
125
|
+
public void setPrefix(RubyString prefix) {
|
126
|
+
this.prefix = prefix;
|
127
|
+
}
|
128
|
+
|
129
|
+
public void setHref(RubyString href) {
|
130
|
+
this.href = href;
|
131
|
+
}
|
67
132
|
}
|
@@ -1,62 +1,158 @@
|
|
1
1
|
package smile.xml;
|
2
2
|
|
3
|
+
import java.util.ArrayList;
|
4
|
+
import java.util.List;
|
5
|
+
|
3
6
|
import org.jruby.Ruby;
|
4
7
|
import org.jruby.RubyClass;
|
5
|
-
import org.jruby.RubyModule;
|
6
8
|
import org.jruby.RubyObject;
|
9
|
+
import org.jruby.anno.JRubyClass;
|
7
10
|
import org.jruby.anno.JRubyMethod;
|
11
|
+
import org.jruby.runtime.Block;
|
8
12
|
import org.jruby.runtime.ObjectAllocator;
|
9
13
|
import org.jruby.runtime.ThreadContext;
|
10
14
|
import org.jruby.runtime.builtin.IRubyObject;
|
15
|
+
import org.w3c.dom.Document;
|
16
|
+
import org.w3c.dom.NamedNodeMap;
|
11
17
|
import org.w3c.dom.Node;
|
18
|
+
|
12
19
|
import smile.xml.util.UtilJ;
|
13
20
|
|
14
|
-
|
15
|
-
{
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
21
|
+
@JRubyClass( name = "LibXML::XML::Namespaces", include = "Enumerable" )
|
22
|
+
public class NamespacesJ extends RubyObject {
|
23
|
+
|
24
|
+
private static final long serialVersionUID = 4673137342270845475L;
|
25
|
+
|
26
|
+
private static final ObjectAllocator ALLOCATOR = new ObjectAllocator() {
|
27
|
+
public IRubyObject allocate(Ruby runtime, RubyClass klass) {
|
28
|
+
return new NamespacesJ(runtime, klass);
|
29
|
+
}
|
30
|
+
};
|
31
|
+
|
32
|
+
public static RubyClass define(Ruby runtime) {
|
33
|
+
return UtilJ.defineClass(runtime, NamespacesJ.class, ALLOCATOR);
|
34
|
+
}
|
35
|
+
|
36
|
+
private static RubyClass getRubyClass(Ruby runtime) {
|
37
|
+
return UtilJ.getClass(runtime, NamespacesJ.class);
|
38
|
+
}
|
39
|
+
|
40
|
+
public static NamespacesJ newInstance(ThreadContext context, NodeJ node) {
|
41
|
+
IRubyObject[] args = { node };
|
42
|
+
return (NamespacesJ) getRubyClass(context.getRuntime()).newInstance(context, args, null);
|
43
|
+
}
|
44
|
+
|
45
|
+
private NodeJ node;
|
46
|
+
|
47
|
+
public NamespacesJ(Ruby runtime, RubyClass metaClass) {
|
48
|
+
super(runtime, metaClass);
|
49
|
+
}
|
50
|
+
|
51
|
+
@JRubyMethod(name = { "initialize" })
|
52
|
+
public void initialize(ThreadContext context, IRubyObject pNode) {
|
53
|
+
this.node = (NodeJ) pNode;
|
54
|
+
}
|
55
|
+
|
56
|
+
@JRubyMethod(name = { "default" })
|
57
|
+
public IRubyObject getDefault(ThreadContext context) {
|
58
|
+
return findByPrefix(context, context.getRuntime().getNil());
|
59
|
+
}
|
60
|
+
|
61
|
+
@JRubyMethod(name = { "default_prefix=" })
|
62
|
+
public void setDefaultPrefix(ThreadContext context, IRubyObject pPrefix) {
|
63
|
+
// TODO
|
64
|
+
throw context.getRuntime().newRuntimeError("not yet implemented");
|
65
|
+
}
|
66
|
+
|
67
|
+
@JRubyMethod(name = { "definitions" })
|
68
|
+
public IRubyObject getDefinitions(ThreadContext context) {
|
69
|
+
// TODO
|
70
|
+
throw context.getRuntime().newRuntimeError("not yet implemented");
|
71
|
+
}
|
72
|
+
|
73
|
+
@JRubyMethod(name = { "each" })
|
74
|
+
public void iterateOver(ThreadContext context, Block block) {
|
75
|
+
UtilJ.iterateOver(context, block, namespacesAsList(context));
|
76
|
+
}
|
77
|
+
|
78
|
+
@JRubyMethod(name = { "find_by_href" })
|
79
|
+
public IRubyObject findByHref(ThreadContext context, IRubyObject pHref) {
|
80
|
+
// TODO
|
81
|
+
throw context.getRuntime().newRuntimeError("not yet implemented");
|
82
|
+
}
|
83
|
+
|
84
|
+
@JRubyMethod(name = { "find_by_prefix" }, optional = 1)
|
85
|
+
public IRubyObject findByPrefix(ThreadContext context, IRubyObject pPrefix) {
|
86
|
+
// TODO
|
87
|
+
throw context.getRuntime().newRuntimeError("not yet implemented");
|
88
|
+
}
|
89
|
+
|
90
|
+
@JRubyMethod(name = { "namespace" })
|
91
|
+
public IRubyObject getNamespace(ThreadContext context) {
|
92
|
+
Ruby run = context.getRuntime();
|
93
|
+
|
94
|
+
String prefixStr = ((Node) node.getJavaObject()).getPrefix();
|
95
|
+
IRubyObject prefix = prefixStr == null ? run.getNil() : run.newString(prefixStr);
|
96
|
+
|
97
|
+
String uriStr = ((Node) node.getJavaObject()).getNamespaceURI();
|
98
|
+
IRubyObject uri = uriStr == null ? run.getNil() : run.newString(uriStr);
|
99
|
+
|
100
|
+
if (uri.isNil()) {
|
101
|
+
return run.getNil();
|
102
|
+
} else {
|
103
|
+
return NamespaceJ.newInstance(context, node, prefix, uri);
|
104
|
+
}
|
105
|
+
}
|
106
|
+
|
107
|
+
@JRubyMethod(name = { "namespace=" })
|
108
|
+
public void setNamespace(ThreadContext context, IRubyObject pNamespace) {
|
109
|
+
if ( ! (pNamespace instanceof NamespaceJ)) {
|
110
|
+
throw context.getRuntime().newTypeError("wrong argument type " + UtilJ.getRubyClassName(pNamespace) + " (expected Data)");
|
111
|
+
}
|
112
|
+
|
113
|
+
NamespaceJ namespace = (NamespaceJ) pNamespace;
|
114
|
+
Document doc = node.getJavaObject().getOwnerDocument();
|
115
|
+
|
116
|
+
String namespaceURI = "";
|
117
|
+
String qualifiedName = node.getJavaObject().getNodeName();
|
118
|
+
if (! namespace.getHref(context).isNil()) {
|
119
|
+
namespaceURI = namespace.getHref(context).asJavaString();
|
120
|
+
}
|
121
|
+
if (! namespace.getPrefix(context).isNil()) {
|
122
|
+
qualifiedName = namespace.getPrefix(context).asJavaString() + ":" + node.getJavaObject().getNodeName();
|
123
|
+
}
|
124
|
+
node.setJavaObject(doc.renameNode(node.getJavaObject(), namespaceURI, qualifiedName));
|
125
|
+
}
|
126
|
+
|
127
|
+
@JRubyMethod(name = { "node" })
|
128
|
+
public IRubyObject getNode(ThreadContext context) {
|
129
|
+
return this.node;
|
130
|
+
}
|
131
|
+
|
132
|
+
private List<NamespaceJ> namespacesAsList(ThreadContext context) {
|
133
|
+
NamedNodeMap attributes = node.getJavaObject().getAttributes();
|
134
|
+
List<NamespaceJ> list = new ArrayList<NamespaceJ>();
|
135
|
+
for (int i = 0; i < attributes.getLength(); i++) {
|
136
|
+
Node item = attributes.item(i);
|
137
|
+
String name = item.getNodeName();
|
138
|
+
if (name.startsWith("xmlns")) {
|
139
|
+
NamespaceJ ns = NamespaceJ.newInstance(context);
|
140
|
+
String prefix;
|
141
|
+
if (name.startsWith("xmlns:")) {
|
142
|
+
prefix = name.substring("xmlns:".length());
|
143
|
+
ns.setPrefix(context.getRuntime().newString(prefix));
|
144
|
+
} else if (name.equals("xmlns")) {
|
145
|
+
prefix = null;
|
146
|
+
ns.setPrefix(null);
|
147
|
+
} else {
|
148
|
+
continue;
|
149
|
+
}
|
150
|
+
ns.setNode(node);
|
151
|
+
String href = item.getNodeValue();
|
152
|
+
ns.setHref(context.getRuntime().newString(href));
|
153
|
+
list.add(ns);
|
154
|
+
}
|
155
|
+
}
|
156
|
+
return list;
|
157
|
+
}
|
62
158
|
}
|
@@ -75,11 +75,13 @@ public class NodeJ extends BaseJ<Node> {
|
|
75
75
|
|
76
76
|
@JRubyConstant
|
77
77
|
public static final int NOTATION_NODE = 12;
|
78
|
+
|
79
|
+
@JRubyConstant
|
80
|
+
public static final int NAMESPACE_DECL = 18;
|
78
81
|
|
79
82
|
@JRubyConstant
|
80
83
|
public static final int PROCESSING_INSTRUCTION_NODE = 7;
|
81
84
|
|
82
|
-
|
83
85
|
@JRubyConstant
|
84
86
|
public static final int FRAGMENT_NODE = 11;
|
85
87
|
|
@@ -126,16 +128,28 @@ public class NodeJ extends BaseJ<Node> {
|
|
126
128
|
|
127
129
|
@JRubyMethod(name = { "initialize" }, optional = 3)
|
128
130
|
public void initialize(ThreadContext context, IRubyObject[] args) {
|
129
|
-
RubyString name = (RubyString) (
|
130
|
-
RubyString content = (RubyString) (
|
131
|
-
NamespaceJ
|
132
|
-
|
131
|
+
RubyString name = (RubyString) (args.length > 0 && ! args[0].isNil() ? args[0] : null);
|
132
|
+
RubyString content = (RubyString) (args.length > 1 && ! args[1].isNil() ? args[1] : null);
|
133
|
+
NamespaceJ ns = (NamespaceJ) (args.length > 2 && ! args[2].isNil() ? args[2] : null);
|
134
|
+
|
133
135
|
if (name != null) {
|
134
136
|
Document doc = UtilJ.getBuilder().newDocument();
|
135
|
-
Element
|
137
|
+
Element element = doc.createElement(name.asJavaString());
|
136
138
|
if ((content != null) && (!content.isNil()))
|
137
|
-
|
138
|
-
setJavaObject(
|
139
|
+
element.setTextContent(content.asJavaString());
|
140
|
+
setJavaObject(element);
|
141
|
+
|
142
|
+
if (ns != null && ! ns.isNil()) {
|
143
|
+
String namespaceURI = "";
|
144
|
+
String qualifiedName = getJavaObject().getNodeName();
|
145
|
+
if (! ns.getHref(context).isNil()) {
|
146
|
+
namespaceURI = ns.getHref(context).asJavaString();
|
147
|
+
}
|
148
|
+
if (! ns.getPrefix(context).isNil()) {
|
149
|
+
qualifiedName = ns.getPrefix(context).asJavaString() + ":" + getJavaObject().getNodeName();
|
150
|
+
}
|
151
|
+
setJavaObject(doc.renameNode(getJavaObject(), namespaceURI, qualifiedName));
|
152
|
+
}
|
139
153
|
}
|
140
154
|
}
|
141
155
|
|
@@ -210,7 +224,7 @@ public class NodeJ extends BaseJ<Node> {
|
|
210
224
|
}
|
211
225
|
|
212
226
|
@JRubyMethod(name = "equal?")
|
213
|
-
public RubyBoolean
|
227
|
+
public RubyBoolean isEqual(ThreadContext context, IRubyObject arg)
|
214
228
|
throws Exception {
|
215
229
|
|
216
230
|
if (arg.isNil()) {
|
@@ -252,8 +266,7 @@ public class NodeJ extends BaseJ<Node> {
|
|
252
266
|
boolean r = toString(context, new IRubyObject[0]).equals(
|
253
267
|
other.toString(context, new IRubyObject[0]));
|
254
268
|
|
255
|
-
return
|
256
|
-
.getFalse();
|
269
|
+
return UtilJ.toBool(context, r);
|
257
270
|
}
|
258
271
|
|
259
272
|
@JRubyMethod(name ="detect")
|
@@ -333,9 +346,8 @@ public class NodeJ extends BaseJ<Node> {
|
|
333
346
|
|
334
347
|
@JRubyMethod(name = { "attribute?" })
|
335
348
|
public RubyBoolean isAttribute(ThreadContext context) {
|
336
|
-
boolean r = ((Node) getJavaObject()).getNodeType() ==
|
337
|
-
return
|
338
|
-
.getFalse();
|
349
|
+
boolean r = ((Node) getJavaObject()).getNodeType() == ATTRIBUTE_NODE;
|
350
|
+
return UtilJ.toBool(context, r);
|
339
351
|
}
|
340
352
|
|
341
353
|
@JRubyMethod(name = { "attribute_decl?" })
|
@@ -354,8 +366,7 @@ public class NodeJ extends BaseJ<Node> {
|
|
354
366
|
@JRubyMethod(name = { "attributes?" }, alias = { "properties?" })
|
355
367
|
public RubyBoolean hasAttributes(ThreadContext context) {
|
356
368
|
boolean r = ((Node) getJavaObject()).getAttributes().getLength() != 0;
|
357
|
-
return
|
358
|
-
.getFalse();
|
369
|
+
return UtilJ.toBool(context, r);
|
359
370
|
}
|
360
371
|
|
361
372
|
// @JRubyMethod(name ="base_uri")
|
@@ -681,7 +692,7 @@ public class NodeJ extends BaseJ<Node> {
|
|
681
692
|
return UtilJ.toBool(context, false);
|
682
693
|
}
|
683
694
|
|
684
|
-
@JRubyMethod(name = { "
|
695
|
+
@JRubyMethod(name = { "namespaces" })
|
685
696
|
public NamespacesJ getNamespaces(ThreadContext context) {
|
686
697
|
return NamespacesJ.newInstance(context, this);
|
687
698
|
}
|