View Javadoc

1   /*
2   Copyright (C) 2007 Dirk Huenniger
3   
4   This library is free software; you can redistribute it and/or
5   modify it under the terms of the GNU Lesser General Public
6   License as published by the Free Software Foundation; either
7   version 2.1 of the License, or (at your option) any later version.
8   
9   This library is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  Lesser General Public License for more details.
13  
14  You should have received a copy of the GNU Lesser General Public
15  License along with this library; if not, write to the Free Software
16  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
17   */
18  
19  package org.indi.objects;
20  
21  import java.io.Serializable;
22  import java.util.Collection;
23  
24  /**
25   * the based class of a indi objects. implements composite pattern to accomodate
26   * more indi objects
27   * 
28   * @author Dirk Hünniger
29   * 
30   * @param <T>
31   *                the things the object is composed of.
32   */
33  public abstract class Object<T extends org.indi.objects.Object> implements
34  	Serializable {
35      /**
36       * 
37       */
38      private static final long serialVersionUID = 1L;
39      @SuppressWarnings("unused")
40      /**
41       * The collection of things this object is composed of
42       */
43      protected Collection<T> children;
44      /**
45       * the transfertype used to transfer this object
46       */
47      protected TransferType transferType = null;
48      /**
49       * the message associated with this object
50       */
51      protected String message = null;
52  
53      /**
54       * class constuctur
55       * 
56       * @param children
57       *                the things this object is composed of
58       */
59      Object(Collection<T> children) {
60  	this.children = children;
61      }
62  
63      /**
64       * @return the things this object is composed of
65       */
66      protected Collection<T> getChildren() {
67  	return this.children;
68      }
69  
70      /**
71       * return an XML representation of this object
72       * 
73       * @param type
74       *                the transfertype to be used to generate the XML
75       * @param Message
76       *                the message associvated with this object
77       * @return the XML representation of this object
78       */
79      public String getXML(TransferType type, String Message) {
80  	return "";
81      }
82  
83      @SuppressWarnings("unchecked")
84      /**
85       * Checks for equality with an other indi object checking equality in all
86       * subobjects. Thus checking equality of children grandchildren etc.
87       * 
88       * @param o
89       *                the indiobject.
90       * @return True if the given object matches thsi object
91       */
92      public boolean treeEquals(org.indi.objects.Object o) {
93  	if (this.oEquals(o)) {
94  	    for (Object c : this.getChildren()) {
95  		boolean found = false;
96  		for (org.indi.objects.Object ch : (Collection<Object>) o.children) {
97  		    if (c.treeEquals(ch)) {
98  			found = true;
99  			break;
100 		    }
101 		}
102 		if (!found) {
103 		    return false;
104 		}
105 	    }
106 	    return true;
107 	} else {
108 	    return false;
109 	}
110     }
111 
112     /**
113      * Check the equality with an other object, exculding subobject. So the
114      * equality of children etc. is ignored
115      * 
116      * @param o
117      * @return true if the given object is equal to this object
118      */
119     public abstract boolean oEquals(Object o);
120 
121     @Override
122     public boolean equals(java.lang.Object o) {
123 	if (o instanceof org.indi.objects.Object) {
124 	    return this.treeEquals((org.indi.objects.Object) o);
125 	} else {
126 	    return false;
127 	}
128     }
129 
130     @Override
131     public abstract int hashCode();
132 
133     /**
134      * 
135      * @return the transfertype currently used by this object
136      */
137     public TransferType getTransferType() {
138 	return this.transferType;
139     }
140 
141     /**
142      * the the transfertype of this object
143      * 
144      * @param transferType
145      *                the new tranfertype to be set
146      */
147     public void setTransferType(TransferType transferType) {
148 	this.transferType = transferType;
149     };
150 
151     /**
152      * @return the message associated with this object
153      */
154     public String getMessage() {
155 	return this.message;
156     }
157 }