// Decompiled by Jad v1.5.7f. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) braces deadcode fieldsfirst 
// Source File Name:   TIMEZONETAB.java
// Class Version:      45.3

package oracle.sql;

import java.io.PrintStream;
import java.sql.*;
import java.util.*;

// Referenced classes of package oracle.sql:
//            OffsetDST, TRANSDUMP

// flag ACC_SUPER is set
public class TIMEZONETAB
{
    // Constants:          219
    // Interfaces:         0
    // Fields:             6
    // Methods:            9
    // Class Attributes:   1


    private static Hashtable zonetab = new Hashtable();
    private static int OFFSET_HOUR = 20;
    private static int OFFSET_MINUTE = 60;
    private static int HOUR_MILLISECOND = 0x36ee80;
    private static int MINUTE_MILLISECOND = 60000;
    private static int BYTE_SIZE = 10;

    // Decompiling method: <init>  Signature: ()V
    // Max stack: 1, #locals: 1, #params: 1
    // Code length: 5 bytes, Code offset: 2394
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name this Type Loracle/sql/TIMEZONETAB; At 0 5 Range 0 4 Init 0 fixed
    // RetValue   1 added: Name <returnValue> Type V At 0 5 Range 0 4 Init 0 fixed
    public TIMEZONETAB()
    {
        super();
        return;
    }

    // Decompiling method: addTrans  Signature: ([BI)V
    // Max stack: 7, #locals: 13, #params: 2
    // Code length: 270 bytes, Code offset: 2437
    // Line Number Table found: 25 entries
    // Parameter  0 added: Name abyte0 Type [B At 0 270 Range 0 269 Init 0
    // Parameter  1 added: Name i Type I At 0 270 Range 0 269 Init 0
    // RetValue  13 added: Name <returnValue> Type V At 0 270 Range 0 269 Init 0 fixed
    // LocalVar   4 added: Name ai Type [I At 5 194 Range 5 198 Init 5
    // LocalVar   2 added: Name j Type I At 14 227 Range 14 240 Init 14
    // LocalVar   5 added: Name vector Type Ljava/util/Vector; At 23 242 Range 23 264 Init 23
    // LocalVar   6 added: Name flag Type Z At 26 214 Range 26 239 Init 26
    // LocalVar   6 chged: Name k Oname flag Type I At 238 2 Range 26 239 Init 26
    // LocalVar   7 added: Name flag Type Z At 32 26 Range 32 57 Init 32
    // LocalVar   7 chged: Name l Oname flag Type I At 56 2 Range 32 57 Init 32
    // LocalVar   8 added: Name i1 Type I At 82 10 Range 82 91 Init 82
    // LocalVar   3 added: Name calendar Type Ljava/util/Calendar; At 87 73 Range 87 159 Init 87
    // LocalVar   9 added: Name l1 Type J At 166 51 Range 166 216 Init 166
    // LocalVar  11 added: Name j1 Type I At 195 27 Range 195 221 Init 195
    // LocalVar  12 added: Name byte0 Type B At 203 21 Range 203 223 Init 203
    public static void addTrans(byte abyte0[], int i)
    {
        int ai[] = new int[BYTE_SIZE];
        int j = abyte0[0] & 0xff;
        Vector vector = new Vector(j);
        for(int k = 1; k < j * BYTE_SIZE; k += BYTE_SIZE)
        {
            for(int l = 0; l < BYTE_SIZE; l++)
            {
                ai[l] = abyte0[l + k] & 0xff;
            }

            int i1 = (ai[0] - 100) * 100 + (ai[1] - 100);
            Calendar calendar = Calendar.getInstance();
            calendar.set(1, i1);
            calendar.set(2, ai[2] - 1);
            calendar.set(5, ai[3]);
            calendar.set(11, ai[4] - 1);
            calendar.set(12, ai[5] - 1);
            calendar.set(13, ai[6] - 1);
            calendar.set(14, 0);
            long l1 = calendar.getTime().getTime();
            int j1 = (ai[7] - OFFSET_HOUR) * HOUR_MILLISECOND + (ai[8] - OFFSET_MINUTE) * MINUTE_MILLISECOND;
            byte byte0 = (byte)ai[9];
            vector.addElement(new OffsetDST(new Timestamp(l1), j1, byte0));
        }

        zonetab.put(new Integer(i & 0x1ff), vector);
        return;
    }

