package Kernel::System::ObjectManager; use strict; use warnings; use Carp qw( carp confess ); # use Kernel::Config; # use Kernel::System::Log; our $CurrentObject; # ------------------------------------------------------------------------------------------------------------------------------- sub new { # Übergabe der Parameter aus Aufruf my ( $Typ , %Parameter ) = @_; # Asssozierung eines Hashes zu einer Klasse my $Self = bless { }, $Typ; # Entfernung des Debug - Parameters $Self -> { Debug } = delete $Parameter{ Debug }; # Sortierung der Parameter des Hashes & Zuordnung über Befehl "$Self -> { Param } -> { $Parameter }" # ( Nur bei Übergabe eines Parameters über NEW - Methode des Object - Managers ) for my $Schluessel ( sort keys %Parameter ) { $Self -> { Parameter } -> { $Schluessel } = $Parameter{ $Schluessel }; } # Rückgabe des OM - Objektes return $Self; } # ------------------------------------------------------------------------------------------------------------------------------- sub Get { # No param unpacking for increased performance if ( $_[ 1 ] && $_[ 0 ] -> { Objects } -> { $_[ 1 ] } ) { return $_[ 0 ] -> { Objects } -> { $_[ 1 ] }; } if ( !$_[ 1 ] ) { $_[ 0 ] -> _DieWithError( Error => "Fehler : Fehlender Parameter ( Objekt - Bez. )" ); } local $CurrentObject = $_[ 1 ] if !$CurrentObject; return $_[ 0 ] -> _ObjectBuild( Package => $_[ 1 ] ); } # ------------------------------------------------------------------------------------------------------------------------------- sub _ObjectBuild { my ( $Self, %Parameter ) = @_; my $Package = $Parameter{ Package }; my $Datei_Bezeichnung = $Package; $Datei_Bezeichnung =~ s{::}{/}g; $Datei_Bezeichnung .= '.pm'; eval { require $Datei_Bezeichnung; }; if ( $@ ) { if ( $CurrentObject && $CurrentObject ne $Package ) { $Self -> _DieWithError( Error => "Fehler bei der Initialisierung des Unter - Moduls $Package im Modul $CurrentObject" ); } else { $Self -> _DieWithError( Error => "Fehler bei der Initialisierung des Moduls $Package" ); } } } # ------------------------------------------------------------------------------------------------------------------------------- sub _DieWithError { my ( $Self, %Parameter ) = @_; print $Parameter{ Error }; } # ------------------------------------------------------------------------------------------------------------------------------- 1;