00001 /******************************************************************************* 00002 * Copyright (C) 2003-2004 Vintela, Inc. All rights reserved. 00003 * 00004 * Redistribution and use in source and binary forms, with or without 00005 * modification, are permitted provided that the following conditions are met: 00006 * 00007 * - Redistributions of source code must retain the above copyright notice, 00008 * this list of conditions and the following disclaimer. 00009 * 00010 * - Redistributions in binary form must reproduce the above copyright notice, 00011 * this list of conditions and the following disclaimer in the documentation 00012 * and/or other materials provided with the distribution. 00013 * 00014 * - Neither the name of Vintela, Inc. nor the names of its 00015 * contributors may be used to endorse or promote products derived from this 00016 * software without specific prior written permission. 00017 * 00018 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' 00019 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00020 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00021 * ARE DISCLAIMED. IN NO EVENT SHALL Vintela, Inc. OR THE CONTRIBUTORS 00022 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 00023 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 00024 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 00025 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 00026 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 00027 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00028 * POSSIBILITY OF SUCH DAMAGE. 00029 *******************************************************************************/ 00030 00035 #include "OW_config.h" 00036 #include "OW_OperationContext.hpp" 00037 #include "OW_String.hpp" 00038 #include "OW_UserInfo.hpp" 00039 #include "OW_Array.hpp" 00040 #include "OW_ExceptionIds.hpp" 00041 00042 namespace OW_NAMESPACE 00043 { 00044 00045 OW_DEFINE_EXCEPTION_WITH_ID(ContextDataNotFound); 00046 00048 OperationContext::OperationContext() 00049 { 00050 } 00051 00053 UserInfo 00054 OperationContext::getUserInfo() const 00055 { 00056 try 00057 { 00058 return UserInfo(getStringData(USER_NAME)); 00059 } 00060 catch (ContextDataNotFoundException& e) 00061 { 00062 return UserInfo(); 00063 } 00064 } 00065 00066 00068 OperationContext::Data::~Data() 00069 { 00070 } 00071 00073 void 00074 OperationContext::setData(const String& key, const DataRef& data) 00075 { 00076 m_data[key] = data; 00077 } 00078 00080 void 00081 OperationContext::removeData(const String& key) 00082 { 00083 m_data.erase(key); 00084 } 00085 00087 OperationContext::DataRef 00088 OperationContext::getData(const String& key) const 00089 { 00090 SortedVectorMap<String, DataRef>::const_iterator ci = m_data.find(key); 00091 if (ci != m_data.end()) 00092 { 00093 return ci->second; 00094 } 00095 return DataRef(); 00096 } 00097 00099 bool 00100 OperationContext::keyHasData(const String& key) const 00101 { 00102 return m_data.count(key) > 0; 00103 } 00104 00106 namespace 00107 { 00108 struct StringData : public OperationContext::Data 00109 { 00110 StringData(const String& str) : m_str(str) {} 00111 String m_str; 00112 }; 00113 } 00115 void 00116 OperationContext::setStringData(const String& key, const String& str) 00117 { 00118 m_data[key] = DataRef(new StringData(str)); 00119 } 00120 00122 String 00123 OperationContext::getStringData(const String& key) const 00124 { 00125 DataRef foo = getData(key); 00126 IntrusiveReference<StringData> strData = foo.cast_to<StringData>(); 00127 if (!strData) 00128 { 00129 OW_THROW(ContextDataNotFoundException, key.c_str()); 00130 } 00131 return strData->m_str; 00132 } 00133 00135 String 00136 OperationContext::getStringDataWithDefault(const String& key, const String& def) const 00137 { 00138 DataRef foo = getData(key); 00139 IntrusiveReference<StringData> strData = foo.cast_to<StringData>(); 00140 if (!strData) 00141 { 00142 return def; 00143 } 00144 return strData->m_str; 00145 } 00146 00148 const char* const OperationContext::USER_NAME = "USER_NAME"; 00149 const char* const OperationContext::USER_PASSWD = "USER_PASSWD"; 00150 const char* const OperationContext::HTTP_PATH = "HTTP_PATH"; 00151 const char* const OperationContext::CURUSER_UIDKEY = "CURUSER_UIDKEY"; 00152 const char* const OperationContext::BYPASS_LOCKERKEY = "BYPASS_LOCKER"; 00153 const char* const OperationContext::SESSION_LANGUAGE_KEY = "SESSION_LANGUAGE_KEY"; 00154 const char* const OperationContext::HTTP_ACCEPT_LANGUAGE_KEY = "HTTP_ACCEPT_LANGUAGE_KEY"; 00155 const char* const OperationContext::CLIENT_IPADDR = "CLIENT_IPADDR"; 00156 00157 00158 } // end namespace OW_NAMESPACE 00159 00160 00161 00162