#!/usr/bin/perl -w

use strict;

use Aw;
use Aw::Admin;


my %basic		=(
	#
	# all of the '_' fields are optional, they can be set at any
	# time with the respective ->set* methods
	#
	_name 		=> "PerlDevKit::EventOfDoom",
	_description	=> "If this works, nothing can break me!",
	_timeToLive	=> 50,
	#
	# use a name or AW_STORAGE constant
	#
	# _storageType	=> AW_STORAGE_PERSISTENT,
	_storageType	=> "Guaranteed",

	#
	#  simple types, 's' and 'uc' are quoted because the
	#  have special meanings in perl:
	#
	b 		=> FIELD_TYPE_BOOLEAN,
	by		=> FIELD_TYPE_BYTE,
	c		=> FIELD_TYPE_CHAR,
	d		=> FIELD_TYPE_DOUBLE,
	dt		=> FIELD_TYPE_DATE,
	l		=> FIELD_TYPE_LONG,
	f		=> FIELD_TYPE_FLOAT,
	i		=> FIELD_TYPE_INT,
	's'		=> FIELD_TYPE_STRING,
	sh		=> FIELD_TYPE_SHORT,
	'uc'		=> FIELD_TYPE_UNICODE_CHAR,
	us 		=> FIELD_TYPE_UNICODE_STRING,
	x		=> { x_key => FIELD_TYPE_LONG },

	#
	#  only one element of an array need be populated to setup
	#  sequence definition:
	#
	b_array		=> [ FIELD_TYPE_BOOLEAN        ],
	by_array	=> [ FIELD_TYPE_BYTE           ],
	c_array		=> [ FIELD_TYPE_CHAR           ],
	d_array		=> [ FIELD_TYPE_DOUBLE         ],
	dt_array	=> [ FIELD_TYPE_DATE           ],
	l_array		=> [ FIELD_TYPE_LONG           ],
	f_array		=> [ FIELD_TYPE_FLOAT          ],
	i_array		=> [ FIELD_TYPE_INT            ],
	s_array		=> [ FIELD_TYPE_STRING         ],
	sh_array	=> [ FIELD_TYPE_SHORT          ],
	uc_array	=> [ FIELD_TYPE_UNICODE_CHAR   ],
	us_array	=> [ FIELD_TYPE_UNICODE_STRING ],
	x_array		=> [ { x_item_key => FIELD_TYPE_LONG } ] 
);


my %basicA = %basic;
my %basicB = %basic;

my $doom   = \%basic;


#
#  if %basicA was NOT a _copy_ of %basic and the next line was $doom->{st} = \%basic; 
#  the type def setup would loop endlessly.
#
$doom->{st}        = \%basicA;
$doom->{st}{st}    = \%basicB;

my %structA        = %$doom;
$doom->{st_array}  = [ \%structA ];


#
#  setup an anonymous struct: 
#
my $tt = new Aw::Admin::TypeDef ( FIELD_TYPE_STRUCT, \%basicA );

$doom->{type_def} = $tt;
$doom->{type_def_array} = [ $tt ];


#
#  instantiate the mother load and run for cover!
#
my $t = new Aw::Admin::TypeDef ( $doom );

#
#  or do in two steps, if you likes more typing:
#
#  my $event_type_name = "PerlDevKit::EventOfDoom";	
#  my $t = new Aw::Admin::TypeDef ( $event_type_name, $doom );
#
#  or
#
#  my $t = new Aw::Admin::TypeDef ( $event_type_name, EVENT_TYPE_EVENT, $doom );
#

print $t->toString, "\n";


#
#  if you want to write this mess to a broker:
#
#  my $c = new Aw::Admin::Client ( $broker_host, $broker_name, "", "admin",
#          "The Creator", "" ) || die "Broker Connection Failed: $@\n";
#
#  $c->setEventAdminTypeDef ( $t );
#
#  GUIs?  We don't need no stink'n GUIs!!

__END__

=head1 NAME

typedef-test2.pl - Another Aw::Admin::TypeDef Demonstrator.


=head1 SYNOPSIS

./typedef-test2.pl

=head1 DESCRIPTION

Demonstrates creating an Aw::Admin::TypeDef and defining it for the EventOfDoom
all in a single step.


=head1 AUTHOR

Daniel Yacob Mekonnen,  L<Yacob@wMUsers.Com|mailto:Yacob@wMUsers.Com>

=head1 SEE ALSO

S<perl(1). ActiveWorks Supplied Documentation>

=cut