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