1b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov/** 211a89b445f3bde56bf07e6a0d04f0b0256dcb215Andrey Somov * Copyright (c) 2008, http://www.snakeyaml.org 3b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 4b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Licensed under the Apache License, Version 2.0 (the "License"); 5b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * you may not use this file except in compliance with the License. 6b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * You may obtain a copy of the License at 7b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 8b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * http://www.apache.org/licenses/LICENSE-2.0 9b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 10b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Unless required by applicable law or agreed to in writing, software 11b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * distributed under the License is distributed on an "AS IS" BASIS, 12b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * See the License for the specific language governing permissions and 14b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * limitations under the License. 15b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 16b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovpackage org.yaml.snakeyaml; 17b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 18b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport java.io.IOException; 19b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport java.io.InputStream; 20b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport java.io.Reader; 21b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport java.io.StringReader; 22b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport java.io.StringWriter; 23b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport java.io.Writer; 24b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport java.util.ArrayList; 25b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport java.util.Iterator; 26b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport java.util.List; 27b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport java.util.regex.Pattern; 28b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 29b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.DumperOptions.FlowStyle; 30b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.composer.Composer; 31b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.constructor.BaseConstructor; 32b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.constructor.Constructor; 33b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.emitter.Emitable; 34b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.emitter.Emitter; 35b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.error.YAMLException; 36b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.events.Event; 37b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.introspector.BeanAccess; 38b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.nodes.Node; 39b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.nodes.Tag; 40b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.parser.Parser; 41b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.parser.ParserImpl; 42b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.reader.StreamReader; 43b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.reader.UnicodeReader; 44b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.representer.Representer; 45b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.resolver.Resolver; 46b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.serializer.Serializer; 47b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 48b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov/** 49b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Public YAML interface. Each Thread must have its own instance. 50b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 51b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovpublic class Yaml { 52b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov protected final Resolver resolver; 53b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov private String name; 54b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov protected BaseConstructor constructor; 55b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov protected Representer representer; 56b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov protected DumperOptions dumperOptions; 57b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 58b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 59b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Create Yaml instance. It is safe to create a few instances and use them 60b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * in different Threads. 61b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 62b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public Yaml() { 6334f59d77fd0a29b085d4c642eb1db6b8925fc3c3Andrey Somov this(new Constructor(), new Representer(), new DumperOptions(), new Resolver()); 64b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 65b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 6634f59d77fd0a29b085d4c642eb1db6b8925fc3c3Andrey Somov /** 67b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Create Yaml instance. 68b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 69b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param dumperOptions 70b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * DumperOptions to configure outgoing objects 71b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 72b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public Yaml(DumperOptions dumperOptions) { 73b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov this(new Constructor(), new Representer(), dumperOptions); 74b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 75b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 76b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 77b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Create Yaml instance. It is safe to create a few instances and use them 78b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * in different Threads. 79b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 80b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param representer 81b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Representer to emit outgoing objects 82b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 83b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public Yaml(Representer representer) { 84b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov this(new Constructor(), representer); 85b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 86b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 87b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 88b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Create Yaml instance. It is safe to create a few instances and use them 89b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * in different Threads. 90b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 91b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param constructor 92b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * BaseConstructor to construct incoming documents 93b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 94b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public Yaml(BaseConstructor constructor) { 95b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov this(constructor, new Representer()); 96b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 97b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 98b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 99b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Create Yaml instance. It is safe to create a few instances and use them 100b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * in different Threads. 101b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 102b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param constructor 103b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * BaseConstructor to construct incoming documents 104b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param representer 105b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Representer to emit outgoing objects 106b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 107b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public Yaml(BaseConstructor constructor, Representer representer) { 108b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov this(constructor, representer, new DumperOptions()); 109b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 110b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 111b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 112b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Create Yaml instance. It is safe to create a few instances and use them 113b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * in different Threads. 114b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 115b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param representer 116b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Representer to emit outgoing objects 117b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param dumperOptions 118b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * DumperOptions to configure outgoing objects 119b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 120b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public Yaml(Representer representer, DumperOptions dumperOptions) { 121b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov this(new Constructor(), representer, dumperOptions, new Resolver()); 122b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 123b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 124b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 125b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Create Yaml instance. It is safe to create a few instances and use them 126b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * in different Threads. 127b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 128b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param constructor 129b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * BaseConstructor to construct incoming documents 130b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param representer 131b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Representer to emit outgoing objects 132b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param dumperOptions 133b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * DumperOptions to configure outgoing objects 134b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 135b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public Yaml(BaseConstructor constructor, Representer representer, DumperOptions dumperOptions) { 136b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov this(constructor, representer, dumperOptions, new Resolver()); 137b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 138b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 139b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 140b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Create Yaml instance. It is safe to create a few instances and use them 141b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * in different Threads. 142b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 143b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param constructor 144b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * BaseConstructor to construct incoming documents 145b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param representer 146b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Representer to emit outgoing objects 147b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param dumperOptions 148b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * DumperOptions to configure outgoing objects 149b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param resolver 150b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Resolver to detect implicit type 151b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 152b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public Yaml(BaseConstructor constructor, Representer representer, DumperOptions dumperOptions, 153b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov Resolver resolver) { 15434f59d77fd0a29b085d4c642eb1db6b8925fc3c3Andrey Somov if (!constructor.isExplicitPropertyUtils()) { 15534f59d77fd0a29b085d4c642eb1db6b8925fc3c3Andrey Somov constructor.setPropertyUtils(representer.getPropertyUtils()); 15634f59d77fd0a29b085d4c642eb1db6b8925fc3c3Andrey Somov } else if (!representer.isExplicitPropertyUtils()) { 15734f59d77fd0a29b085d4c642eb1db6b8925fc3c3Andrey Somov representer.setPropertyUtils(constructor.getPropertyUtils()); 15834f59d77fd0a29b085d4c642eb1db6b8925fc3c3Andrey Somov } 15934f59d77fd0a29b085d4c642eb1db6b8925fc3c3Andrey Somov this.constructor = constructor; 16034f59d77fd0a29b085d4c642eb1db6b8925fc3c3Andrey Somov representer.setDefaultFlowStyle(dumperOptions.getDefaultFlowStyle()); 16134f59d77fd0a29b085d4c642eb1db6b8925fc3c3Andrey Somov representer.setDefaultScalarStyle(dumperOptions.getDefaultScalarStyle()); 16234f59d77fd0a29b085d4c642eb1db6b8925fc3c3Andrey Somov representer.getPropertyUtils().setAllowReadOnlyProperties( 16334f59d77fd0a29b085d4c642eb1db6b8925fc3c3Andrey Somov dumperOptions.isAllowReadOnlyProperties()); 16401941860274d824eea6368593d45680755608374Andrey Somov representer.setTimeZone(dumperOptions.getTimeZone()); 16534f59d77fd0a29b085d4c642eb1db6b8925fc3c3Andrey Somov this.representer = representer; 16634f59d77fd0a29b085d4c642eb1db6b8925fc3c3Andrey Somov this.dumperOptions = dumperOptions; 16734f59d77fd0a29b085d4c642eb1db6b8925fc3c3Andrey Somov this.resolver = resolver; 16834f59d77fd0a29b085d4c642eb1db6b8925fc3c3Andrey Somov this.name = "Yaml:" + System.identityHashCode(this); 169b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 170b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 171b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 172b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Serialize a Java object into a YAML String. 173b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 174b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param data 175b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Java object to be Serialized to YAML 176b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @return YAML String 177b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 178b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public String dump(Object data) { 179b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov List<Object> list = new ArrayList<Object>(1); 180b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov list.add(data); 181b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return dumpAll(list.iterator()); 182b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 183b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 184b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 185b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Produce the corresponding representation tree for a given Object. 186b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 187f3549a5225ecec53c9b130e4222fa478380b693bAndrey Somov * @see <a href="http://yaml.org/spec/1.1/#id859333">Figure 3.1. Processing 188f3549a5225ecec53c9b130e4222fa478380b693bAndrey Somov * Overview</a> 189b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param data 190b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * instance to build the representation tree for 191b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @return representation tree 192b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 193b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public Node represent(Object data) { 194b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return representer.represent(data); 195b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 196b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 197b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 198b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Serialize a sequence of Java objects into a YAML String. 199b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 200b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param data 201b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Iterator with Objects 202b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @return YAML String with all the objects in proper sequence 203b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 204b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public String dumpAll(Iterator<? extends Object> data) { 205b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov StringWriter buffer = new StringWriter(); 206615d3719f75e5aad70d1598ef160123705008216Andrey Somov dumpAll(data, buffer, null); 207b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return buffer.toString(); 208b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 209b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 210b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 211b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Serialize a Java object into a YAML stream. 212b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 213b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param data 214b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Java object to be serialized to YAML 215b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param output 216b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * stream to write to 217b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 218b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public void dump(Object data, Writer output) { 219b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov List<Object> list = new ArrayList<Object>(1); 220b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov list.add(data); 221615d3719f75e5aad70d1598ef160123705008216Andrey Somov dumpAll(list.iterator(), output, null); 222b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 223b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 224b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 225b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Serialize a sequence of Java objects into a YAML stream. 226b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 227b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param data 228b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Iterator with Objects 229b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param output 230b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * stream to write to 231b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 232b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public void dumpAll(Iterator<? extends Object> data, Writer output) { 233615d3719f75e5aad70d1598ef160123705008216Andrey Somov dumpAll(data, output, null); 234b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 235b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 236b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov private void dumpAll(Iterator<? extends Object> data, Writer output, Tag rootTag) { 237b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov Serializer serializer = new Serializer(new Emitter(output, dumperOptions), resolver, 238b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov dumperOptions, rootTag); 239b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov try { 240b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov serializer.open(); 241b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov while (data.hasNext()) { 242b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov Node node = representer.represent(data.next()); 243b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov serializer.serialize(node); 244b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 245b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov serializer.close(); 24625ac3b280b35ddb9167e0528626e2ec14488f173Andrey Somov } catch (IOException e) { 247b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov throw new YAMLException(e); 248b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 249b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 250b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 251b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 252b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * <p> 253b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Serialize a Java object into a YAML string. Override the default root tag 254b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * with <code>rootTag</code>. 255b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * </p> 256b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 257b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * <p> 258b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * This method is similar to <code>Yaml.dump(data)</code> except that the 259b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * root tag for the whole document is replaced with the given tag. This has 260b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * two main uses. 261b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * </p> 262b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 263b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * <p> 264b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * First, if the root tag is replaced with a standard YAML tag, such as 265b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * <code>Tag.MAP</code>, then the object will be dumped as a map. The root 266b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * tag will appear as <code>!!map</code>, or blank (implicit !!map). 267b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * </p> 268b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 269b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * <p> 270b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Second, if the root tag is replaced by a different custom tag, then the 271b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * document appears to be a different type when loaded. For example, if an 272b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * instance of MyClass is dumped with the tag !!YourClass, then it will be 273b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * handled as an instance of YourClass when loaded. 274b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * </p> 275b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 276b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param data 277b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Java object to be serialized to YAML 278b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param rootTag 279b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * the tag for the whole YAML document. The tag should be Tag.MAP 280b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * for a JavaBean to make the tag disappear (to use implicit tag 281b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * !!map). If <code>null</code> is provided then the standard tag 282b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * with the full class name is used. 283b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param flowStyle 284b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * flow style for the whole document. See Chapter 10. Collection 285b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Styles http://yaml.org/spec/1.1/#id930798. If 286b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * <code>null</code> is provided then the flow style from 287b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * DumperOptions is used. 288b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 289b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @return YAML String 290b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 291b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public String dumpAs(Object data, Tag rootTag, FlowStyle flowStyle) { 292b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov FlowStyle oldStyle = representer.getDefaultFlowStyle(); 293b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov if (flowStyle != null) { 294b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov representer.setDefaultFlowStyle(flowStyle); 295b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 296b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov List<Object> list = new ArrayList<Object>(1); 297b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov list.add(data); 298b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov StringWriter buffer = new StringWriter(); 299b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov dumpAll(list.iterator(), buffer, rootTag); 300b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov representer.setDefaultFlowStyle(oldStyle); 301b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return buffer.toString(); 302b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 303b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 304b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 305b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * <p> 306b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Serialize a Java object into a YAML string. Override the default root tag 307b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * with <code>Tag.MAP</code>. 308b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * </p> 309b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * <p> 310b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * This method is similar to <code>Yaml.dump(data)</code> except that the 311b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * root tag for the whole document is replaced with <code>Tag.MAP</code> tag 312b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * (implicit !!map). 313b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * </p> 314b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * <p> 315b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Block Mapping is used as the collection style. See 10.2.2. Block Mappings 316b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * (http://yaml.org/spec/1.1/#id934537) 317b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * </p> 318b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 319b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param data 320b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Java object to be serialized to YAML 321b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @return YAML String 322b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 323b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public String dumpAsMap(Object data) { 324b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return dumpAs(data, Tag.MAP, FlowStyle.BLOCK); 325b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 326b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 327b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 328b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Serialize the representation tree into Events. 329b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 330f3549a5225ecec53c9b130e4222fa478380b693bAndrey Somov * @see <a href="http://yaml.org/spec/1.1/#id859333">Processing Overview</a> 331b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param data 332b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * representation tree 333b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @return Event list 334b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 335b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public List<Event> serialize(Node data) { 336b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov SilentEmitter emitter = new SilentEmitter(); 337615d3719f75e5aad70d1598ef160123705008216Andrey Somov Serializer serializer = new Serializer(emitter, resolver, dumperOptions, null); 338b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov try { 339b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov serializer.open(); 340b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov serializer.serialize(data); 341b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov serializer.close(); 34225ac3b280b35ddb9167e0528626e2ec14488f173Andrey Somov } catch (IOException e) { 343b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov throw new YAMLException(e); 344b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 345b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return emitter.getEvents(); 346b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 347b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 34834f59d77fd0a29b085d4c642eb1db6b8925fc3c3Andrey Somov private static class SilentEmitter implements Emitable { 349b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov private List<Event> events = new ArrayList<Event>(100); 350b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 351b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public List<Event> getEvents() { 352b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return events; 353b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 354b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 355b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public void emit(Event event) throws IOException { 356b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov events.add(event); 357b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 358b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 359b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 360b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 361b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Parse the only YAML document in a String and produce the corresponding 362b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Java object. (Because the encoding in known BOM is not respected.) 363b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 364b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param yaml 365b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * YAML data to load from (BOM must not be present) 366b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @return parsed object 367b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 368b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public Object load(String yaml) { 369b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return loadFromReader(new StreamReader(yaml), Object.class); 370b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 371b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 372b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 373b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Parse the only YAML document in a stream and produce the corresponding 374b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Java object. 375b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 376b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param io 377b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * data to load from (BOM is respected and removed) 378b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @return parsed object 379b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 380b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public Object load(InputStream io) { 381b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return loadFromReader(new StreamReader(new UnicodeReader(io)), Object.class); 382b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 383b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 384b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 385b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Parse the only YAML document in a stream and produce the corresponding 386b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Java object. 387b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 388b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param io 389b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * data to load from (BOM must not be present) 390b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @return parsed object 391b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 392b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public Object load(Reader io) { 393b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return loadFromReader(new StreamReader(io), Object.class); 394b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 395b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 396b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 397b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Parse the only YAML document in a stream and produce the corresponding 398b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Java object. 399b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 400b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param <T> 401b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Class is defined by the second argument 402b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param io 403b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * data to load from (BOM must not be present) 404b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param type 405b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Class of the object to be created 406b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @return parsed object 407b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 408b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov @SuppressWarnings("unchecked") 409b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public <T> T loadAs(Reader io, Class<T> type) { 410b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return (T) loadFromReader(new StreamReader(io), type); 411b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 412b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 413b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 414b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Parse the only YAML document in a String and produce the corresponding 415b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Java object. (Because the encoding in known BOM is not respected.) 416b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 417b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param <T> 418b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Class is defined by the second argument 419b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param yaml 420b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * YAML data to load from (BOM must not be present) 421b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param type 422b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Class of the object to be created 423b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @return parsed object 424b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 425b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov @SuppressWarnings("unchecked") 426b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public <T> T loadAs(String yaml, Class<T> type) { 427b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return (T) loadFromReader(new StreamReader(yaml), type); 428b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 429b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 430b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 431b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Parse the only YAML document in a stream and produce the corresponding 432b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Java object. 433b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 434b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param <T> 435b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Class is defined by the second argument 436b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param input 437b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * data to load from (BOM is respected and removed) 438b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param type 439b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Class of the object to be created 440b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @return parsed object 441b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 442b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov @SuppressWarnings("unchecked") 443b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public <T> T loadAs(InputStream input, Class<T> type) { 444b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return (T) loadFromReader(new StreamReader(new UnicodeReader(input)), type); 445b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 446b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 447b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov private Object loadFromReader(StreamReader sreader, Class<?> type) { 448b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov Composer composer = new Composer(new ParserImpl(sreader), resolver); 449b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov constructor.setComposer(composer); 450b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return constructor.getSingleData(type); 451b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 452b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 453b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 454b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Parse all YAML documents in a String and produce corresponding Java 455b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * objects. The documents are parsed only when the iterator is invoked. 456b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 457b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param yaml 458b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * YAML data to load from (BOM must not be present) 459b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @return an iterator over the parsed Java objects in this String in proper 460b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * sequence 461b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 462b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public Iterable<Object> loadAll(Reader yaml) { 463b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov Composer composer = new Composer(new ParserImpl(new StreamReader(yaml)), resolver); 464b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov constructor.setComposer(composer); 465b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov Iterator<Object> result = new Iterator<Object>() { 466b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public boolean hasNext() { 467b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return constructor.checkData(); 468b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 469b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 470b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public Object next() { 471b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return constructor.getData(); 472b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 473b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 474b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public void remove() { 475b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov throw new UnsupportedOperationException(); 476b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 477b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov }; 478b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return new YamlIterable(result); 479b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 480b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 48134f59d77fd0a29b085d4c642eb1db6b8925fc3c3Andrey Somov private static class YamlIterable implements Iterable<Object> { 482b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov private Iterator<Object> iterator; 483b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 484b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public YamlIterable(Iterator<Object> iterator) { 485b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov this.iterator = iterator; 486b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 487b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 488b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public Iterator<Object> iterator() { 489b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return iterator; 490b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 491b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 492b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 493b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 494b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Parse all YAML documents in a String and produce corresponding Java 495b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * objects. (Because the encoding in known BOM is not respected.) The 496b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * documents are parsed only when the iterator is invoked. 497b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 498b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param yaml 499b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * YAML data to load from (BOM must not be present) 500b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @return an iterator over the parsed Java objects in this String in proper 501b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * sequence 502b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 503b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public Iterable<Object> loadAll(String yaml) { 504b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return loadAll(new StringReader(yaml)); 505b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 506b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 507b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 508b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Parse all YAML documents in a stream and produce corresponding Java 509b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * objects. The documents are parsed only when the iterator is invoked. 510b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 511b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param yaml 512b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * YAML data to load from (BOM is respected and ignored) 513b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @return an iterator over the parsed Java objects in this stream in proper 514b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * sequence 515b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 516b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public Iterable<Object> loadAll(InputStream yaml) { 517b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return loadAll(new UnicodeReader(yaml)); 518b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 519b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 520b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 521b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Parse the first YAML document in a stream and produce the corresponding 522b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * representation tree. (This is the opposite of the represent() method) 523b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 524f3549a5225ecec53c9b130e4222fa478380b693bAndrey Somov * @see <a href="http://yaml.org/spec/1.1/#id859333">Figure 3.1. Processing 525f3549a5225ecec53c9b130e4222fa478380b693bAndrey Somov * Overview</a> 526b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param yaml 527b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * YAML document 528b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @return parsed root Node for the specified YAML document 529b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 530b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public Node compose(Reader yaml) { 531b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov Composer composer = new Composer(new ParserImpl(new StreamReader(yaml)), resolver); 532b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov constructor.setComposer(composer); 533b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return composer.getSingleNode(); 534b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 535b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 536b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 537b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Parse all YAML documents in a stream and produce corresponding 538b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * representation trees. 539b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 540f3549a5225ecec53c9b130e4222fa478380b693bAndrey Somov * @see <a href="http://yaml.org/spec/1.1/#id859333">Processing Overview</a> 541b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param yaml 542b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * stream of YAML documents 543b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @return parsed root Nodes for all the specified YAML documents 544b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 545b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public Iterable<Node> composeAll(Reader yaml) { 546b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov final Composer composer = new Composer(new ParserImpl(new StreamReader(yaml)), resolver); 547b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov constructor.setComposer(composer); 548b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov Iterator<Node> result = new Iterator<Node>() { 549b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public boolean hasNext() { 550b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return composer.checkNode(); 551b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 552b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 553b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public Node next() { 554b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return composer.getNode(); 555b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 556b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 557b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public void remove() { 558b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov throw new UnsupportedOperationException(); 559b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 560b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov }; 561b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return new NodeIterable(result); 562b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 563b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 56434f59d77fd0a29b085d4c642eb1db6b8925fc3c3Andrey Somov private static class NodeIterable implements Iterable<Node> { 565b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov private Iterator<Node> iterator; 566b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 567b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public NodeIterable(Iterator<Node> iterator) { 568b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov this.iterator = iterator; 569b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 570b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 571b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public Iterator<Node> iterator() { 572b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return iterator; 573b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 574b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 575b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 576b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 577b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Add an implicit scalar detector. If an implicit scalar value matches the 578b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * given regexp, the corresponding tag is assigned to the scalar. 579b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 580b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param tag 581b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * tag to assign to the node 582b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param regexp 583b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * regular expression to match against 584b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param first 585b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * a sequence of possible initial characters or null (which means 586b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * any). 587b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 588b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public void addImplicitResolver(Tag tag, Pattern regexp, String first) { 589b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov resolver.addImplicitResolver(tag, regexp, first); 590b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 591b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 592b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov @Override 593b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public String toString() { 594b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return name; 595b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 596b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 597b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 598b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Get a meaningful name. It simplifies debugging in a multi-threaded 599b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * environment. If nothing is set explicitly the address of the instance is 600b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * returned. 601b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 602b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @return human readable name 603b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 604b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public String getName() { 605b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return name; 606b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 607b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 608b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 609b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Set a meaningful name to be shown in toString() 610b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 611b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param name 612b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * human readable name 613b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 614b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public void setName(String name) { 615b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov this.name = name; 616b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 617b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 618b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov /** 619b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Parse a YAML stream and produce parsing events. 620b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 621f3549a5225ecec53c9b130e4222fa478380b693bAndrey Somov * @see <a href="http://yaml.org/spec/1.1/#id859333">Processing Overview</a> 622b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @param yaml 623b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * YAML document(s) 624b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * @return parsed events 625b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 626b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public Iterable<Event> parse(Reader yaml) { 627b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov final Parser parser = new ParserImpl(new StreamReader(yaml)); 628b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov Iterator<Event> result = new Iterator<Event>() { 629b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public boolean hasNext() { 630b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return parser.peekEvent() != null; 631b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 632b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 633b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public Event next() { 634b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return parser.getEvent(); 635b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 636b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 637b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public void remove() { 638b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov throw new UnsupportedOperationException(); 639b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 640b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov }; 641b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return new EventIterable(result); 642b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 643b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 64434f59d77fd0a29b085d4c642eb1db6b8925fc3c3Andrey Somov private static class EventIterable implements Iterable<Event> { 645b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov private Iterator<Event> iterator; 646b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 647b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public EventIterable(Iterator<Event> iterator) { 648b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov this.iterator = iterator; 649b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 650b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 651b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public Iterator<Event> iterator() { 652b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return iterator; 653b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 654b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 655b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 656b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public void setBeanAccess(BeanAccess beanAccess) { 657b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov constructor.getPropertyUtils().setBeanAccess(beanAccess); 658b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov representer.getPropertyUtils().setBeanAccess(beanAccess); 659b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 660b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 661b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov} 662