switch to new MPL based Fraunhofer FOKUS Public License
[senf.git] / senf / Utils / Logger / FileTarget.cc
index c5aaa03..260f71a 100644 (file)
@@ -2,23 +2,28 @@
 //
 // Copyright (C) 2007
 // Fraunhofer Institute for Open Communication Systems (FOKUS)
-// Competence Center NETwork research (NET), St. Augustin, GERMANY
-//     Stefan Bund <g0dil@berlios.de>
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
+// The contents of this file are subject to the Fraunhofer FOKUS Public License
+// Version 1.0 (the "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at 
+// http://senf.berlios.de/license.html
 //
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
+// The Fraunhofer FOKUS Public License Version 1.0 is based on, 
+// but modifies the Mozilla Public License Version 1.1.
+// See the full license text for the amendments.
 //
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the
-// Free Software Foundation, Inc.,
-// 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+// Software distributed under the License is distributed on an "AS IS" basis, 
+// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 
+// for the specific language governing rights and limitations under the License.
+//
+// The Original Code is Fraunhofer FOKUS code.
+//
+// The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V. 
+// (registered association), Hansastraße 27 c, 80686 Munich, Germany.
+// All Rights Reserved.
+//
+// Contributor(s):
+//   Stefan Bund <g0dil@berlios.de>
 
 /** \file
     \brief FileTarget non-inline non-template implementation */
 //#include "FileTarget.ih"
 
 // Custom includes
-#include "../Console/Console.hh"
-#include "../Exception.hh"
+#include <senf/Utils/Console/ParsedCommand.hh>
+#include <senf/Utils/Console/Variables.hh>
+#include <senf/Utils/Console/ScopedDirectory.hh>
 #include <boost/filesystem/path.hpp>
 
 //#include "FileTarget.mpp"
 #define prefix_
-///////////////////////////////cc.p////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 
 namespace {
-    
+
     std::string getNodename(std::string const & filename, std::string const & nodename)
     {
         if (! nodename.empty())
@@ -48,23 +54,26 @@ namespace {
 
 prefix_ senf::log::FileTarget::FileTarget(std::string const & filename,
                                           std::string const & nodename)
-    : ofstream_t (filename.c_str(), std::ofstream::app), 
-      IOStreamTarget (getNodename(filename, nodename), ofstream_t::member), 
+    : ofstream_t (filename.c_str(), std::ofstream::app),
+      IOStreamTarget (getNodename(filename, nodename), ofstream_t::member),
       file_ (filename)
 {
+    namespace fty = console::factory;
+
     if (! ofstream_t::member)
         SENF_THROW_SYSTEM_EXCEPTION("logfile open") << ": " << filename;
-    consoleDir().add( "reopen", senf::membind(
-                          static_cast<void (FileTarget::*)()>(&FileTarget::reopen),
-                          this))
-        .doc("Reopen logfile");
-    consoleDir().add("reopen", senf::membind(
-                         static_cast<void (FileTarget::*)(std::string const &)>(&FileTarget::reopen),
-                         this))
-        .arg("filename","new filename")
-        .overloadDoc("Reopen logfile under new name");
-    consoleDir().add("file", boost::cref(file_))
-        .doc("Show filename log messages are sent to");
+    consoleDir()
+        .add( "reopen",
+              fty::Command(SENF_MEMBINDFNP(void, FileTarget, reopen, ()))
+              .doc("Reopen logfile") );
+    consoleDir()
+        .add("reopen",
+             fty::Command(SENF_MEMBINDFNP(void, FileTarget, reopen, (std::string const &)))
+             .arg("filename","new filename")
+             .overloadDoc("Reopen logfile under new name") );
+    consoleDir()
+        .add("file", fty::Variable(boost::cref(file_))
+             .doc("Show filename log messages are sent to") );
 }
 
 prefix_ void senf::log::FileTarget::reopen()
@@ -91,29 +100,31 @@ prefix_ std::string const & senf::log::FileTarget::filename()
 
 prefix_ senf::log::FileTarget::RegisterConsole::RegisterConsole()
 {
-    namespace kw = senf::console::kw;
-
-    detail::TargetRegistry::instance().consoleDir().add("file-target",&RegisterConsole::create)
-        .arg("filename", "name of logfile")
-        .arg("nodename", "name of node in console. Defaults to the files basename",
-             kw::default_value = "")
-        .doc("Create new file target. Examples:\n"
-             "\n"
-             "Create new file target '/var/log/example.log\n"
-             "    $ file-target \"/var/log/example.log\"\n"
-             "    <Directory '/sys/log/example.log'>\n"
-             "\n"
-             "In a configuration file, create new file target '/var/log/example.log' and set\n"
-             "some parameters (If written on one line, this works at the console too:\n"
-             "    /sys/log/file-target \"/var/log/example.log\" mainlog {\n"
-             "        route (IMPORTANT);             # route all important messages\n"
-             "        timeFormat \"\";               # use non-formatted time format\n"
-             "        showArea false;                # don't show log area\n"
-             "    }\n");
+    namespace kw = console::kw;
+    namespace fty = console::factory;
+
+    detail::TargetRegistry::instance().consoleDir()
+        .add("file-target", fty::Command(&RegisterConsole::create)
+             .arg("filename", "name of logfile")
+             .arg("nodename", "name of node in console. Defaults to the files basename",
+                  kw::default_value = "")
+             .doc("Create new file target. Examples:\n"
+                  "\n"
+                  "Create new file target '/var/log/example.log\n"
+                  "    $ file-target \"/var/log/example.log\"\n"
+                  "    <Directory '/sys/log/example.log'>\n"
+                  "\n"
+                  "In a configuration file, create new file target '/var/log/example.log' and set\n"
+                  "some parameters (If written on one line, this works at the console too:\n"
+                  "    /sys/log/file-target \"/var/log/example.log\" mainlog {\n"
+                  "        route (IMPORTANT);             # route all important messages\n"
+                  "        timeFormat \"\";               # use non-formatted time format\n"
+                  "        showArea false;                # don't show log area\n"
+                  "    }\n") );
 }
 
 prefix_ boost::shared_ptr<senf::console::DirectoryNode>
-senf::log::FileTarget::RegisterConsole::create(std::string const & filename, 
+senf::log::FileTarget::RegisterConsole::create(std::string const & filename,
                                                std::string const & nodename)
 {
     std::auto_ptr<Target> tp (new FileTarget(filename, nodename));
@@ -122,7 +133,7 @@ senf::log::FileTarget::RegisterConsole::create(std::string const & filename,
     return target.consoleDir().node().thisptr();
 }
 
-///////////////////////////////cc.e////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 #undef prefix_
 //#include "FileTarget.mpp"