Solstice::Model::DBM_Deep - An interface for DBM_Deep based models.


Solstice documentation Contained in the Solstice distribution.

Index


Code Index:

NAME

Top

Solstice::Model::DBM_Deep - An interface for DBM_Deep based models.

SYNOPSIS

Top

# See Solstice::Model.

DESCRIPTION

Top

This module overrides _init and store, using DBM::Deep as a data storage engine. It saves/loads everything that is in the accessor definition.

Export

No symbols exported.

Methods

new([$id])

Returns a new object. If an id if passed in, it will be initialized.

store()

Saves the object into DBM::Deep.

delete()

Removes the object from the data store.

getAllIDs()

provides an arrayref of all the ids of this class

Private Functions

_getDBPath()

Returns the full path to the object store.

_initialize($id)

Loads the object from DBM::Deep

_getDB()

Returns the DBM::Deep object.

_generateID()

This will generate an id string, if an object doesn't have an existing id.

Modules Used

DBM::Deep, Solstice::Model (Solstice::Model).

AUTHOR

Top

Catalyst Group, <catalyst@u.washington.edu>

VERSION

Top

$Revision: 2393 $

COPYRIGHT

Top


Solstice documentation Contained in the Solstice distribution.
package Solstice::Model::DBM_Deep;

# $Id: Model.pm 2393 2005-07-18 17:12:40Z pmichaud $

use 5.006_000;
use strict;
use warnings;

use base qw(Solstice::Model);
use DBM::Deep;
use constant TRUE  => 1;
use constant FALSE => 0;

our ($VERSION) = ('$Revision: 2393 $' =~ /^\$Revision:\s*([\d.]*)/);

sub new {
    my $class = shift;
    my $obj_id = shift;

    my $self = $class->SUPER::new(@_);

    if (defined $obj_id) {
        $self = $self->_initialize($obj_id);
    }

    return $self;
}

sub store {
    my $self = shift;

    my $id = $self->getID();

    if (!defined $id) {
        $id = $self->_generateID();
        $self->_setID($id);
    }

    # Hack a bit so we don't store persistence values... but we don't want to cause problems for people using them.
    my $old_persistence = $self->{'_persistence'};

    $self->clearPersistenceValues();

    my $db = $self->_getDB(); 
    $db->put($id, $self);

    $self->{'_persistence'} = $old_persistence;

    return TRUE;
}

sub delete {
    my $self = shift;

    my $id = $self->getID();

    return FALSE unless defined $id;

    my $db = $self->_getDB();

    return $db->delete($id);
}


sub getAllIDs {

    my $self = shift;

    my $db = $self->_getDB();


    my @ids;
    my $key = $db->first_key();

    while ($key){
        push @ids, $key;
        $key = $db->next_key($key);
    }

    return \@ids;
}

sub getAll {
    my $self = shift;

    my $list = Solstice::List->new();
    for my $id (@{ $self->getAllIDs() }){
        $list->add($self->new($id));
    }
    return $list;

}


sub _getDBPath {
    my $self = shift;

    my $ref = ref $self || $self;
    $ref =~ s/[^a-z]+/_/gi;
    
    my $data_root = $self->getConfigService()->getDataRoot();

    $data_root = "$data_root/model_dbm_deep_data/";
    $self->_dirCheck($data_root);

    return "$data_root/$ref.db";
}


sub _initialize {
    my $self = shift;
    my $id   = shift;

    my $db = $self->_getDB(); 
    $self = $db->get($id);

    return $self;
}

sub _getDB {
    my $self = shift;
    return DBM::Deep->new(
        file        => $self->_getDBPath(),
        autobless   => TRUE,
    );
}

sub _generateID {
    my $self = shift;

    my $ref = ref $self;
    my $rand1 = rand();
    my $rand2 = rand();
    my $time  = time;

    return "$ref-$rand1-$rand2-$time";
}

1;

__END__