usr/src/java/rad/org/opensolaris/os/rad/ADRXDR.java
author devjani.ray@oracle.com <devjani.ray@oracle.com>
Fri, 06 May 2011 14:55:38 -0400
changeset 699 34ec90cc612c
parent 691 d880d1c2a97d
child 709 6d87dfa365c0
permissions -rw-r--r--
adrgen5 - documentation generator
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     1
/*
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     2
 * CDDL HEADER START
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     3
 *
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     5
 * Common Development and Distribution License (the "License").
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     6
 * You may not use this file except in compliance with the License.
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     7
 *
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    11
 * and limitations under the License.
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    12
 *
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    18
 *
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    19
 * CDDL HEADER END
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    20
 */
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    21
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    22
/*
681
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
    23
 * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    24
 */
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    25
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    26
package org.opensolaris.os.rad;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    27
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    28
import java.text.ParseException;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    29
import java.io.IOException;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    30
import java.lang.reflect.Array;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    31
import java.math.BigInteger;
600
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
    32
import java.nio.ByteBuffer;
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
    33
import java.nio.CharBuffer;
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
    34
import java.nio.charset.Charset;
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
    35
import java.nio.charset.CharsetEncoder;
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    36
import java.text.SimpleDateFormat;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    37
import java.util.*;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    38
import javax.management.ObjectName;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    39
import javax.management.MalformedObjectNameException;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    40
import javax.management.openmbean.*;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    41
import org.opensolaris.os.xdr.*;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    42
import org.opensolaris.os.adr.*;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    43
681
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
    44
