Home | History | Annotate | Download | only in staticstate
      1 /**
      2  * Copyright (c) 2008, http://www.snakeyaml.org
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *     http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 package examples.staticstate;
     17 
     18 import java.util.ArrayList;
     19 import java.util.List;
     20 import java.util.Set;
     21 
     22 import junit.framework.TestCase;
     23 
     24 import org.yaml.snakeyaml.DumperOptions;
     25 import org.yaml.snakeyaml.Yaml;
     26 import org.yaml.snakeyaml.constructor.Constructor;
     27 import org.yaml.snakeyaml.introspector.Property;
     28 import org.yaml.snakeyaml.nodes.MappingNode;
     29 import org.yaml.snakeyaml.nodes.Node;
     30 import org.yaml.snakeyaml.nodes.NodeTuple;
     31 import org.yaml.snakeyaml.nodes.ScalarNode;
     32 import org.yaml.snakeyaml.representer.Representer;
     33 
     34 /**
     35  * Example with static fields
     36  */
     37 public class StaticFieldsTest extends TestCase {
     38     public void testAsJavaBean() {
     39         JavaBeanWithStaticState bean = new JavaBeanWithStaticState();
     40         bean.setName("Bahrack");
     41         bean.setAge(-47);
     42         JavaBeanWithStaticState.setType("Represent");
     43         JavaBeanWithStaticState.color = "Black";
     44         Yaml yaml = new Yaml();
     45         String output = yaml.dump(bean);
     46         // System.out.println(output);
     47         assertEquals("!!examples.staticstate.JavaBeanWithStaticState {age: -47, name: Bahrack}\n",
     48                 output);
     49         // parse back to instance
     50         JavaBeanWithStaticState bean2 = (JavaBeanWithStaticState) yaml.load(output);
     51         assertEquals(-47, bean2.getAge());
     52         assertEquals("Bahrack", bean2.getName());
     53     }
     54 
     55     public void testCustomDump() {
     56         JavaBeanWithStaticState bean = new JavaBeanWithStaticState();
     57         bean.setName("Lui");
     58         bean.setAge(25);
     59         JavaBeanWithStaticState.setType("Represent");
     60         JavaBeanWithStaticState.color = "Black";
     61         Yaml yaml = new Yaml(new MyRepresenter(), new DumperOptions());
     62         String output = yaml.dump(bean);
     63         // System.out.println(output);
     64         assertEquals(
     65                 "!!examples.staticstate.JavaBeanWithStaticState {age: 25, name: Lui, color: Black,\n  type: Represent}\n",
     66                 output);
     67     }
     68 
     69     public void testCustomLoad() {
     70         Yaml yaml = new Yaml(new MyConstructor());
     71         String output = "!!examples.staticstate.JavaBeanWithStaticState {age: 25, name: Lui, color: Oranje,\n  type: King}\n";
     72         JavaBeanWithStaticState bean2 = (JavaBeanWithStaticState) yaml.load(output);
     73         assertEquals(25, bean2.getAge());
     74         assertEquals("Lui", bean2.getName());
     75         assertEquals("Oranje", JavaBeanWithStaticState.color);
     76         assertEquals("King", JavaBeanWithStaticState.getType());
     77     }
     78 
     79     private class MyRepresenter extends Representer {
     80         @Override
     81         protected MappingNode representJavaBean(Set<Property> properties, Object javaBean) {
     82             MappingNode node = super.representJavaBean(properties, javaBean);
     83             if (javaBean instanceof JavaBeanWithStaticState) {
     84                 List<NodeTuple> value = node.getValue();
     85                 value.add(new NodeTuple(representData("color"),
     86                         representData(JavaBeanWithStaticState.color)));
     87                 value.add(new NodeTuple(representData("type"),
     88                         representData(JavaBeanWithStaticState.getType())));
     89             }
     90             return node;
     91         }
     92     }
     93 
     94     private class MyConstructor extends Constructor {
     95         protected Object constructObject(Node node) {
     96             if (node.getType().isAssignableFrom(JavaBeanWithStaticState.class)) {
     97                 MappingNode beanNode = (MappingNode) node;
     98                 List<NodeTuple> value = beanNode.getValue();
     99                 List<NodeTuple> removed = new ArrayList<NodeTuple>();
    100                 for (NodeTuple tuple : value) {
    101                     ScalarNode keyNode = (ScalarNode) tuple.getKeyNode();
    102                     if (keyNode.getValue().equals("color")) {
    103                         ScalarNode valueNode = (ScalarNode) tuple.getValueNode();
    104                         JavaBeanWithStaticState.color = valueNode.getValue();
    105                     } else if (keyNode.getValue().equals("type")) {
    106                         ScalarNode valueNode = (ScalarNode) tuple.getValueNode();
    107                         JavaBeanWithStaticState.setType(valueNode.getValue());
    108                     } else
    109                         removed.add(tuple);
    110                 }
    111                 beanNode.setValue(removed);
    112                 JavaBeanWithStaticState bean = (JavaBeanWithStaticState) super
    113                         .constructObject(beanNode);
    114 
    115                 return bean;
    116             } else {
    117                 return super.constructObject(node);
    118             }
    119         }
    120     }
    121 }
    122