    // Decompiling method: checkID  Signature: (I)Z
    // Max stack: 3, #locals: 4, #params: 1
    // Code length: 58 bytes, Code offset: 2841
    // Line Number Table found: 11 entries
    // Parameter  0 added: Name i Type I At 0 58 Range 0 57 Init 0
    // RetValue   4 added: Name <returnValue> Type Z At 0 58 Range 0 57 Init 0 fixed
    // LocalVar   1 added: Name j Type I At 5 20 Range 5 24 Init 5
    // LocalVar   2 added: Name ai Type [I At 14 1 Range 14 14 Init 14
    // LocalVar   2 added: Name ai1 Type [I At 18 8 Range 18 25 Init 18
    // LocalVar   3 added: Name flag Type Z At 20 25 Range 20 44 Init 20
    // LocalVar   3 chged: Name k Oname flag Type I At 34 1 Range 20 44 Init 20
    // LocalVar   2 name ai1([I) merged out into ai([I)
    public static boolean checkID(int i)
    {
        int j = i & 0x1ff;
        int ai[] = new int[zonetab.size()];
        ai = getIDs();
        int k;
        for(k = 0; k < zonetab.size(); k++)
        {
            if(j == ai[k])
            {
                break;
            }
        }

        return k == zonetab.size();
    }

    // Decompiling method: displayTable  Signature: (I)V
    // Max stack: 4, #locals: 7, #params: 1
    // Code length: 152 bytes, Code offset: 2977
    // Line Number Table found: 12 entries
    // Parameter  0 added: Name i Type I At 0 152 Range 0 151 Init 0
    // RetValue   7 added: Name <returnValue> Type V At 0 152 Range 0 151 Init 0 fixed
    // LocalVar   1 added: Name vector Type Ljava/util/Vector; At 7 1 Range 7 7 Init 7
    // LocalVar   2 added: Name timestamp Type Ljava/sql/Timestamp; At 16 1 Range 16 16 Init 16
    // LocalVar   3 added: Name flag Type Z At 18 1 Range 18 18 Init 18
    // LocalVar   5 added: Name flag1 Type Z At 20 2 Range 20 21 Init 20
    // LocalVar   1 added: Name vector1 Type Ljava/util/Vector; At 39 106 Range 39 144 Init 39
    // LocalVar   4 added: Name enumeration Type Ljava/util/Enumeration; At 44 2 Range 44 45 Init 44
    // LocalVar   6 added: Name flag2 Type Z At 47 97 Range 47 143 Init 47
    // LocalVar   6 chged: Name j Oname flag2 Type I At 142 2 Range 47 143 Init 47
    // LocalVar   1 name vector1(Ljava/util/Vector;) merged out into vector(Ljava/util/Vector;)
    public static void displayTable(int i)
    {
        Vector vector = new Vector();
        Timestamp timestamp = new Timestamp(0L);
        boolean flag = false;
        boolean flag1 = false;
        vector = (Vector)zonetab.get(new Integer(i));
        Enumeration enumeration = vector.elements();
        for(int j = 0; j < vector.size(); j++)
        {
            System.out.print(((OffsetDST)vector.elementAt(j)).getTimestamp().toString());
            System.out.print("    " + ((OffsetDST)vector.elementAt(j)).getOFFSET());
            System.out.println("    " + ((OffsetDST)vector.elementAt(j)).getDSTFLAG());
        }

        return;
    }

