MessageLogResource.h

Go to the documentation of this file.
00001 /*
00002  * The information in this file is
00003  * Copyright(c) 2007 Ball Aerospace & Technologies Corporation
00004  * and is subject to the terms and conditions of the
00005  * GNU Lesser General Public License Version 2.1
00006  * The license text is available from   
00007  * http://www.gnu.org/licenses/lgpl.html
00008  */
00009 
00010 #ifndef MESSAGELOGRESOURCE_H
00011 #define MESSAGELOGRESOURCE_H
00012 
00013 #include "MessageLog.h"
00014 #include "MessageLogMgr.h"
00015 #include "Resource.h"
00016 #include "SessionManager.h"
00017 
00018 #include <string>
00019 
00020 class Step;
00021 
00022 class MessageObject
00023 {
00024 public:
00025    struct Args
00026    {
00027       Args(std::string stepName, std::string component, std::string key, std::string defaultFailureMsg,
00028            std::string messageLogName, bool createStep) :
00029          mStepName(stepName),
00030          mFailureMsg(defaultFailureMsg),
00031          mComponent(component),
00032          mKey(key),
00033          mCreateStep(createStep)
00034       {
00035          if (messageLogName.empty())
00036          {
00037             Service<SessionManager> pManager;
00038             mMessageLogName = pManager->getName();
00039          }
00040          else
00041          {
00042             mMessageLogName = messageLogName;
00043          }
00044       }
00045 
00046       std::string mMessageLogName;
00047       std::string mStepName;
00048       std::string mFailureMsg;
00049       std::string mComponent;
00050       std::string mKey;
00051       bool mCreateStep;
00052    };
00053 
00054    Message* obtainResource(const Args& args) const
00055    {
00056       Service<MessageLogMgr> pMgr;
00057 
00058       if (args.mMessageLogName.empty())
00059       {
00060          return NULL;
00061       }
00062 
00063       MessageLog* pLog = pMgr->getLog(args.mMessageLogName);
00064       if (pLog == NULL)
00065       {
00066          pLog = pMgr->createLog(args.mMessageLogName);
00067          if (pLog == NULL)
00068          {
00069             return NULL;
00070          }
00071       }
00072 
00073       Message* pStep = NULL;
00074       if (args.mCreateStep)
00075       {
00076          pStep = pLog->createStep(args.mStepName, args.mComponent, args.mKey);
00077       }
00078       else
00079       {
00080          pStep = pLog->createMessage(args.mStepName, args.mComponent, args.mKey);
00081       }
00082 
00083       return pStep;
00084    }
00085 
00086    void releaseResource(const Args& args, Message* pStep) const
00087    {
00088       if ((pStep != NULL) && (args.mCreateStep == true))
00089       {
00090          //---- go ahead an finalize the step
00091          //---- as having failed,  this will
00092          //---- be a no-op if the step has already
00093          //---- been finalized.
00094          static_cast<Step*>(pStep)->finalize(Message::Failure, args.mFailureMsg);
00095       }
00096    }
00097 };
00098 
00099 class StepResource : public Resource<Step,MessageObject>
00100 {
00101 public:
00102    StepResource(std::string stepName, std::string component, std::string key, std::string defaultFailureMsg = "",
00103                 std::string messageLogName = "") :
00104       Resource<Step, MessageObject>(MessageObject::Args(stepName, component, key, defaultFailureMsg,
00105          messageLogName, true))
00106    {
00107    }
00108 
00109    StepResource(Step* curStep, std::string defaultFailureMsg = "") :
00110       Resource<Step, MessageObject>(curStep, MessageObject::Args("", "", "", defaultFailureMsg, "", true))
00111    {
00112    }
00113 };
00114 
00115 class MessageResource : public Resource<Message, MessageObject>
00116 {
00117 public:
00118    MessageResource(std::string stepName, std::string component, std::string key, std::string messageLogName = "") :
00119       Resource<Message, MessageObject>(MessageObject::Args(stepName, component, key, "", messageLogName, false))
00120    {
00121    }
00122 };
00123 
00124 #endif

Software Development Kit - Opticks 4.9.0 Build 16218