Config::LotusNotes::Configuration - Represents one Lotus Notes/Domino configuration


Config-LotusNotes documentation Contained in the Config-LotusNotes distribution.

Index


Code Index:

NAME

Top

Config::LotusNotes::Configuration - Represents one Lotus Notes/Domino configuration

VERSION

Top

This documentation refers to Config::LotusNotes::Configuration 0.34, released Feb 10, 2011.

SYNOPSIS

Top

  $factory = Config::LotusNotes->new();

  # access default installation
  $conf = $factory->default_configuration();

  # basic information about a configuration
  print "Version: ", $conf->version, "\n";
  print "This is a server.\n" if $conf->is_server;

  # getting and setting environment values
  $data = $conf->get_environment_value('Directory');
  $conf->set_environment_value('$NotesEnvParameter', 'value');

DESCRIPTION

Top

A Config::LotusNotes::Configuration object represents the configuration of a local Lotus Notes/Domino installation from the view of the file system. It lets you read and modify the Lotus Notes configuration file, notes.ini, where Notes stores its environment. See "The Lotus Notes environment" in Config::LotusNotes for more information on exchanging data with Lotus Notes via the Notes environment.

Config::LotusNotes::Configuration objects also give you access to some basic information like install paths and the Notes version number.

To create these objects, use the default_configuration() and all_configurations() methods of Config::LotusNotes.

PROPERTIES

Top

notespath();

Returns the path where the program files are stored.

datapath();

Returns the path where the data files are stored.

notesini();

Returns the full path (including file name) of the notes.ini file.

version();

Returns the Lotus Notes version number, e.g. 7.0 or 5.0.13a.

is_client();

Returns true if the configuration belongs to a client (workstation) installation.

is_server();

Returns true if the configuration belongs to a server installation.

install_scope();

Returns "just for me" or "all users" depending on the chosen setup type.

METHODS

Top

new(path => $path);

Constructor, returns a Config::LotusNotes::Configuration object representing the installation at the specified path.

The recommended way to create Config::LotusNotes::Configuration objects is to use the default_configuration() and all_configurations() methods of Config::LotusNotes.

get_environment_value($item_name);

Gets the value of the parameter named $item_name from notes.ini. If there is no such parameter, undef is returned.

In order to access values that were written by Lotus Notes via the environment functions, prefix the parameter name with "$".

set_environment_value($item_name, $value);

Writes a parameter/value pair to notes.ini. If the entry exists, it will be updated with the new value. If the value is undef, the whole entry is removed.

If you want the parameter to be accessible to Lotus Notes via the environment functions, prefix its name with "$".

If you write to a notes.ini file with this function, its entries will be saved in random order.

BUGS AND LIMITATIONS

Top

See "BUGS AND LIMITATIONS" in Config::LotusNotes.

EXAMPLES

Top

See EXAMPLES in Config::LotusNotes.

LICENCE AND COPYRIGHT

Top

AUTOR

Top

Harald Albers, albers@cpan.org

See the Changes file for the change history.


Config-LotusNotes documentation Contained in the Config-LotusNotes distribution.

package Config::LotusNotes::Configuration;
use strict;
#use warnings;
use Carp;
use Config::IniHash;
use File::HomeDir;

our $VERSION = '0.34';


# constructor ----------------------------------------------------------------

sub new {
    my ($classname, %options) = @_;
    my $scope = 'just for me';
    my $path = $options{path} or die 'no Notes install path specified';
    $path =~ s/\\$//;

    # basic checks of the directory and its content
    my $notesexe = $path.'\\nlnotes.exe';
    my $notesini = $path.'\\notes.ini';
    croak "Notes install path not found: $path" unless -d $path;
    croak "No Notes binary found in $path"      unless -f $notesexe;
    if (! -f $notesini) {
        $notesini = File::HomeDir->my_data . '\Lotus\Notes\Data\notes.ini';
        croak "No notes.ini found in $path and current user's profile"  unless -f $notesini;
        $scope = 'all users';
    }

    # Create and store object for easy access to inifile values.
    # Config::IniHash lets us treat the inifile as an ordinary hash.
    my $inihash = ReadINI($notesini, (case => 'sensitive'))
        or croak "Error parsing $notesini";
    my $self = bless {
        notespath => $path,
        notesini  => $notesini,
        inihash   => $inihash,
        scope     => $scope,
    }, $classname;
    return $self;
}


# public accessors -----------------------------------------------------------

sub notesini  { return shift->{notesini } }
sub notespath { return shift->{notespath} }
sub datapath  { return shift->get_environment_value('Directory') }

sub is_server { return shift->get_environment_value('KitType') == 2 }
sub is_client { return shift->get_environment_value('KitType') == 1 }

sub install_scope { return shift->{scope} }

sub version {
    my ($self) = @_;
    return $self->{version} if $self->{version};  # cached value

    # try to extract the version from one of these files
    my @files_with_version = qw(nsd.exe ndgts.dll ninotes.dll memcheck.exe nnntp);
    foreach my $file (@files_with_version) {
        my $filepath = $self->notespath . "\\" . $file;
        next unless -f $filepath;
        open FILE, "< $filepath" or next; # skip errors.
        while (<FILE>) {
            # we cache the result in order to avoid repeated file access.
            return $self->{version} = $2  if /(Release (\d+\.\d+(\.\d+)?[a-z]?))/
        }
        close FILE;
    }
    croak 'could not determine Notes version';
}


# public methods -------------------------------------------------------------

sub get_environment_value {
    my ($self, $key) = @_;
    return $self->{inihash}->{Notes}->{$key};
}


sub set_environment_value {
    my ($self, $key, $value) = @_;
    if (defined $value) {
        $self->{inihash}->{Notes}->{$key} = $value;
    }
    else {
        delete $self->{inihash}->{Notes}->{$key};
    }
    return WriteINI($self->{notesini}, $self->{inihash});
}


1;