--- /dev/null
+##############################################################################
+#
+# Log-Konfiguration für Log::Log4perl
+#
+# Diese Konfiguration kann von einer log4perl_local.conf überschrieben werden.
+# (Kein Merging! - Siehe Log::Log4perl zu Details der Konfiguration)
+#
+# $Id$
+# $URL$
+#
+##############################################################################
+
+# Root-Logger
+log4perl.rootLogger = INFO, ScreenApp
+
+# Normaler Screen-Appender auf StdErr
+log4perl.appender.ScreenApp = Log::Log4perl::Appender::Screen
+log4perl.appender.ScreenApp.stderr = 1
+log4perl.appender.ScreenApp.utf8 = 1
+log4perl.appender.ScreenApp.layout = PatternLayout
+log4perl.appender.ScreenApp.layout.ConversionPattern = [%d] [Backup] [%p] %m%n
+
+###########################
+# Alternativ mit zwei Appendern
+
+# Root-Logger
+#log4perl.rootLogger = DEBUG, ScreenApp, FileApp
+
+#layout_class = Log::Log4perl::Layout::PatternLayout
+#layout_pattern = [%d] [Backup] [%p] %m%n
+
+# Filterdefinition für den Screen-Appender
+#log4perl.filter.InfoFilter = Log::Log4perl::Filter::LevelRange
+#log4perl.filter.InfoFilter.LevelMin = INFO
+#log4perl.filter.InfoFilter.LevelMax = FATAL
+#log4perl.filter.InfoFilter.AcceptOnMatch = true
+
+# Normaler Screen-Appender auf StdErr
+#log4perl.appender.ScreenApp = Log::Log4perl::Appender::Screen
+#log4perl.appender.ScreenApp.stderr = 1
+#log4perl.appender.ScreenApp.utf8 = 1
+#log4perl.appender.ScreenApp.Filter = InfoFilter
+#log4perl.appender.ScreenApp.layout = ${layout_class}
+#log4perl.appender.ScreenApp.layout.ConversionPattern = ${layout_pattern}
+
+# Und der File-Appender für alles
+#log4perl.appender.FileApp = Log::Log4perl::Appender::File
+#log4perl.appender.FileApp.filename = /var/www/irgendwo/log/debug.log
+#log4perl.appender.FileApp.mode = append
+#log4perl.appender.FileApp.umask = 0222
+#log4perl.appender.FileApp.utf8 = 1
+#log4perl.appender.FileApp.recreate = 1
+#log4perl.appender.FileApp.recreate_check_interval = 60
+#log4perl.appender.FileApp.recreate_check_signal = USR1
+#log4perl.appender.FileApp.layout = ${layout_class}
+#log4perl.appender.FileApp.layout.ConversionPattern = ${layout_pattern}
+
--- /dev/null
+package FrBr::Postfix::App;
+
+# $Id$
+# $URL$
+
+=head1 NAME
+
+FrBr::Postfix::App
+
+=head1 DESCRIPTION
+
+Basismodul fuer Postfix-Map-Auslagern-Anwendung
+
+=cut
+
+#---------------------------------------------------------------------------
+
+use Moose;
+use MooseX::StrictConstructor;
+
+use utf8;
+
+use MooseX::Types::Path::Class;
+use Path::Class;
+
+extends 'FrBr::Common::MooseX::App';
+
+with 'FrBr::Common::MooseX::Role::Config';
+with 'FrBr::Common::MooseX::Role::DbSchema';
+
+#-----------------------------------------
+
+# Versionitis
+
+my $Revis = <<'ENDE';
+ $Revision$
+ENDE
+$Revis =~ s/^.*:\s*(\S+)\s*\$.*/$1/s;
+
+use version; our $VERSION = qv("0.9.1"); $VERSION .= " r" . $Revis;
+
+############################################################################
+
+=head1 ATTRIBUTES
+
+Alle für dieses allgemeine Anwendungsobjekt definierten Attribute/Eigenschaften,
+die nicht durch dazugehörige Rollen definiert werden.
+
+=cut
+
+#-------------------------
+
+=head2 postfix_dir
+
+Konfigurationsverzeichnis von Postfix, normalerweise '/etc/postfix'
+
+=cut
+
+has 'postfix_dir' => (
+ is => 'rw',
+ isa => 'Path::Class::Dir',
+ traits => [ 'Getopt' ],
+ coerce => 1,
+ lazy => 1,
+ required => 1,
+ builder => '_build_postfixdir',
+ documentation => 'Stammverzeichnis der Anwendung',
+ cmd_aliases => [ 'postfix' ],
+);
+
+#------
+
+sub _build_postfixdir {
+ return dir->new( '/etc/postfix' );
+}
+
+###########################################################################
+
+=head1 METHODS
+
+Spezielle Methoden und Methodenmodifizierer dieser Anwendung
+
+=cut
+
+#---------------------------------
+
+around BUILDARGS => sub {
+
+ my $orig = shift;
+ my $class = shift;
+
+ my %Args = @_;
+
+ #warn "Bin in '" . __PACKAGE__ . "'\n";
+
+ return $class->$orig(%Args);
+
+};
+
+#---------------------------------
+
+sub BUILD {
+
+ my $self = shift;
+
+ #warn "Bin in '" . __PACKAGE__ . "::BUILD'\n";
+
+}
+
+#---------------------------------------------------------------------------
+
+after 'evaluate_config' => sub {
+
+ my $self = shift;
+
+ #return if $self->configuration_evaluated;
+ $self->debug( "Werte Backup-Konfigurationsdinge aus ..." );
+ return unless $self->config and keys %{ $self->config };
+
+ my @ConfigKeys = qw( postfix_dir );
+
+ for my $key ( keys %{ $self->config } ) {
+
+ my $val = $self->config->{$key};
+
+ for my $p ( @ConfigKeys ) {
+ my $f = $p;
+ my $r = $p;
+ $r =~ s/_/\[_-\]\?/g;
+ $r = "^$r\$";
+ $self->debug( sprintf( "Regex 1: '%s'", $r ) ) if $self->verbose >= 4;
+ unless ( $self->used_cmd_params->{$f} ) {
+ if ( $key =~ /$r/i ) {
+ $self->debug( sprintf( "Gefunden: \$self->config->{%s} -> '%s'", $key, ( defined $val ? $val : '<undef>' ) ) ) if $self->verbose >= 2;
+ $self->$f($val);
+ }
+ }
+ }
+
+ }
+
+ unless ( $self->postfix_dir->is_absolute ) {
+ my $d = $self->postfix_dir;
+ $d = dir( $self->basedir, $self->postfix_dir )->absolute;
+ $self->postfix_dir($d);
+ $self->debug( sprintf( "Setze Postfix-Dir auf '%s' ...", $d ) ) if $self->verbose >= 2;
+ }
+
+
+};
+
+#---------------------------------------------------------------------------
+
+after 'init_app' => sub {
+
+ my $self = shift;
+
+ return if $self->app_initialized;
+
+ $self->debug( "Initialisiere ..." );
+
+ if ( $self->verbose >= 2 ) {
+
+ my $tmp;
+ for my $f ( 'postfix_dir', ) {
+ $tmp = $self->$f();
+ }
+
+ }
+
+};
+
+#---------------------------------
+
+=head2 run( )
+
+Die eigentliche Startroutine der Anwendung.
+
+=cut
+
+sub run {
+
+ my $self = shift;
+
+ $self->info( "Beginne Checkout der Mappings." );
+
+}
+
+#---------------------------------
+
+__PACKAGE__->meta->make_immutable;
+
+1;
+
+#------------------------------------------------------------------------------------------
+
+__END__
+
+# vim: noai: filetype=perl ts=4 sw=4 : expandtab