KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > sql99 > dql > resultsetmetadata > KeyComparator


1 package com.daffodilwoods.daffodildb.server.sql99.dql.resultsetmetadata;
2
3 import java.io.*;
4
5 import com.daffodilwoods.daffodildb.utils.comparator.*;
6 import com.daffodilwoods.database.utility.*;
7
8 /**
9  * It represents a comparator which is used to compare the row using values of
10  * key columns. The comparison is needed when we've to show the effect of any
11  * modification to the resultset.
12  * <p>Title: </p>
13  * <p>Description: </p>
14  * <p>Copyright: Copyright (c) 2003</p>
15  * <p>Company: </p>
16  * @author not attributable
17  * @version 1.0
18  */

19
20 public class KeyComparator extends SuperComparator implements Serializable {
21
22    /**
23     * Represents the orderspecification(asc/desc) of key columns.
24     */

25
26    private boolean[] orderSpecifications;
27
28    KeyComparator(boolean[] orderSpecifications1) {
29       orderSpecifications = orderSpecifications1;
30    }
31
32    /**
33     * It compares passed key. Keys are equals when they have equal values.
34     * If one key contains null and other key contains not null then they are
35     * also equal provided after that position, all the values for first key are
36     * null and all the values for second key are not null. It is required for
37     * the handling of Loj/Roj.
38     *
39     * @param object1
40     * @param object2
41     * @return
42     */

43
44    public int compare(Object JavaDoc object1, Object JavaDoc object2) {
45       try {
46          if (object1 == null || object2 == null) {
47             return 0;
48          }
49          Object JavaDoc[] first = (Object JavaDoc[]) object1;
50          Object JavaDoc[] second = (Object JavaDoc[]) object2;
51          int length = first.length;
52          int state = 0;
53          boolean flag = false;
54          for (int i = 0; i < length; i++) {
55             if (first[i] != null && second[i] == null) {
56                if (state == 0) {
57                   state = 1;
58                }
59                continue;
60             }
61             if (first[i] == null && second[i] != null) {
62                if (state == 0) {
63                   state = -1;
64                }
65                continue;
66             }
67             if (first[i] == null && second[i] == null) {
68                continue;
69             }
70             int cmp = orderSpecifications[i] ? compareResult(first[i], second[i])
71                 : compareResult(second[i], first[i]);
72             if (cmp != 0) {
73                return state == -1 || state == 1 ? state : cmp;
74             } else {
75                flag = true;
76             }
77          }
78          return flag ? 0 : state;
79       } catch (ClassCastException JavaDoc ex) {
80          throw ex;
81       }
82    }
83
84    /**
85     * It makes the provision of comparision of Boolean and String fields.
86     * @param first
87     * @param second
88     * @return
89     */

90
91    private int compareResult(Object JavaDoc first, Object JavaDoc second) {
92       if (first instanceof String JavaDoc) {
93          return String.CASE_INSENSITIVE_ORDER.compare(first, second);
94       }
95       if (first instanceof Boolean JavaDoc) {
96          boolean f1 = ( (Boolean JavaDoc) first).booleanValue();
97          boolean f2 = ( (Boolean JavaDoc) second).booleanValue();
98          return f1 ^ f2 ? f1 ? 1 : -1 : 0;
99       }
100       return ( (Comparable JavaDoc) first).compareTo(second);
101    }
102
103 }
104
Popular Tags