package org.jacorb.orb.dynany; /* * JacORB - a free Java ORB * * Copyright (C) 1997-2014 Gerald Brose / The JacORB Team. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ import org.jacorb.orb.TypeCode; import org.omg.CORBA.Any; import org.omg.CORBA.NO_IMPLEMENT; import org.omg.DynamicAny.MustTruncate; import org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode; import org.slf4j.Logger; /** * @author Gerald Brose, FU Berlin */ public class DynAnyFactoryImpl extends org.omg.CORBA.LocalObject implements org.omg.DynamicAny.DynAnyFactory { private final org.jacorb.orb.ORB orb; private final Logger logger; public DynAnyFactoryImpl( org.jacorb.orb.ORB orb ) { super(); this.orb = orb; logger = orb.getConfiguration().getLogger("org.jacorb.orb"); } public org.omg.DynamicAny.DynAny create_dyn_any( org.omg.CORBA.Any value ) throws InconsistentTypeCode { try { org.omg.DynamicAny.DynAny dynAny = create_dyn_any_from_type_code( value.type() ); dynAny.from_any( value ); return dynAny; } catch( org.omg.DynamicAny.DynAnyPackage.InvalidValue iv ) { logger.error("unable to create DynAny", iv); } catch( org.omg.DynamicAny.DynAnyPackage.TypeMismatch itc ) { logger.error("unable to create DynAny", itc); } throw new InconsistentTypeCode(); } public org.omg.DynamicAny.DynAny create_dyn_any_from_type_code( org.omg.CORBA.TypeCode typeCode ) throws InconsistentTypeCode { final org.omg.CORBA.TypeCode _type = TypeCode.originalType( typeCode ); try { switch( _type.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_objref: 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_wchar: case org.omg.CORBA.TCKind._tk_wstring: { return new DynAny( this , _type, orb, logger) ; } case org.omg.CORBA.TCKind._tk_fixed: { return new DynFixed( this , _type, orb, logger) ; } case org.omg.CORBA.TCKind._tk_except: case org.omg.CORBA.TCKind._tk_struct: { return new DynStruct( this , _type, orb, logger) ; } case org.omg.CORBA.TCKind._tk_enum: { return new DynEnum( this , _type, orb, logger) ; } case org.omg.CORBA.TCKind._tk_array: { return new DynArray( this , _type, orb, logger) ; } case org.omg.CORBA.TCKind._tk_sequence: { return new DynSequence( this , _type, orb, logger ) ; } case org.omg.CORBA.TCKind._tk_union: { return new DynUnion( this , _type, orb, logger ) ; } case org.omg.CORBA.TCKind._tk_value: { throw new org.omg.CORBA.NO_IMPLEMENT ("DynValue is not yet implemented in Jacorb"); } default: throw new InconsistentTypeCode(); } } catch( org.omg.DynamicAny.DynAnyPackage.TypeMismatch itc ) { logger.debug("unexpected exception during create_dyn_any_from_type_code", itc); throw new InconsistentTypeCode(); } } public org.omg.DynamicAny.DynAny create_dyn_any_without_truncation (Any value) throws MustTruncate, InconsistentTypeCode { throw new NO_IMPLEMENT ("NYI"); } public Any[] create_multiple_anys (org.omg.DynamicAny.DynAny[] values) { throw new NO_IMPLEMENT ("NYI"); } public org.omg.DynamicAny.DynAny[] create_multiple_dyn_anys (Any[] values, boolean allowTruncate) throws MustTruncate, InconsistentTypeCode { throw new NO_IMPLEMENT ("NYI"); } }