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.lang.reflect.Field;
public class EnumDef
extends TypedefDef
implements org.omg.CORBA.EnumDefOperations
{
/** enum member sequence */
private String [] members;
/* reference to my container as a contained object */
private org.omg.CORBA.Contained myContainer;
public EnumDef( Class c,
org.omg.CORBA.Container _defined_in,
org.omg.CORBA.Repository ir,
ClassLoader loader)
{
def_kind = org.omg.CORBA.DefinitionKind.dk_Enum;
defined_in = _defined_in;
containing_repository = ir;
version = "1.0";
String classId = c.getName();
myContainer = org.omg.CORBA.ContainedHelper.narrow( defined_in );
if( classId.indexOf('.') > 0 )
{
name( classId.substring( classId.lastIndexOf('.')+1));
String path = classId.substring( 0, classId.lastIndexOf('.'));
if( path.endsWith("Package"))
{
id( RepositoryID.toRepositoryID( path.substring( 0, path.lastIndexOf("Package")) + "." + name, loader));
}
else
{
id( RepositoryID.toRepositoryID( path + "." + name, loader));
}
absolute_name = myContainer.absolute_name() + "::" + name;
}
else
{
name( classId );
defined_in = containing_repository;
id( RepositoryID.toRepositoryID(name, loader));
absolute_name = "::" + name;
}
Field memberFields[] = c.getDeclaredFields();
int member_size = (memberFields.length - 1 ) / 2;
members = new String [member_size];
// only every second field denotes an original enum member
for( int i = 0; i < member_size; i++ )
{
members[ i ] = memberFields[2+(2*i)].getName();
}
type = org.omg.CORBA.ORBSingleton.init().create_enum_tc( id, name, members );
}
public String[] members()
{
return members;
}
public void members(String[] m)
{
members = m;
}
public void define()
{
}
// from Contained
public org.omg.CORBA.ContainedPackage.Description describe()
{
org.omg.CORBA.Any a = orb.create_any();
String def_in_name;
if( myContainer != null )
def_in_name = myContainer.id();
else
def_in_name = "IDL:/:1.0";
org.omg.CORBA.TypeDescriptionHelper.insert( a,
new org.omg.CORBA.TypeDescription(name(),
id(),
def_in_name,
version(),
type()
) );
return new org.omg.CORBA.ContainedPackage.Description( org.omg.CORBA.DefinitionKind.dk_Enum, a);
}
// from IRObject
public void destroy(){}
}