    // Decompiling method: getIDs  Signature: ()[I
    // Max stack: 3, #locals: 3, #params: 0
    // Code length: 50 bytes, Code offset: 3211
    // Line Number Table found: 7 entries
    // RetValue   3 added: Name <returnValue> Type [I At 0 50 Range 0 49 Init 0 fixed
    // LocalVar   0 added: Name ai Type [I At 8 41 Range 8 48 Init 8
    // LocalVar   1 added: Name flag Type Z At 10 16 Range 10 25 Init 10
    // LocalVar   2 added: Name enumeration Type Ljava/util/Enumeration; At 17 23 Range 17 39 Init 17
    // LocalVar   1 chged: Name i Oname flag Type I At 23 3 Range 10 25 Init 10
    private static int[] getIDs()
    {
        int ai[] = new int[zonetab.size()];
        int i = 0;
        for(Enumeration enumeration = zonetab.keys(); enumeration.hasMoreElements();)
        {
            ai[i++] = ((Integer)enumeration.nextElement()).intValue();
        }

        return ai;
    }

    // Decompiling method: getLocalOffset  Signature: (Ljava/util/Calendar;ILoracle/sql/OffsetDST;)B
    // Max stack: 5, #locals: 21, #params: 3
    // Code length: 632 bytes, Code offset: 3323
    // Line Number Table found: 79 entries
    // Parameter  0 added: Name calendar Type Ljava/util/Calendar; At 0 632 Range 0 631 Init 0
    // Parameter  1 added: Name i Type I At 0 632 Range 0 631 Init 0
    // Parameter  2 added: Name offsetdst Type Loracle/sql/OffsetDST; At 0 632 Range 0 631 Init 0
    // RetValue  21 added: Name <returnValue> Type B At 0 632 Range 0 631 Init 0 fixed
    // LocalVar   3 added: Name vector Type Ljava/util/Vector; At 7 1 Range 7 7 Init 7
    // LocalVar   6 added: Name flag Type Z At 9 608 Range 9 616 Init 9
    // LocalVar   9 added: Name flag1 Type Z At 12 619 Range 12 630 Init 12
    // LocalVar  10 added: Name calendar1 Type Ljava/util/Calendar; At 17 456 Range 17 472 Init 17
    // LocalVar  11 added: Name calendar2 Type Ljava/util/Calendar; At 22 559 Range 22 580 Init 22
    // LocalVar  12 added: Name calendar3 Type Ljava/util/Calendar; At 27 444 Range 27 470 Init 27
    // LocalVar  14 added: Name flag2 Type Z At 49 270 Range 49 318 Init 49
    // LocalVar  15 added: Name flag3 Type Z At 52 284 Range 52 335 Init 52
    // LocalVar  16 added: Name calendar4 Type Ljava/util/Calendar; At 57 71 Range 57 127 Init 57
    // LocalVar  17 added: Name timestamp Type Ljava/sql/Timestamp; At 137 41 Range 137 177 Init 137
    // LocalVar  18 added: Name flag4 Type Z At 140 2 Range 140 141 Init 140
    // LocalVar   3 added: Name vector1 Type Ljava/util/Vector; At 163 452 Range 163 614 Init 163
    // LocalVar  13 added: Name enumeration Type Ljava/util/Enumeration; At 168 64 Range 168 231 Init 168
    // LocalVar  19 added: Name flag5 Type Z At 171 80 Range 171 250 Init 171
    // LocalVar  19 chged: Name j Oname flag5 Type I At 240 2 Range 171 250 Init 171
    // LocalVar   6 chged: Name k Oname flag Type I At 253 364 Range 9 616 Init 9
    // LocalVar  14 chged: Name l Oname flag2 Type I At 259 2 Range 49 318 Init 49
    // LocalVar   4 added: Name i1 Type I At 270 97 Range 270 366 Init 270
    // LocalVar  15 chged: Name j1 Oname flag3 Type I At 273 2 Range 52 335 Init 52
    // LocalVar   5 added: Name k1 Type I At 284 113 Range 284 396 Init 284
    // LocalVar   7 added: Name byte0 Type B At 298 247 Range 298 544 Init 298
    // LocalVar   8 added: Name byte1 Type B At 312 231 Range 312 542 Init 312
    // LocalVar  20 added: Name flag Type Z At 415 4 Range 415 418 Init 415
    // LocalVar   9 chged: Name byte2 Oname flag1 Type B At 629 2 Range 12 630 Init 12
    // LocalVar   3 name vector1(Ljava/util/Vector;) merged out into vector(Ljava/util/Vector;)
    public static byte getLocalOffset(Calendar calendar, int i, OffsetDST offsetdst)
        throws NullPointerException, SQLException
    {
        Vector vector = new Vector();
        int l = 0;
        byte byte2 = 0;
        Calendar calendar1 = Calendar.getInstance();
        Calendar calendar2 = Calendar.getInstance();
        Calendar calendar3 = Calendar.getInstance();
        calendar3.setTime(new Timestamp(calendar.getTime().getTime()));
        int i1 = 0;
        int j1 = 0;
        Calendar calendar4 = Calendar.getInstance();
        calendar4.set(1, calendar3.get(1));
        calendar4.set(2, calendar3.get(2));
        calendar4.set(5, 1);
        calendar4.set(11, 0);
        calendar4.set(12, 0);
        calendar4.set(13, 0);
        calendar4.set(14, 0);
        Timestamp timestamp = new Timestamp(calendar4.getTime().getTime());
        boolean flag = false;
        vector = (Vector)zonetab.get(new Integer(i & 0x1ff));
        Enumeration enumeration = vector.elements();
        int k1;
        for(k1 = 0; enumeration.hasMoreElements(); k1++)
        {
            if(!timestamp.before(((OffsetDST)enumeration.nextElement()).getTimestamp()))
            {
                continue;
            }
            if(k1 == 0)
            {
                throw new SQLException();
            }
            i1 = k1 - 1;
            j1 = k1;
            l = k1;
            break;
        }

        if(k1 == vector.size())
        {
            l = k1 - 1;
        } else
        {
            int j = ((OffsetDST)vector.elementAt(i1)).getOFFSET();
            int k = ((OffsetDST)vector.elementAt(j1)).getOFFSET();
            byte byte0 = ((OffsetDST)vector.elementAt(i1)).getDSTFLAG();
            byte byte1 = ((OffsetDST)vector.elementAt(j1)).getDSTFLAG();
            calendar1.setTime(((OffsetDST)vector.elementAt(i1)).getTimestamp());
            calendar2.setTime(((OffsetDST)vector.elementAt(j1)).getTimestamp());
            calendar1.add(10, j / HOUR_MILLISECOND);
            calendar1.add(12, (j % HOUR_MILLISECOND) / MINUTE_MILLISECOND);
            calendar2.add(10, k / HOUR_MILLISECOND);
            calendar2.add(12, (k % HOUR_MILLISECOND) / MINUTE_MILLISECOND);
            boolean flag1 = calendar3.before(calendar1);
            if(flag1)
            {
                l -= 2;
            } else
            if(calendar3.before(calendar2) && !calendar3.equals(calendar2))
            {
                l--;
            } else
            if(byte0 < byte1)
            {
                calendar3.add(10, -1);
                if(calendar3.before(calendar1))
                {
                    l--;
                }
            }
            if(byte0 < byte1)
            {
                calendar2.add(10, -1);
                if(calendar2.after(calendar))
                {
                    byte2 = 0;
                } else
                {
                    calendar2.add(10, 1);
                    if(calendar2.after(calendar))
                    {
                        byte2 = 1;
                    } else
                    {
                        byte2 = 0;
                    }
                }
            } else
            if(byte1 < byte0)
            {
                calendar2.add(10, 1);
                if(calendar2.before(calendar))
                {
                    byte2 = 0;
                } else
                {
                    calendar2.add(10, -1);
                    if(calendar2.after(calendar))
                    {
                        byte2 = 0;
                    } else
                    {
                        byte2 = 1;
                    }
                }
            }
        }
        offsetdst.setOFFSET(((OffsetDST)vector.elementAt(l)).getOFFSET());
        offsetdst.setDSTFLAG(((OffsetDST)vector.elementAt(l)).getDSTFLAG());
        return byte2;
    }

