sub SUBNAME{ my($this, $VARNAME) = @_; if(defined $VARNAME){ $this->{'VARNAME'} = $VARNAME; } else{ return $this->{'VARNAME'}; } } #### sub SUBNAME{ my($this, $VARNAME) = @_; if(defined $VARNAME){ $this->{'VARNAME'} = $VARNAME; } return $this->{'VARNAME'}; } #### #!/usr/bin/perl -w use strict; use Data::Dumper; use sam; use tes; # Create a sample my $sample = new sam("organite"); # Create a new test, name it, add it to the sample and increase it's status a couple of times my $test1 = new tes("first", $sample); $test1->status("new", "me"); $test1->status("stage one", "me"); # Create ANOTHER new test, name it, add it to the sample and increase it's status a couple of times my $test2 = new tes("second", $sample); $test2->status("new", "me"); $test2->status("stage one", "me"); # change test2 status $test2->status("stage four", "me"); # change test1 status, but not as high as test2 $test1->status("stage two", "me"); printf("\nSample History (%s)\n%s\n", $sample->sample_id(), $sample->status_history()); printf("\ntest1 is currently at: %s\n",$test1->current_status()); printf("\ntest2 is currently at: %s\n",$test2->current_status()); printf("\nsample is currently at: %s\n\n",$sample->current_status()); #### package sam; use strict; use Data::Dumper; use status; sub new{ my($class, $name) = @_; my $this = { 'sample_id'=>$name, 'test_list'=>[], 'status'=>[], } ; bless($this, $class); return $this; } sub sample_id{ return $_[0]->{'sample_id'} } sub add_test{ my($this, $test) = @_; # Add test to sample push @{$this->{'test_list'}}, $test; } sub add_status{ my($this, $test) = @_; my $h = {}; $h->{'ref'} = ${$test->{'status'}}[(scalar(@{$test->{'status'}}) - 1)]; $h->{'src'} = $test; push @{$this->{'status'}}, $h; } sub status_history{ my($this) = @_; my $history = ""; foreach my $entry(@{$this->{'status'}}){ $history .= sprintf("%s\t%s\t%s\t%s\n", $entry->{src}->test_id(), $entry->{'ref'}->status(), $entry->{'ref'}->time(), $entry->{'ref'}->owner()); } return $history; } sub current_status{ my($this) = @_; my $top; foreach my $entry(@{$this->{'status'}}){ $top = $entry if(! defined $top || $entry->{'ref'}->status_code() > $top->{'ref'}->status_code()); } return $top->{'ref'}->status; } 1; #### package tes; use strict; use Data::Dumper; use status; sub new{ my($class, $name, $sample, $data) = @_; my $this = { 'sample'=>$sample, 'test_id'=>$name, 'status'=>[], } ; bless($this, $class); $sample->add_test($this); return $this; } sub test_id{ my($this) = @_; return $this->{'test_id'} } sub status{ my($this, $status, $owner) = @_; if(! defined $status){ return pop @{$this->{'status'}}; } else{ my $stat = new status($status, $owner); push @{$this->{'status'}}, $stat; $this->{'sample'}->add_status($this); } return 1; } sub current_status{ my($this) = @_; my $status = $this->status(); return $status->status(); } 1; #### package status; use strict; use Data::Dumper; my $order = {"new"=>1,"stage one"=>2,"stage two"=>3,"stage four"=>4,"end"=>5}; sub new{ my($class, $status, $owner) = @_; my $this = { 'status'=>$status, 'time'=>time(), 'owner'=>$owner}; bless($this, $class); return $this; } sub status{ my($this, $status) = @_; if(defined $status){ $this->{'status'} = $status; } return $this->{'status'}; } sub status_code{ my($this, $status) = @_; if (exists $order->{$this->{status}}) { return $order->{$this->{'status'}}; } else{ return undef; } } sub time{ my($this) = @_; return $this->{'time'}; } sub owner{ my($this) = @_; return $this->{'owner'}; } 1;