blob: d0456847d71f1927534e7c144d142d103a20cf9f [file] [log] [blame]
/*
* 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.yoko.orb.OB;
import org.apache.yoko.orb.CORBA.TypeCode;
public final class TypeCodeFactory {
//
// Cache the primitive TypeCodes
//
private static org.omg.CORBA.TypeCode[] primitives_;
static {
primitives_ = new org.omg.CORBA.TypeCode[34];
}
private TypeCodeFactory() {
}
// ----------------------------------------------------------------------
// TypeCodeFactory private and protected member implementation
// ----------------------------------------------------------------------
private static boolean checkId(String id) {
//
// Check for a valid repository ID (<format>:<string>)
//
if (id.length() > 0) {
int colon = id.indexOf(':');
if (colon == -1 || colon == 0 || colon == id.length() - 1)
return false;
}
return true;
}
private static final boolean CHECK_IDL_NAMES = false;
private static boolean checkName(String name) {
if (!CHECK_IDL_NAMES) return true;
//
// Check for a valid IDL name
//
if (name.length() > 0) {
if (!Character.isLetter(name.charAt(0)))
return false;
for (int i = 1; i < name.length(); i++) {
char ch = name.charAt(i);
if (!Character.isLetterOrDigit(ch) && ch != '_')
return false;
}
}
return true;
}
private static boolean checkType(org.omg.CORBA.TypeCode type) {
//
// Check for an illegal content or member type
//
try {
org.omg.CORBA.TypeCode origType = TypeCode._OB_getOrigType(type);
org.omg.CORBA.TCKind kind = origType.kind();
if (kind == org.omg.CORBA.TCKind.tk_null
|| kind == org.omg.CORBA.TCKind.tk_void
|| kind == org.omg.CORBA.TCKind.tk_except)
return false;
} catch (org.omg.CORBA.BAD_TYPECODE ex) {
// TypeCode may be recursive
}
return true;
}
private static boolean compareLabels(org.omg.CORBA.TCKind kind,
org.omg.CORBA.Any a1, org.omg.CORBA.Any a2) {
switch (kind.value()) {
case org.omg.CORBA.TCKind._tk_short:
return a1.extract_short() == a2.extract_short();
case org.omg.CORBA.TCKind._tk_ushort:
return a1.extract_ushort() == a2.extract_ushort();
case org.omg.CORBA.TCKind._tk_long:
return a1.extract_long() == a2.extract_long();
case org.omg.CORBA.TCKind._tk_ulong:
return a1.extract_ulong() == a2.extract_ulong();
case org.omg.CORBA.TCKind._tk_longlong:
return a1.extract_longlong() == a2.extract_longlong();
case org.omg.CORBA.TCKind._tk_ulonglong:
return a1.extract_ulonglong() == a2.extract_ulonglong();
case org.omg.CORBA.TCKind._tk_char:
return a1.extract_char() == a2.extract_char();
case org.omg.CORBA.TCKind._tk_boolean:
return a1.extract_boolean() == a2.extract_boolean();
case org.omg.CORBA.TCKind._tk_wchar:
return a1.extract_wchar() == a2.extract_wchar();
case org.omg.CORBA.TCKind._tk_enum:
return a1.create_input_stream().read_ulong() == a2
.create_input_stream().read_ulong();
default:
Assert._OB_assert("Unsupported typecode for compare");
}
return false;
}
// ----------------------------------------------------------------------
// TypeCodeFactory public member implementation
// ----------------------------------------------------------------------
public static org.omg.CORBA.TypeCode createPrimitiveTC(
org.omg.CORBA.TCKind kind) {
Assert._OB_assert(kind.value() < primitives_.length);
if (primitives_[kind.value()] != null)
return primitives_[kind.value()];
org.omg.CORBA.TypeCode tc = null;
switch (kind.value()) {
case org.omg.CORBA.TCKind._tk_null:
case org.omg.CORBA.TCKind._tk_void:
case org.omg.CORBA.TCKind._tk_short:
case org.omg.CORBA.TCKind._tk_long:
case org.omg.CORBA.TCKind._tk_ushort:
case org.omg.CORBA.TCKind._tk_ulong:
case org.omg.CORBA.TCKind._tk_float:
case org.omg.CORBA.TCKind._tk_double:
case org.omg.CORBA.TCKind._tk_boolean:
case org.omg.CORBA.TCKind._tk_char:
case org.omg.CORBA.TCKind._tk_octet:
case org.omg.CORBA.TCKind._tk_any:
case org.omg.CORBA.TCKind._tk_TypeCode:
case org.omg.CORBA.TCKind._tk_Principal:
case org.omg.CORBA.TCKind._tk_string:
case org.omg.CORBA.TCKind._tk_longlong:
case org.omg.CORBA.TCKind._tk_ulonglong:
case org.omg.CORBA.TCKind._tk_longdouble:
case org.omg.CORBA.TCKind._tk_wchar:
case org.omg.CORBA.TCKind._tk_wstring:
case org.omg.CORBA.TCKind._tk_fixed: {
TypeCode p = new TypeCode();
p.kind_ = kind;
p.length_ = 0; // For strings
tc = p;
break;
}
case org.omg.CORBA.TCKind._tk_objref:
tc = createInterfaceTC("IDL:omg.org/CORBA/Object:1.0", "Object");
break;
case org.omg.CORBA.TCKind._tk_value:
tc = createValueTC("IDL:omg.org/CORBA/ValueBase:1.0", "ValueBase",
org.omg.CORBA.VM_ABSTRACT.value, null,
new org.omg.CORBA.ValueMember[0]);
break;
default:
Assert._OB_assert(false);
}
primitives_[kind.value()] = tc;
return tc;
}
public static org.omg.CORBA.TypeCode createStructTC(String id, String name,
org.omg.CORBA.StructMember[] members) {
Assert._OB_assert(id != null && name != null);
if (!checkId(id))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidId)
+ ": " + id, org.apache.yoko.orb.OB.MinorCodes.MinorInvalidId,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
if (!checkName(name))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidName)
+ ": " + name, org.apache.yoko.orb.OB.MinorCodes.MinorInvalidName,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
for (int i = 0; i < members.length; i++) {
if (!checkName(members[i].name))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberName)
+ ": " + members[i].name,
org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberName,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
if (!checkType(members[i].type))
throw new org.omg.CORBA.BAD_TYPECODE(org.apache.yoko.orb.OB.MinorCodes
.describeBadTypecode(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberType)
+ ": " + members[i].name,
org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberType,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
for (int j = i + 1; j < members.length; j++)
if (members[i].name.length() > 0
&& members[i].name.equalsIgnoreCase(members[j].name)) {
throw new org.omg.CORBA.BAD_PARAM(
MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberName)
+ ": " + members[i].name,
org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberName,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
}
}
TypeCode tc = new TypeCode();
tc.kind_ = org.omg.CORBA.TCKind.tk_struct;
tc.id_ = id;
tc.name_ = name;
tc.memberNames_ = new String[members.length];
tc.memberTypes_ = new TypeCode[members.length];
for (int i = 0; i < members.length; i++) {
tc.memberNames_[i] = members[i].name;
try {
tc.memberTypes_[i] = (TypeCode) members[i].type;
} catch (ClassCastException ex) {
tc.memberTypes_[i] = TypeCode
._OB_convertForeignTypeCode(members[i].type);
}
}
TypeCode._OB_embedRecTC(tc);
return tc;
}
public static org.omg.CORBA.TypeCode createUnionTC(String id, String name,
org.omg.CORBA.TypeCode discriminator_type,
org.omg.CORBA.UnionMember[] members) {
Assert._OB_assert(id != null && name != null);
if (!checkId(id))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidId)
+ ": " + id, org.apache.yoko.orb.OB.MinorCodes.MinorInvalidId,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
if (!checkName(name))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidName)
+ ": " + name, org.apache.yoko.orb.OB.MinorCodes.MinorInvalidName,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
org.omg.CORBA.TypeCode origDisc = TypeCode
._OB_getOrigType(discriminator_type);
switch (origDisc.kind().value()) {
case org.omg.CORBA.TCKind._tk_short:
case org.omg.CORBA.TCKind._tk_ushort:
case org.omg.CORBA.TCKind._tk_long:
case org.omg.CORBA.TCKind._tk_ulong:
case org.omg.CORBA.TCKind._tk_longlong:
case org.omg.CORBA.TCKind._tk_ulonglong:
case org.omg.CORBA.TCKind._tk_char:
case org.omg.CORBA.TCKind._tk_boolean:
case org.omg.CORBA.TCKind._tk_wchar:
case org.omg.CORBA.TCKind._tk_enum:
break;
default:
throw new org.omg.CORBA.BAD_PARAM(
MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidDiscriminatorType),
org.apache.yoko.orb.OB.MinorCodes.MinorInvalidDiscriminatorType,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
}
for (int i = 0; i < members.length; i++) {
if (!checkName(members[i].name))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberName)
+ ": " + members[i].name,
org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberName,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
if (!checkType(members[i].type))
throw new org.omg.CORBA.BAD_TYPECODE(org.apache.yoko.orb.OB.MinorCodes
.describeBadTypecode(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberType)
+ ": " + members[i].name,
org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberType,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
org.omg.CORBA.TypeCode labelType = members[i].label.type();
org.omg.CORBA.TypeCode origLabelType = TypeCode
._OB_getOrigType(labelType);
org.omg.CORBA.TCKind kind = origLabelType.kind();
if (kind != org.omg.CORBA.TCKind.tk_octet
&& !origLabelType.equivalent(discriminator_type)) {
throw new org.omg.CORBA.BAD_PARAM(
MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorIncompatibleLabelType)
+ ": " + members[i].name,
org.apache.yoko.orb.OB.MinorCodes.MinorIncompatibleLabelType,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
}
for (int j = i + 1; j < members.length; j++) {
if (kind != org.omg.CORBA.TCKind.tk_octet) {
org.omg.CORBA.TypeCode otherLabelType = members[j].label
.type();
if (origLabelType.equivalent(otherLabelType)
&& compareLabels(kind, members[i].label,
members[j].label)) {
throw new org.omg.CORBA.BAD_PARAM(
MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorDuplicateLabel)
+ ": " + members[i].name,
org.apache.yoko.orb.OB.MinorCodes.MinorDuplicateLabel,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
}
}
}
}
TypeCode tc = new TypeCode();
tc.kind_ = org.omg.CORBA.TCKind.tk_union;
tc.id_ = id;
tc.name_ = name;
try {
tc.discriminatorType_ = (TypeCode) discriminator_type;
} catch (ClassCastException ex) {
tc.discriminatorType_ = TypeCode
._OB_convertForeignTypeCode(discriminator_type);
}
tc.labels_ = new org.apache.yoko.orb.CORBA.Any[members.length];
tc.memberNames_ = new String[members.length];
tc.memberTypes_ = new TypeCode[members.length];
for (int i = 0; i < members.length; i++) {
try {
tc.labels_[i] = (org.apache.yoko.orb.CORBA.Any) members[i].label;
} catch (ClassCastException ex) {
tc.labels_[i] = new org.apache.yoko.orb.CORBA.Any(
members[i].label);
}
tc.memberNames_[i] = members[i].name;
try {
tc.memberTypes_[i] = (TypeCode) members[i].type;
} catch (ClassCastException ex) {
tc.memberTypes_[i] = TypeCode
._OB_convertForeignTypeCode(members[i].type);
}
}
TypeCode._OB_embedRecTC(tc);
return tc;
}
public static org.omg.CORBA.TypeCode createEnumTC(String id, String name,
String[] members) {
Assert._OB_assert(id != null && name != null);
if (!checkId(id))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidId)
+ ": " + id, org.apache.yoko.orb.OB.MinorCodes.MinorInvalidId,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
if (!checkName(name))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidName)
+ ": " + name, org.apache.yoko.orb.OB.MinorCodes.MinorInvalidName,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
for (int i = 0; i < members.length; i++) {
if (!checkName(members[i]))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberName)
+ ": " + members[i], org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberName,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
for (int j = i + 1; j < members.length; j++)
if (members[i].length() > 0
&& members[i].equalsIgnoreCase(members[j])) {
throw new org.omg.CORBA.BAD_PARAM(
MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberName)
+ ": " + members[i],
org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberName,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
}
}
TypeCode tc = new TypeCode();
tc.kind_ = org.omg.CORBA.TCKind.tk_enum;
tc.id_ = id;
tc.name_ = name;
tc.memberNames_ = new String[members.length];
System.arraycopy(members, 0, tc.memberNames_, 0, members.length);
return tc;
}
public static org.omg.CORBA.TypeCode createAliasTC(String id, String name,
org.omg.CORBA.TypeCode original_type) {
Assert._OB_assert(id != null && name != null);
if (!checkId(id))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidId)
+ ": " + id, org.apache.yoko.orb.OB.MinorCodes.MinorInvalidId,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
if (!checkName(name))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidName)
+ ": " + name, org.apache.yoko.orb.OB.MinorCodes.MinorInvalidName,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
if (!checkType(original_type))
throw new org.omg.CORBA.BAD_TYPECODE(org.apache.yoko.orb.OB.MinorCodes
.describeBadTypecode(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberType),
org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberType,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
TypeCode tc = new TypeCode();
tc.kind_ = org.omg.CORBA.TCKind.tk_alias;
tc.id_ = id;
tc.name_ = name;
try {
tc.contentType_ = (TypeCode) original_type;
} catch (ClassCastException ex) {
tc.contentType_ = TypeCode
._OB_convertForeignTypeCode(original_type);
}
return tc;
}
public static org.omg.CORBA.TypeCode createExceptionTC(String id,
String name, org.omg.CORBA.StructMember[] members) {
Assert._OB_assert(id != null && name != null);
if (!checkId(id))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidId)
+ ": " + id, org.apache.yoko.orb.OB.MinorCodes.MinorInvalidId,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
if (!checkName(name))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidName)
+ ": " + name, org.apache.yoko.orb.OB.MinorCodes.MinorInvalidName,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
for (int i = 0; i < members.length; i++) {
if (!checkName(members[i].name))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberName)
+ ": " + members[i].name,
org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberName,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
if (!checkType(members[i].type))
throw new org.omg.CORBA.BAD_TYPECODE(org.apache.yoko.orb.OB.MinorCodes
.describeBadTypecode(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberType)
+ ": " + members[i].name,
org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberType,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
for (int j = i + 1; j < members.length; j++)
if (members[i].name.length() > 0
&& members[i].name.equalsIgnoreCase(members[j].name)) {
throw new org.omg.CORBA.BAD_PARAM(
MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberName)
+ ": " + members[i].name,
org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberName,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
}
}
TypeCode tc = new TypeCode();
tc.kind_ = org.omg.CORBA.TCKind.tk_except;
tc.id_ = id;
tc.name_ = name;
tc.memberNames_ = new String[members.length];
tc.memberTypes_ = new TypeCode[members.length];
for (int i = 0; i < members.length; i++) {
tc.memberNames_[i] = members[i].name;
try {
tc.memberTypes_[i] = (TypeCode) members[i].type;
} catch (ClassCastException ex) {
tc.memberTypes_[i] = TypeCode
._OB_convertForeignTypeCode(members[i].type);
}
}
TypeCode._OB_embedRecTC(tc);
return tc;
}
public static org.omg.CORBA.TypeCode createInterfaceTC(String id,
String name) {
Assert._OB_assert(id != null && name != null);
if (!checkId(id))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidId)
+ ": " + id, org.apache.yoko.orb.OB.MinorCodes.MinorInvalidId,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
if (!checkName(name))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidName)
+ ": " + name, org.apache.yoko.orb.OB.MinorCodes.MinorInvalidName,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
TypeCode tc = new TypeCode();
tc.kind_ = org.omg.CORBA.TCKind.tk_objref;
tc.id_ = id;
tc.name_ = name;
return tc;
}
public static org.omg.CORBA.TypeCode createStringTC(int bound) {
Assert._OB_assert(bound >= 0);
TypeCode tc = new TypeCode();
tc.kind_ = org.omg.CORBA.TCKind.tk_string;
tc.length_ = bound;
return tc;
}
public static org.omg.CORBA.TypeCode createWStringTC(int bound) {
Assert._OB_assert(bound >= 0);
TypeCode tc = new TypeCode();
tc.kind_ = org.omg.CORBA.TCKind.tk_wstring;
tc.length_ = bound;
return tc;
}
public static org.omg.CORBA.TypeCode createFixedTC(short digits, short scale) {
Assert._OB_assert(digits >= 0);
TypeCode tc = new TypeCode();
tc.kind_ = org.omg.CORBA.TCKind.tk_fixed;
tc.fixedDigits_ = digits;
tc.fixedScale_ = scale;
return tc;
}
public static org.omg.CORBA.TypeCode createSequenceTC(int bound,
org.omg.CORBA.TypeCode element_type) {
Assert._OB_assert(bound >= 0);
if (!checkType(element_type))
throw new org.omg.CORBA.BAD_TYPECODE(org.apache.yoko.orb.OB.MinorCodes
.describeBadTypecode(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberType),
org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberType,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
TypeCode tc = new TypeCode();
tc.kind_ = org.omg.CORBA.TCKind.tk_sequence;
tc.length_ = bound;
try {
tc.contentType_ = (TypeCode) element_type;
} catch (ClassCastException ex) {
tc.contentType_ = TypeCode._OB_convertForeignTypeCode(element_type);
}
return tc;
}
public static org.omg.CORBA.TypeCode createRecursiveSequenceTC(int bound,
int offset) {
throw new org.omg.CORBA.NO_IMPLEMENT();
}
public static org.omg.CORBA.TypeCode createArrayTC(int length,
org.omg.CORBA.TypeCode element_type) {
Assert._OB_assert(length > 0);
if (!checkType(element_type))
throw new org.omg.CORBA.BAD_TYPECODE(org.apache.yoko.orb.OB.MinorCodes
.describeBadTypecode(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberType),
org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberType,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
TypeCode tc = new TypeCode();
tc.kind_ = org.omg.CORBA.TCKind.tk_array;
tc.length_ = length;
try {
tc.contentType_ = (TypeCode) element_type;
} catch (ClassCastException ex) {
tc.contentType_ = TypeCode._OB_convertForeignTypeCode(element_type);
}
return tc;
}
public static org.omg.CORBA.TypeCode createValueTC(String id, String name,
short type_modifier, org.omg.CORBA.TypeCode concrete_base,
org.omg.CORBA.ValueMember[] members) {
Assert._OB_assert(id != null && name != null);
if (!checkId(id))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidId)
+ ": " + id, org.apache.yoko.orb.OB.MinorCodes.MinorInvalidId,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
if (!checkName(name))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidName)
+ ": " + name, org.apache.yoko.orb.OB.MinorCodes.MinorInvalidName,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
if (concrete_base != null) {
try {
org.omg.CORBA.TypeCode origBaseType = TypeCode
._OB_getOrigType(concrete_base);
if (origBaseType.kind() != org.omg.CORBA.TCKind.tk_value)
throw new org.omg.CORBA.BAD_TYPECODE();
// TODO: No standard minor code
} catch (org.omg.CORBA.BAD_TYPECODE ex) {
// TypeCode may be recursive
}
}
for (int i = 0; i < members.length; i++) {
if (!checkName(members[i].name))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberName)
+ ": " + members[i].name,
org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberName,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
if (!checkType(members[i].type))
throw new org.omg.CORBA.BAD_TYPECODE(org.apache.yoko.orb.OB.MinorCodes
.describeBadTypecode(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberType)
+ ": " + members[i].name,
org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberType,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
if (!CHECK_IDL_NAMES) continue;
for (int j = i + 1; j < members.length; j++)
if (members[i].name.length() > 0
&& members[i].name.equalsIgnoreCase(members[j].name)) {
throw new org.omg.CORBA.BAD_PARAM(
MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberName)
+ ": " + members[i].name,
org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberName,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
}
}
TypeCode tc = new TypeCode();
tc.kind_ = org.omg.CORBA.TCKind.tk_value;
tc.id_ = id;
tc.name_ = name;
tc.typeModifier_ = type_modifier;
try {
tc.concreteBaseType_ = (TypeCode) concrete_base;
} catch (ClassCastException ex) {
tc.concreteBaseType_ = TypeCode
._OB_convertForeignTypeCode(concrete_base);
}
tc.memberNames_ = new String[members.length];
tc.memberTypes_ = new TypeCode[members.length];
tc.memberVisibility_ = new short[members.length];
for (int i = 0; i < members.length; i++) {
tc.memberNames_[i] = members[i].name;
try {
tc.memberTypes_[i] = (TypeCode) members[i].type;
} catch (ClassCastException ex) {
tc.memberTypes_[i] = TypeCode
._OB_convertForeignTypeCode(members[i].type);
}
tc.memberVisibility_[i] = members[i].access;
}
TypeCode._OB_embedRecTC(tc);
return tc;
}
public static org.omg.CORBA.TypeCode createValueBoxTC(String id,
String name, org.omg.CORBA.TypeCode boxed_type) {
Assert._OB_assert(id != null && name != null);
if (!checkId(id))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidId)
+ ": " + id, org.apache.yoko.orb.OB.MinorCodes.MinorInvalidId,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
if (!checkName(name))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidName)
+ ": " + name, org.apache.yoko.orb.OB.MinorCodes.MinorInvalidName,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
if (!checkType(boxed_type))
throw new org.omg.CORBA.BAD_TYPECODE(org.apache.yoko.orb.OB.MinorCodes
.describeBadTypecode(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberType),
org.apache.yoko.orb.OB.MinorCodes.MinorInvalidMemberType,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
TypeCode tc = new TypeCode();
tc.kind_ = org.omg.CORBA.TCKind.tk_value_box;
tc.id_ = id;
tc.name_ = name;
try {
tc.contentType_ = (TypeCode) boxed_type;
} catch (ClassCastException ex) {
tc.contentType_ = TypeCode._OB_convertForeignTypeCode(boxed_type);
}
return tc;
}
public static org.omg.CORBA.TypeCode createNativeTC(String id, String name) {
Assert._OB_assert(id != null && name != null);
if (!checkId(id))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidId)
+ ": " + id, org.apache.yoko.orb.OB.MinorCodes.MinorInvalidId,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
if (!checkName(name))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidName)
+ ": " + name, org.apache.yoko.orb.OB.MinorCodes.MinorInvalidName,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
TypeCode tc = new TypeCode();
tc.kind_ = org.omg.CORBA.TCKind.tk_native;
tc.id_ = id;
tc.name_ = name;
return tc;
}
public static org.omg.CORBA.TypeCode createRecursiveTC(String id) {
Assert._OB_assert(id != null);
if (!checkId(id))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidId)
+ ": " + id, org.apache.yoko.orb.OB.MinorCodes.MinorInvalidId,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
TypeCode tc = new TypeCode();
tc.recId_ = id;
return tc;
}
public static org.omg.CORBA.TypeCode createAbstractInterfaceTC(String id,
String name) {
Assert._OB_assert(id != null && name != null);
if (!checkId(id))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidId)
+ ": " + id, org.apache.yoko.orb.OB.MinorCodes.MinorInvalidId,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
if (!checkName(name))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidName)
+ ": " + name, org.apache.yoko.orb.OB.MinorCodes.MinorInvalidName,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
TypeCode tc = new TypeCode();
tc.kind_ = org.omg.CORBA.TCKind.tk_abstract_interface;
tc.id_ = id;
tc.name_ = name;
return tc;
}
public static org.omg.CORBA.TypeCode createLocalInterfaceTC(String id,
String name) {
Assert._OB_assert(id != null && name != null);
if (!checkId(id))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidId)
+ ": " + id, org.apache.yoko.orb.OB.MinorCodes.MinorInvalidId,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
if (!checkName(name))
throw new org.omg.CORBA.BAD_PARAM(org.apache.yoko.orb.OB.MinorCodes
.describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorInvalidName)
+ ": " + name, org.apache.yoko.orb.OB.MinorCodes.MinorInvalidName,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
TypeCode tc = new TypeCode();
tc.kind_ = org.omg.CORBA_2_4.TCKind.tk_local_interface;
tc.id_ = id;
tc.name_ = name;
return tc;
}
}