usr/src/java/rad/org/opensolaris/os/rad/ADRXDR.java
author devjani.ray@oracle.com <devjani.ray@oracle.com>
Mon, 16 Aug 2010 17:20:07 -0400
changeset 556 4db6c449f366
parent 516 96029ce1545c
child 560 6afac16d07d2
permissions -rw-r--r--
16806 INT-6: Add support for interface stability/commitment
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
/*
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    23
 * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
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;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    32
import java.text.SimpleDateFormat;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    33
import java.util.*;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    34
import javax.management.ObjectName;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    35
import javax.management.MalformedObjectNameException;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    36
import javax.management.openmbean.*;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    37
import org.opensolaris.os.xdr.*;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    38
import org.opensolaris.os.adr.*;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    39
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    40
public class ADRXDR {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    41
    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
    42
	t.setAuxData(null, ot);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    43
    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    44
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    45
    public static OpenType<?> getOpenType(Type t) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    46
	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
    47
	if (type == null) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    48
	    type = toOpenType(t);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    49
	    setOpenType(t, type);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    50
	}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    51
	return type;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    52
    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    53
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    54
    static Type readType(XDRInputStream typestr) throws IOException {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    55
	return readType(typestr, false);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    56
    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    57
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    58
    static Type readType(XDRInputStream typestr, boolean opt)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    59
	throws IOException {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    60
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    61
	/* Special case for error types */
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    62
	if (opt && !typestr.getBoolean())
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    63
	    return null;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    64
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    65
	int type = typestr.getInteger();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    66
	switch (type) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    67
	case 0:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    68
	    return Type.getType(StdType.VOID);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    69
	case 1:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    70
	    return Type.getType(StdType.BOOLEAN);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    71
	case 2:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    72
	    return Type.getType(StdType.INTEGER);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    73
	case 3:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    74
	    return Type.getType(StdType.STRING);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    75
	case 4:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    76
	    return Type.getArrayType(readType(typestr));
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    77
	case 5:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    78
	    String sname = typestr.getString();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    79
	    int nfields = typestr.getInteger();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    80
	    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
    81
	    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
    82
		String name = typestr.getString();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    83
		boolean optional = typestr.getBoolean();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    84
		Type ftype = readType(typestr);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    85
		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
    86
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    87
	    return new Type.ComplexType(sname, fields, null);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    88
	case 6:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    89
	    String ename = typestr.getString();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    90
	    int nvalues = typestr.getInteger();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    91
	    List<Type.EnumValue> values =
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    92
		new ArrayList<Type.EnumValue>(nvalues);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    93
	    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
    94
		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
    95
		    typestr.getInteger()));
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    96
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    97
	    return new Type.EnumType(ename, values);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    98
	case 7:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    99
	    return Type.getType(StdType.OPAQUE);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   100
	case 8:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   101
	    return Type.getType(StdType.LONG);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   102
	case 9:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   103
	    return Type.getType(StdType.TIME);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   104
	case 10:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   105
	    return Type.getType(StdType.ULONG);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   106
	case 11:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   107
	    return Type.getType(StdType.UINTEGER);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   108
	case 12:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   109
	    return Type.getType(StdType.OBJECT);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   110
	default:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   111
	    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
   112
	}
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
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   115
    static OpenType<?> toOpenType(Type type) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   116
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   117
	if (type instanceof Type.BuiltinType) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   118
	    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
   119
	    switch (bt.getType()) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   120
	    case VOID:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   121
		return SimpleType.VOID;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   122
	    case BOOLEAN:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   123
		return SimpleType.BOOLEAN;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   124
	    case INTEGER:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   125
		return SimpleType.INTEGER;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   126
	    case STRING:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   127
		return SimpleType.STRING;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   128
	    case OPAQUE:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   129
		return ArrayType.getPrimitiveArrayType(byte[].class);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   130
	    case LONG:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   131
		return SimpleType.LONG;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   132
	    case TIME:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   133
		return SimpleType.DATE;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   134
	    case OBJECT:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   135
		return SimpleType.OBJECTNAME;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   136
	    case UINTEGER:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   137
		return SimpleType.LONG;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   138
	    case ULONG:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   139
		return SimpleType.BIGINTEGER;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   140
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   141
	} 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
   142
	    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
   143
	    if (atype instanceof Type.BuiltinType) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   144
		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
   145
		if (bt.getType() == StdType.BOOLEAN)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   146
			return ArrayType.getPrimitiveArrayType(boolean[].class);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   147
		if (bt.getType() == StdType.INTEGER)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   148
			return ArrayType.getPrimitiveArrayType(int[].class);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   149
		if (bt.getType() == StdType.LONG ||
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   150
		    bt.getType() == StdType.UINTEGER)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   151
			return ArrayType.getPrimitiveArrayType(long[].class);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   152
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   153
	    try {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   154
		return ArrayType.getArrayType(getOpenType(atype));
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   155
	    } catch (OpenDataException ex) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   156
		/* 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
   157
		/* Shouldn't happen? */
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   158
		return null;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   159
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   160
	} 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
   161
	    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
   162
	    List<Field> fields = ct.getFields();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   163
	    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
   164
	    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
   165
	    int i = 0;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   166
	    for (Field field : fields) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   167
		fnames[i] = field.getName();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   168
		ftypes[i] = getOpenType(field.getType());
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   169
		i++;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   170
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   171
	    try {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   172
		String name = ct.getName();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   173
		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
   174
	    } catch (OpenDataException ex) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   175
		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
   176
		ex.printStackTrace();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   177
		return null;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   178
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   179
	} else if (type instanceof Type.EnumType) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   180
	    return SimpleType.STRING;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   181
	}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   182
	throw new IllegalArgumentException();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   183
    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   184
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   185
    /*
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   186
     * 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
   187
     * 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
   188
     * ADR types side-by-side.
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   189
     */
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   190
    static Object readData(Type realtype, XDRInputStream datastr)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   191
	throws IOException, OpenDataException {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   192
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   193
	if (realtype instanceof Type.BuiltinType) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   194
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   195
	    switch (((Type.BuiltinType)realtype).getType()) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   196
	    case STRING:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   197
		return datastr.getString();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   198
	    case OBJECT: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   199
		String s = datastr.getString();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   200
		try {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   201
		    return (new ADRName(s)).toObjectName();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   202
		} catch (MalformedObjectNameException ex) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   203
		    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
   204
			ex);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   205
		} catch (NullPointerException ex) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   206
		    /* Can't happen */
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   207
		    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
   208
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   209
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   210
	    case TIME: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   211
		String s = datastr.getString();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   212
		SimpleDateFormat f =
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   213
		    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
   214
		f.setCalendar(Calendar.getInstance(
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   215
		    TimeZone.getTimeZone("UTC")));
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   216
		try {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   217
		    return f.parse(s);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   218
		} catch (ParseException ex) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   219
		    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
   220
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   221
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   222
	    case BOOLEAN:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   223
		return datastr.getBoolean();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   224
	    case INTEGER:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   225
		return datastr.getInteger();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   226
	    case LONG:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   227
		return datastr.getHyper();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   228
	    case OPAQUE:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   229
		return datastr.getOpaque();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   230
	    case UINTEGER:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   231
		return datastr.getUInteger();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   232
	    case ULONG:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   233
		return datastr.getUHyper();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   234
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   235
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   236
	} 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
   237
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   238
	    return datastr.getString();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   239
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   240
	} 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
   241
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   242
	    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
   243
	    int count = datastr.getInteger();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   244
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   245
	    if (atype instanceof Type.BuiltinType) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   246
		switch (((Type.BuiltinType)atype).getType()) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   247
		case STRING: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   248
		    String result[] = new String[count];
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   249
		    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
   250
			result[i] = datastr.getString();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   251
		    return result;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   252
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   253
		case OBJECT: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   254
		    ObjectName result[] = new ObjectName[count];
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   255
		    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
   256
			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
   257
		    return result;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   258
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   259
		case TIME: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   260
		    Date result[] = new Date[count];
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   261
		    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
   262
			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
   263
		    return result;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   264
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   265
		case BOOLEAN: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   266
		    boolean result[] = new boolean[count];
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   267
		    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
   268
			result[i] = datastr.getBoolean();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   269
		    return result;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   270
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   271
		case INTEGER: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   272
		    int result[] = new int[count];
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   273
		    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
   274
			result[i] = datastr.getInteger();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   275
		    return result;
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
		case LONG: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   278
		    long result[] = new long[count];
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   279
		    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
   280
			result[i] = datastr.getHyper();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   281
		    return result;
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
		case OPAQUE:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   284
		    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
   285
		case UINTEGER: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   286
		    long result[] = new long[count];
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   287
		    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
   288
			result[i] = datastr.getUInteger();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   289
		    return result;
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
		case ULONG: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   292
		    BigInteger result[] = new BigInteger[count];
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   293
		    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
   294
			result[i] = datastr.getUHyper();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   295
		    return result;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   296
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   297
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   298
	    } 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
   299
		String result[] = new String[count];
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   300
		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
   301
		    result[i] = datastr.getString();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   302
		return result;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   303
	    } 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
   304
		CompositeData result[] = new CompositeData[count];
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   305
		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
   306
		    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
   307
		return result;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   308
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   309
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   310
	} 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
   311
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   312
	    CompositeType ct = (CompositeType)getOpenType(realtype);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   313
	    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
   314
	    Map<String, Object> fields = new HashMap<String, Object>();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   315
	    int count = ct.keySet().size();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   316
	    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
   317
		String field = datastr.getString();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   318
		Field rt = rct.getField(field);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   319
		if (rt == null)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   320
		    throw new IOException(String.format(
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   321
			"unknown field \"%s\" found in datastream for \"%s\".",
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   322
			field, ct.getTypeName()));
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   323
		fields.put(field, readOptional(rt.getType(), datastr));
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   324
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   325
	    return new CompositeDataSupport(ct, fields);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   326
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   327
	}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   328
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   329
	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
   330
    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   331
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   332
    static Object readOptional(Type realtype, XDRInputStream datastr)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   333
	throws IOException, OpenDataException {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   334
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   335
	if (!datastr.getBoolean())
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   336
	    return null;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   337
	return readData(realtype, datastr);
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
556
4db6c449f366 16806 INT-6: Add support for interface stability/commitment
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 516
diff changeset
   340
    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
   341
	throws IOException {
4db6c449f366 16806 INT-6: Add support for interface stability/commitment
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 516
diff changeset
   342
4db6c449f366 16806 INT-6: Add support for interface stability/commitment
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 516
diff changeset
   343
	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
   344
	switch (stability) {
4db6c449f366 16806 INT-6: Add support for interface stability/commitment
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 516
diff changeset
   345
	case 1:
4db6c449f366 16806 INT-6: Add support for interface stability/commitment
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 516
diff changeset
   346
	    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
   347
	case 2:
4db6c449f366 16806 INT-6: Add support for interface stability/commitment
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 516
diff changeset
   348
	    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
   349
	case 3:
4db6c449f366 16806 INT-6: Add support for interface stability/commitment
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 516
diff changeset
   350
	    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
   351
	default:
4db6c449f366 16806 INT-6: Add support for interface stability/commitment
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 516
diff changeset
   352
	    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
   353
	}
4db6c449f366 16806 INT-6: Add support for interface stability/commitment
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 516
diff changeset
   354
    }
4db6c449f366 16806 INT-6: Add support for interface stability/commitment
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 516
diff changeset
   355
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   356
    static void writeData(XDROutputStream xdrs, Type realtype, Object d)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   357
	throws IOException {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   358
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   359
	if (realtype instanceof Type.BuiltinType) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   360
	    switch (((Type.BuiltinType)realtype).getType()) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   361
	    case STRING:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   362
		xdrs.putString((String)d);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   363
		break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   364
	    case OBJECT:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   365
		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
   366
		break;
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
		SimpleDateFormat f =
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   369
		    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
   370
		f.setCalendar(Calendar.getInstance(
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   371
		    TimeZone.getTimeZone("UTC")));
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   372
		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
   373
		break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   374
	    case BOOLEAN:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   375
		xdrs.putBoolean((Boolean)d);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   376
		break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   377
	    case INTEGER:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   378
		xdrs.putInteger((Integer)d);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   379
		break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   380
	    case LONG:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   381
		xdrs.putHyper((Long)d);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   382
		break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   383
	    case OPAQUE:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   384
		xdrs.putOpaque((byte[])d);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   385
		break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   386
	    case UINTEGER:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   387
		xdrs.putUInteger((Long)d);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   388
		break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   389
	    case ULONG:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   390
		xdrs.putUHyper((BigInteger)d);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   391
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   392
	} 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
   393
	    xdrs.putString((String)d);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   394
	} 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
   395
	    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
   396
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   397
	    int len = Array.getLength(d);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   398
	    xdrs.putInteger(len);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   399
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   400
	    if (rat instanceof Type.BuiltinType) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   401
		switch (((Type.BuiltinType)rat).getType()) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   402
		case STRING: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   403
		    String result[] = (String[]) d;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   404
		    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
   405
			xdrs.putString(result[i]);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   406
		    break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   407
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   408
		case OBJECT: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   409
		    ObjectName result[] = (ObjectName[]) d;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   410
		    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
   411
			writeData(xdrs, rat, result[i]);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   412
		    break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   413
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   414
		case TIME: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   415
		    Date result[] = (Date[]) d;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   416
		    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
   417
			writeData(xdrs, rat, result[i]);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   418
		    break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   419
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   420
		case BOOLEAN: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   421
		    boolean result[] = (boolean[])d;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   422
		    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
   423
			xdrs.putBoolean(result[i]);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   424
		    break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   425
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   426
		case INTEGER: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   427
		    int result[] = (int[])d;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   428
		    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
   429
			xdrs.putInteger(result[i]);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   430
		    break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   431
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   432
		case LONG: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   433
		    long result[] = (long[])d;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   434
		    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
   435
			xdrs.putHyper(result[i]);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   436
		    break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   437
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   438
		case OPAQUE:
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   439
		    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
   440
		case UINTEGER: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   441
		    long result[] = (long[])d;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   442
		    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
   443
			xdrs.putUInteger(result[i]);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   444
		    break;
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
		case ULONG: {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   447
		    BigInteger result[] = (BigInteger[])d;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   448
		    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
   449
			xdrs.putUHyper(result[i]);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   450
		    break;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   451
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   452
		}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   453
	    } 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
   454
		String result[] = (String[]) d;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   455
		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
   456
		    xdrs.putString(result[i]);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   457
	    } 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
   458
		CompositeData result[] = (CompositeData[]) d;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   459
		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
   460
		    writeData(xdrs, rat, result[i]);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   461
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   462
	} 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
   463
	    CompositeData cd = (CompositeData)d;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   464
	    for (Field f : ((Type.ComplexType)realtype).getFields()) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   465
		String s = f.getName();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   466
		xdrs.putString(s);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   467
		writeOptional(xdrs, f.getType(), cd.get(s));
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   468
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   469
	} else {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   470
	    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
   471
		realtype);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   472
	}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   473
    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   474
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   475
    static void writeOptional(XDROutputStream xdrs, Type realtype, Object d)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   476
	throws IOException {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   477
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   478
	if (d == null) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   479
	    xdrs.putBoolean(false);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   480
	} else {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   481
	    xdrs.putBoolean(true);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   482
	    writeData(xdrs, realtype, d);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   483
	}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   484
    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   485
}