App-Repository

 view release on metacpan or  search on metacpan

lib/App/SessionObject/RepositoryObjectSet.pm  view on Meta::CPAN

        }
    }
    &App::sub_exit() if ($App::trace);
}

sub _clear_cache_if_auto_columns_changed {
    &App::sub_entry if ($App::trace);
    my ($self, $options) = @_;
    if (defined $self->{auto_columns}) {
        my (@auto_columns, %column, $new_columns);
        my $context = $self->{context};
        foreach my $wname (split(/,/, $self->{auto_columns})) {
            $new_columns = $context->so_get($wname);
            if ($new_columns) {
                push(@auto_columns, split(/,/, $new_columns));
            }
        }
        if (!$self->{columns}) {
            $self->{columns} = \@auto_columns;
            $self->_clear_cache();
        }
    }
    &App::sub_exit() if ($App::trace);
}

sub set_params {
    &App::sub_entry if ($App::trace);
    my ($self, $params) = @_;
    $params ||= {};
    my $redefined = 0;
    my $self_params = $self->{params};
    if (!$self_params) {
        $redefined = 1;
    }
    else {
        my (%param_already_defined, $key);
        foreach $key (keys %$self_params) {
            $param_already_defined{$key} = 1;
            if ((! exists $params->{$key}) ||
                (! defined $params->{$key} && defined $self_params->{$key}) ||
                (defined $params->{$key} && ! defined $self_params->{$key}) ||
                (defined $params->{$key} && defined $self_params->{$key} && $params->{$key} ne $self_params->{$key})) {
                $redefined = 1;
            }
        }
        if (!$redefined) {
            foreach $key (keys %$params) {
                if (! exists $self_params->{$key}) {
                    $redefined = 1;
                }
            }
        }
    }
    if ($redefined) {
        $self->{params} = { %$params };
        $self->_clear_cache();
    }
    &App::sub_exit() if ($App::trace);
}

sub update_params {
    &App::sub_entry if ($App::trace);
    my ($self, $params) = @_;
    my $self_params = $self->{params};
    die "params must be set before update_params() is called" if (!$self_params);
    my $param_changed = 0;
    foreach my $key (keys %$self_params) {
        if (exists $params->{$key} &&
            $self_params->{$key} ne $params->{$key}) {
            $self_params->{$key} = $params->{$key};
            $param_changed = 1;
        }
    }
    if ($param_changed && $self->{objects}) {
        $self->_clear_cache();
    }
    &App::sub_exit() if ($App::trace);
}

sub _get_all_objects {
    &App::sub_entry if ($App::trace);
    my ($self) = @_;
    my $objects = $self->{objects};
    if (!$objects) {
        if ($self->{temporary}) {
            $objects = [];
        }
        else {
            my $context = $self->{context};
            my $repname = $self->{repository};
            my $rep     = $context->repository($repname);
            my $table   = $self->{table} || die "table not defined";
            my $params  = $self->{params} || {};
            my $columns = $self->{columns};
            # Make a copy of $params so that if $db->get_objects() changes them,
            # it does not affect the cacheing aspects of the object set.
            $params = {%$params};
            $objects = $rep->get_objects($table, $params, $columns, {extend_columns => 1});
            $self->{objects}      = $objects;
            $self->{max_age_time} = time();
        }
    }
    &App::sub_exit($objects) if ($App::trace);
    return($objects);
}

###########################################################################
# Column Control
###########################################################################

sub set_columns {
    &App::sub_entry if ($App::trace);
    my ($self, $new_columns) = @_;
    $self->{columns} = $new_columns;
    $self->_clear_cache();
    &App::sub_exit() if ($App::trace);
}

sub include_columns {
    &App::sub_entry if ($App::trace);
    my ($self, $new_columns) = @_;



( run in 0.518 second using v1.01-cache-2.11-cpan-39bf76dae61 )