class ADRXDR {
691
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
    45
    /* Type IDs used by the wire protocol */
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
    46
    private static final int DT_VOID = 0;
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
    47
    private static final int DT_BOOLEAN = 1;
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
    48
    private static final int DT_INT = 2;
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
    49
    private static final int DT_STRING = 3;
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
    50
    private static final int DT_ARRAY = 4;
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
    51
    private static final int DT_STRUCT = 5;
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
    52
    private static final int DT_ENUM = 6;
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
    53
    private static final int DT_OPAQUE = 7;
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
    54
    private static final int DT_LONG = 8;
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
    55
    private static final int DT_TIME = 9;
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
    56
    private static final int DT_ULONG = 10;
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
    57
    private static final int DT_UINT = 11;
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
    58
    private static final int DT_OBJECT = 12;
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
    59
    private static final int DT_PASSWORD = 13;
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
    60
    private static final int DT_FLOAT = 14;
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
    61
    private static final int DT_DOUBLE = 15;
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
    62
600
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
    63
    private static final String CHARSET = "ISO-8859-1";
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
    64
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
    65
    private static Charset _charset = Charset.forName(CHARSET);
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
    66
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
    67
    private static char[] byteToChar(byte[] b) {
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
    68
	ByteBuffer bb = ByteBuffer.wrap(b);
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
    69
	CharBuffer cb = _charset.decode(bb);
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
    70
	Arrays.fill(b, (byte)0);
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
    71
	return cb.array();
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
    72
    }
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
    73
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
    74
    private static byte[] charToByte(char[] c) throws IOException {
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
    75
	CharBuffer cb = CharBuffer.wrap(c);
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
    76
	CharsetEncoder encoder = _charset.newEncoder();
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
    77
	if (!encoder.canEncode(cb))
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
    78
	    throw new IOException("Unable to encode password");
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
    79
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
    80
	ByteBuffer bb = encoder.encode(cb);
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
    81
	return bb.array();
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
    82
    }
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
    83
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    84
    private static void setOpenType(Type t, OpenType<?> ot) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    85
	t.setAuxData(null, ot);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    86
    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    87
681
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
    88
    public OpenType<?> getOpenType(Type t) {
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    89
	OpenType<?> type = (OpenType<?>)t.getAuxData(null);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    90
	if (type == null) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    91
	    type = toOpenType(t);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    92
	    setOpenType(t, type);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    93
	}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    94
	return type;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    95
    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    96
681
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
    97
    private EnumMapper enumMapper_;
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
    98
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
    99
    public ADRXDR(EnumMapper mapper) {
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   100
	enumMapper_ = mapper;
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   101
    }
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   102
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   103
    public ADRXDR() {
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   104
	/* PlainEnumMapper doesn't require a client */
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   105
	this(new PlainEnumMapper());
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   106
    }
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   107
691
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   108
    Type readRef(XDRInputStream typestr, List<Type> types, boolean opt)
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   109
	throws IOException {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   110
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   111
	if (opt && !typestr.getBoolean())
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   112
	    return null;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   113
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   114
	int type = typestr.getInteger();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   115
	switch (type) {
691
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   116
	case DT_VOID:
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   117
	    return Type.getType(StdType.VOID);
691
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   118
	case DT_BOOLEAN:
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   119
	    return Type.getType(StdType.BOOLEAN);
691
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   120
	case DT_INT:
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   121
	    return Type.getType(StdType.INTEGER);
691
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   122
	case DT_STRING:
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   123
	    return Type.getType(StdType.STRING);
691
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   124
	case DT_ARRAY:
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   125
	case DT_STRUCT:
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   126
	case DT_ENUM:
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   127
	    return types.get(typestr.getInteger());
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   128
	case DT_OPAQUE:
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   129
	    return Type.getType(StdType.OPAQUE);
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   130
	case DT_LONG:
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   131
	    return Type.getType(StdType.LONG);
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   132
	case DT_TIME:
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   133
	    return Type.getType(StdType.TIME);
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   134
	case DT_ULONG:
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   135
	    return Type.getType(StdType.ULONG);
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   136
	case DT_UINT:
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   137
	    return Type.getType(StdType.UINTEGER);
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   138
	case DT_OBJECT:
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   139
	    return Type.getType(StdType.OBJECT);
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   140
	case DT_PASSWORD:
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   141
	    return Type.getType(StdType.PASSWORD);
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   142
	case DT_FLOAT:
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   143
	    return Type.getType(StdType.FLOAT);
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   144
	case DT_DOUBLE:
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   145
	    return Type.getType(StdType.DOUBLE);
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   146
	default:
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   147
	    throw new IOException("Bad type id: " + type);
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   148
	}
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   149
    }
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   150
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   151
    Type readType(XDRInputStream typestr, List<Type> types) throws IOException {
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   152
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   153
	Type result;
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   154
	int type = typestr.getInteger();
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   155
	switch (type) {
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   156
	case DT_ARRAY:
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   157
	    result = Type.getArrayType(readRef(typestr, types, false));
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   158
	    break;
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   159
	case DT_STRUCT:
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   160
	    String sname = typestr.getString();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   161
	    int nfields = typestr.getInteger();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   162
	    List<Field> fields = new ArrayList<Field>(nfields);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   163
	    for (int i = 0; i < nfields; i++) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   164
		String name = typestr.getString();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   165
		boolean optional = typestr.getBoolean();
691
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   166
		Type ftype = readRef(typestr, types, false);
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   167
		fields.add(new Field(name, ftype, optional));
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   168
	    }
691
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   169
	    result = new Type.ComplexType(sname, fields, null);
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   170
	    break;
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   171
	case DT_ENUM:
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   172
	    String ename = typestr.getString();
699
34ec90cc612c adrgen5 - documentation generator
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 691
diff changeset
   173
	    Type.EnumValue fallback = typestr.getBoolean() ?
34ec90cc612c adrgen5 - documentation generator
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 691
diff changeset
   174
		new Type.EnumValue(typestr.getString(), 0) : null;
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   175
	    int nvalues = typestr.getInteger();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   176
	    List<Type.EnumValue> values =
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   177
		new ArrayList<Type.EnumValue>(nvalues);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   178
	    for (int i = 0; i < nvalues; i++)  {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   179
		values.add(new Type.EnumValue(typestr.getString(),
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   180
		    typestr.getInteger()));
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   181
	    }
691
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   182
	    result = new Type.EnumType(ename, values, fallback);
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   183
	    break;
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   184
	default:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   185
	    throw new IOException("Bad type id: " + type);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   186
	}
691
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   187
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   188
	types.add(result);
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   189
	return result;
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   190
    }
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   191
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   192
    List<Type> readTypes(XDRInputStream typestr) throws IOException {
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   193
	int ntypes = typestr.getInteger();
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   194
	ArrayList<Type> types = new ArrayList<Type>(ntypes);
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   195
	for (int i = 0; i < ntypes; i++)
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   196
	    readType(typestr, types);
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   197
d880d1c2a97d 18184 document and normalize base types test coverage
David Powell <david.e.powell@oracle.com>
parents: 681
diff changeset
   198
	return types;
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   199
    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   200
681
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   201
    OpenType<?> toOpenType(Type type) {
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   202
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   203
	if (type instanceof Type.BuiltinType) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   204
	    Type.BuiltinType bt = (Type.BuiltinType)type;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   205
	    switch (bt.getType()) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   206
	    case VOID:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   207
		return SimpleType.VOID;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   208
	    case BOOLEAN:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   209
		return SimpleType.BOOLEAN;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   210
	    case INTEGER:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   211
		return SimpleType.INTEGER;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   212
	    case STRING:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   213
		return SimpleType.STRING;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   214
	    case OPAQUE:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   215
		return ArrayType.getPrimitiveArrayType(byte[].class);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   216
	    case LONG:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   217
		return SimpleType.LONG;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   218
	    case TIME:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   219
		return SimpleType.DATE;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   220
	    case OBJECT:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   221
		return SimpleType.OBJECTNAME;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   222
	    case UINTEGER:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   223
		return SimpleType.LONG;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   224
	    case ULONG:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   225
		return SimpleType.BIGINTEGER;
560
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   226
	    case PASSWORD:
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   227
		return ArrayType.getPrimitiveArrayType(char[].class);
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   228
	    case FLOAT:
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   229
		return SimpleType.FLOAT;
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   230
	    case DOUBLE:
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   231
		return SimpleType.DOUBLE;
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   232
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   233
	} else if (type instanceof Type.ArrayType) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   234
	    Type atype = ((Type.ArrayType)type).getType();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   235
	    if (atype instanceof Type.BuiltinType) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   236
		Type.BuiltinType bt = (Type.BuiltinType)atype;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   237
		if (bt.getType() == StdType.BOOLEAN)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   238
			return ArrayType.getPrimitiveArrayType(boolean[].class);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   239
		if (bt.getType() == StdType.INTEGER)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   240
			return ArrayType.getPrimitiveArrayType(int[].class);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   241
		if (bt.getType() == StdType.LONG ||
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   242
		    bt.getType() == StdType.UINTEGER)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   243
			return ArrayType.getPrimitiveArrayType(long[].class);
560
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   244
		if (bt.getType() == StdType.PASSWORD)
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   245
			return ArrayType.getPrimitiveArrayType(char[][].class);
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   246
		if (bt.getType() == StdType.FLOAT)
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   247
		    return ArrayType.getPrimitiveArrayType(float[].class);
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   248
		if (bt.getType() == StdType.DOUBLE)
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   249
		    return ArrayType.getPrimitiveArrayType(double[].class);
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   250
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   251
	    try {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   252
		return ArrayType.getArrayType(getOpenType(atype));
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   253
	    } catch (OpenDataException ex) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   254
		/* If readType returns an OpenType of an invalid class */
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   255
		/* Shouldn't happen? */
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   256
		return null;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   257
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   258
	} else if (type instanceof Type.ComplexType) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   259
	    Type.ComplexType ct = (Type.ComplexType)type;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   260
	    List<Field> fields = ct.getFields();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   261
	    String fnames[] = new String[fields.size()];
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   262
	    OpenType<?> ftypes[] = new OpenType<?>[fields.size()];
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   263
	    int i = 0;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   264
	    for (Field field : fields) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   265
		fnames[i] = field.getName();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   266
		ftypes[i] = getOpenType(field.getType());
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   267
		i++;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   268
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   269
	    try {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   270
		String name = ct.getName();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   271
		return new CompositeType(name, name, fnames, fnames, ftypes);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   272
	    } catch (OpenDataException ex) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   273
		System.out.println("ODE caught: " + ex);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   274
		ex.printStackTrace();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   275
		return null;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   276
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   277
	} else if (type instanceof Type.EnumType) {
681
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   278
	    return enumMapper_.toOpenType((Type.EnumType)type);
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   279
	}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   280
	throw new IllegalArgumentException();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   281
    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   282
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   283
    /*
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   284
     * OpenType doesn't have direct analogues for all ADR types.  To correctly
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   285
     * decode what comes off the wire, we need to traverse the OpenType and
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   286
     * ADR types side-by-side.
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   287
     */
