####################################################################### ## InsertExternalDatabaseRls.pm ## ## Creates new entry in table SRes.ExternalDatabaseRelease ## for new external database versions ## $Id: InsertExternalDatabaseRls.pm 3032 2005-06-24 17:36:15Z msaffitz $ ## ####################################################################### package GUS::Supported::Plugin::InsertExternalDatabaseRls; @ISA = qw( GUS::PluginMgr::Plugin); use strict 'vars'; use GUS::PluginMgr::Plugin; use lib "$ENV{GUS_HOME}/lib/perl"; use FileHandle; use Carp; use GUS::Model::SRes::ExternalDatabaseRelease; my $argsDeclaration = [ stringArg({name => 'databaseName', descr => 'Name in GUS of database for which we are creating a new release', reqd => 1, constraintFunc => undef, isList => 0, }), stringArg ({name=> 'releaseDate', descr => 'release date; format must conform to DATE format in your database instance', reqd => 0, constraintFunc => undef, isList =>0, }), stringArg ({name => 'databaseVersion', descr => 'New version of external database for which we are creating a new release', reqd => 1, constraintFunc => undef, isList => 0, }), stringArg({name => 'downloadUrl', descr => 'full url of external site from where new release can be downloaded', reqd => 0, constraintFunc => undef, isList => 0, }), stringArg({name => 'idType', descr => 'brief description of the format of the primary identifier of entries in the release', reqd => 0, constraintFunc => undef, isList => 0, }), stringArg({name => 'idUrl', descr => 'url to look up entries for a particular id. If possible, replace a specific id with to provide a generalized url', reqd => 0, constraintFunc => undef, isList => 0, }), stringArg({name => 'secondaryIdType', descr => 'brief description of the format of the secondary identifier of entries in the release', reqd => 0, constraintFunc => undef, isList => 0, }), stringArg({name => 'secondaryIdUrl', descr => 'url to look up entries for a particular id, by their secondary identifier. If possible, replace a specific id with to provide a generalized url', reqd => 0, constraintFunc => undef, isList => 0, }), stringArg({name => 'description', descr => 'description of the new release. If possible, make the description specific to the release rather than a general description of the database itself', reqd => 0, constraintFunc => undef, isList => 0, }), #not using fileArg for this since file is not actually opened in this plugin stringArg({name => 'fileName', descr => 'name of file representing this release, and if it exists, link to local location where file can be found', reqd => 0, constraintFunc => undef, isList => 0, }), stringArg({name => 'fileMd5', descr => 'md5 checksum for verifying the file was downloaded successfully, and if it exists, link to local location where file can be found', reqd => 0, constraintFunc => undef, isList => 0, }) ]; my $purposeBrief = <$purpose, purposeBrief=>$purposeBrief, tablesAffected=>$tablesAffected, tablesDependedOn=>$tablesDependedOn, howToRestart=>$howToRestart, failureCases=>$failureCases, notes=>$notes }; sub new { my ($class) = @_; my $self = {}; bless($self,$class); $self->initialize({requiredDbVersion => 3.5, cvsRevision => '$Revision: 3032 $', # cvs fills this in! name => ref($self), argsDeclaration => $argsDeclaration, documentation => $documentation }); return $self; } ####################################################################### # Main Routine ####################################################################### sub run { my ($self) = @_; my $dbName = $self->getArg('databaseName'); my $dbVer = $self->getArg('databaseVersion'); my $msg; my $dbId = $self->getExtDbId($dbName); if ($self->releaseAlreadyExists($dbId)){ $msg = "Not creating a new release Id for $dbName as there is already one for $dbName version $dbVer"; } else{ my $extDbRelId = $self->makeNewReleaseId($dbId); $msg = "Created new release id for $dbName with version $dbVer and release id $extDbRelId"; } return $msg; } ####################################################################### # Subroutines ####################################################################### # --------------------------------------------------------------------- # releaseAlreadyExists # --------------------------------------------------------------------- sub releaseAlreadyExists{ my ($self, $id) = @_; my $dbVer = $self->getArg('databaseVersion'); my $sql = "select external_database_release_id from SRes.ExternalDatabaseRelease where external_database_id = $id and version = '$dbVer'"; my $sth = $self->prepareAndExecute($sql); my ($relId) = $sth->fetchrow_array(); return $relId; #if exists, entry has already been made for this version } # --------------------------------------------------------------------- # makeNewReleaseId # --------------------------------------------------------------------- sub makeNewReleaseId{ my ($self, $id) = @_; my $dbVer = $self->getArg('databaseVersion'); my $newRelease = GUS::Model::SRes::ExternalDatabaseRelease->new({ external_database_id => $id, version => $dbVer, download_url => $self->getArg('downloadUrl'), id_type => $self->getArg('idType'), id_url => $self->getArg('idUrl'), secondary_id_type => $self->getArg('secondaryIdType'), secondary_id_url => $self->getArg('secondaryIdUrl'), description => $self->getArg('description'), file_name => $self->getArg('fileName'), file_md5 => $self->getArg('fileMd5'), }); $newRelease->submit(); my $newReleasePk = $newRelease->getId(); return $newReleasePk; } # --------------------------------------------------------------------- # getExtDbId # --------------------------------------------------------------------- sub getExtDbId{ my ($self, $name, ) = @_; my $lcName = lc($name); my $sql = "select external_database_id from SRes.ExternalDatabase where lower(name) = '$lcName'"; my $sth = $self->prepareAndExecute($sql); my ($id) = $sth->fetchrow_array(); if (!($id)){ $self->userError("no entry in SRes.ExternalDatabase for database $name"); } else{ return $id; } } 1;