package org.jacorb.ir;
/*
* 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 java.util.Enumeration;
import java.util.Hashtable;
import org.omg.CORBA.AbstractInterfaceDef;
import org.omg.CORBA.ExtInitializer;
import org.omg.CORBA.ExtValueDef;
import org.omg.CORBA.INTF_REPOS;
import org.omg.CORBA.InterfaceDef;
import org.omg.CORBA.LocalInterfaceDef;
import org.omg.CORBA.NO_IMPLEMENT;
import org.omg.CORBA.ValueDef;
import org.omg.PortableServer.POA;
import org.slf4j.Logger;
/**
*/
public class ExceptionDef
extends Contained
implements org.omg.CORBA.ExceptionDefOperations
{
private org.omg.CORBA.TypeCode type;
private Class myClass;
private Class helperClass;
private org.omg.CORBA.StructMember[] members;
private Hashtable contained = new Hashtable();
private Logger logger;
private ClassLoader loader;
private POA poa;
public ExceptionDef(Class c,
org.omg.CORBA.Container _defined_in,
org.omg.CORBA.Repository ir,
ClassLoader loader,
POA poa,
Logger logger)
{
this.logger = logger;
this.loader = loader;
this.poa = poa;
def_kind = org.omg.CORBA.DefinitionKind.dk_Exception;
containing_repository = ir;
defined_in = _defined_in;
if (defined_in == null)
{
throw new INTF_REPOS ("defined_in = null");
}
if (containing_repository == null)
{
throw new INTF_REPOS ("containing_repository = null");
}
try
{
String classId = c.getName();
myClass = c;
version( "1.0" );
if( classId.indexOf('.') > 0 )
{
name( classId.substring( classId.lastIndexOf('.')+1));
absolute_name =
org.omg.CORBA.ContainedHelper.narrow( defined_in ).absolute_name() + "::" + name;
}
else
{
name( classId );
absolute_name = "::" + name;
}
helperClass = this.loader.loadClass(classId + "Helper") ;
id( (String)helperClass.getDeclaredMethod("id", (Class[]) null).invoke( null, (Object[]) null ));
type =
TypeCodeUtil.getTypeCode(myClass, this.loader, null, classId, this.logger );
try
{
members = new org.omg.CORBA.StructMember[ type.member_count() ];
for( int i = 0; i < members.length; i++ )
{
members[i] = new org.omg.CORBA.StructMember( type.member_name(i),
type.member_type(i),
null );
}
}
catch( Exception e )
{
this.logger.error("Caught Exception", e);
}
if (this.logger.isDebugEnabled())
{
this.logger.debug("ExceptionDef: " + absolute_name);
}
}
catch ( Exception e )
{
this.logger.error("Caught Exception", e);
throw new INTF_REPOS( ErrorMsg.IR_Not_Implemented,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
}
}
/**
*/
void define()
{
for( int i = 0; i < members.length; i++ )
{
members[i].type_def = IDLType.create( members[i].type,
containing_repository,
this.logger,
this.poa);
}
}
/**
*/
public org.omg.CORBA.ExceptionDescription describe_exception()
{
return new org.omg.CORBA.ExceptionDescription(name(),
id(),
org.omg.CORBA.ContainedHelper.narrow( defined_in ).id(),
version(),
type());
}
public org.omg.CORBA.TypeCode type()
{
if (type == null)
{
throw new INTF_REPOS ("Exception TypeCode is null");
}
return type;
}
public org.omg.CORBA.Contained lookup(java.lang.String search_name)
{
return null;
}
public org.omg.CORBA.StructMember[] members()
{
return members;
}
// write interface not supported!
public void members(org.omg.CORBA.StructMember[] a)
{
}
public org.omg.CORBA.ModuleDef create_module( String id, String name, String version)
{
return null;
}
public org.omg.CORBA.ConstantDef create_constant(java.lang.String id, java.lang.String name, java.lang.String version, org.omg.CORBA.IDLType type, org.omg.CORBA.Any value)
{
return null;
}
public org.omg.CORBA.StructDef create_struct( String id, String name, String version, /*StructMemberSeq*/ org.omg.CORBA.StructMember[] members){
return null;
}
public org.omg.CORBA.UnionDef create_union( String id, String name, String version, org.omg.CORBA.IDLType discriminator_type, /*UnionMemberSeq*/ org.omg.CORBA.UnionMember[] members){
return null;
}
public org.omg.CORBA.EnumDef create_enum( String id, String name, String version, String[] members){
return null;
}
public org.omg.CORBA.AliasDef create_alias( String id, String name, String version, org.omg.CORBA.IDLType original_type){
return null;
}
/**
* not supported
*/
public org.omg.CORBA.ExceptionDef create_exception(java.lang.String id, java.lang.String name , java.lang.String version, org.omg.CORBA.StructMember[] member )
{
return null;
}
/**
* not supported
*/
public org.omg.CORBA.InterfaceDef create_interface(
String id,
String name,
String version,
/*InterfaceDefSeq*/ org.omg.CORBA.InterfaceDef[] base_interfaces)
{
return null;
}
/**
* not supported
*/
public org.omg.CORBA.ValueBoxDef create_value_box(java.lang.String id,
java.lang.String name,
java.lang.String version,
org.omg.CORBA.IDLType type)
{
return null;
}
/**
* not supported
*/
public org.omg.CORBA.ValueDef create_value(
java.lang.String id,
java.lang.String name,
java.lang.String version,
boolean is_custom,
boolean is_abstract,
org.omg.CORBA.ValueDef base_value,
boolean is_truncatable,
org.omg.CORBA.ValueDef[] abstract_base_values,
org.omg.CORBA.InterfaceDef[] supported_interfaces,
org.omg.CORBA.Initializer[] initializers)
{
return null;
}
/**
* not supported
*/
public org.omg.CORBA.NativeDef create_native(java.lang.String id,
java.lang.String name,
java.lang.String version)
{
return null;
}
// from IRObject
public org.omg.CORBA.DefinitionKind def_kind()
{
return org.omg.CORBA.DefinitionKind.dk_Exception;
}
public void destroy(){
throw new INTF_REPOS(ErrorMsg.IR_Not_Implemented,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
}
public /*ContainedSeq*/ org.omg.CORBA.Contained[] lookup_name(/*Identifier*/ String search_name, int levels_to_search, org.omg.CORBA.DefinitionKind limit_type, boolean exclude_inherited)
{
return null;
}
public /*DescriptionSeq*/ org.omg.CORBA.ContainerPackage.Description[] describe_contents(org.omg.CORBA.DefinitionKind limit_type, boolean exclude_inherited, int max_returned_objs){
return null;
}
public org.omg.CORBA.Contained[] contents(org.omg.CORBA.DefinitionKind limit_type,
boolean exclude_inherited)
{
Hashtable limited = new Hashtable();
// analog constants, exceptions etc.
for( Enumeration e = contained.elements(); e.hasMoreElements(); )
{
Contained c = (Contained)e.nextElement();
if( limit_type.value() == org.omg.CORBA.DefinitionKind._dk_all ||
limit_type.value() == c.def_kind.value() )
{
limited.put( c, "" );
}
}
org.omg.CORBA.Contained[] c = new org.omg.CORBA.Contained[limited.size()];
int i;
Enumeration e;
for( e = limited.keys(), i=0 ; e.hasMoreElements(); i++ )
c[i] = (org.omg.CORBA.Contained)e.nextElement();
return c;
}
// from Contained
public org.omg.CORBA.ContainedPackage.Description describe()
{
org.omg.CORBA.Any a = orb.create_any();
org.omg.CORBA.ExceptionDescription ed = describe_exception();
org.omg.CORBA.ExceptionDescriptionHelper.insert( a, ed );
return new org.omg.CORBA.ContainedPackage.Description( org.omg.CORBA.DefinitionKind.dk_Exception, a);
}
public AbstractInterfaceDef create_abstract_interface (String id, String name, String version,
AbstractInterfaceDef[] baseInterfaces)
{
throw new NO_IMPLEMENT ("NYI");
}
public ExtValueDef create_ext_value (String id, String name, String version, boolean isCustom,
boolean isAbstract, ValueDef baseValue, boolean isTruncatable,
ValueDef[] abstractBaseValues, InterfaceDef[] supportedInterfaces,
ExtInitializer[] initializers)
{
throw new NO_IMPLEMENT ("NYI");
}
public LocalInterfaceDef create_local_interface (String id, String name, String version,
InterfaceDef[] baseInterfaces)
{
throw new NO_IMPLEMENT ("NYI");
}
}