#------------------------------------------------------------
# Copyright (C) 2006 RoyaltyShare, Inc.   All Rights Reserved
# $Id$
#------------------------------------------------------------
package Job::Log;

use strict;
use warnings;

use lib '/app/tools/common/lib';
use Common::Assert;
use Common::Log;
use Common::XMLObject;
use base 'Common::XMLObject';

use lib '/app/tools/job/lib';
use Job::DB::Item::Job;
use Job::DB::Item::JobLog;

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

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

    # Are we being initialized from a database, or is this a new job?
    #
    my %properties;
    if ( $args{_dbItem} ) {
        $self->_propertiesFromDBItem( \%properties, $args{_dbItem} );
    } elsif ( $args{jobLogID} ) {
        $self->_propertiesFromDB( \%properties, $args{jobLogID} );
    } else {
        $self->_propertiesFromDefaults( \%properties, %args );
    }

    $self->_initProperties( \%properties );

    return $self;
}

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

    # got to have a hostname and a command-line specified.
    #
    assert( $args{hostname} );
    assert( $args{path} );

    $properties->{hostname} = $args{hostname};
    $properties->{path}     = $args{path};
}

sub _propertiesFromDB {
    my ( $self, $properties, $id ) = @_;
    assert($id);

    my $dbItem = Job::DB::Item::JobLog->Lookup( job_log_id => $id );
    $self->_propertiesFromDBItem( $properties, $dbItem );
}

sub _propertiesFromDBItem {
    my ( $self, $properties, $dbItem ) = @_;
    assert($dbItem);

    $properties->{job_log_id} = $dbItem->job_log_id;
    $properties->{hostname}   = $dbItem->hostname;
    $properties->{path}       = $dbItem->path;

    $properties->{created_by}    = $dbItem->created_by;
    $properties->{date_created}  = $dbItem->date_created;
    $properties->{modified_by}   = $dbItem->modified_by;
    $properties->{date_modified} = $dbItem->date_modified;
}

sub _initProperties {
    my ( $self, $properties ) = @_;

    $self->{JobLogID} = $properties->{job_log_id};
    $self->{HostName} = $properties->{hostname};
    $self->{Path}     = $properties->{path};

    $self->{CreatedBy}    = $properties->{created_by};
    $self->{ModifiedBy}   = $properties->{modified_by};
    $self->{DateCreated}  = $properties->{date_created};
    $self->{DateModified} = $properties->{date_modified};
}

sub hostname {
    my ($self) = @_;
    return $self->{HostName};
}

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

    # So, 'path' in this case is usually a unix-style path.
    # We may need to convert this to a windows path if we're executing
    # in a window's environment.
    #
    if ( 'MSWin32' eq $^O ) {
        my $path = $self->{Path};
        $path =~ s/\//\\/g;

        #        return "C:$path";
        return $path;
    } else {
        return $self->{Path};
    }
}

sub id {
    my ($self) = @_;
    return $self->{JobLogID};
}

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

    my $dbItem;

    if ( $self->id() ) {
        $dbItem = Job::DB::Item::JobLog->Lookup( job_log_id => $self->id() );
    } else {
        $dbItem = Job::DB::Item::JobLog->Create();
    }

    $dbItem->hostname( $self->hostname() );
    $dbItem->path( $self->path() );

    $dbItem->save();

    $self->_init( _dbItem => $dbItem );
}

1;
