summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/OpenSLX/Utils.pm28
1 files changed, 26 insertions, 2 deletions
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(
- &copyFile &fakeFile &linkFile &slurpFile
+ &copyFile &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