#------------------------------------------------------------
# Copyright (C) 2006 RoyaltyShare, Inc.   All Rights Reserved
# $Id$
#------------------------------------------------------------
package RPS::LabelContract::TermHash;

use strict;
use warnings;

use Data::Dumper;

use lib '/app/tools/rps/lib';
use RPS::LabelContract::Term;
use RPS::DB::Item::LabelContract;
use RPS::DB::Item::LabelContractTerm;

use lib '/app/tools/common/lib';

use Common::FormHash;
use base 'Common::FormHash';


sub _tagName
{
    return 'Term';
}


sub _getItemCollection
{
    my ($self, %args) = @_;

    if (!$args{labelContractID})
    {
        return undef;
    }

    my $collection = RPS::DB::Item::LabelContractTerm->GetByLabelContractID($args{labelContractID});
    return $collection;
}


sub _keyMethodName
{
    return 'LabelContractTermID';
}


sub _getNewObject
{
    my ($self) = @_;

    if($self->{_labelContractID})
    {
        return RPS::LabelContract::Term->new(labelContractID => $self->{_labelContractID});
    }
    
    return RPS::LabelContract::Term->new();
}


sub _getObjectFromDBItem
{
    my ($self, $dbItem) = @_;

    return RPS::LabelContract::Term->new(_dbItem => $dbItem);
}


sub _addObject
{
    my ($self, $object) = @_;

    $self->SUPER::_addObject($object);

    if ($self->{_dependency} && exists $self->{_dependency}{$object->LabelContractTermID()})
    {
        $object->setDependency();
    }
}


sub _init
{
	my ($self, %args) = @_;


    # We want to keep track of the contract ID for later.
    #
	if($args{labelContractID})
	{
        #$self->{_dependency} = RPS::DB::Item::LabelContractTerm->GetTermDependencyByLabelContractID($args{labelContractID});
		$self->{_labelContractID} = $args{labelContractID};
    }

	return $self->SUPER::_init(%args);
}


sub validate
{
    my ($self) = @_;

	my $valid = 1;
    foreach my $termID (keys %{$self->{Term}})
    {
        my $term = $self->{Term}{$termID};
		next if (!defined $term);

        if (! $term->validate())
        {
            $valid = 0;
        }
	}

	return $valid;
}


# Overriding inherited method to return the keys sorted by Term->LabelName.
#

sub getKeys
{
    my ($self) = @_;

    my $keys = $self->getAllKeysSortedByTermLabelName();

    return $keys;
}


sub getAllKeysSortedByTermLabelName
{
    my ($self) = @_;

    my @keys = sort {uc($self->{Term}{$a}->LabelName()) cmp uc($self->{Term}{$b}->LabelName())} keys %{$self->{Term}};
    return \@keys;
}

sub save
{
    my ($self, %args) = @_;

    
    # !!!
    # I moved the 'smarts' about what happens when deleting a Term into the
    # Term class's Save method.   Basically, checking $term->{_hasData} was a
    # violation of encapsulation.
    #

    #
    my $keysSorted = $self->getAllKeysSortedByTermLabelName();

    foreach my $termID (@$keysSorted)
    {
        my $termObj = $self->{Term}{$termID};
        $termObj->save();
    }
}



sub LabelContractID
{
	my ($self) = @_;

	return $self->{_labelContractID};
}


###
1;#
###
