OMKAccessibleParameterPrm.cpp

Go to the documentation of this file.
00001 /************************************************************************/
00002 /* This file is part of openMask(c) INRIA, CNRS, Universite de Rennes 1 */
00003 /* 1993-2002, thereinafter the Software                                 */
00004 /*                                                                      */
00005 /* The Software has been developped within the Siames Project.          */
00006 /* INRIA, the University of Rennes 1 and CNRS jointly hold intellectual */
00007 /* property rights                                                      */
00008 /*                                                                      */
00009 /* The Software has been registered with the Agence pour la Protection  */
00010 /* des Programmes (APP) under registration number                       */
00011 /* IDDN.FR.001.510008.00.S.P.2001.000.41200                             */
00012 /*                                                                      */
00013 /* This file may be distributed under the terms of the Q Public License */
00014 /* version 1.0 as defined by Trolltech AS of Norway and appearing in    */
00015 /* the file LICENSE.QPL included in the packaging of this file.         */
00016 /*                                                                      */
00017 /* Licensees holding valid specific licenses issued by INRIA, CNRS or   */
00018 /* Universite Rennes 1 for the software may use this file in            */
00019 /* acordance with that specific license                                 */
00020 /************************************************************************/              
00021 
00022 #include "OMKAccessibleParameterPrm.h"
00023 #include "OMKParametersAccessor.inl"
00024 #include "OMKOutgoingSynchronisationMessage.h"
00025 #include "OMKIncomingSynchronisationMessage.h"
00026 #include "OMKSimpleTypeT.inl"
00027 #include "OMKIConnectors.h"
00028 
00029 using namespace OMK::Type ;
00030 using namespace OMK::Iii ;
00031 using namespace OMK ;
00032 //========================================================================
00033 // Default constructor
00034 AccessibleParameterPrm::AccessibleParameterPrm()
00035 : _id( OMK::Name() ),
00036   _category( OMK::Name() ),
00037   _type( OMK::Name() ),
00038   _accessible( false ),
00039   _levels(),
00040   _toolsInUse()
00041 {
00042 }
00043 
00044 //------------------------------------------------------------------------
00045 // Copy constructor
00046 AccessibleParameterPrm::AccessibleParameterPrm( const AccessibleParameterPrm& ref )
00047 {
00048   _copy( ref ) ;
00049 }
00050 
00051 //------------------------------------------------------------------------
00052 // Constructor with the parameters
00053 AccessibleParameterPrm::AccessibleParameterPrm( const IConnector* connector, 
00054                                                 const AccessGroup& accessGroup ) 
00055 : _id( connector->id() ),
00056   _category( connector->category() ),
00057   _type( connector->type() ),
00058   _accessible( connector->getAccessRule().isAccessGranted( accessGroup._level, accessGroup._groupName ) ),
00059   _levels( connector->getAccessRule().getCurrentAccessLevel() ),
00060   _toolsInUse( connector->getToolsInUse() )
00061 {
00062 }
00063 
00064 //------------------------------------------------------------------------
00065 // Constructor with the parameters
00066 AccessibleParameterPrm::AccessibleParameterPrm( OMK::Name id,
00067                                                 OMK::Name category,
00068                                                 OMK::Name type,
00069                                                 bool accessible,
00070                                                 const std::map< OMK::Name, int >& levels,
00071                                                 const std::list< OMK::Name >& toolsInUse )
00072 : _id( id ),
00073   _category( category ),
00074   _type( type ),
00075   _accessible( accessible ),
00076   _levels( levels ),
00077   _toolsInUse( toolsInUse )
00078 {
00079 }
00080 
00081 //------------------------------------------------------------------------
00082 // Destructor
00083 AccessibleParameterPrm::~AccessibleParameterPrm()
00084 {
00085 }
00086 
00087 //------------------------------------------------------------------------
00088 // copy operator
00089 AccessibleParameterPrm& AccessibleParameterPrm::operator = ( const AccessibleParameterPrm& ref )
00090 {
00091   if ( this != &ref )
00092   {
00093     _copy( ref ) ;
00094   }
00095   return *this ;
00096 }
00097 
00098 //------------------------------------------------------------------------
00099 // Protected copy methods
00100 void AccessibleParameterPrm::_copy( const AccessibleParameterPrm& ref )
00101 {
00102   _id = ref._id ; 
00103   _category = ref._category ; 
00104   _type = ref._type ; 
00105   _accessible = ref._accessible ; 
00106   _levels = ref._levels ; 
00107   _toolsInUse = ref._toolsInUse ; 
00108 }
00109 
00110 //========================================================================
00111 namespace OMK
00112 {
00113 namespace Type
00114 {
00115 //------------------------------------------------------------------------
00116 // != operator
00117 bool operator != ( const AccessibleParameterPrm& a0, const AccessibleParameterPrm& a1 )
00118 {
00119   return a0._id != a1._id
00120       || a0._category != a1._category
00121       || a0._type != a1._type
00122       || a0._accessible != a1._accessible
00123       || a0._levels != a1._levels
00124       || a0._toolsInUse != a1._toolsInUse ;
00125 }
00126 
00127 } //namespace OMK
00128 } //namespace Type
00129 //========================================================================
00130 
00131 //------------------------------------------------------------------------
00132 // insert in stream
00133 std::ostream& operator << ( std::ostream& out, const OMK::Type::AccessibleParameterPrm& a )
00134 {
00135   out << a._id << " "
00136       << a._category << " "
00137       << a._type << " "
00138       << a._accessible << " "
00139       << a._levels << " "
00140       << a._toolsInUse << " "
00141       << " " ;
00142   return out ;
00143 }
00144 
00145 //------------------------------------------------------------------------
00146 // extract from a 
00147 std::istream& operator >> ( std::istream& in, OMK::Type::AccessibleParameterPrm& a )
00148 {
00149   in >> a._id
00150      >> a._category
00151      >> a._type
00152      >> a._accessible
00153      >> a._levels
00154      >> a._toolsInUse ;
00155   return in ;
00156 }
00157 
00158 //------------------------------------------------------------------------
00159 // insert in stream
00160 OMK::OutgoingSynchronisationMessage& operator << ( OMK::OutgoingSynchronisationMessage& out, const OMK::Type::AccessibleParameterPrm& a )
00161 {
00162   out << a._id
00163       << a._category
00164       << a._type
00165       << a._accessible
00166       << a._levels
00167       << a._toolsInUse ;
00168   return out ;
00169 }
00170 
00171 //------------------------------------------------------------------------
00172 // extract from a 
00173 OMK::IncomingSynchronisationMessage& operator >> ( OMK::IncomingSynchronisationMessage& in, OMK::Type::AccessibleParameterPrm& a )
00174 {
00175   in >> a._id
00176      >> a._category
00177      >> a._type
00178      >> a._accessible
00179      >> a._levels
00180      >> a._toolsInUse ;
00181   return in ;
00182 }
00183 
00184 //========================================================================
00185 
00186 //========================================================================
00187 // ParametersAccessor specific implementation for OMK::Type::AccessibleParameterPrm.
00188 template<>
00189 bool OMK::ParametersAccessor::getValue< OMK::Type::AccessibleParameterPrm >
00190                     ( const ConfigurationParameterDescriptor * nodeValue, 
00191                       OMK::Type::AccessibleParameterPrm& value, 
00192                       std::string& errorStr )
00193 {
00194   bool ok = true ;
00195   const OMK::MultipleConfigurationParameter *tmpNode = 
00196     dynamic_cast< const OMK::MultipleConfigurationParameter * >( nodeValue ) ;
00197   ok = ok && tmpNode ;
00198   if( ok ) 
00199   {
00200     bool named = tmpNode && !tmpNode->getNameOfSubDescriptor( 0 ).empty() ;
00201     ok = ( named || 6 <= tmpNode->getNumberOfSubItems() ) ;
00202     if ( !ok && errorStr.empty() )
00203     {
00204       errorStr = "Bad format of AccessibleParameterPrm which needs 6 arguments" ;
00205     }
00206 
00207     // "Id" parameter (member "_id")
00208     const OMK::ConfigurationParameterDescriptor *dataNode = !ok ? 0 :
00209       ( named ?
00210         tmpNode->getSubDescriptorByName( "Id" ) :
00211         tmpNode->getSubDescriptorByPosition( 0 ) ) ;
00212     ok = ok 
00213       && ( ( !dataNode && named ) // optional parameter if named
00214         || getValue( dataNode, value._id, errorStr ) ) ;
00215 
00216     // "Category" parameter (member "_category")
00217     dataNode = !ok ? 0 :
00218       ( named ?
00219         tmpNode->getSubDescriptorByName( "Category" ) :
00220         tmpNode->getSubDescriptorByPosition( 1 ) ) ;
00221     ok = ok 
00222       && ( ( !dataNode && named ) // optional parameter if named
00223         || getValue( dataNode, value._category, errorStr ) ) ;
00224 
00225     // "Type" parameter (member "_type")
00226     dataNode = !ok ? 0 :
00227       ( named ?
00228         tmpNode->getSubDescriptorByName( "Type" ) :
00229         tmpNode->getSubDescriptorByPosition( 2 ) ) ;
00230     ok = ok 
00231       && ( ( !dataNode && named ) // optional parameter if named
00232         || getValue( dataNode, value._type, errorStr ) ) ;
00233 
00234     // "Accessible" parameter (member "_accessible")
00235     dataNode = !ok ? 0 :
00236       ( named ?
00237         tmpNode->getSubDescriptorByName( "Accessible" ) :
00238         tmpNode->getSubDescriptorByPosition( 3 ) ) ;
00239     ok = ok 
00240       && ( ( !dataNode && named ) // optional parameter if named
00241         || getValue( dataNode, value._accessible, errorStr ) ) ;
00242 
00243     // "Levels" parameter (member "_levels")
00244     dataNode = !ok ? 0 :
00245       ( named ?
00246         tmpNode->getSubDescriptorByName( "Levels" ) :
00247         tmpNode->getSubDescriptorByPosition( 4 ) ) ;
00248     ok = ok 
00249       && ( ( !dataNode && named ) // optional parameter if named
00250         || getValue( dataNode, value._levels, errorStr ) ) ;
00251 
00252     // "ToolsInUse" parameter (member "_toolsInUse")
00253     dataNode = !ok ? 0 :
00254       ( named ?
00255         tmpNode->getSubDescriptorByName( "ToolsInUse" ) :
00256         tmpNode->getSubDescriptorByPosition( 5 ) ) ;
00257     ok = ok 
00258       && ( ( !dataNode && named ) // optional parameter if named
00259         || getValue( dataNode, value._toolsInUse, errorStr ) ) ;
00260   }
00261   return ok ;
00262 }
00263 

logo OpenMask

Documentation generated on Mon Jun 9 11:45:55 2008

Generated with doxygen by Dimitri van Heesch ,   1997-2007