/* | |
* 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; | |
} | |
} |