KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jruby > yaml > JRubyRepresenter


1 /***** BEGIN LICENSE BLOCK *****
2  * Version: CPL 1.0/GPL 2.0/LGPL 2.1
3  *
4  * The contents of this file are subject to the Common Public
5  * License Version 1.0 (the "License"); you may not use this file
6  * except in compliance with the License. You may obtain a copy of
7  * the License at http://www.eclipse.org/legal/cpl-v10.html
8  *
9  * Software distributed under the License is distributed on an "AS
10  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
11  * implied. See the License for the specific language governing
12  * rights and limitations under the License.
13  *
14  * Copyright (C) 2006 Ola Bini <ola@ologix.com>
15  *
16  * Alternatively, the contents of this file may be used under the terms of
17  * either of the GNU General Public License Version 2 or later (the "GPL"),
18  * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
19  * in which case the provisions of the GPL or the LGPL are applicable instead
20  * of those above. If you wish to allow use of your version of this file only
21  * under the terms of either the GPL or the LGPL, and not to allow others to
22  * use your version of this file under the terms of the CPL, indicate your
23  * decision by deleting the provisions above and replace them with the notice
24  * and other provisions required by the GPL or the LGPL. If you do not delete
25  * the provisions above, a recipient may use your version of this file under
26  * the terms of any one of the CPL, the GPL or the LGPL.
27  ***** END LICENSE BLOCK *****/

28 package org.jruby.yaml;
29
30 import java.io.IOException JavaDoc;
31
32 import org.jruby.RubyArray;
33 import org.jruby.RubyHash;
34
35 import org.jruby.runtime.builtin.IRubyObject;
36
37 import org.jruby.javasupport.JavaEmbedUtils;
38
39 import org.jvyamlb.SafeRepresenterImpl;
40 import org.jvyamlb.Serializer;
41 import org.jvyamlb.Representer;
42 import org.jvyamlb.YAMLConfig;
43 import org.jvyamlb.YAMLNodeCreator;
44 import org.jvyamlb.nodes.Node;
45
46 import org.jruby.util.ByteList;
47
48 /**
49  * @author <a HREF="mailto:ola.bini@ki.se">Ola Bini</a>
50  */

51 public class JRubyRepresenter extends SafeRepresenterImpl {
52     public JRubyRepresenter(final Serializer serializer, final YAMLConfig opts) {
53         super(serializer,opts);
54     }
55
56     protected YAMLNodeCreator getNodeCreatorFor(final Object JavaDoc data) {
57         if(data instanceof YAMLNodeCreator) {
58             return (YAMLNodeCreator)data;
59         } else if(data instanceof IRubyObject) {
60             return new IRubyObjectYAMLNodeCreator(data);
61         } else {
62             return super.getNodeCreatorFor(data);
63         }
64     }
65
66     public Node map(String JavaDoc tag, java.util.Map JavaDoc mapping, Object JavaDoc flowStyle) throws IOException JavaDoc {
67         if(mapping instanceof RubyHash) {
68             mapping = ((RubyHash)mapping).getValueMap();
69         }
70         if(null == flowStyle) {
71             return map(tag,mapping,false);
72         } else {
73             return map(tag,mapping,true);
74         }
75     }
76     public Node seq(String JavaDoc tag, java.util.List JavaDoc sequence, Object JavaDoc flowStyle) throws IOException JavaDoc {
77         if(sequence instanceof RubyArray) {
78             sequence = ((RubyArray)sequence).getList();
79         }
80
81         if(null == flowStyle) {
82             return seq(tag,sequence,false);
83         } else {
84             return seq(tag,sequence,true);
85         }
86     }
87
88     public Node scalar(String JavaDoc tag, String JavaDoc val, String JavaDoc style) throws IOException JavaDoc {
89         return scalar(tag, ByteList.create(val), style);
90     }
91
92     public Node scalar(String JavaDoc tag, ByteList val, String JavaDoc style) throws IOException JavaDoc {
93         if(null == style || style.length() == 0) {
94             return scalar(tag,val,(char)0);
95         } else {
96             return scalar(tag,val,style.charAt(0));
97         }
98     }
99
100     protected boolean ignoreAliases(final Object JavaDoc data) {
101         return (data instanceof IRubyObject && ((IRubyObject)data).isNil()) || super.ignoreAliases(data);
102     }
103
104     public static class IRubyObjectYAMLNodeCreator implements YAMLNodeCreator {
105         private final IRubyObject data;
106
107         public IRubyObjectYAMLNodeCreator(final Object JavaDoc data) {
108             this.data = (IRubyObject)data;
109         }
110
111         public String JavaDoc taguri() {
112             return data.callMethod(data.getRuntime().getCurrentContext(), "taguri").toString();
113         }
114
115         public Node toYamlNode(final Representer representer) throws IOException JavaDoc {
116             Object JavaDoc val = data.callMethod(data.getRuntime().getCurrentContext(), "to_yaml_node", JavaEmbedUtils.javaToRuby(data.getRuntime(),representer));
117             if(val instanceof Node) {
118                 return (Node)val;
119             } else if(val instanceof IRubyObject) {
120                 return (Node)JavaEmbedUtils.rubyToJava(data.getRuntime(),(IRubyObject)val,Node.class);
121             }
122             return null;
123         }
124     }
125 }// JRubyRepresenter
126
Popular Tags