KickJava   Java API By Example, From Geeks To Geeks.

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


1 package com.daffodilwoods.daffodildb.server.sql99.dql.resultsetmetadata;
2
3 import java.io.*;
4 import java.util.*;
5
6 /**
7  * It represents the comparator for comparing the row returned for Scrollable
8  * resultset.
9  * <p>Title: </p>
10  * <p>Description: </p>
11  * <p>Copyright: Copyright (c) 2003</p>
12  * <p>Company: </p>
13  * @author unascribed
14  * @version 1.0
15  */

16 public class ScrollableKeyComparator implements Comparator, Serializable {
17
18    /**
19     * Represents the orderspecification(asc/desc) of key columns.
20     */

21
22    private boolean[] orderSpecifications;
23
24    public ScrollableKeyComparator(boolean[] orderSpecifications0) {
25       orderSpecifications = orderSpecifications0;
26    }
27
28    /**
29     * Compare passed two objects based on order specification.
30     * @param object1
31     * @param object2
32     * @return
33     */

34
35    public int compare(Object JavaDoc object1, Object JavaDoc object2) {
36       if (object1 == null || object2 == null) {
37          return 0;
38       }
39       Object JavaDoc[] first = (Object JavaDoc[]) object1;
40       Object JavaDoc[] second = (Object JavaDoc[]) object2;
41       int length = first.length;
42       int result = 0;
43       for (int i = 0; result == 0 && i < length; i++) {
44          result = first[i] != null && second[i] == null ? 0 :
45              first[i] == null && second[i] != null ? 0 : first[i] == null && second[i] == null ? 0
46              : orderSpecifications[i] ? compareResult(first[i], second[i])
47              : compareResult(second[i], first[i]);
48       }
49       return result;
50    }
51
52    /**
53     * It makes the provision of comparision of Boolean and String fields.
54     * @param first
55     * @param second
56     * @return
57     */

58
59    private int compareResult(Object JavaDoc first, Object JavaDoc second) {
60       if (first instanceof String JavaDoc) {
61          return String.CASE_INSENSITIVE_ORDER.compare(first, second);
62       }
63       if (first instanceof Boolean JavaDoc) {
64          boolean f1 = ( (Boolean JavaDoc) first).booleanValue();
65          boolean f2 = ( (Boolean JavaDoc) second).booleanValue();
66          return f1 ^ f2 ? f1 ? 1 : -1 : 0;
67       }
68       return ( (Comparable JavaDoc) first).compareTo(second);
69    }
70
71 }
72
Popular Tags