Mercurial > repos > deepakjadmin > mayatool3_test3
diff mayachemtools/lib/PackageInfo.pm @ 0:73ae111cf86f draft
Uploaded
author | deepakjadmin |
---|---|
date | Wed, 20 Jan 2016 11:55:01 -0500 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mayachemtools/lib/PackageInfo.pm Wed Jan 20 11:55:01 2016 -0500 @@ -0,0 +1,232 @@ +package PackageInfo; +# +# $RCSfile: PackageInfo.pm,v $ +# $Date: 2015/02/28 20:47:18 $ +# $Revision: 1.9 $ +# +# Author: Manish Sud <msud@san.rr.com> +# +# Copyright (C) 2015 Manish Sud. All rights reserved. +# +# This file is part of MayaChemTools. +# +# MayaChemTools is free software; you can redistribute it and/or modify it under +# the terms of the GNU Lesser General Public License as published by the Free +# Software Foundation; either version 3 of the License, or (at your option) any +# later version. +# +# MayaChemTools is distributed in the hope that it will be useful, but without +# any warranty; without even the implied warranty of merchantability of fitness +# for a particular purpose. See the GNU Lesser General Public License for more +# details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with MayaChemTools; if not, see <http://www.gnu.org/licenses/> or +# write to the Free Software Foundation Inc., 59 Temple Place, Suite 330, +# Boston, MA, 02111-1307, USA. +# + +use strict; +use Exporter; +use Carp; +use Text::ParseWords; +use TextUtil; +use FileUtil; + +use vars qw($AUTOLOAD @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); + +@ISA = qw(Exporter); +@EXPORT = qw(GetPackageKeyValue SetPackageKeyValue IsPackageKeyNameAvailable); +@EXPORT_OK = qw(); +%EXPORT_TAGS = (all => [@EXPORT, @EXPORT_OK]); + +# +# Load package data... +# +my(%PackageDataMap); +_LoadPackageData(); + +# Return value of a specific key... +# +sub GetPackageKeyValue { + my($KeyName) = @_; + + return exists $PackageDataMap{$KeyName} ? $PackageDataMap{$KeyName} : 'Not Available'; +} + +# Set value of a specific key... +# +sub SetPackageKeyValue { + my($KeyName, $KeyValue) = @_; + + $PackageDataMap{$KeyName} = $KeyValue; +} + +# Check availability of a package key name... +# +sub IsPackageKeyNameAvailable { + my($KeyName) = @_; + + return exists $PackageDataMap{$KeyName} ? 1 : 0; +} + +# Implements Set<KeyName> and Get<KeyName> functions... +# +sub AUTOLOAD { + my($KeyValue) = @_; + my($PackageName, $FunctionName, $KeyName); + + ($PackageName, $FunctionName) = $AUTOLOAD =~ /^(.*?)::(.*?)$/; + + if (!($FunctionName =~ /^Get/ || $FunctionName =~ /^Set/)) { + croak "Error: Can't locate function \"$FunctionName\" via package \"$PackageName\": This function is not automatically implemented by AUTOLOAD: Only Get<KeyName> and Set<KeyName> functions are implemented via AUTOLOAD..."; + } + + ($KeyName) = $FunctionName =~ /^[SG]et(.*?)$/; + + if ($FunctionName =~ /^Set/ && !defined($KeyValue)) { + carp "Warning: ${PackageName}::${FunctionName}: Didn't set value for key $KeyName: Key value for must be specified...\n"; + return undef; + } + + if ($FunctionName =~ /^Get/) { + return GetPackageKeyValue($KeyName); + } + elsif ($FunctionName =~ /^Set/) { + return SetPackageKeyValue($KeyName, $KeyValue); + } + +} + +# Load PackageInfo.csv files from <MayaChemTools>/lib directory... +# +sub _LoadPackageData { + my($PackageDataFile, $MayaChemToolsLibDir, $Key, $Value, $Line, $InDelim, @LineWords); + + $MayaChemToolsLibDir = GetMayaChemToolsLibDirName(); + $PackageDataFile = "$MayaChemToolsLibDir" . "/data/PackageInfo.csv"; + + if (! -e "$PackageDataFile") { + croak "Error: MayaChemTools package file, $PackageDataFile, is missing: Possible installation problems..."; + } + + # + # Format: + # + # "Key","Value" + # "PackageName","MayaChemTools" + # ... ... + # + + %PackageDataMap = (); + $InDelim = "\,"; + + open PACKAGEDATAFILE, "$PackageDataFile" or croak "Couldn't open $PackageDataFile: $! ..."; + + # Skip lines up to column labels... + LINE: while ($Line = GetTextLine(\*PACKAGEDATAFILE)) { + if ($Line !~ /^#/) { + last LINE; + } + } + + # Process key/value pairs... + LINE: while ($Line = GetTextLine(\*PACKAGEDATAFILE)) { + if ($Line =~ /^#/) { + next LINE; + } + @LineWords = (); + @LineWords = quotewords($InDelim, 0, $Line); + if (@LineWords != 2) { + croak "Error: The number of data fields, @LineWords, in $PackageDataFile must be 2.\nLine: $Line..."; + } + ($Key, $Value) = @LineWords; + + if (exists $PackageDataMap{$Key}) { + carp "Warning: Multiple entries for key, $Key, in $PackageDataFile. Ignoring current line.\nLine: $Line..."; + next LINE; + } + + $PackageDataMap{$Key} = $Value; + } + close PACKAGEDATAFILE; +} + +1; + +__END__ + +=head1 NAME + +PackageInfo + +=head1 SYNOPSIS + +use PackageInfo; + +use PackageInfo qw(:all); + +=head1 DESCRIPTION + +B<PackageInfo> module provides the following functions: + +GetPackageKeyValue, IsPackageKeyNameAvailable, SetPackageKeyValue + +The functions to set and get package keyvalues not explicitly defined in this module +are implemented using Perl's AUTOLOAD functionality. These methods are generated +on-the-fly for a specified key: + + Set<KeyName>(<KeyValue>); + $KeyValue = Get<KeyName>(); + +B<PackageInfo> module provides functionality to retrieve information about MayaChemTools +package from PackagaInfo.csv which contains the following types key name and values: + + "KeyName","KeyValue" + "PackageName","MayaChemTools" + "ReleaseDate","Oct 21, 2010" + "VersionNumber","7.4" + "DevSoftwareEnvironment","Cygwin on Windows XP" + ... ... + ... ... + +=head1 FUNCTIONS + +=over 4 + +=item B<GetPackageKeyValue> + + $KeyValue = GetPackageKeyValue($KeyName); + +Returns B<KeyValue> for a specified I<KeyName>. + +=item B<IsPackageKeyNameAvailable> + + $Status = IsPackageKeyNameAvailable($KeyName); + +Returns 1 or 0 based on whether I<KeyName> is available in package info file. + +=item B<SetPackageKeyValue> + + SetPackageKeyValue($KeyName, $KeyValue); + +Sets I<KeyValue> for a I<KeyName>. No data is written to package info file. + +=back + +=head1 AUTHOR + +Manish Sud <msud@san.rr.com> + +=head1 COPYRIGHT + +Copyright (C) 2015 Manish Sud. All rights reserved. + +This file is part of MayaChemTools. + +MayaChemTools is free software; you can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License as published by the Free +Software Foundation; either version 3 of the License, or (at your option) +any later version. + +=cut