smile-xml 1.0.2-jruby → 1.0.3-jruby
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
}
|