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

use strict;
use warnings;

use lib '/app/tools/rps/lib';
use RPS::ArtistContract::Term;
use RPS::DB::Item::NewArtistContract;
use RPS::DB::Item::NewArtistContractTerm;

use Common::FormObject;
use base 'Common::FormObject';


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

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

    $self->{Term} = [];

	if($args{artistContractID})
	{
		$self->{_artistContractID} = $args{artistContractID};

		my $collection = RPS::DB::Item::NewArtistContractTerm::GetByArtistContractID($args{artistContractID});
		while (my $obj = $collection->next())
		{
			# term with priority=0 is special, we handle it differently, so
			# skip it.
			next if($obj->priority == 0);

			push @{$self->{Term}}, RPS::ArtistContract::Term->new(_dbItem => $obj);
		}
	}

	return $self;
}

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

	my $valid = 1;
	foreach my $term (@{$self->{Term}})
	{
		next if(!defined $term || $term->Delete());

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

	return $valid;
}


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

	foreach my $term (@{$self->{Term}})
	{
		if(defined $term && $term->{_hasData})
		{
			$term->save();
		}
	}
}

sub _listProperties
{
    return
    {
        Term => 1
    };
}

sub _propertyIsEditable
{
	my ($self, $propertyName) = @_;

	if ($propertyName eq 'Term')
	{
		return 1;
	}
	return 0;
}

# This is the special sort of list accessor.
#
sub Term
{
    my ($self, $index, $methodAddressList, $newValue) = @_;

    if (0 == scalar @$methodAddressList)
    {
        if (defined $newValue)
        {
            $self->{Term}[$index] = $newValue;
        }
		return 1;
    }

	# May need to dynamically add objects to the list...
	#
	if (! defined $self->{Term}[$index])
	{
		if($self->{_artistContractID})
		{
			$self->{Term}[$index] = RPS::ArtistContract::Term->new(artistContractID => $self->{_artistContractID});
		}
		else
		{
			$self->{Term}[$index] = RPS::ArtistContract::Term->new();
		}
	}

    return $self->{Term}[$index]->_accessProperty($methodAddressList, $newValue);
}


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

	return $self->{_artistContractID};
}

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

	return $self->{Term};
}


###
1;#
###

