blob: ecd81d28c59d97985ac4294b8d7e972cc25389a9 [file] [log] [blame]
#*******************************************************************************
#* Copyright (c) 2011 Forschungszentrum Juelich GmbH.
#* All rights reserved. This program and the accompanying materials
#* are made available under the terms of the Eclipse Public License v1.0
#* which accompanies this distribution, and is available at
#* http://www.eclipse.org/legal/epl-v10.html
#*
#* Contributors:
#* Wolfgang Frings (Forschungszentrum Juelich GmbH)
#*******************************************************************************/
package LML_gen_table;
my $VERSION='1.0';
my($debug)=0;
use strict;
use Data::Dumper;
use Time::Local;
use Time::HiRes qw ( time );
sub new {
my $self = {};
my $proto = shift;
my $class = ref($proto) || $proto;
my $verbose = shift;
my $timings = shift;
printf("\t LML_gen_table: new %s\n",ref($proto)) if($debug>=3);
$self->{VERBOSE} = $verbose;
$self->{TIMINGS} = $timings;
$self->{LMLFH} = undef;
$self->{LAYOUT} = undef;
$self->{IDLISTREF} = undef;
bless $self, $class;
return $self;
}
sub get_ids {
my($self) = shift;
return($self->{IDLISTREF});
}
sub process {
my($self) = shift;
my $layoutref = shift;
my $filehandler_LML = shift;
my ($numids,$gid,$idlistref);
$numids=0;
$self->{LAYOUT} = $layoutref;
$self->{LMLFH} = $filehandler_LML;
$gid=$layoutref->{gid};
$idlistref=[];
print "LML_gen_table::process: gid=$gid\n" if($self->{VERBOSE});
if(uc($gid) eq "JOBLIST_RUN") {
$idlistref=$self->_select_run_jobs();
}
if(uc($gid) eq "JOBLIST_WAIT") {
$idlistref=$self->_select_wait_jobs();
}
$self->{IDLISTREF}=$idlistref;
$numids=scalar @{$idlistref};
# print "LML_gen_table::process: idlist=(",join(',',sort(@{$idlistref})),")\n" if($self->{VERBOSE});
$self->{VALIDATTR}=$self->_update_valid_attributes();
return($numids);
}
sub _update_valid_attributes {
my($self) = shift;
my ($key,$k,%validattr,@validattr);
foreach $key (@{$self->{IDLISTREF}}) {
foreach $k (keys %{$self->{LMLFH}->{DATA}->{INFODATA}->{$key}}) {
$validattr{$k}++;
}
}
@validattr=(sort keys(%validattr));
return(\@validattr);
}
sub _select_run_jobs {
my($self) = shift;
my (@idlist,$key,$ref);
while(($key,$ref)=each(%{$self->{LMLFH}->{DATA}->{OBJECT}})) {
next if($ref->{type} ne 'job');
next if($self->{LMLFH}->{DATA}->{INFODATA}->{$key}->{state} ne 'Running');
push(@idlist,$key);
}
return(\@idlist);
}
sub _select_wait_jobs {
my($self) = shift;
my (@idlist,$key,$ref);
while(($key,$ref)=each(%{$self->{LMLFH}->{DATA}->{OBJECT}})) {
next if($ref->{type} ne 'job');
next if($self->{LMLFH}->{DATA}->{INFODATA}->{$key}->{state} ne 'Idle');
push(@idlist,$key);
}
return(\@idlist);
}
sub get_lml_table {
my($self) = shift;
my($ds,$rc,$id,$cid);
my $layoutref = $self->{LAYOUT};
my(@keylist,$key,$value);
$ds->{id}=$layoutref->{gid};
$ds->{title}=$layoutref->{gid};
foreach $cid (sort {$a <=> $b} (keys(%{$layoutref->{column}}))) {
$ds->{column}->{$cid}->{id}=$cid;
$ds->{column}->{$cid}->{name}=$layoutref->{column}->{$cid}->{key};
$ds->{column}->{$cid}->{sort}="alpha";
push(@keylist,$layoutref->{column}->{$cid}->{key});
}
foreach $id (@{$self->{IDLISTREF}}) {
foreach $key (@keylist) {
if(exists($self->{LMLFH}->{DATA}->{INFODATA}->{$id}->{$key})) {
$value=$self->{LMLFH}->{DATA}->{INFODATA}->{$id}->{$key};
} else {
$value="?";
}
push(@{$ds->{row}->{$id}->{cell}},$value);
}
}
return($ds);
}
sub get_lml_tablelayout {
my($self) = shift;
my($ds,$rc,$id,$cid);
my $layoutref = $self->{LAYOUT};
my($key,$value,%activekeys,$lastcid);
$ds->{id}=$layoutref->{id};
$ds->{gid}=$layoutref->{gid};
$lastcid=0;
foreach $cid (sort {$a <=> $b} (keys(%{$layoutref->{column}}))) {
$ds->{column}->{$cid}->{cid}=$cid;
$ds->{column}->{$cid}->{key}=$layoutref->{column}->{$cid}->{key};
$ds->{column}->{$cid}->{pos}=$layoutref->{column}->{$cid}->{pos};
$ds->{column}->{$cid}->{width}=$layoutref->{column}->{$cid}->{width};
$ds->{column}->{$cid}->{active}=$layoutref->{column}->{$cid}->{active};
$lastcid=$cid if($cid>$lastcid);
$activekeys{$ds->{column}->{$cid}->{key}}++;
}
foreach $key (@{$self->{VALIDATTR}}) {
next if($activekeys{$key});
$lastcid++;$cid=$lastcid;
$ds->{column}->{$cid}->{cid}=$cid;
$ds->{column}->{$cid}->{key}=$key;
$ds->{column}->{$cid}->{pos}=$cid;
$ds->{column}->{$cid}->{width}="1";
$ds->{column}->{$cid}->{active}="false";
$lastcid=$cid if($cid>$lastcid);
}
return($ds);
}
1;