Source code: com/sun/syndication/feed/impl/ObjectBean.java
1 /*
2 * Copyright 2004 Sun Microsystems, Inc.
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 com.sun.syndication.feed.impl;
18
19 import com.sun.syndication.feed.impl.CloneableBean;
20 import com.sun.syndication.feed.impl.EqualsBean;
21
22 import java.io.Serializable;
23 import java.util.Set;
24
25 /**
26 * Convenience class providing clone(), toString(), equals() and hashCode() functionality for Java Beans.
27 * <p>
28 * It works on all read/write properties, recursively.
29 * <p>
30 * It uses the CloneableBean, EqualsBean and ToStringBean classes in a delegation pattern.
31 * <p>
32 * <h3>ObjectBean programming conventions</h3>
33 * <P>
34 * All ObjectBean subclasses having properties that return collections they should never
35 * return null if the property has been set to <b>null</b> or if a collection has not been set.
36 * They should create and return an empty collection, this empty collection instance should
37 * also be set to the corresponding property.
38 * <P>
39 * All ObjectBean subclasses properties should be live references.
40 * <p>
41 * @author Alejandro Abdelnur
42 *
43 */
44 public class ObjectBean implements Serializable, Cloneable {
45 private EqualsBean _equalsBean;
46 private ToStringBean _toStringBean;
47 private CloneableBean _cloneableBean;
48
49 /**
50 * Constructor.
51 * <p>
52 * @param beanClass the class/interface to be used for property scanning.
53 *
54 */
55 public ObjectBean(Class beanClass,Object obj) {
56 this(beanClass,obj,null);
57 }
58
59 /**
60 * Constructor.
61 * <p>
62 * The property names in the ignoreProperties Set will not be copied into
63 * the cloned instance. This is useful for cases where the Bean has convenience
64 * properties (properties that are actually references to other properties or
65 * properties of properties). For example SyndFeed and SyndEntry beans have
66 * convenience properties, publishedDate, author, copyright and categories all
67 * of them mapped to properties in the DC Module.
68 * <p>
69 * @param beanClass the class/interface to be used for property scanning.
70 * @param ignoreProperties properties to ignore when cloning.
71 *
72 */
73 public ObjectBean(Class beanClass,Object obj,Set ignoreProperties) {
74 _equalsBean = new EqualsBean(beanClass,obj);
75 _toStringBean = new ToStringBean(beanClass,obj);
76 _cloneableBean = new CloneableBean(obj,ignoreProperties);
77 }
78
79 /**
80 * Creates a deep 'bean' clone of the object.
81 * <p>
82 * @return a clone of the object.
83 * @throws CloneNotSupportedException thrown if an element of the object cannot be cloned.
84 *
85 */
86 public Object clone() throws CloneNotSupportedException {
87 return _cloneableBean.beanClone();
88 }
89
90 /**
91 * Indicates whether some other object is "equal to" this one as defined by the Object equals() method.
92 * <p>
93 * @param other he reference object with which to compare.
94 * @return <b>true</b> if 'this' object is equal to the 'other' object.
95 *
96 */
97 public boolean equals(Object other) {
98 return _equalsBean.beanEquals(other);
99 }
100
101 /**
102 * Returns a hashcode value for the object.
103 * <p>
104 * It follows the contract defined by the Object hashCode() method.
105 * <p>
106 * @return the hashcode of the bean object.
107 *
108 */
109 public int hashCode() {
110 return _equalsBean.beanHashCode();
111 }
112
113 /**
114 * Returns the String representation for the object.
115 * <p>
116 * @return String representation for the object.
117 *
118 */
119 public String toString() {
120 return _toStringBean.toString();
121 }
122
123 }
124