• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 org.yaml.snakeyaml;
17 
18 import java.util.HashMap;
19 import java.util.Map;
20 
21 import org.yaml.snakeyaml.nodes.Tag;
22 
23 /**
24  * Provides additional runtime information necessary to create a custom Java
25  * instance.
26  */
27 public final class TypeDescription {
28     private final Class<? extends Object> type;
29     private Tag tag;
30     private Map<String, Class<? extends Object>> listProperties;
31     private Map<String, Class<? extends Object>> keyProperties;
32     private Map<String, Class<? extends Object>> valueProperties;
33 
TypeDescription(Class<? extends Object> clazz, Tag tag)34     public TypeDescription(Class<? extends Object> clazz, Tag tag) {
35         this.type = clazz;
36         this.tag = tag;
37         listProperties = new HashMap<String, Class<? extends Object>>();
38         keyProperties = new HashMap<String, Class<? extends Object>>();
39         valueProperties = new HashMap<String, Class<? extends Object>>();
40     }
41 
TypeDescription(Class<? extends Object> clazz, String tag)42     public TypeDescription(Class<? extends Object> clazz, String tag) {
43         this(clazz, new Tag(tag));
44     }
45 
TypeDescription(Class<? extends Object> clazz)46     public TypeDescription(Class<? extends Object> clazz) {
47         this(clazz, (Tag) null);
48     }
49 
50     /**
51      * Get tag which shall be used to load or dump the type (class).
52      *
53      * @return tag to be used. It may be a tag for Language-Independent Types
54      *         (http://www.yaml.org/type/)
55      */
getTag()56     public Tag getTag() {
57         return tag;
58     }
59 
60     /**
61      * Set tag to be used to load or dump the type (class).
62      *
63      * @param tag
64      *            local or global tag
65      */
setTag(Tag tag)66     public void setTag(Tag tag) {
67         this.tag = tag;
68     }
69 
setTag(String tag)70     public void setTag(String tag) {
71         setTag(new Tag(tag));
72     }
73 
74     /**
75      * Get represented type (class)
76      *
77      * @return type (class) to be described.
78      */
getType()79     public Class<? extends Object> getType() {
80         return type;
81     }
82 
83     /**
84      * Specify that the property is a type-safe <code>List</code>.
85      *
86      * @param property
87      *            name of the JavaBean property
88      * @param type
89      *            class of List values
90      */
putListPropertyType(String property, Class<? extends Object> type)91     public void putListPropertyType(String property, Class<? extends Object> type) {
92         listProperties.put(property, type);
93     }
94 
95     /**
96      * Get class of List values for provided JavaBean property.
97      *
98      * @param property
99      *            property name
100      * @return class of List values
101      */
getListPropertyType(String property)102     public Class<? extends Object> getListPropertyType(String property) {
103         return listProperties.get(property);
104     }
105 
106     /**
107      * Specify that the property is a type-safe <code>Map</code>.
108      *
109      * @param property
110      *            property name of this JavaBean
111      * @param key
112      *            class of keys in Map
113      * @param value
114      *            class of values in Map
115      */
putMapPropertyType(String property, Class<? extends Object> key, Class<? extends Object> value)116     public void putMapPropertyType(String property, Class<? extends Object> key,
117             Class<? extends Object> value) {
118         keyProperties.put(property, key);
119         valueProperties.put(property, value);
120     }
121 
122     /**
123      * Get keys type info for this JavaBean
124      *
125      * @param property
126      *            property name of this JavaBean
127      * @return class of keys in the Map
128      */
getMapKeyType(String property)129     public Class<? extends Object> getMapKeyType(String property) {
130         return keyProperties.get(property);
131     }
132 
133     /**
134      * Get values type info for this JavaBean
135      *
136      * @param property
137      *            property name of this JavaBean
138      * @return class of values in the Map
139      */
getMapValueType(String property)140     public Class<? extends Object> getMapValueType(String property) {
141         return valueProperties.get(property);
142     }
143 
144     @Override
toString()145     public String toString() {
146         return "TypeDescription for " + getType() + " (tag='" + getTag() + "')";
147     }
148 }
149