    // Decompiling method: getOffset  Signature: (Ljava/util/Calendar;I)I
    // Max stack: 5, #locals: 8, #params: 2
    // Code length: 127 bytes, Code offset: 4317
    // Line Number Table found: 15 entries
    // Parameter  0 added: Name calendar Type Ljava/util/Calendar; At 0 127 Range 0 126 Init 0
    // Parameter  1 added: Name i Type I At 0 127 Range 0 126 Init 0
    // RetValue   8 added: Name <returnValue> Type I At 0 127 Range 0 126 Init 0 fixed
    // LocalVar   2 added: Name vector Type Ljava/util/Vector; At 7 1 Range 7 7 Init 7
    // LocalVar   4 added: Name flag Type Z At 9 2 Range 9 10 Init 9
    // LocalVar   5 added: Name flag1 Type Z At 12 2 Range 12 13 Init 12
    // LocalVar   6 added: Name timestamp Type Ljava/sql/Timestamp; At 28 37 Range 28 64 Init 28
    // LocalVar   2 added: Name vector1 Type Ljava/util/Vector; At 51 64 Range 51 114 Init 51
    // LocalVar   3 added: Name enumeration Type Ljava/util/Enumeration; At 56 44 Range 56 99 Init 56
    // LocalVar   7 added: Name flag2 Type Z At 58 52 Range 58 109 Init 58
    // LocalVar   7 chged: Name j Oname flag2 Type I At 108 2 Range 58 109 Init 58
    // LocalVar   4 added: Name k Type I At 112 5 Range 112 116 Init 112
    // LocalVar   2 name vector1(Ljava/util/Vector;) merged out into vector(Ljava/util/Vector;)
    // LocalVar   4 chged: Name l Oname flag Type I At 9 2 Range 9 10 Init 9
    // LocalVar   4 name k(I) merged out into l(I)
    public static int getOffset(Calendar calendar, int i)
        throws NullPointerException, SQLException
    {
        Vector vector = new Vector();
        int j = 0;
        boolean flag = false;
        Timestamp timestamp = new Timestamp(calendar.getTime().getTime());
        vector = (Vector)zonetab.get(new Integer(i & 0x1ff));
        Enumeration enumeration = vector.elements();
        int k;
        for(k = 0; enumeration.hasMoreElements(); k++)
        {
            if(!timestamp.before(((OffsetDST)enumeration.nextElement()).getTimestamp()))
            {
                continue;
            }
            if(k == 0)
            {
                throw new SQLException();
            }
            break;
        }

        j = k - 1;
        return ((OffsetDST)vector.elementAt(j)).getOFFSET();
    }

