KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > mondrian > olap > fun > MemberHelper


1 /*
2 // $Id: //open/mondrian/src/main/mondrian/olap/fun/MemberHelper.java#4 $
3 // This software is subject to the terms of the Common Public License
4 // Agreement, available at the following URL:
5 // http://www.opensource.org/licenses/cpl.html.
6 // Copyright (C) 2003-2005 Julian Hyde and others
7 // All Rights Reserved.
8 // You must accept the terms of that agreement to use this software.
9 */

10 package mondrian.olap.fun;
11
12 import mondrian.olap.Member;
13
14 /**
15  * This helper class is used by the Distinct(<set>) function to determine
16  * whether or not elements of different types within a set are equal.
17  */

18 public class MemberHelper {
19     private final Object JavaDoc mObject;
20     public MemberHelper(Object JavaDoc entry) {
21         if ((entry == null) ||
22             (entry instanceof Member) ||
23             (entry instanceof Member[])) {
24
25             mObject = entry;
26         } else {
27             throw new IllegalArgumentException JavaDoc("Expected Member or Member[]");
28         }
29     }
30
31     public boolean equals(Object JavaDoc obj) {
32         if ((obj == null) || !(obj instanceof MemberHelper)) {
33             return false;
34         } else if (this == obj) {
35             return true;
36         }
37
38         MemberHelper mh = (MemberHelper)obj;
39
40         if (this.mObject == null) {
41             return mh.mObject == null;
42         } else if (mh.mObject instanceof Member && mObject instanceof Member) {
43             return ((Member)mObject).equals(mh.mObject);
44         } else if (mh.mObject instanceof Member[] &&
45             mObject instanceof Member[]) {
46
47             Member[] array1 = (Member[])mh.mObject;
48             Member[] array2 = (Member[])this.mObject;
49
50             if (array1.length != array2.length) {
51                 return false;
52             }
53
54             for (int idx = 0; idx < array1.length; idx++) {
55                 if (!array1[idx].equals(array2[idx])) {
56                     return false;
57                 }
58             }
59
60             return true;
61         } else {
62             return false;
63         }
64     }
65
66     public int hashCode() {
67         if (mObject instanceof Member) {
68             return mObject.hashCode();
69         } else if (mObject instanceof Member[]) {
70             int hash = 0;
71
72             Member[] array = (Member[]) mObject;
73
74             for (int idx = 0; idx < array.length; idx++) {
75                 hash ^= array[idx].hashCode();
76             }
77
78             return hash;
79         } else {
80             return mObject.hashCode();
81         }
82     }
83 }
84
Popular Tags