30 strAppName = szAppName;
37 if ((strPath.rfind(directorySeparator) == std::string::npos) || (strPath.rfind(directorySeparator) != strPath.size() - 1)) {
38 strPath = strPath + std::string(directorySeparator);
49 strFileName = szFileName;
65 if(!strFileName.empty())
67 fileNames.push_back(strFileName);
73 logger->
addError(
"No application template path is introduced.");
79 if ((dir = opendir(strPath.c_str())) ==
nullptr)
82 err<<
"Cannot access "<<strPath;
88 while((entry = readdir(dir)))
90 std::string name = entry->d_name;
93 std::string ext = name.substr(name.size()-12,12);
95 fileNames.push_back(strPath + name);
118 if(strAppName.empty())
123 if (fileNames.empty()) {
126 std::string fname = fileNames.back();
127 fileNames.pop_back();
128 app = parsXml(fname.c_str());
134 std::vector<std::string>::iterator itr;
135 for(itr=fileNames.begin(); itr<fileNames.end(); itr++)
138 if (app && (app->
name == strAppName)) {
148AppTemplate* XmlTempLoader::parsXml(
const char* szFile)
155 TiXmlDocument doc(szFile);
159 err<<
"Syntax error while loading "<<szFile<<
" at line "\
160 <<doc.ErrorRow()<<
": ";
161 err<<doc.ErrorDesc();
167 TiXmlElement *root = doc.RootElement();
171 err<<
"Syntax error while loading "<<szFile<<
" . ";
172 err<<
"No root element.";
185 auto* name = (TiXmlElement*) root->FirstChild(
"name");
186 if(!name || !name->GetText())
189 err<<
"Application from "<<szFile<<
" has no name.";
195 std::string strname = name->GetText();
196 for (
char& i : strname) {
Singleton class ErrorLogger.
void addError(const char *szError)
static ErrorLogger * Instance()
Singleton class ErrorLogger.
XmlTempLoader(const char *szFileName)
load only one application indicated by its xml file name
AppTemplate * getNextAppTemplate() override
~XmlTempLoader() override
static constexpr value_type preferred_separator
bool compareString(const char *szFirst, const char *szSecond)
std::stringstream OSTRINGSTREAM
Abstract Class TempLoader.