GridLab
Grid Application Toolkit

A simple API for Grid Applications
GAT

Menu



next up previous contents
Next: Interprocess Communication Up: Some Useful Programs Previous: Find me something big   Contents

An Equal Opportunity Employer

To not leave the software side out in the cold here's swlopue

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "GAT.h"

static void printGATList_GATResource( GATList_GATResource resources );
static GATResult addNameValue( GATTable table, const char *name, const char *value );

int main(int argc, char *argv[])
{
  int counter;
  char *name;
  char *value;
  int returnValue;
  GATTable table;
  GATResult result;
  GATString string;
  GATContext context;
  GATList_GATResource resources;
  GATResourceBroker resourceBroker;
  GATSoftwareResourceDescription softwareResDes
  
  /* Check command line arguments */
  if( argc < 2 )
  {
    /* Print out error message */
    printf( "Usage: hwloupe virtualorg [name=value]*\n" );
    
    /* Return to OS */
    return 1;
  }
  
  /* Set result to a memory failure */
  result = GAT_MEMORYFAILURE;
    
  /* Create GATContext */
  context = GATContext_Create( );
  
  /* Check GATContext creation */
  if( NULL != context )
  {
    /* Create GATString */
    string = GATString_Create( argv[1], strlen( argv[1] ) + 1, "ASCII" );
    
    /* Check GATString creation */
    if( NULL != string )
    {
      /* Create GATResourceBroker */
      resourceBroker = GATResourceBroker_Create( context, NULL, string );
      
      /* Check GATResourceBroker creation */
      if( NULL != resourceBroker )
      {
        /* Create GATTable */
        table = GATTable_Create();
        
        /* Check GATTable creation */
        if( NULL != GATTable)
        {
          /* Loop over command line arguments */
          for( count = 2; count < argc; count++ )
          {
            /* Obtain name */
            name = strtok( argv[count], "=" );
            
            /* Obtain value */
            if( NULL != name )
              value = strtok( NULL, "=" );
              
            /* Place name and value in GATTable */
            result = addNameValue( table, name, value );
            
            /* Print out addition error */
            if( GAT_FAILED( result ) )
              printf( "Error in adding the name/value pair: %s/%s\n", name, value );
          }
          
          /* Set result to a memory failure */
          result = GAT_MEMORYFAILURE;          
          
          /* Create GATSoftwareResourceDescription *
          softwareResDes = 
           GATSoftwareResourceDescription_Create( table );
          
          /* Check GATSoftwareResourceDescription creation */
          if( NULL != softwareResDes )
          {
            /* Find Resources */
            result = 
             GATResourceBroker_FindResources( resourceBroker, 
                                              softwareResDes, 
                                              &resources );
            
            /* Check success of last call */
            if( GAT_SUCCEEDED( result ) )
            {
              /* Print resources */
              printGATList_GATResource( resources );
            
              /* Destroy GATList_GATResource */
              GATList_GATResource_Destroy( &resources );
            }
          
            /* Destroy GATSoftwareResourceDescription */
            GATSoftwareResourceDescription_Destroy( &softwareResDes );
          }
        
          /* Destroy GATTable */
          GATTable_Destroy( &table );
        }
      
        /* Destroy GATResourceBroker */
        GATResourceBroker_Destroy( &resourceBroker );
      }
    
      /* Destroy GATString */
      GATString_Destroy( &string );
    }
   
    /* Destroy GATContext */
    GATContext_Destroy( &context );
  }
    
  /* Return to OS */
  return returnValue;
}

static GATResult addNameValue( GATTable table, const char *name, const char *value )
{
  GATResult result;
  GATfloat32 floatValue;
  
  /* Set result to an invalid parameter */
  result = GAT_INVALID_PARAMETER;
  
  /* Check parameters */
  if( (NULL != table) && (NULL != name) & (NULL != value) )
  {         
    /* Add all as string values */
    result = GATTable_Add_String( table, (const void *) name, value );
  }
  
  /* Return to caller */
  return result;
}

static void printGATList_GATResource( GATList_GATResource resources )
{
  int counter;
  void **keys;
  float nextFloat;
  GATResult result;
  GATType nextType;
  char nextString[2048];
  GATTable_const table;
  GATResource resource;
  GATList_GATResource_Iterator end;
  GATList_GATResource_Iterator current;
  GATSoftwareResource softwareResource;
  GATSoftwareResourceDescription softwareResDes;
  
  /* Check parameters */
  if( NULL != resources )
  {
    /* Obtain Beginning Iterator */
    current = GATList_GATResource_Begin( resources );
    
    /* Check last call */
    if( NULL != current )
    {
      /* Obtain Ending Iterator */
      end = GATList_GATResource_End( resources );
      
      /* Check last call */
      if( NULL != end )
      {
        /* Loop over resources */
        while( (NULL != current) && (current != end) )
        {
          /* Obtain next GATResource */
          resource = GATList_GATResource_Get( current );
          
          /* Check last call */
          if( NULL != resource )
          {
              /* Convert the GATResource to a GATSoftwareResource
              softwareResource = GATResource_ToGATSoftwareResource( resource );
              
              /* Obtain the GATSoftwareResourceDescription */
              result = 
               GATSoftwareResource_GetResourceDescription( softwareResource, 
                                                           &softwareResDes );
              
              /* Check last call */
              if( GAT_SUCCEEDED( result ) )
              {
                /* Obtain GATTable */
                table = 
                  GATSoftwareResourceDescription_GetDescription( softwareResDes );
                
                /* Check last call */
                if( NULL != table )
                {
                  /* Obtain keys */
                  keys = GATTable_GetKeys( table );
                
                  /* Check last call */
                  if( NULL != keys )
                  {
                    /* Set counter */
                    counter = 0;
                    
                    /* Loop over keys */
                    while( NULL != keys[counter] )
                    {
                      /* Obtain value's type */
                      nextType = GATTable_Get_ElementType( table, keys[counter]);
                      
                      /* Check type */
                      if( GATfloat32 == nextType )
                      {
                        /* Obtain float */
                        result = 
                         GATTable_Get_float( table, keys[counter], &nextFloat );
                        
                        /* Check last call */
                        if( GAT_SUCCEEDED( result ) )
                        {
                          /* Print name=value */
                          printf( "%s=%f\n", (char *) keys[counter], nextFloat );
                        }
                      }
                      
                      /* Check type */
                      if( GATType_String == nextType )
                      {
                        /* Obtain string */
                        result = 
                         GATTable_Get_String( table, keys[counter], 
                                              nextString, 2048 );
                        
                        /* Check last call */
                        if( GAT_SUCCEEDED( result ) )
                        {
                          /* Print name=value */
                          printf( "%s=%s\n", (char *) keys[counter], nextString );
                        }
                      }
                      
                      /* Increament counter */
                      counter = counter + 1;
                    }
                    
                    /* Print blank line to separate resources */
                    printf( "\n" );
                                        
                    /* Destroy keys */
                    GATTable_ReleaseKeys( table, keys );
                  }
                }
                
                /* Destroy GATSoftwareResourceDescription */
                GATSoftwareResourceDescription_Destroy( &softwareResDes );
              }
          }
        
          /* Obtain Next Iterator */
          current = GATList_GATResource_Next( current );
        }
      }
    }
  }
}



Andre Merzky 2004-05-13