Back to index

nordugrid-arc-nox  1.1.0~rc6
XACMLAlgFactory.cpp
Go to the documentation of this file.
00001 #ifdef HAVE_CONFIG_H
00002 #include <config.h>
00003 #endif
00004 
00005 #include <arc/security/ClassLoader.h>
00006 
00007 #include <arc/ArcConfig.h>
00008 #include <arc/security/ArcPDP/alg/DenyOverridesAlg.h>
00009 #include <arc/security/ArcPDP/alg/PermitOverridesAlg.h>
00010 #include <arc/security/ArcPDP/alg/OrderedAlg.h>
00011 
00012 #include "XACMLAlgFactory.h"
00013 
00014 using namespace Arc;
00015 
00016 namespace ArcSec {
00017 
00018 Arc::Plugin* get_xacmlpdp_alg_factory (Arc::PluginArgument*) {
00019     return new ArcSec::XACMLAlgFactory();
00020 }
00021 
00022 
00023 void XACMLAlgFactory::initCombiningAlg(CombiningAlg* alg) {
00024   if(alg) algmap[alg->getalgId()]=alg;
00025 }
00026 
00027 void XACMLAlgFactory::initCombiningAlgs(){
00028   //Some XACML specified algorithm types
00029   CombiningAlg* alg = NULL;
00030   initCombiningAlg(new DenyOverridesCombiningAlg);
00031   initCombiningAlg(new PermitOverridesCombiningAlg);
00032   initCombiningAlg(new PermitDenyIndeterminateNotApplicableCombiningAlg);
00033   initCombiningAlg(new PermitDenyNotApplicableIndeterminateCombiningAlg);
00034   initCombiningAlg(new PermitIndeterminateDenyNotApplicableCombiningAlg);
00035   initCombiningAlg(new PermitIndeterminateNotApplicableDenyCombiningAlg);
00036   initCombiningAlg(new PermitNotApplicableDenyIndeterminateCombiningAlg);
00037   initCombiningAlg(new PermitNotApplicableIndeterminateDenyCombiningAlg);
00038   initCombiningAlg(new DenyPermitIndeterminateNotApplicableCombiningAlg);
00039   initCombiningAlg(new DenyPermitNotApplicableIndeterminateCombiningAlg);
00040   initCombiningAlg(new DenyIndeterminatePermitNotApplicableCombiningAlg);
00041   initCombiningAlg(new DenyIndeterminateNotApplicablePermitCombiningAlg);
00042   initCombiningAlg(new DenyNotApplicablePermitIndeterminateCombiningAlg);
00043   initCombiningAlg(new DenyNotApplicableIndeterminatePermitCombiningAlg);
00044   initCombiningAlg(new IndeterminatePermitDenyNotApplicableCombiningAlg);
00045   initCombiningAlg(new IndeterminatePermitNotApplicableDenyCombiningAlg);
00046   initCombiningAlg(new IndeterminateDenyPermitNotApplicableCombiningAlg);
00047   initCombiningAlg(new IndeterminateDenyNotApplicablePermitCombiningAlg);
00048   initCombiningAlg(new IndeterminateNotApplicablePermitDenyCombiningAlg);
00049   initCombiningAlg(new IndeterminateNotApplicableDenyPermitCombiningAlg);
00050   initCombiningAlg(new NotApplicablePermitDenyIndeterminateCombiningAlg);
00051   initCombiningAlg(new NotApplicablePermitIndeterminateDenyCombiningAlg);
00052   initCombiningAlg(new NotApplicableDenyPermitIndeterminateCombiningAlg);
00053   initCombiningAlg(new NotApplicableDenyIndeterminatePermitCombiningAlg);
00054   initCombiningAlg(new NotApplicableIndeterminatePermitDenyCombiningAlg);
00055   initCombiningAlg(new NotApplicableIndeterminateDenyPermitCombiningAlg);
00058 }
00059 
00060 XACMLAlgFactory::XACMLAlgFactory(){
00061   initCombiningAlgs();
00062 }
00063 
00064 CombiningAlg* XACMLAlgFactory::createAlg(const std::string& type){
00065   AlgMap::iterator it; 
00066   if((it=algmap.find(type)) != algmap.end()){
00067     return (*it).second;
00068   }
00069   else return NULL;
00070 }
00071 
00072 XACMLAlgFactory::~XACMLAlgFactory(){
00073   AlgMap::iterator it;
00074   for(it = algmap.begin(); it != algmap.end(); it = algmap.begin()){
00075     CombiningAlg * alg = (*it).second;
00076     algmap.erase(it);
00077     if(alg) delete alg;;
00078   }
00079 }
00080 
00081 } // namespace ArcSec
00082