diff options
-rw-r--r-- | installer/OpenSLX/OSExport/Engine.pm | 77 | ||||
-rw-r--r-- | installer/OpenSLX/OSSetup/Engine.pm | 79 | ||||
-rw-r--r-- | lib/OpenSLX/Utils.pm | 28 |
3 files changed, 48 insertions, 136 deletions
diff --git a/installer/OpenSLX/OSExport/Engine.pm b/installer/OpenSLX/OSExport/Engine.pm index 6329f245..a54042c5 100644 --- a/installer/OpenSLX/OSExport/Engine.pm +++ b/installer/OpenSLX/OSExport/Engine.pm @@ -26,7 +26,9 @@ use Exporter; use strict; use Carp; use File::Basename; + use OpenSLX::Basics; +use OpenSLX::Utils; use vars qw(%supportedExportTypes %supportedDistros); @@ -97,12 +99,16 @@ sub initialize } } } - my $distro = accessDistro($distroName); + my $distroModuleName = $supportedDistros{lc($distroName)}->{module}; + my $distro + = instantiateClass("OpenSLX::OSExport::Distro::$distroModuleName"); $distro->initialize($self); $self->{distro} = $distro; # load module for the requested export type: - my $exporter = accessExporter($exportType); + my $typeModuleName = $supportedExportTypes{lc($exportType)}->{module}; + my $exporter + = instantiateClass("OpenSLX::OSExport::ExportType::$typeModuleName"); $exporter->initialize($self); $self->{'exporter'} = $exporter; @@ -142,74 +148,11 @@ sub purgeExport ################################################################################ ### implementation methods ################################################################################ -sub accessDistro -{ - my $distroName = shift; - - my $distroModule - = "OpenSLX::OSExport::Distro::" - .$supportedDistros{lc($distroName)}->{module}; - unless (eval "require $distroModule") { - if ($! == 2) { - die _tr("Distro-module <%s> not found!\n", $distroModule); - } else { - die _tr("Unable to load distro-module <%s> (%s)\n", $distroModule, $@); - } - } - my $modVersion = $distroModule->VERSION; - if ($modVersion < 1.01) { - die _tr('Could not load module <%s> (Version <%s> required, but <%s> found)', - $distroModule, 1.01, $modVersion); - } - return $distroModule->new; -} - -sub accessExporter -{ - my $exportType = shift; - - my $exportTypeModule - = "OpenSLX::OSExport::ExportType::" - .$supportedExportTypes{lc($exportType)}->{module}; - unless (eval "require $exportTypeModule") { - if ($! == 2) { - die _tr("Export-type-module <%s> not found!\n", $exportTypeModule); - } else { - die _tr("Unable to load export-type-module <%s> (%s)\n", $exportTypeModule, $@); - } - } - my $modVersion = $exportTypeModule->VERSION; - if ($modVersion < 1.01) { - die _tr('Could not load module <%s> (Version <%s> required, but <%s> found)', - $exportTypeModule, 1.01, $modVersion); - } - return $exportTypeModule->new; -} - -sub accessConfigDB -{ - my $configDBModule = "OpenSLX::ConfigDB"; - unless (eval "require $configDBModule") { - if ($! == 2) { - vlog 1, _tr("ConfigDB-module not found, unable to access OpenSLX-database.\n"); - } else { - die _tr("Unable to load ConfigDB-module <%s> (%s)\n", $configDBModule, $@); - } - } else { - my $modVersion = $configDBModule->VERSION; - if ($modVersion < 1.01) { - die _tr('Could not load module <%s> (Version <%s> required, but <%s> found)', - $configDBModule, 1.01, $modVersion); - } - } - return $configDBModule->new(); -} - sub addExportToConfigDB { my $self = shift; - my $openslxDB = accessConfigDB(); + my $openslxDB = instantiateClass("OpenSLX::ConfigDB"); $openslxDB->connect(); # insert new export if it doesn't already exist in DB: @@ -250,7 +193,7 @@ sub removeExportFromConfigDB { my $self = shift; - my $openslxDB = accessConfigDB(); + my $openslxDB = instantiateClass("OpenSLX::ConfigDB"); $openslxDB->connect(); # remove export from DB: diff --git a/installer/OpenSLX/OSSetup/Engine.pm b/installer/OpenSLX/OSSetup/Engine.pm index 98077a27..16d8a801 100644 --- a/installer/OpenSLX/OSSetup/Engine.pm +++ b/installer/OpenSLX/OSSetup/Engine.pm @@ -108,28 +108,16 @@ sub initialize } # load module for the requested distro: - my $distroModule - = "OpenSLX::OSSetup::Distro::" - .$supportedDistros{lc($distroName)}->{module}; + my $distroClass; if ($actionType eq 'clone') { - # fallback to generic clone module, such that we can clone + # force generic clone module, such that we can clone # distro's for which there is no specific distro-module yet # (like for example for Gentoo): - $distroModule = "OpenSLX::OSSetup::Distro::Any_Clone"; - } - unless (eval "require $distroModule") { - if ($! == 2) { - die _tr("Distro-module '%s' not found!\n", $distroModule); - } else { - die _tr("Unable to load distro-module '%s' (%s)\n", $distroModule, $@); - } - } - my $modVersion = $distroModule->VERSION; - if ($modVersion < 1.01) { - die _tr("Could not load module '%s' (Version '%s' required, but '%s' found)\n", - $distroModule, 1.01, $modVersion); + $distroClass = "Any_Clone"; + } else { + $distroClass = $supportedDistros{lc($distroName)}->{module}; } - my $distro = $distroModule->new; + my $distro = instantiateClass("OpenSLX::OSSetup::Distro::$distroClass"); $distro->initialize($self); $self->{distro} = $distro; @@ -291,7 +279,7 @@ sub addInstalledVendorOSToConfigDB die _tr("can't import vendor-OS '%s', since it doesn't exist!\n", $self->{'vendor-os-path'}); } - my $openslxDB = accessConfigDB(); + my $openslxDB = instantiateClass("OpenSLX::ConfigDB"); $openslxDB->connect(); # insert new vendor-os if it doesn't already exist in DB: my $vendorOSName = $self->{'vendor-os-name'}; @@ -394,21 +382,9 @@ sub createPackager { my $self = shift; - my $packagerModule + my $packagerClass = "OpenSLX::OSSetup::Packager::$self->{distro}->{'packager-type'}"; - unless (eval "require $packagerModule") { - if ($! == 2) { - die _tr("Packager-module '%s' not found!\n", $packagerModule); - } else { - die _tr("Unable to load packager-module '%s' (%s)\n", $packagerModule, $@); - } - } - my $modVersion = $packagerModule->VERSION; - if ($modVersion < 1.01) { - die _tr("Could not load module '%s' (Version '%s' required, but '%s' found)\n", - $packagerModule, 1.01, $modVersion); - } - my $packager = $packagerModule->new; + my $packager = instantiateClass($packagerClass); $packager->initialize($self); $self->{'packager'} = $packager; } @@ -417,21 +393,9 @@ sub createMetaPackager { my $self = shift; - my $metaPackagerModule + my $metaPackagerClass = "OpenSLX::OSSetup::MetaPackager::$self->{distro}->{'meta-packager-type'}"; - unless (eval "require $metaPackagerModule") { - if ($! == 2) { - die _tr("Meta-packager-module '%s' not found!\n", $metaPackagerModule); - } else { - die _tr("Unable to load meta-packager-module '%s' (%s)\n", $metaPackagerModule, $@); - } - } - my $modVersion = $metaPackagerModule->VERSION; - if ($modVersion < 1.01) { - die _tr("Could not load module '%s' (Version '%s' required, but '%s' found)\n", - $metaPackagerModule, 1.01, $modVersion); - } - my $metaPackager = $metaPackagerModule->new; + my $metaPackager =instantiateClass($metaPackagerClass); $metaPackager->initialize($self); $self->{'meta-packager'} = $metaPackager; } @@ -800,30 +764,11 @@ sub clone_determineIncludeExcludeList return $includeExcludeList; } -sub accessConfigDB -{ - my $configDBModule = "OpenSLX::ConfigDB"; - unless (eval "require $configDBModule") { - if ($! == 2) { - vlog 1, _tr("ConfigDB-module not found, unable to access OpenSLX-database.\n"); - } else { - die _tr("Unable to load ConfigDB-module '%s' (%s)\n", $configDBModule, $@); - } - } else { - my $modVersion = $configDBModule->VERSION; - if ($modVersion < 1.01) { - die _tr("Could not load module '%s' (Version '%s' required, but '%s' found)", - $configDBModule, 1.01, $modVersion); - } - } - return $configDBModule->new(); -} - sub removeVendorOSFromConfigDB { my $self = shift; - my $openslxDB = accessConfigDB(); + my $openslxDB = instantiateClass("OpenSLX::ConfigDB"); $openslxDB->connect(); my $vendorOSName = $self->{'vendor-os-name'}; diff --git a/lib/OpenSLX/Utils.pm b/lib/OpenSLX/Utils.pm index 611d6eb8..1c78f802 100644 --- a/lib/OpenSLX/Utils.pm +++ b/lib/OpenSLX/Utils.pm @@ -21,16 +21,17 @@ $VERSION = 1.01; @ISA = qw(Exporter); @EXPORT = qw( - ©File &fakeFile &linkFile &slurpFile + ©File &fakeFile &linkFile &slurpFile &instantiateClass ); ################################################################################ ### Module implementation ################################################################################ use Carp; -use OpenSLX::Basics; use File::Basename; +use OpenSLX::Basics; + sub copyFile { my $fileName = shift; @@ -86,4 +87,27 @@ sub slurpFile close(F); return $text; } + +sub instantiateClass +{ + my $class = shift; + my $requestedVersion = shift; + + unless (eval "require $class") { + if ($! == 2) { + die _tr("Class <%s> not found!\n", $class); + } else { + die _tr("Unable to load class <%s> (%s)\n", $class, $@); + } + } + if (defined $requestedVersion) { + my $classVersion = $class->VERSION; + if ($classVersion < $requestedVersion) { + die _tr('Could not load class <%s> (Version <%s> required, but <%s> found)', + $class, $requestedVersion, $classVersion); + } + } + return $class->new; +} + 1;
\ No newline at end of file |