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

use strict;
use warnings;

use Data::Dumper;

use lib '/app/tools/rps/lib';
use RPS::LabelContract::GroupTermLabel;
use RPS::DB::Item::LabelContract;
use RPS::DB::Item::LabelContractGroupTermLabel;

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

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


sub _tagName
{
    return 'GroupTermLabel';
}


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

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

    my $collection = RPS::DB::Item::LabelContractGroupTermLabel->GetByLabelContractGroupTermID($args{labelContractGroupTermID});
    return $collection;
}


sub _keyMethodName
{
    return 'LabelContractGroupTermLabelID';
}


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

    if($self->{_labelContractGroupTermID})
    {
        return RPS::LabelContract::GroupTermLabel->new(labelContractGroupTermID => $self->{_labelContractGroupTermID});
    }
    
    return RPS::LabelContract::GroupTermLabel->new();
}


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

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


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

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

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


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


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

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


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

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

    return $keys;
}


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

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

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

    my $keysSortedByLabelName = $self->getAllKeysSortedByLabelName();

    foreach my $groupTermLabelID (@$keysSortedByLabelName)
    {
        my $groupTermLabelObj = $self->{GroupTermLabel}{$groupTermLabelID};
        $groupTermLabelObj->save();
    }
}


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

    my $keysSortedByLabelName = $self->getAllKeysSortedByLabelName();

    foreach my $groupTermLabelID (@$keysSortedByLabelName)
    {
        my $groupTermLabelObj = $self->{GroupTermLabel}{$groupTermLabelID};
        $groupTermLabelObj->delete();
    }
}

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

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

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

	return $valid;
}


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

	return $self->{_labelContractGroupTermID};
}


###
1;#
###
