Back to index

nordugrid-arc-nox  1.1.0~rc6
ArcAlgFactory.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 "ArcAlgFactory.h"
00009 #include <arc/security/ArcPDP/alg/DenyOverridesAlg.h>
00010 #include <arc/security/ArcPDP/alg/PermitOverridesAlg.h>
00011 #include <arc/security/ArcPDP/alg/OrderedAlg.h>
00012 
00013 /*
00014 loader_descriptors __arc_algfactory_modules__  = {
00015     { "alg.factory", 0, &get_alg_factory },
00016     { NULL, 0, NULL }
00017 };
00018 */
00019 
00020 using namespace Arc;
00021 
00022 namespace ArcSec {
00023 
00024 Arc::Plugin* get_arcpdp_alg_factory (Arc::PluginArgument*) {
00025     return new ArcSec::ArcAlgFactory();
00026 }
00027 
00028 
00029 void ArcAlgFactory::initCombiningAlg(CombiningAlg* alg) {
00030   if(alg) algmap[alg->getalgId()]=alg;
00031 }
00032 
00033 void ArcAlgFactory::initCombiningAlgs(){
00034   //Some Arc specified algorithm types
00035   CombiningAlg* alg = NULL;
00036   initCombiningAlg(new DenyOverridesCombiningAlg);
00037   initCombiningAlg(new PermitOverridesCombiningAlg);
00038   initCombiningAlg(new PermitDenyIndeterminateNotApplicableCombiningAlg);
00039   initCombiningAlg(new PermitDenyNotApplicableIndeterminateCombiningAlg);
00040   initCombiningAlg(new PermitIndeterminateDenyNotApplicableCombiningAlg);
00041   initCombiningAlg(new PermitIndeterminateNotApplicableDenyCombiningAlg);
00042   initCombiningAlg(new PermitNotApplicableDenyIndeterminateCombiningAlg);
00043   initCombiningAlg(new PermitNotApplicableIndeterminateDenyCombiningAlg);
00044   initCombiningAlg(new DenyPermitIndeterminateNotApplicableCombiningAlg);
00045   initCombiningAlg(new DenyPermitNotApplicableIndeterminateCombiningAlg);
00046   initCombiningAlg(new DenyIndeterminatePermitNotApplicableCombiningAlg);
00047   initCombiningAlg(new DenyIndeterminateNotApplicablePermitCombiningAlg);
00048   initCombiningAlg(new DenyNotApplicablePermitIndeterminateCombiningAlg);
00049   initCombiningAlg(new DenyNotApplicableIndeterminatePermitCombiningAlg);
00050   initCombiningAlg(new IndeterminatePermitDenyNotApplicableCombiningAlg);
00051   initCombiningAlg(new IndeterminatePermitNotApplicableDenyCombiningAlg);
00052   initCombiningAlg(new IndeterminateDenyPermitNotApplicableCombiningAlg);
00053   initCombiningAlg(new IndeterminateDenyNotApplicablePermitCombiningAlg);
00054   initCombiningAlg(new IndeterminateNotApplicablePermitDenyCombiningAlg);
00055   initCombiningAlg(new IndeterminateNotApplicableDenyPermitCombiningAlg);
00056   initCombiningAlg(new NotApplicablePermitDenyIndeterminateCombiningAlg);
00057   initCombiningAlg(new NotApplicablePermitIndeterminateDenyCombiningAlg);
00058   initCombiningAlg(new NotApplicableDenyPermitIndeterminateCombiningAlg);
00059   initCombiningAlg(new NotApplicableDenyIndeterminatePermitCombiningAlg);
00060   initCombiningAlg(new NotApplicableIndeterminatePermitDenyCombiningAlg);
00061   initCombiningAlg(new NotApplicableIndeterminateDenyPermitCombiningAlg);
00064 }
00065 
00066 ArcAlgFactory::ArcAlgFactory(){
00067   initCombiningAlgs();
00068 }
00069 
00070 CombiningAlg* ArcAlgFactory::createAlg(const std::string& type){
00071   AlgMap::iterator it; 
00072   if((it=algmap.find(type)) != algmap.end()){
00073     return (*it).second;
00074   }
00075   else return NULL;
00076 }
00077 
00078 ArcAlgFactory::~ArcAlgFactory(){
00079   AlgMap::iterator it;
00080   for(it = algmap.begin(); it != algmap.end(); it = algmap.begin()){
00081     CombiningAlg * alg = (*it).second;
00082     algmap.erase(it);
00083     if(alg) delete alg;;
00084   }
00085 }
00086 
00087 } // namespace ArcSec
00088