681
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   288
    Object readData(Type realtype, XDRInputStream datastr)
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   289
	throws IOException, OpenDataException {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   290
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   291
	if (realtype instanceof Type.BuiltinType) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   292
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   293
	    switch (((Type.BuiltinType)realtype).getType()) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   294
	    case STRING:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   295
		return datastr.getString();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   296
	    case OBJECT: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   297
		String s = datastr.getString();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   298
		try {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   299
		    return (new ADRName(s)).toObjectName();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   300
		} catch (MalformedObjectNameException ex) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   301
		    throw new IOException("Error parsing object name: " + s,
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   302
			ex);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   303
		} catch (NullPointerException ex) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   304
		    /* Can't happen */
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   305
		    throw new IOException("Error parsing object name", ex);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   306
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   307
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   308
	    case TIME: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   309
		String s = datastr.getString();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   310
		SimpleDateFormat f =
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   311
		    new SimpleDateFormat("yyyy-MM-dd HH:mm:ss'Z'");
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   312
		f.setCalendar(Calendar.getInstance(
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   313
		    TimeZone.getTimeZone("UTC")));
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   314
		try {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   315
		    return f.parse(s);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   316
		} catch (ParseException ex) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   317
		    throw new IOException("Error parsing date: " + s, ex);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   318
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   319
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   320
	    case BOOLEAN:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   321
		return datastr.getBoolean();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   322
	    case INTEGER:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   323
		return datastr.getInteger();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   324
	    case LONG:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   325
		return datastr.getHyper();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   326
	    case OPAQUE:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   327
		return datastr.getOpaque();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   328
	    case UINTEGER:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   329
		return datastr.getUInteger();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   330
	    case ULONG:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   331
		return datastr.getUHyper();
