Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||||||
Person |
|
| 0.0;0 |
1 | package yarfraw.core.datamodel; |
|
2 | ||
3 | import java.io.IOException; |
|
4 | import java.util.ArrayList; |
|
5 | import java.util.HashMap; |
|
6 | import java.util.List; |
|
7 | import java.util.Locale; |
|
8 | import java.util.Map; |
|
9 | ||
10 | import javax.xml.namespace.QName; |
|
11 | import javax.xml.parsers.ParserConfigurationException; |
|
12 | ||
13 | import org.w3c.dom.Element; |
|
14 | import org.xml.sax.SAXException; |
|
15 | ||
16 | import yarfraw.utils.ValidationUtils; |
|
17 | import yarfraw.utils.XMLUtils; |
|
18 | ||
19 | /** |
|
20 | * <li>Rss 1.0 & Rss 2.0 - only email filed is used, other fields are ignored. |
|
21 | * </li> |
|
22 | * <li>Atom 1.0 - person constructs |
|
23 | * <br/>http://atompub.org/2005/07/11/draft-ietf-atompub-format-10.html#rfc.section.3 |
|
24 | * </li> |
|
25 | * @author jliang |
|
26 | * |
|
27 | */ |
|
28 | 1200 | public class Person extends AbstractBaseObject{ |
29 | private static final long serialVersionUID = 20070927L; |
|
30 | private String _emailOrText; |
|
31 | private String _uri; |
|
32 | private String _name; |
|
33 | ||
34 | 405 | public Person(){} |
35 | ||
36 | /** |
|
37 | * Constructs a new Person object with the input string as its email or text content. |
|
38 | * @param emailOrText <li>Rss 1.0 - email address or text content of the corresponding person element. |
|
39 | * </li> |
|
40 | * <li>Rss 2.0 - should be an email address of the corresponding person element. |
|
41 | * </li> |
|
42 | * <li>Atom 1.0 - should be an email address of the corresponding person element. |
|
43 | * </li> |
|
44 | */ |
|
45 | 1998 | public Person(String emailOrText){ |
46 | 1998 | _emailOrText = emailOrText; |
47 | 1998 | } |
48 | ||
49 | /** |
|
50 | * <li>Rss 1.0 - email address or text content of the corresponding person element. |
|
51 | * </li> |
|
52 | * <li>Rss 2.0 - should be an email address of the corresponding person element. |
|
53 | * </li> |
|
54 | * <li>Atom 1.0 - should be an email address of the corresponding person element. |
|
55 | * </li> |
|
56 | * @return |
|
57 | */ |
|
58 | public String getEmailOrText() { |
|
59 | 237 | return _emailOrText; |
60 | } |
|
61 | ||
62 | /** |
|
63 | * <li>Rss 1.0 - email address or text content of the corresponding person element. |
|
64 | * </li> |
|
65 | * <li>Rss 2.0 - should be an email address of the corresponding person element. |
|
66 | * </li> |
|
67 | * <li>Atom 1.0 - should be an email address of the corresponding person element. |
|
68 | * </li> |
|
69 | * @param emailOrText |
|
70 | */ |
|
71 | public Person setEmailOrText(String emailOrText) { |
|
72 | 156 | _emailOrText = emailOrText; |
73 | 156 | return this; |
74 | } |
|
75 | ||
76 | /** |
|
77 | * <b>Atom 1.0 only</b><br/> |
|
78 | * The "atom:uri" element's content conveys an IRI associated with the person. Person constructs MAY contain an atom:uri element, but MUST NOT contain more than one. The content of atom:uri in a Person construct MUST be an IRI reference [RFC3987]. |
|
79 | * @return |
|
80 | */ |
|
81 | public String getUri() { |
|
82 | 114 | return _uri; |
83 | } |
|
84 | /** |
|
85 | * <b>Atom 1.0 only</b><br/> |
|
86 | * The "atom:uri" element's content conveys an IRI associated with the person. Person constructs MAY contain an atom:uri element, but MUST NOT contain more than one. The content of atom:uri in a Person construct MUST be an IRI reference [RFC3987]. |
|
87 | * @param uri any valid uri |
|
88 | * @return this |
|
89 | */ |
|
90 | public Person setUri(String uri) { |
|
91 | 159 | _uri = uri; |
92 | 159 | return this; |
93 | } |
|
94 | ||
95 | /** |
|
96 | * <b>Atom 1.0 only</b><br/> |
|
97 | * The "atom:name" element's content conveys a human-readable name for the person. The content of atom:name is Language-Sensitive. Person constructs MUST contain exactly one "atom:name" element. |
|
98 | * @return |
|
99 | */ |
|
100 | public String getName() { |
|
101 | 210 | return _name; |
102 | } |
|
103 | ||
104 | /** |
|
105 | * <b>Atom 1.0 only</b><br/> |
|
106 | * The "atom:name" element's content conveys a human-readable name for the person. The content of atom:name is Language-Sensitive. Person constructs MUST contain exactly one "atom:name" element. |
|
107 | * @param name value of the name element |
|
108 | * @return this |
|
109 | */ |
|
110 | public Person setName(String name) { |
|
111 | 411 | _name = name; |
112 | 411 | return this; |
113 | } |
|
114 | ||
115 | ////////////////////////Common setters/////////////////////// |
|
116 | /** |
|
117 | * Any other attribute that is not in the RSS 2.0 specs. |
|
118 | */ |
|
119 | public Person setOtherAttributes(Map<QName, String> otherAttributes) { |
|
120 | 6 | _otherAttributes = otherAttributes; |
121 | 6 | return this; |
122 | } |
|
123 | /** |
|
124 | * Add an attribute that is not in the RSS 2.0 specs. |
|
125 | */ |
|
126 | public Person addOtherAttributes(QName namespace, String attribute) { |
|
127 | 6 | if(_otherAttributes == null){ |
128 | 3 | _otherAttributes = new HashMap<QName, String>(); |
129 | } |
|
130 | 6 | _otherAttributes.put(namespace, attribute); |
131 | 6 | return this; |
132 | } |
|
133 | ||
134 | /** |
|
135 | * Other additional elements that are not in the Rss specs.<br/> |
|
136 | * **Note** The element should not have an empty namespace to avoid collision with the specs elements. |
|
137 | */ |
|
138 | public Person setOtherElements(List<Element> otherElements) { |
|
139 | 6 | _otherElements = otherElements; |
140 | 6 | return this; |
141 | } |
|
142 | /** |
|
143 | * Add an element that is not specified in the Rss specs.<br/> |
|
144 | * **Note** The element should not have an empty namespace to avoid collision with the specs elements. |
|
145 | * @param element - any element |
|
146 | */ |
|
147 | public Person addOtherElement(Element element){ |
|
148 | 6 | if(_otherElements == null){ |
149 | 3 | _otherElements = new ArrayList<Element>(); |
150 | } |
|
151 | 6 | _otherElements.add(element); |
152 | 6 | return this; |
153 | } |
|
154 | ||
155 | /** |
|
156 | * Add an element that is not specified in the Rss specs.<br/> |
|
157 | * **Note** The element should not have an empty namespace to avoid collision with the specs elements. |
|
158 | * |
|
159 | * @param xmlString - any element |
|
160 | * @throws ParserConfigurationException |
|
161 | * @throws IOException |
|
162 | * @throws SAXException |
|
163 | */ |
|
164 | public Person addOtherElement(String xmlString) throws SAXException, IOException, ParserConfigurationException{ |
|
165 | 3 | return addOtherElement(XMLUtils.parseXml(xmlString, false, false).getDocumentElement()); |
166 | } |
|
167 | ||
168 | /** |
|
169 | * <b>Atom 1.0 only</b><br/> |
|
170 | * Any element defined by this specification MAY have an xml:base attribute |
|
171 | * [W3C.REC-xmlbase-20010627]. When xml:base is used in an Atom Document, |
|
172 | * it serves the function described in section 5.1.1 of [RFC3986], establishing |
|
173 | * the base URI (or IRI) for resolving any relative references found within the |
|
174 | * effective scope of the xml:base attribute. |
|
175 | * @param base |
|
176 | * @return |
|
177 | */ |
|
178 | public Person setBase(String base) { |
|
179 | 387 | _base = base; |
180 | 387 | return this; |
181 | } |
|
182 | /** |
|
183 | * <li>Rss 2.0 - <language> element. |
|
184 | * The language the channel is written in. This allows aggregators to group |
|
185 | * all Italian language sites, for example, on a single page. A list of allowable |
|
186 | * values for this element, as provided by Netscape, is here. You may also use values |
|
187 | * defined by the W3C. |
|
188 | * Only <channel> support this element.</li> |
|
189 | * <li>Rss 1.0 - <dc:language> element. A language of the intellectual content of the resource. |
|
190 | * Only <channel> and <item> support this element. </li> |
|
191 | * <li>Atom 1.0 - 'lang' attribute</li> |
|
192 | * <br/> |
|
193 | * Note: for Rss 2.0 and Rss 1.0, only <channel> and <item> |
|
194 | * @param lang |
|
195 | * @return |
|
196 | */ |
|
197 | public Person setLang(String lang) { |
|
198 | 387 | _lang = lang; |
199 | 387 | return this; |
200 | } |
|
201 | ||
202 | /** |
|
203 | * <li>Rss 2.0 - <language> element. |
|
204 | * The language the channel is written in. This allows aggregators to group |
|
205 | * all Italian language sites, for example, on a single page. A list of allowable |
|
206 | * values for this element, as provided by Netscape, is here. You may also use values |
|
207 | * defined by the W3C. |
|
208 | * Only <channel> support this element.</li> |
|
209 | * <li>Rss 1.0 - <dc:language> element. A language of the intellectual content of the resource. |
|
210 | * Only <channel> and <item> support this element. </li> |
|
211 | * <li>Atom 1.0 - 'lang' attribute</li> |
|
212 | * <br/> |
|
213 | * Note: for Rss 2.0 and Rss 1.0, only <channel> and <item> |
|
214 | * @param lang |
|
215 | * @return |
|
216 | */ |
|
217 | public Person setLang(Locale lang) { |
|
218 | 3 | _lang = lang.getLanguage(); |
219 | 3 | return this; |
220 | } |
|
221 | ////////////////////////Common setters/////////////////////// |
|
222 | ||
223 | ||
224 | @Override |
|
225 | public void validate(FeedFormat format) throws ValidationException { |
|
226 | 6 | ValidationUtils.validateNotNull("EmailOrText should not be null", _emailOrText); |
227 | 6 | } |
228 | ||
229 | } |