#!/usr/local/bin/perl
#
# $Header: /cvs/ARSperl/example/GetField.pl,v 1.4 1998/09/11 14:46:18 jcmurphy Exp $
#
# EXAMPLE
#    GetField.pl [server] [username] [password] [schema] [fieldname]
#
# DESCRIPTION
#    Connect to the server and fetch information about the
#    named field. Print the information out.
# 
# NOTES
#    We'll be looking up the field names in the Default Admin View.
#
# AUTHOR
#    jeff murphy
#
# 02/19/97
#
# $Log: GetField.pl,v $
# Revision 1.4  1998/09/11 14:46:18  jcmurphy
# altered script logic so that it figures out whether it
# should decode a hash or array on the fly.
# fixed typo that was causing arrays not to be printed.
#
# Revision 1.3  1997/11/26 20:05:54  jcmurphy
# nada
#
# Revision 1.2  1997/05/07 15:38:19  jcmurphy
# fixed incorrect hash usage
#
# Revision 1.1  1997/02/19 22:41:16  jcmurphy
# Initial revision
#
#
#

use ARS;

# Parse command line parameters

($server, $username, $password, $schema, $fieldname) = @ARGV;
if(!defined($password)) {
    print "usage: $0 [server] [username] [password] [schema] [fieldname]\n";
    exit 1;
}

# Log onto the ars server specified

print "Logging in ..\n";

($ctrl = ars_Login($server, $username, $password)) || 
    die "can't login to the server";

# Fetch all of the fieldnames/ids for the specified schema

print "Fetching field table ..\n";

(%fids = ars_GetFieldTable($ctrl, $schema)) ||
    die "GetFieldTable: $ars_errstr";

# See if the specified field exists.

if(!defined($fids{$fieldname})) {
    print "ERROR: I couldn't find a field called \"$fieldname\" in the 
Default Admin View of schema \"$schema\"\n";
    exit 0;
}

# Get the field info

print "Fetching field information ..\n";

($fieldInfo = ars_GetField($ctrl, $schema, $fids{$fieldname})) ||
    die "GetField: $ars_errstr";

print "Here are some of the field attributes. More are available.

fieldId: $fieldInfo->{fieldId}
createMode: $fieldInfo->{createMode}
dataType: $fieldInfo->{dataType}
defaultVal: $fieldInfo->{defaultVal}
owner: $fieldInfo->{owner}

";

dumpKV($fieldInfo, 0);

ars_Logoff($ctrl);


exit 0;

sub dumpKV {
  my $hr = shift;
  my $i = shift;

  foreach $k (keys %$hr){
      print "\t"x$i."key=<$k> val=<$hr->{$k}>\n";
      if(ref($hr->{$k}) eq "HASH") {
	  dumpKV($hr->{$k}, $i+1);
      }
      elsif(ref($hr->{$k}) eq "ARRAY") {
	  dumpAV($hr->{$k}, $i+1);
      }
  }
}

sub dumpAV {
   my $ar = shift;
   my $i = shift;
   my $a = 0;

   foreach (@$ar) {
      print "\t"x$i."index=<$a> val=<$_>\n";
      if(ref($_) eq "HASH") {
	  dumpKV($_, $i+1);
      }
      elsif(ref($_) eq "ARRAY") {
	  dumpAV($_, $i+1);
      }

      $a++;
  }

}

