/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.cxf.binding.corba.interceptors;
import org.omg.CORBA.Any;
import org.omg.CORBA.ORB;
import org.omg.CORBA.StructMember;
import org.omg.CORBA.SystemException;
import org.omg.CORBA.TCKind;
import org.omg.CORBA.TypeCode;
import org.omg.CORBA.portable.InputStream;
import org.omg.CORBA.portable.OutputStream;
public final class SystemExceptionHelper
implements org.omg.CORBA.portable.Streamable {
private static final int BAD_CONTEXT = 0;
private static final int BAD_INV_ORDER = 1;
private static final int BAD_OPERATION = 2;
private static final int BAD_PARAM = 3;
private static final int BAD_QOS = 4;
private static final int BAD_TYPECODE = 5;
private static final int CODESET_INCOMPATIBLE = 6;
private static final int COMM_FAILURE = 7;
private static final int DATA_CONVERSION = 8;
private static final int FREE_MEM = 9;
private static final int IMP_LIMIT = 10;
private static final int INITIALIZE = 11;
private static final int INTERNAL = 12;
private static final int INTF_REPOS = 13;
private static final int INVALID_TRANSACTION = 14;
private static final int INV_FLAG = 15;
private static final int INV_IDENT = 16;
private static final int INV_OBJREF = 17;
private static final int INV_POLICY = 18;
private static final int MARSHAL = 19;
private static final int NO_IMPLEMENT = 20;
private static final int NO_MEMORY = 21;
private static final int NO_PERMISSION = 22;
private static final int NO_RESOURCES = 23;
private static final int NO_RESPONSE = 24;
private static final int OBJECT_NOT_EXIST = 25;
private static final int OBJ_ADAPTER = 26;
private static final int PERSIST_STORE = 27;
private static final int REBIND = 28;
private static final int TIMEOUT = 29;
private static final int TRANSACTION_MODE = 30;
private static final int TRANSACTION_REQUIRED = 31;
private static final int TRANSACTION_ROLLEDBACK = 32;
private static final int TRANSACTION_UNAVAILABLE = 33;
private static final int TRANSIENT = 34;
private static final int UNKNOWN = 35;
private static final String[] IDS = {
"IDL:omg.org/CORBA/BAD_CONTEXT:1.0",
"IDL:omg.org/CORBA/BAD_INV_ORDER:1.0",
"IDL:omg.org/CORBA/BAD_OPERATION:1.0", "IDL:omg.org/CORBA/BAD_PARAM:1.0",
"IDL:omg.org/CORBA/BAD_QOS:1.0", "IDL:omg.org/CORBA/BAD_TYPECODE:1.0",
"IDL:omg.org/CORBA/CODESET_INCOMPATIBLE:1.0",
"IDL:omg.org/CORBA/COMM_FAILURE:1.0",
"IDL:omg.org/CORBA/DATA_CONVERSION:1.0",
"IDL:omg.org/CORBA/FREE_MEM:1.0", "IDL:omg.org/CORBA/IMP_LIMIT:1.0",
"IDL:omg.org/CORBA/INITIALIZE:1.0", "IDL:omg.org/CORBA/INTERNAL:1.0",
"IDL:omg.org/CORBA/INTF_REPOS:1.0",
"IDL:omg.org/CORBA/INVALID_TRANSACTION:1.0",
"IDL:omg.org/CORBA/INV_FLAG:1.0", "IDL:omg.org/CORBA/INV_IDENT:1.0",
"IDL:omg.org/CORBA/INV_OBJREF:1.0", "IDL:omg.org/CORBA/INV_POLICY:1.0",
"IDL:omg.org/CORBA/MARSHAL:1.0", "IDL:omg.org/CORBA/NO_IMPLEMENT:1.0",
"IDL:omg.org/CORBA/NO_MEMORY:1.0", "IDL:omg.org/CORBA/NO_PERMISSION:1.0",
"IDL:omg.org/CORBA/NO_RESOURCES:1.0",
"IDL:omg.org/CORBA/NO_RESPONSE:1.0",
"IDL:omg.org/CORBA/OBJECT_NOT_EXIST:1.0",
"IDL:omg.org/CORBA/OBJ_ADAPTER:1.0",
"IDL:omg.org/CORBA/PERSIST_STORE:1.0", "IDL:omg.org/CORBA/REBIND:1.0",
"IDL:omg.org/CORBA/TIMEOUT:1.0",
"IDL:omg.org/CORBA/TRANSACTION_MODE:1.0",
"IDL:omg.org/CORBA/TRANSACTION_REQUIRED:1.0",
"IDL:omg.org/CORBA/TRANSACTION_ROLLEDBACK:1.0",
"IDL:omg.org/CORBA/TRANSACTION_UNAVAILABLE:1.0",
"IDL:omg.org/CORBA/TRANSIENT:1.0", "IDL:omg.org/CORBA/UNKNOWN:1.0"};
SystemException value;
TypeCode typeCode;
private SystemExceptionHelper() {
}
private SystemExceptionHelper(SystemException ex) {
value = ex;
}
private static int binarySearch(String[] arr, String value) {
int left = 0;
int right = arr.length;
int index = -1;
while (left < right) {
int m = (left + right) >>> 1;
int res = arr[m].compareTo(value);
if (res == 0) {
index = m;
break;
} else if (res > 0) {
right = m;
} else {
left = m + 1;
}
}
return index;
}
public static void insert(Any any, SystemException val) {
any.insert_Streamable(new SystemExceptionHelper(val));
}
//CHECKSTYLE:OFF
//NCSS is to high for this due to the massive switch statement
public static SystemException read(org.omg.CORBA.portable.InputStream in) {
String id = in.read_string();
int minor = in.read_ulong();
org.omg.CORBA.CompletionStatus status = org.omg.CORBA.CompletionStatus.from_int(in.read_ulong());
int n = binarySearch(IDS, id);
SystemException ex = null;
switch (n) {
case BAD_CONTEXT:
ex = new org.omg.CORBA.BAD_CONTEXT(minor, status);
break;
case BAD_INV_ORDER:
ex = new org.omg.CORBA.BAD_INV_ORDER(minor, status);
break;
case BAD_OPERATION:
ex = new org.omg.CORBA.BAD_OPERATION(minor, status);
break;
case BAD_PARAM:
ex = new org.omg.CORBA.BAD_PARAM(minor, status);
break;
case BAD_QOS:
ex = new org.omg.CORBA.BAD_QOS(minor, status);
break;
case BAD_TYPECODE:
ex = new org.omg.CORBA.BAD_TYPECODE(minor, status);
break;
case CODESET_INCOMPATIBLE:
ex = new org.omg.CORBA.CODESET_INCOMPATIBLE(minor, status);
break;
case COMM_FAILURE:
ex = new org.omg.CORBA.COMM_FAILURE(minor, status);
break;
case DATA_CONVERSION:
ex = new org.omg.CORBA.DATA_CONVERSION(minor, status);
break;
case FREE_MEM:
ex = new org.omg.CORBA.FREE_MEM(minor, status);
break;
case IMP_LIMIT:
ex = new org.omg.CORBA.IMP_LIMIT(minor, status);
break;
case INITIALIZE:
ex = new org.omg.CORBA.INITIALIZE(minor, status);
break;
case INTERNAL:
ex = new org.omg.CORBA.INTERNAL(minor, status);
break;
case INTF_REPOS:
ex = new org.omg.CORBA.INTF_REPOS(minor, status);
break;
case INVALID_TRANSACTION:
ex = new org.omg.CORBA.INVALID_TRANSACTION(minor, status);
break;
case INV_FLAG:
ex = new org.omg.CORBA.INV_FLAG(minor, status);
break;
case INV_IDENT:
ex = new org.omg.CORBA.INV_IDENT(minor, status);
break;
case INV_OBJREF:
ex = new org.omg.CORBA.INV_OBJREF(minor, status);
break;
case INV_POLICY:
ex = new org.omg.CORBA.INV_POLICY(minor, status);
break;
case MARSHAL:
ex = new org.omg.CORBA.MARSHAL(minor, status);
break;
case NO_IMPLEMENT:
ex = new org.omg.CORBA.NO_IMPLEMENT(minor, status);
break;
case NO_MEMORY:
ex = new org.omg.CORBA.NO_MEMORY(minor, status);
break;
case NO_PERMISSION:
ex = new org.omg.CORBA.NO_PERMISSION(minor, status);
break;
case NO_RESOURCES:
ex = new org.omg.CORBA.NO_RESOURCES(minor, status);
break;
case NO_RESPONSE:
ex = new org.omg.CORBA.NO_RESPONSE(minor, status);
break;
case OBJECT_NOT_EXIST:
ex = new org.omg.CORBA.OBJECT_NOT_EXIST(minor, status);
break;
case OBJ_ADAPTER:
ex = new org.omg.CORBA.OBJ_ADAPTER(minor, status);
break;
case PERSIST_STORE:
ex = new org.omg.CORBA.PERSIST_STORE(minor, status);
break;
case REBIND:
ex = new org.omg.CORBA.REBIND(minor, status);
break;
case TIMEOUT:
ex = new org.omg.CORBA.TIMEOUT(minor, status);
break;
case TRANSACTION_MODE:
ex = new org.omg.CORBA.TRANSACTION_MODE(minor, status);
break;
case TRANSACTION_REQUIRED:
ex = new org.omg.CORBA.TRANSACTION_REQUIRED(minor, status);
break;
case TRANSACTION_ROLLEDBACK:
ex = new org.omg.CORBA.TRANSACTION_ROLLEDBACK(minor, status);
break;
case TRANSACTION_UNAVAILABLE:
ex = new org.omg.CORBA.TRANSACTION_UNAVAILABLE(minor, status);
break;
case TRANSIENT:
ex = new org.omg.CORBA.TRANSIENT(minor, status);
break;
case UNKNOWN:
default:
ex = new org.omg.CORBA.UNKNOWN(minor, status);
}
return ex;
}
//CHECKSTYLE:ON
public void _read(InputStream instream) {
value = read(instream);
}
public TypeCode _type() {
if (typeCode == null) {
ORB orb = ORB.init();
StructMember[] smBuf = new StructMember[2];
TypeCode minortc = orb.get_primitive_tc(TCKind.tk_long);
smBuf[0] = new StructMember("minor", minortc, null);
String csLabels[] = {"COMPLETED_YES", "COMPLETED_NO", "COMPLETED_MAYBE"};
TypeCode completedtc = orb
.create_enum_tc("IDL:omg.org/CORBA/CompletionStatus:1.0",
"CompletionStatus", csLabels);
smBuf[1] = new StructMember("completed", completedtc, null);
String id;
String name;
if (value == null) {
name = "SystemException";
id = "IDL:omg.org/CORBA/SystemException:1.0";
} else {
String className = value.getClass().getName();
name = className.substring(className.lastIndexOf('.') + 1);
id = "IDL:omg.org/CORBA/" + name + ":1.0";
}
typeCode = orb.create_exception_tc(id, name, smBuf);
}
return typeCode;
}
public void _write(OutputStream outstream) {
String id;
if (value == null) {
value = new org.omg.CORBA.UNKNOWN();
id = "IDL:omg.org/CORBA/UNKNOWN";
} else {
String className = value.getClass().getName();
id = "IDL:omg.org/CORBA/"
+ className.substring(className.lastIndexOf('.') + 1) + ":1.0";
}
outstream.write_string(id);
outstream.write_ulong(value.minor);
outstream.write_ulong(value.completed.value());
}
}