560
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   332
	    case PASSWORD:
600
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
   333
		return byteToChar(datastr.getOpaque());
560
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   334
	    case FLOAT:
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   335
		return datastr.getFloat();
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   336
	    case DOUBLE:
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   337
		return datastr.getDouble();
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   338
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   339
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   340
	} else if (realtype instanceof Type.EnumType) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   341
681
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   342
	    Type.EnumType et = (Type.EnumType)realtype;
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   343
	    int index = datastr.getInteger();
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   344
	    if (index > 0 && index <= et.getValues().size())
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   345
		return enumMapper_.fromWire(et, et.getValues().get(index - 1));
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   346
	    throw new IOException("Enumeration value out of range:");
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   347
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   348
	} else if (realtype instanceof Type.ArrayType) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   349
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   350
	    Type atype = ((Type.ArrayType)realtype).getType();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   351
	    int count = datastr.getInteger();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   352
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   353
	    if (atype instanceof Type.BuiltinType) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   354
		switch (((Type.BuiltinType)atype).getType()) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   355
		case STRING: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   356
		    String result[] = new String[count];
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   357
		    for (int i = 0; i < count; i++)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   358
			result[i] = datastr.getString();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   359
		    return result;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   360
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   361
		case OBJECT: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   362
		    ObjectName result[] = new ObjectName[count];
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   363
		    for (int i = 0; i < count; i++)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   364
			result[i] = (ObjectName)readData(atype, datastr);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   365
		    return result;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   366
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   367
		case TIME: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   368
		    Date result[] = new Date[count];
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   369
		    for (int i = 0; i < count; i++)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   370
			result[i] = (Date)readData(atype, datastr);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   371
		    return result;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   372
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   373
		case BOOLEAN: {
560
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   374
		    Boolean result[] = new Boolean[count];
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   375
		    for (int i = 0; i < count; i++)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   376
			result[i] = datastr.getBoolean();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   377
		    return result;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   378
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   379
		case INTEGER: {
560
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   380
		    Integer result[] = new Integer[count];
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   381
		    for (int i = 0; i < count; i++)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   382
			result[i] = datastr.getInteger();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   383
		    return result;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   384
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   385
		case LONG: {
560
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   386
		    Long result[] = new Long[count];
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   387
		    for (int i = 0; i < count; i++)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   388
			result[i] = datastr.getHyper();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   389
		    return result;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   390
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   391
		case OPAQUE:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   392
		    throw new IOException("Opaque arrays not supported yet.");
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   393
		case UINTEGER: {
560
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   394
		    Long result[] = new Long[count];
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   395
		    for (int i = 0; i < count; i++)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   396
			result[i] = datastr.getUInteger();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   397
		    return result;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   398
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   399
		case ULONG: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   400
		    BigInteger result[] = new BigInteger[count];
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   401
		    for (int i = 0; i < count; i++)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   402
			result[i] = datastr.getUHyper();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   403
		    return result;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   404
		}
560
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   405
		case PASSWORD: {
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   406
		    char result[][] = new char[count][];
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   407
		    for (int i = 0; i < count; i++)
600
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
   408
			result[i] = byteToChar(datastr.getOpaque());
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
   409
560
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   410
		    return result;
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   411
		}
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   412
		case FLOAT: {
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   413
		    Float result[] = new Float[count];
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   414
		    for (int i = 0; i < count; i++)
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   415
			result[i] = datastr.getFloat();
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   416
		    return result;
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   417
		}
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   418
		case DOUBLE: {
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   419
		    Double result[] = new Double[count];
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   420
		    for (int i = 0; i < count; i++)
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   421
			result[i] = datastr.getDouble();
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   422
		    return result;
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   423
		}
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   424
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   425
	    } else if (atype instanceof Type.EnumType) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   426
		String result[] = new String[count];
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   427
		for (int i = 0; i < count; i++)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   428
		    result[i] = datastr.getString();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   429
		return result;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   430
	    } else if (atype instanceof Type.ComplexType) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   431
		CompositeData result[] = new CompositeData[count];
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   432
		for (int i = 0; i < count; i++)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   433
		    result[i] = (CompositeData)readData(atype, datastr);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   434
		return result;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   435
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   436
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   437
	} else if (realtype instanceof Type.ComplexType) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   438
	    CompositeType ct = (CompositeType)getOpenType(realtype);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   439
	    Type.ComplexType rct = (Type.ComplexType)realtype;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   440
	    Map<String, Object> fields = new HashMap<String, Object>();
