Back to index

nordugrid-arc-nox  1.1.0~rc6
TargetRetriever.cpp
Go to the documentation of this file.
00001 // -*- indent-tabs-mode: nil -*-
00002 
00003 #ifdef HAVE_CONFIG_H
00004 #include <config.h>
00005 #endif
00006 
00007 #include <arc/ArcConfig.h>
00008 #include <arc/Logger.h>
00009 #include <arc/client/TargetRetriever.h>
00010 #include <arc/loader/FinderLoader.h>
00011 
00012 namespace Arc {
00013 
00014   Logger TargetRetriever::logger(Logger::getRootLogger(), "TargetRetriever");
00015 
00016   TargetRetriever::TargetRetriever(const UserConfig& usercfg,
00017                                    const URL& url, ServiceType st,
00018                                    const std::string& flavour)
00019     : usercfg(usercfg),
00020       url(url),
00021       serviceType(st),
00022       flavour(flavour) {}
00023 
00024   TargetRetriever::~TargetRetriever() {}
00025 
00026   TargetRetrieverLoader::TargetRetrieverLoader()
00027     : Loader(BaseConfig().MakeConfig(Config()).Parent()) {}
00028 
00029   TargetRetrieverLoader::~TargetRetrieverLoader() {
00030     for (std::list<TargetRetriever*>::iterator it = targetretrievers.begin();
00031          it != targetretrievers.end(); it++)
00032       delete *it;
00033   }
00034 
00035   TargetRetriever* TargetRetrieverLoader::load(const std::string& name,
00036                                                const UserConfig& usercfg,
00037                                                const URL& url,
00038                                                const ServiceType& st) {
00039     if (name.empty())
00040       return NULL;
00041 
00042     if(!factory_->load(FinderLoader::GetLibrariesList(),
00043                        "HED:TargetRetriever", name)) {
00044       logger.msg(ERROR, "TargetRetriever plugin \"%s\" not found.", name);
00045       return NULL;
00046     }
00047 
00048     TargetRetrieverPluginArgument arg(usercfg, url, st);
00049     TargetRetriever *targetretriever =
00050       factory_->GetInstance<TargetRetriever>("HED:TargetRetriever", name, &arg, false);
00051 
00052     if (!targetretriever) {
00053       logger.msg(ERROR, "TargetRetriever %s could not be created", name);
00054       return NULL;
00055     }
00056 
00057     targetretrievers.push_back(targetretriever);
00058     logger.msg(INFO, "Loaded TargetRetriever %s", name);
00059     return targetretriever;
00060   }
00061 
00062 } // namespace Arc