    // Decompiling method: updateTable  Signature: (Ljava/sql/Connection;I)V
    // Max stack: 2, #locals: 3, #params: 2
    // Code length: 24 bytes, Code offset: 4550
    // Line Number Table found: 5 entries
    // Parameter  0 added: Name connection Type Ljava/sql/Connection; At 0 24 Range 0 23 Init 0
    // Parameter  1 added: Name i Type I At 0 24 Range 0 23 Init 0
    // RetValue   3 added: Name <returnValue> Type V At 0 24 Range 0 23 Init 0 fixed
    // LocalVar   2 added: Name abyte0 Type [B At 5 14 Range 5 18 Init 5
    public static void updateTable(Connection connection, int i)
        throws SQLException, NullPointerException
    {
        byte abyte0[] = TRANSDUMP.getTransitions(connection, i);
        if(abyte0 == null)
        {
            throw new NullPointerException();
        } else
        {
            addTrans(abyte0, i);
            return;
        }
    }

    // Decompiling method: <clinit>  Signature: ()V
    // Max stack: 2, #locals: 0, #params: 0
    // Code length: 36 bytes, Code offset: 2296
    // Line Number Table found: 7 entries
    // RetValue   0 added: Name <returnValue> Type V At 0 36 Range 0 35 Init 0 fixed
    static 
    {
        /* zonetab = new Hashtable(); */
        /* OFFSET_HOUR = 20; */
        /* OFFSET_MINUTE = 60; */
        /* HOUR_MILLISECOND = 0x36ee80; */
        /* MINUTE_MILLISECOND = 60000; */
        /* BYTE_SIZE = 10; */
    }
}