681
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   441
	    for (Field field : rct.getFields())
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   442
		fields.put(field.getName(),
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   443
		    readOptional(field.getType(), datastr));
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   444
	    return new CompositeDataSupport(ct, fields);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   445
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   446
	}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   447
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   448
	throw new IOException("Out of spec type when reading data:" + realtype);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   449
    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   450
681
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   451
    Object readOptional(Type realtype, XDRInputStream datastr)
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   452
	throws IOException, OpenDataException {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   453
	if (!datastr.getBoolean())
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   454
	    return null;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   455
	return readData(realtype, datastr);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   456
    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   457
556
4db6c449f366 16806 INT-6: Add support for interface stability/commitment
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 516
diff changeset
   458
    static Stability readStability(XDRInputStream datastr)
4db6c449f366 16806 INT-6: Add support for interface stability/commitment
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 516
diff changeset
   459
	throws IOException {
4db6c449f366 16806 INT-6: Add support for interface stability/commitment
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 516
diff changeset
   460
4db6c449f366 16806 INT-6: Add support for interface stability/commitment
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 516
diff changeset
   461
	int stability = datastr.getInteger();
4db6c449f366 16806 INT-6: Add support for interface stability/commitment
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 516
diff changeset
   462
	switch (stability) {
4db6c449f366 16806 INT-6: Add support for interface stability/commitment
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 516
diff changeset
   463
	case 1:
4db6c449f366 16806 INT-6: Add support for interface stability/commitment
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 516
diff changeset
   464
	    return Stability.PRIVATE;
4db6c449f366 16806 INT-6: Add support for interface stability/commitment
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 516
diff changeset
   465
	case 2:
4db6c449f366 16806 INT-6: Add support for interface stability/commitment
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 516
diff changeset
   466
	    return Stability.UNCOMMITTED;
4db6c449f366 16806 INT-6: Add support for interface stability/commitment
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 516
diff changeset
   467
	case 3:
4db6c449f366 16806 INT-6: Add support for interface stability/commitment
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 516
diff changeset
   468
	    return Stability.COMMITTED;
4db6c449f366 16806 INT-6: Add support for interface stability/commitment
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 516
diff changeset
   469
	default:
4db6c449f366 16806 INT-6: Add support for interface stability/commitment
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 516
diff changeset
   470
	    throw new IOException("Invalid stability value: " + stability);
4db6c449f366 16806 INT-6: Add support for interface stability/commitment
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 516
diff changeset
   471
	}
4db6c449f366 16806 INT-6: Add support for interface stability/commitment
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 516
diff changeset
   472
    }
4db6c449f366 16806 INT-6: Add support for interface stability/commitment
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 516
diff changeset
   473
681
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   474
    void writeData(XDROutputStream xdrs, Type realtype, Object d)
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   475
	throws IOException {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   476
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   477
	if (realtype instanceof Type.BuiltinType) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   478
	    switch (((Type.BuiltinType)realtype).getType()) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   479
	    case STRING:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   480
		xdrs.putString((String)d);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   481
		break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   482
	    case OBJECT:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   483
		xdrs.putString((new ADRName((ObjectName)d)).toString());
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   484
		break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   485
	    case TIME:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   486
		SimpleDateFormat f =
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   487
		    new SimpleDateFormat("yyyy-MM-dd HH:mm:ss'Z'");
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   488
		f.setCalendar(Calendar.getInstance(
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   489
		    TimeZone.getTimeZone("UTC")));
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   490
		xdrs.putString(f.format((Date)d));
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   491
		break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   492
	    case BOOLEAN:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   493
		xdrs.putBoolean((Boolean)d);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   494
		break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   495
	    case INTEGER:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   496
		xdrs.putInteger((Integer)d);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   497
		break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   498
	    case LONG:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   499
		xdrs.putHyper((Long)d);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   500
		break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   501
	    case OPAQUE:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   502
		xdrs.putOpaque((byte[])d);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   503
		break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   504
	    case UINTEGER:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   505
		xdrs.putUInteger((Long)d);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   506
		break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   507
	    case ULONG:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   508
		xdrs.putUHyper((BigInteger)d);
560
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   509
		break;
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   510
	    case PASSWORD:
600
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
   511
		char[] c = (char[])d;
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
   512
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
   513
		byte[] b = charToByte(c);
560
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   514
		xdrs.putOpaque(b, 0, b.length);
600
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
   515
		Arrays.fill(b, (byte)0);
560
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   516
		break;
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   517
	    case FLOAT:
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   518
		xdrs.putFloat((Float)d);
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   519
		break;
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   520
	    case DOUBLE:
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   521
		xdrs.putDouble((Double)d);
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   522
		break;
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   523
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   524
	} else if (realtype instanceof Type.EnumType) {
681
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   525
	    Type.EnumType et = (Type.EnumType)realtype;
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   526
	    String value = enumMapper_.toWire(et, d);
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   527
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   528
	    int index = 1;
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   529
	    for (Type.EnumValue ev : et.getValues()) {
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   530
		if (ev.getName().equals(value))
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   531
		    break;
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   532
		index++;
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   533
	    }
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   534
	    if (index > et.getValues().size())
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   535
		index = 0;
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   536
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   537
	    xdrs.putInteger(index);
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   538
	} else if (realtype instanceof Type.ArrayType) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   539
	    Type rat = ((Type.ArrayType)realtype).getType();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   540
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   541
	    int len = Array.getLength(d);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   542
	    xdrs.putInteger(len);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   543
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   544
	    if (rat instanceof Type.BuiltinType) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   545
		switch (((Type.BuiltinType)rat).getType()) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   546
		case STRING: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   547
		    String result[] = (String[]) d;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   548
		    for (int i = 0; i < len; i++)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   549
			xdrs.putString(result[i]);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   550
		    break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   551
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   552
		case OBJECT: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   553
		    ObjectName result[] = (ObjectName[]) d;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   554
		    for (int i = 0; i < len; i++)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   555
			writeData(xdrs, rat, result[i]);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   556
		    break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   557
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   558
		case TIME: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   559
		    Date result[] = (Date[]) d;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   560
		    for (int i = 0; i < len; i++)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   561
			writeData(xdrs, rat, result[i]);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   562
		    break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   563
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   564
		case BOOLEAN: {
560
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   565
		    Boolean result[] = (Boolean[])d;
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   566
		    for (int i = 0; i < len; i++)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   567
			xdrs.putBoolean(result[i]);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   568
		    break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   569
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   570
		case INTEGER: {
560
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   571
		    Integer result[] = (Integer[])d;
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   572
		    for (int i = 0; i < len; i++)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   573
			xdrs.putInteger(result[i]);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   574
		    break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   575
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   576
		case LONG: {
560
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   577
		    Long result[] = (Long[])d;
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   578
		    for (int i = 0; i < len; i++)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   579
			xdrs.putHyper(result[i]);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   580
		    break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   581
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   582
		case OPAQUE:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   583
		    throw new IOException("Opaque arrays not supported yet.");
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   584
		case UINTEGER: {
560
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   585
		    Long result[] = (Long[])d;
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   586
		    for (int i = 0; i < len; i++)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   587
			xdrs.putUInteger(result[i]);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   588
		    break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   589
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   590
		case ULONG: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   591
		    BigInteger result[] = (BigInteger[])d;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   592
		    for (int i = 0; i < len; i++)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   593
			xdrs.putUHyper(result[i]);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   594
		    break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   595
		}
560
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   596
		case PASSWORD: {
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   597
		    char result[][] = (char [][])d;
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   598
		    for (int i = 0; i < len; i++) {
600
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
   599
			byte[] b = charToByte(result[i]);
560
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   600
			xdrs.putOpaque(b, 0, b.length);
600
c16a7e34499d 17304 - Implement password type
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 560
diff changeset
   601
			Arrays.fill(b, (byte)0);
560
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   602
		    }
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   603
		    break;
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   604
		}
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   605
		case FLOAT: {
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   606
		    Float result[] = (Float [])d;
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   607
		    for (int i = 0; i < len; i++)
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   608
			xdrs.putFloat(result[i]);
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   609
		    break;
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   610
		}
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   611
		case DOUBLE: {
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   612
		    Double result[] = (Double [])d;
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   613
		    for (int i = 0; i < len; i++)
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   614
			xdrs.putDouble(result[i]);
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   615
		    break;
6afac16d07d2 16876 - INT-3 : Add a new type to the IDL and protocol to represent sensitive data (passwords)
Shadrack Kilemba <Shadrack.Kilemba@Oracle.COM>
parents: 556
diff changeset
   616
		}
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   617
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   618
	    } else if (rat instanceof Type.EnumType) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   619
		String result[] = (String[]) d;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   620
		for (int i = 0; i < len; i++)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   621
		    xdrs.putString(result[i]);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   622
	    } else if (rat instanceof Type.ComplexType) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   623
		CompositeData result[] = (CompositeData[]) d;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   624
		for (int i = 0; i < len; i++)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   625
		    writeData(xdrs, rat, result[i]);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   626
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   627
	} else if (realtype instanceof Type.ComplexType) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   628
	    CompositeData cd = (CompositeData)d;
681
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   629
	    for (Field f : ((Type.ComplexType)realtype).getFields())
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   630
		writeOptional(xdrs, f.getType(), cd.get(f.getName()));
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   631
	} else {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   632
	    throw new IOException("Out of spec Type when writing data: " +
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   633
		realtype);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   634
	}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   635
    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   636
681
e3ebf98ba2fd 18035 enumeration fallback values
David Powell <david.e.powell@oracle.com>
parents: 600
diff changeset
   637
    void writeOptional(XDROutputStream xdrs, Type realtype, Object d)
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   638
	throws IOException {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   639
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   640
	if (d == null) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   641
	    xdrs.putBoolean(false);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   642
	} else {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   643
	    xdrs.putBoolean(true);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   644
	    writeData(xdrs, realtype, d);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   645
	}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   646
    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   647
}