blob: ca2ec5f06afea3f6ffca8d66f61044f2f131070c [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.axis2.corba.idl.types;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.omg.CORBA.ORB;
import org.omg.CORBA.TCKind;
import org.omg.CORBA.TypeCode;
import java.util.HashMap;
import java.util.Map;
public class PrimitiveDataType extends DataType {
private static final Log log = LogFactory.getLog(PrimitiveDataType.class);
private static Map PRIMITIVE_TYPES = new HashMap();
static {
ORB orb = ORB.init();
PRIMITIVE_TYPES.put("long",orb.get_primitive_tc(TCKind.tk_long));
PRIMITIVE_TYPES.put("ulong",orb.get_primitive_tc(TCKind.tk_ulong));
PRIMITIVE_TYPES.put("longlong",orb.get_primitive_tc(TCKind.tk_longlong));
PRIMITIVE_TYPES.put("ulonglong",orb.get_primitive_tc(TCKind.tk_ulonglong));
PRIMITIVE_TYPES.put("short",orb.get_primitive_tc(TCKind.tk_short));
PRIMITIVE_TYPES.put("ushort",orb.get_primitive_tc(TCKind.tk_ushort));
PRIMITIVE_TYPES.put("float",orb.get_primitive_tc(TCKind.tk_float));
PRIMITIVE_TYPES.put("double",orb.get_primitive_tc(TCKind.tk_double));
PRIMITIVE_TYPES.put("char",orb.get_primitive_tc(TCKind.tk_char));
PRIMITIVE_TYPES.put("wchar",orb.get_primitive_tc(TCKind.tk_wchar));
PRIMITIVE_TYPES.put("boolean",orb.get_primitive_tc(TCKind.tk_boolean));
PRIMITIVE_TYPES.put("octet",orb.get_primitive_tc(TCKind.tk_octet));
PRIMITIVE_TYPES.put("string",orb.get_primitive_tc(TCKind.tk_string));
PRIMITIVE_TYPES.put("wstring",orb.get_primitive_tc(TCKind.tk_wstring));
PRIMITIVE_TYPES.put("any",orb.get_primitive_tc(TCKind.tk_any));
PRIMITIVE_TYPES.put("longdouble",orb.get_primitive_tc(TCKind.tk_longdouble));
PRIMITIVE_TYPES.put("void",orb.get_primitive_tc(TCKind.tk_void));
//PRIMITIVE_TYPES.put("dateTime",orb.get_primitive_tc(TCKind.tk_dateTime));
//PRIMITIVE_TYPES.put("date",orb.get_primitive_tc(TCKind.tk_date));
//PRIMITIVE_TYPES.put("time",orb.get_primitive_tc(TCKind.tk_time));
//PRIMITIVE_TYPES.put("positiveInteger",orb.get_primitive_tc(TCKind.tk_positiveInteger));
//PRIMITIVE_TYPES.put("nonPositiveInteger",orb.get_primitive_tc(TCKind.tk_nonPositiveInteger));
//PRIMITIVE_TYPES.put("negativeInteger",orb.get_primitive_tc(TCKind.tk_negativeInteger));
//PRIMITIVE_TYPES.put("nonNegativeInteger",orb.get_primitive_tc(TCKind.tk_nonNegativeInteger));
}
public static TypeCode getTypeCode(String typeName) {
TypeCode typeCode = (TypeCode) PRIMITIVE_TYPES.get(typeName);
if (typeCode == null && typeName != null && typeName.contains("::")) {
String typeName2 = typeName.substring(0, typeName.indexOf("::"));
typeCode = (TypeCode) PRIMITIVE_TYPES.get(typeName2);
return typeCode;
}
return typeCode;
}
public static boolean isPrimitive(TypeCode typeCode) {
return typeCode != null && PRIMITIVE_TYPES.values().contains(typeCode);
}
public static PrimitiveDataType getPrimitiveDataType(String typeName) {
return new PrimitiveDataType(getTypeCode(typeName));
}
public PrimitiveDataType(TypeCode typeCode){
this.typeCode = typeCode;
}
protected TypeCode generateTypeCode() {
return typeCode;
}
public String getTypeName() {
String ret = null;
if (typeCode != null) {
TCKind kind = typeCode.kind();
if (kind != null) {
switch(kind.value()) {
case TCKind._tk_long : ret = "int"; break;
case TCKind._tk_ulong : ret = "int"; break;
case TCKind._tk_longlong : ret = "long"; break;
case TCKind._tk_ulonglong : ret = "long"; break;
case TCKind._tk_short : ret = "short"; break;
case TCKind._tk_ushort : ret = "short"; break;
case TCKind._tk_float : ret = "float"; break;
case TCKind._tk_double : ret = "double"; break;
case TCKind._tk_char : ret = "char"; break;
case TCKind._tk_wchar : ret = "char"; break;
case TCKind._tk_boolean : ret = "boolean"; break;
case TCKind._tk_octet : ret = "byte"; break;
case TCKind._tk_string : ret = "java.lang.String"; break;
case TCKind._tk_wstring : ret = "java.lang.String"; break;
case TCKind._tk_void : ret = "void"; break;
default:
log.error("Invalid primitive data type");
break;
}
}
}
return ret;
}
}