/*
*
* ProLinga-Validate
*
* Copyright (C) 2002-2009 Xobas Software.
* All rights reserved.
*
* This file is part of ProLinga-Validate.
*
* ProLinga-Validate is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* ProLinga-Validate is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with ProLinga-Validate. If not, see .
*
* More information is available at the following addresses:
*
* Website : http://www.prolinga.org
*
* Email : prolinga-list@prolinga.org
*
*
*/
#include "ValCommon.h"
#include
#include
#include
#include "VCRepositoryAccess.hpp"
#include "VCRepositoryCommand.hpp"
xmlDocPtr VCRC_List(const char *objApplication, const char *objType, const char *objName)
{
xmlDocPtr docReq, docRes;
xmlNodePtr curReq;
/* Create RC List */
docReq = xmlNewDoc((const xmlChar *)"1.0");
docReq->children = xmlNewDocNode(docReq, NULL, (const xmlChar *)"ProLinga", NULL);
curReq = xmlDocGetRootElement(docReq);
//curReq = xmlNewTextChild (curReq, NULL, (const xmlChar *)"Repository", (const xmlChar *)"");
curReq = xmlNewTextChild (curReq, NULL, (const xmlChar *)"Repository", NULL);
xmlNewProp (curReq, (const xmlChar *)"Version", (const xmlChar *)"1.0");
curReq = xmlNewTextChild (curReq, NULL, (const xmlChar *)"Command", (const xmlChar *)"");
xmlNewProp (curReq, (const xmlChar *)"Name", (const xmlChar *)"List");
xmlNewProp (curReq, (const xmlChar *)"Mode", (const xmlChar *)"Request");
curReq = xmlNewTextChild (curReq, NULL, (const xmlChar *)"Object", (const xmlChar *)"");
xmlNewProp (curReq, (const xmlChar *)"Application", (const xmlChar *)objApplication);
xmlNewProp (curReq, (const xmlChar *)"Type", (const xmlChar *)objType);
xmlNewProp (curReq, (const xmlChar *)"Name", (const xmlChar *)objName);
/* Process Request */
docRes = VCRepositoryAccess(docReq);
/* Clean up */
xmlFreeDoc(docReq);
/* Return */
return docRes;
}
xmlDocPtr VCRC_Get(const char *objApplication, const char *objType, const char *objName)
{
xmlDocPtr docReq, docRes;
xmlNodePtr curReq;
/* Create RC Get */
docReq = xmlNewDoc((const xmlChar *)"1.0");
docReq->children = xmlNewDocNode(docReq, NULL, (const xmlChar *)"ProLinga", NULL);
curReq = xmlDocGetRootElement(docReq);
curReq = xmlNewTextChild (curReq, NULL, (const xmlChar *)"Repository", (const xmlChar *)"");
xmlNewProp (curReq, (const xmlChar *)"Version", (const xmlChar *)"1.0");
curReq = xmlNewTextChild (curReq, NULL, (const xmlChar *)"Command", (const xmlChar *)"");
xmlNewProp (curReq, (const xmlChar *)"Name", (const xmlChar *)"Get");
xmlNewProp (curReq, (const xmlChar *)"Mode", (const xmlChar *)"Request");
curReq = xmlNewTextChild (curReq, NULL, (const xmlChar *)"Object", (const xmlChar *)"");
xmlNewProp (curReq, (const xmlChar *)"Application", (const xmlChar *)objApplication);
xmlNewProp (curReq, (const xmlChar *)"Type", (const xmlChar *)objType);
xmlNewProp (curReq, (const xmlChar *)"Name", (const xmlChar *)objName);
/* Process Request */
docRes = VCRepositoryAccess(docReq);
/* Clean up */
xmlFreeDoc(docReq);
/* Return */
return docRes;
}
xmlDocPtr VCRC_Delete(const char *objApplication, const char *objType, const char *objName)
{
xmlDocPtr docReq, docRes;
xmlNodePtr curReq;
/* Create RC Delete */
docReq = xmlNewDoc((const xmlChar *)"1.0");
docReq->children = xmlNewDocNode(docReq, NULL, (const xmlChar *)"ProLinga", NULL);
curReq = xmlDocGetRootElement(docReq);
curReq = xmlNewTextChild (curReq, NULL, (const xmlChar *)"Repository", (const xmlChar *)"");
xmlNewProp (curReq, (const xmlChar *)"Version", (const xmlChar *)"1.0");
curReq = xmlNewTextChild (curReq, NULL, (const xmlChar *)"Command", (const xmlChar *)"");
xmlNewProp (curReq, (const xmlChar *)"Name", (const xmlChar *)"Delete");
xmlNewProp (curReq, (const xmlChar *)"Mode", (const xmlChar *)"Request");
curReq = xmlNewTextChild (curReq, NULL, (const xmlChar *)"Object", (const xmlChar *)"");
xmlNewProp (curReq, (const xmlChar *)"Application", (const xmlChar *)objApplication);
xmlNewProp (curReq, (const xmlChar *)"Type", (const xmlChar *)objType);
xmlNewProp (curReq, (const xmlChar *)"Name", (const xmlChar *)objName);
/* Process Request */
docRes = VCRepositoryAccess(docReq);
/* Clean up */
xmlFreeDoc(docReq);
/* Return */
return docRes;
}
xmlDocPtr VCRC_Ping(const char *objApplication, const char *objType, const char *objName)
{
xmlDocPtr docReq, docRes;
xmlNodePtr curReq;
/* Create RC Ping */
docReq = xmlNewDoc((const xmlChar *)"1.0");
docReq->children = xmlNewDocNode(docReq, NULL, (const xmlChar *)"ProLinga", NULL);
curReq = xmlDocGetRootElement(docReq);
curReq = xmlNewTextChild (curReq, NULL, (const xmlChar *)"Repository", (const xmlChar *)"");
xmlNewProp (curReq, (const xmlChar *)"Version", (const xmlChar *)"1.0");
curReq = xmlNewTextChild (curReq, NULL, (const xmlChar *)"Command", (const xmlChar *)"");
xmlNewProp (curReq, (const xmlChar *)"Name", (const xmlChar *)"Ping");
xmlNewProp (curReq, (const xmlChar *)"Mode", (const xmlChar *)"Request");
curReq = xmlNewTextChild (curReq, NULL, (const xmlChar *)"Object", (const xmlChar *)"");
xmlNewProp (curReq, (const xmlChar *)"Application", (const xmlChar *)objApplication);
xmlNewProp (curReq, (const xmlChar *)"Type", (const xmlChar *)objType);
xmlNewProp (curReq, (const xmlChar *)"Name", (const xmlChar *)objName);
/* Process Request */
docRes = VCRepositoryAccess(docReq);
/* Clean up */
xmlFreeDoc(docReq);
/* Return */
return docRes;
}
xmlDocPtr VCRC_Put(xmlDocPtr docReq)
{
xmlDocPtr docRes;
/* Process Request */
docRes = VCRepositoryAccess(docReq);
/* Return */
return docRes;
}
int VCrepPut(const xmlDocPtr docReq)
{
xmlDocPtr docRes;
xmlXPathContextPtr ctxRes;
xmlXPathObjectPtr resRes;
char *status;
int retStatus = 0;
/* Put to repository */
docRes = VCRC_Put(docReq);
/* Create XPath environment */
ctxRes = xmlXPathNewContext(docRes);
/* Find Out Status */
resRes = xmlXPathEval((const xmlChar *)"/ProLinga/Repository/Command/@Status", ctxRes);
status = (char *)xmlXPathCastToString(resRes);
if ( strcmp(status, "Ok") != 0)
retStatus = 19111;
/* Clean up */
xmlFreeDoc(docRes);
/* Return */
return retStatus;
}
int VCrepDelete(const char *objAppn, const char *objType, const char *objName)
{
xmlDocPtr docRes;
xmlXPathContextPtr ctxRes;
xmlXPathObjectPtr resRes;
char *status;
int retStatus = 0;
/* Delete Data */
docRes = VCRC_Delete(objAppn, objType, objName);
/* Create XPath environment */
ctxRes = xmlXPathNewContext(docRes);
/* Find Out Status */
resRes = xmlXPathEval((const xmlChar *)"/ProLinga/Repository/Command/@Status", ctxRes);
status = (char *)xmlXPathCastToString(resRes);
if ( strcmp(status, "Ok") != 0)
retStatus = 19112;
/* Clean up */
xmlFreeDoc(docRes);
/* Return */
return retStatus;
}
bool VCrepPresent(const char *objAppn, const char *objType, const char *objName)
{
xmlDocPtr docRes;
xmlXPathContextPtr ctxRes;
xmlXPathObjectPtr resRes;
char *rcStatus;
if ((objAppn == NULL) || (objType == NULL) || (objName == NULL))
return false;
docRes = VCRC_List(objAppn, objType, objName);
/* Create XPath environments */
ctxRes = xmlXPathNewContext(docRes);
/* Find Out Status */
resRes = xmlXPathEval((const xmlChar *)"/ProLinga/Repository/Command/@Status", ctxRes);
rcStatus = (char *)xmlXPathCastToString(resRes);
/* Return */
if ( strcmp(rcStatus, "Ok") != 0)
{
xmlFreeDoc(docRes);
return false;
}
else
{
xmlFreeDoc(docRes);
return true;
}
}
bool VCrepItemPresent(const char *objAppn, const char *itemName, const char *objType, const char *objName)
{
xmlDocPtr docRes;
xmlXPathContextPtr ctxRes;
xmlXPathObjectPtr resRes;
char *rcStatus, stringEval[1024], *item;
int entryCount = 0, i;;
if ((objAppn == NULL) || (itemName == NULL) || (objType == NULL) || (objName == NULL))
return false;
docRes = VCRC_Get(objAppn, objType, objName);
/* Create XPath environments */
ctxRes = xmlXPathNewContext(docRes);
/* Find Out Status */
resRes = xmlXPathEval((const xmlChar *)"/ProLinga/Repository/Command/@Status", ctxRes);
rcStatus = (char *)xmlXPathCastToString(resRes);
if ( strcmp(rcStatus, "Ok") != 0)
return false;
/* Check if Item is in object */
if (strcmp(objType, "VariableGroup") == 0)
{
/* Note count number of Variable Entries */
resRes = xmlXPathEval((const xmlChar *)"count(/ProLinga/Repository/Command/Object/VariableGroup/OccurrencesVariableEntry/VariableEntry)", ctxRes);
entryCount = (int)xmlXPathCastToNumber(resRes);
/* Process all entries until found or end */
for (i=1;i<=entryCount;i++)
{
sprintf(stringEval,"/ProLinga/Repository/Command/Object/VariableGroup/OccurrencesVariableEntry/VariableEntry[%d]/DataDictionaryName", i);
resRes = xmlXPathEval((const xmlChar *)stringEval, ctxRes);
item = (char *)xmlXPathCastToString(resRes);
if (strcmp(item, itemName) == 0)
return true;
}
}
else if (strcmp(objType, "Record") == 0)
{
/* Note count number of DataDictionary Entries */
resRes = xmlXPathEval((const xmlChar *)"count(/ProLinga/Repository/Command/Object/Record/OccurrencesDataDictionaryEntry/DataDictionaryEntry)", ctxRes);
entryCount = (int)xmlXPathCastToNumber(resRes);
/* Process all entries until found or end */
for (i=1;i<=entryCount;i++)
{
sprintf(stringEval,"/ProLinga/Repository/Command/Object/Record/OccurrencesDataDictionaryEntry/DataDictionaryEntry[%d]/DataDictionaryName", i);
resRes = xmlXPathEval((const xmlChar *)stringEval, ctxRes);
item = (char *)xmlXPathCastToString(resRes);
if (strcmp(item, itemName) == 0)
return true;
}
}
else if (strcmp(objType, "Table") == 0)
{
/* Note count number of Record Entries */
resRes = xmlXPathEval((const xmlChar *)"count(/ProLinga/Repository/Command/Object/Table/OccurrencesTableRecordEntry/TableRecordEntry)", ctxRes);
entryCount = (int)xmlXPathCastToNumber(resRes);
/* Process all entries until found or end */
for (i=1;i<=entryCount;i++)
{
sprintf(stringEval,"/ProLinga/Repository/Command/Object/Table/OccurrencesTableRecordEntry/TableRecordEntry[%d]/RecordName", i);
resRes = xmlXPathEval((const xmlChar *)stringEval, ctxRes);
item = (char *)xmlXPathCastToString(resRes);
if (strcmp(item, itemName) == 0)
return true;
}
}
/* Return false if all tests fail */
return false;
}
int VCrepList(xmlDocPtr *docRes, const char *objAppn, const char *objType, const char *objName)
{
xmlXPathContextPtr ctxRes;
xmlXPathObjectPtr resRes;
char *rcStatus;
int retStatus = 0;
*docRes = VCRC_List(objAppn, objType, objName);
/* Create XPath environments */
ctxRes = xmlXPathNewContext(*docRes);
/* Find Out Status */
resRes = xmlXPathEval((const xmlChar *)"/ProLinga/Repository/Command/@Status", ctxRes);
rcStatus = (char *)xmlXPathCastToString(resRes);
if ( strcmp(rcStatus, "Ok") != 0)
retStatus = 19110;
return retStatus;
}
int VCrepGet(xmlDocPtr *docRes, const char *objAppn, const char *objType, const char *objName)
{
xmlXPathContextPtr ctxRes;
xmlXPathObjectPtr resRes;
char *rcStatus;
int retStatus = 0;
*docRes = VCRC_Get(objAppn, objType, objName);
/* Create XPath environments */
ctxRes = xmlXPathNewContext(*docRes);
/* Find Out Status */
resRes = xmlXPathEval((const xmlChar *)"/ProLinga/Repository/Command/@Status", ctxRes);
rcStatus = (char *)xmlXPathCastToString(resRes);
if ( strcmp(rcStatus, "Ok") != 0)
retStatus = 19110;
return retStatus;
}