[OGo-Developer] stuffing an NSArray into a NSMutableDictionary

Rafel Amer developer@opengroupware.org
Mon, 23 Apr 2007 00:53:36 +0200


Sebastian,

if I have understood the question, the initial value of
self->multipleReturn is something like that:

self->multipleReturn: (
    {
        Abandoned = " 0";
        Calls = " 0";
        Completed = " 0";
        Event = " QueueParams";
        Holdtime = " 0";
        Max = " 0";
        Queue = " l00-bugdead-prods-queue";
        ServiceLevel = " 0";
        ServicelevelPerf = " 0.0";
        Weight = " 0";
    },
    {
        Abandoned = " 0";
        Calls = " 0";
        CallsTaken = " 0";
        Completed = " 0";
        Event = " QueueMember";
        Holdtime = " 0";
        LastCall = " 0";
        Location = " Agent/303";
        Max = " 0";
        Membership = " static";
        Paused = " 0";
        Penalty = " 1";
        Queue = " l00-bugdead-prods-queue";
        ServiceLevel = " 0";
        ServicelevelPerf = " 0.0";
        Status = " 4";
        Weight = " 0";
    },
    {
        Abandoned = " 0";
        Calls = " 0";
        CallsTaken = " 0";
        Completed = " 0";
        Event = " QueueMember";
        Holdtime = " 0";
        LastCall = " 0";
        Location = " Agent/202";
        Max = " 0";
        Membership = " static";
        Paused = " 0";
        Penalty = " 0";
        Queue = " l00-bugdead-prods-queue";
        ServiceLevel = " 0";
        ServicelevelPerf = " 0.0";
        Status = " 4";
        Weight = " 0";
    },
    {
        Abandoned = " 0";
        Calls = " 0";
        CallsTaken = " 0";
        Completed = " 0";
        Event = " QueueMember";
        Holdtime = " 0";
        LastCall = " 0";
        Location = " Agent/101";
        Max = " 0";
        Membership = " static";
        Paused = " 0";
        Penalty = " 0";
        Queue = " l00-bugdead-prods-queue";
        ServiceLevel = " 0";
        ServicelevelPerf = " 0.0";
        Status = " 4";
        Weight = " 0";
    },
    {
        Abandoned = " 0";
        Calls = " 0";
        Completed = " 0";
        Event = " QueueParams";
        Holdtime = " 0";
        Max = " 0";
        Queue = " l01-bugdead-prods-queue";
        ServiceLevel = " 0";
        ServicelevelPerf = " 0.0";
        Weight = " 0";
    },
    {
        Abandoned = " 0";
        Calls = " 0";
        CallsTaken = " 0";
        Completed = " 0";
        Event = " QueueMember";
        Holdtime = " 0";
        LastCall = " 0";
        Location = " Agent/303";
        Max = " 0";
        Membership = " static";
        Paused = " 0";
        Penalty = " 1";
        Queue = " l01-bugdead-prods-queue";
        ServiceLevel = " 0";
        ServicelevelPerf = " 0.0";
        Status = " 4";
        Weight = " 0";
    },
    {
        Abandoned = " 0";
        Calls = " 0";
        CallsTaken = " 0";
        Completed = " 0";
        Event = " QueueMember";
        Holdtime = " 0";
        LastCall = " 0";
        Location = " Agent/202";
        Max = " 0";
        Membership = " static";
        Paused = " 0";
        Penalty = " 0";
        Queue = " l01-bugdead-prods-queue";
        ServiceLevel = " 0";
        ServicelevelPerf = " 0.0";
        Status = " 4";
        Weight = " 0";
    },
    {
        Abandoned = " 0";
        Calls = " 0";
        CallsTaken = " 0";
        Completed = " 0";
        Event = " QueueMember";
        Holdtime = " 0";
        LastCall = " 0";
        Location = " Agent/101";
        Max = " 0";
        Membership = " static";
        Paused = " 0";
        Penalty = " 0";
        Queue = " l01-bugdead-prods-queue";
        ServiceLevel = " 0";
        ServicelevelPerf = " 0.0";
        Status = " 4";
        Weight = " 0";
    }
)


with two queues  l00-bugdead-prods-queue and l01-bugdead-prods-queue
and the final value must be an array with two dictionaries, one for each 
queue?


Can you trie the following code:

- (NSArray *)getQueues {
  NSException *exc;
  exc = [self sendCommand:@"QueueStatus"
     withParameters:nil
     expectResult:[[[self asteriskCommands]
            objectForKey:@"QueueStatus"]
               objectForKey:@"ExpectedResult"]];
  if(exc) {
    ASSIGN(self->lastException, exc);
    return nil;
  }

  NSEnumerator *e;
  NSMutableDictionary *queuesdict;
  id event;
  queuesdict = [[NSMutableDictionary alloc] init];

  e = [self->multipleReturn objectEnumerator];
  while ((event = [e nextObject]) != nil) {
    if ([[event objectForKey:@"Event"] hasSuffix:@" QueueParams"]) {
      NSMutableDictionary *tempdict;
      NSMutableArray *temparray;
      temparray = [[NSMutableArray alloc] init];
      tempdict = [[NSMutableDictionary alloc] init];      
      [tempdict addEntriesFromDictionary:event];
      [tempdict setObject:[temparray retain] forKey:@"Agents"]; 
      [queuesdict setObject:[tempdict retain] forKey:[event valueForKey:@"Queue"]];
    } else {
      NSMutableArray *temparray;
      temparray = [[queuesdict objectForKey:[event objectForKey:@"Queue"] 
                         objectForKey:@"Agents"];
      [temparray addObject:event];
    }
  }
  [self->multipleReturn release];
  self->multipleReturn = nil;
  self->multipleReturn = [[queuesdict allValues] retain];
  return self->multipleReturn;
}


Kind regards,

Rafel Amer