/*
*
* ProLinga-Run
*
* Copyright (C) 2002-2009 Xobas Software.
* All rights reserved.
*
* This file is part of ProLinga-Run.
*
* ProLinga-Run 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-Run 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-Run. If not, see .
*
* More information is available at the following addresses:
*
* Website : http://www.prolinga.org
*
* Email : prolinga-list@prolinga.org
*
*
*/
#include "RunCommon.h"
#include
#include
#include
#include
#include
#include "RepositoryCommand.hpp"
#include "DataRef.hpp"
#include "CmdList.hpp"
#include "Thread.hpp"
/* Datastore for List Views */
extern ListStorePtr listStorePtr;
extern ThreadPtr threadPtr;
/* BuiltIn Functions */
extern BiAppnPtr biAppnPtr;
extern BiAppnDevPtr biAppnDevPtr;
extern BiDataModelStatusPtr biDataModelStatusPtr;
extern BiErrorReturnPtr biErrorReturnPtr;
extern BiValidateStatusPtr biValidateStatusPtr;
extern BiSqlInfoPtr biSqlInfoPtr;
extern BiSqlReturnPtr biSqlReturnPtr;
extern BiSqlStatusPtr biSqlStatusPtr;
extern BiRepositoryStatusPtr biRepositoryStatusPtr;
extern BiTableStatusPtr biTableStatusPtr;
extern BiThreadStatusPtr biThreadStatusPtr;
//extern CaPassPtr caPassPtr;
extern BiTextStatusPtr biTextStatusPtr;
extern BiUserPtr biUserPtr;
extern BiXmlStatusPtr biXmlStatusPtr;
extern BiQuitLastScreenPtr biQuitLastScreenPtr;
void ResetBuiltIns()
{
biAppnPtr->setAppn("Administrator");
biAppnDevPtr->setAppnDev("");
biDataModelStatusPtr->setDataModelStatus(0);
biErrorReturnPtr->setErrorReturn(0);
biValidateStatusPtr->setValidateStatus(0);
biSqlInfoPtr->setSqlInfo(NULL);
biSqlReturnPtr->setSqlReturn(0);
biSqlStatusPtr->setSqlStatus(0);
biRepositoryStatusPtr->setRepositoryStatus(0);
biTableStatusPtr->setTableStatus(0);
biQuitLastScreenPtr->setQuitLastScreen(0);
biThreadStatusPtr->setThreadStatus(0);
biTextStatusPtr->setTextStatus(0);
biXmlStatusPtr->setXmlStatus(0);
// biPassPtr->setPass(BI_TYPE_INT, (void *)0);
}
/* START APPN */
BiAppn::BiAppn()
{
strcpy(appn, "");
}
BiAppn::~BiAppn()
{
return;
}
char *BiAppn::getAppn()
{
return appn;
}
void BiAppn::setAppn(const char *application)
{
strcpy(appn, application);
}
/* END APPN */
/* START APPN DEV*/
BiAppnDev::BiAppnDev()
{
strcpy(appnDev, "");
}
BiAppnDev::~BiAppnDev()
{
return;
}
char *BiAppnDev::getAppnDev()
{
return appnDev;
}
void BiAppnDev::setAppnDev(const char *application)
{
strcpy(appnDev, application);
}
/* END APPN DEV*/
/* START DATASESSION */
CaDataSession::CaDataSession()
{
sessionId = NULL;
dataSourceName = NULL;
extDataSource = NULL;
nextPtr = NULL;
}
CaDataSession::~CaDataSession()
{
if (sessionId != NULL)
delete sessionId;
if (dataSourceName != NULL)
delete dataSourceName;
if (extDataSource != NULL)
delete extDataSource;
}
char *CaDataSession::getDataSessionId(CaDataSession *caDataSesPtr, const char *dataSource)
{
CaDataSessionPtr curPtr;
/* Get DataSessionId (if exists) */
curPtr = caDataSesPtr;
while (curPtr != NULL)
{
if (strcmp(curPtr->dataSourceName, dataSource) == 0)
return curPtr->sessionId;
curPtr = curPtr->nextPtr;
}
return NULL;
}
char *CaDataSession::getExternalDataSource(CaDataSession *caDataSesPtr, const char *dataSource)
{
CaDataSessionPtr curPtr;
/* Get Ext DataSourceName (if exists) */
curPtr = caDataSesPtr;
while (curPtr != NULL)
{
if (strcmp(curPtr->dataSourceName, dataSource) == 0)
return curPtr->extDataSource;
curPtr = curPtr->nextPtr;
}
return NULL;
}
void CaDataSession::putDataSession(CaDataSession **caDataSesPtr, const char *session, const char *dataSource, const char *external)
{
CaDataSessionPtr curPtr, newPtr;
/* Get Session Id or DataSourceName (if exists) */
curPtr = *caDataSesPtr;
while (curPtr != NULL)
{
if ((strcmp(curPtr->sessionId, session) == 0) || (strcmp(curPtr->dataSourceName, dataSource) == 0))
{
/* Clean up */
if (curPtr->sessionId != NULL)
delete curPtr->sessionId;
if (curPtr->dataSourceName != NULL)
delete curPtr->dataSourceName;
if (curPtr->extDataSource != NULL)
delete curPtr->extDataSource;
curPtr->sessionId = new char[strlen(session)+1];
strcpy(curPtr->sessionId, session);
curPtr->dataSourceName = new char[strlen(dataSource)+1];
strcpy(curPtr->dataSourceName, dataSource);
curPtr->extDataSource = new char[strlen(external)+1];
strcpy(curPtr->extDataSource, external);
return;
}
curPtr = curPtr->nextPtr;
}
/* Create new value */
newPtr = new CaDataSession;
newPtr->sessionId = new char[strlen(session)+1];
newPtr->dataSourceName = new char[strlen(dataSource)+1];
newPtr->extDataSource = new char[strlen(external)+1];
strcpy(newPtr->sessionId, session);
strcpy(newPtr->dataSourceName, dataSource);
strcpy(newPtr->extDataSource, external);
/* Prepend in list */
newPtr->nextPtr = *caDataSesPtr;
*caDataSesPtr = newPtr;
}
int CaDataSession::deleteDataSession(CaDataSession **caDataSesPtr, const char *dataSource)
{
CaDataSessionPtr prevPtr, curPtr, nextPtr;
int retStatus = 44444;
prevPtr = NULL;
curPtr = *caDataSesPtr;
nextPtr = NULL;
while (curPtr != 0)
{
nextPtr = curPtr->nextPtr;
if (strcmp(curPtr->dataSourceName, dataSource) == 0)
{
/* Unlink DataSession */
if (prevPtr == NULL)
*caDataSesPtr = nextPtr;
else
prevPtr->nextPtr = nextPtr;
/* Delete DataSession */
delete curPtr;
/* Set Return Status */
retStatus = 0;
break;
}
prevPtr = curPtr;
curPtr = nextPtr;
}
/* Return */
return retStatus;
}
void CaDataSession::deleteList(CaDataSession **caDataSesPtr)
{
CaDataSessionPtr tmpPtr;
while (*caDataSesPtr != NULL)
{
tmpPtr = *caDataSesPtr;
*caDataSesPtr = (*caDataSesPtr)->nextPtr;
delete tmpPtr;
}
}
void CaDataSession::printList(CaDataSession *caDataSesPtr) const
{
CaDataSessionPtr curPtr;
curPtr = caDataSesPtr;
while (curPtr != NULL)
{
printf("Session Id %s - DataSource Name %s\n", curPtr->sessionId, curPtr->dataSourceName);
curPtr = curPtr->nextPtr;
}
}
/* END DATASESSION */
/* START DATAMODELSTATUS */
BiDataModelStatus::BiDataModelStatus()
{
dataModelStatus = 0;
}
BiDataModelStatus::~BiDataModelStatus()
{
return;
}
int BiDataModelStatus::getDataModelStatus()
{
return dataModelStatus;
}
void BiDataModelStatus::setDataModelStatus(int status)
{
dataModelStatus = status;
}
/* END DATAMODELSTATUS */
/* START ERRORRETURN */
BiErrorReturn::BiErrorReturn()
{
errorReturn = 0;
}
BiErrorReturn::~BiErrorReturn()
{
/* Nothing */
}
int BiErrorReturn::getErrorReturn()
{
return errorReturn;
}
void BiErrorReturn::setErrorReturn(int error)
{
errorReturn = error;
}
/* END ERRORRETURN */
/* START VALIDATESTATUS */
BiValidateStatus::BiValidateStatus()
{
validateStatus = 0;
}
BiValidateStatus::~BiValidateStatus()
{
return;
}
int BiValidateStatus::getValidateStatus()
{
return validateStatus;
}
void BiValidateStatus::setValidateStatus(int status)
{
validateStatus = status;
}
/* END VALIDATESTATUS */
/* START SQLINFO */
BiSqlInfo::BiSqlInfo()
{
sqlInfo = NULL;
}
BiSqlInfo::~BiSqlInfo()
{
if (sqlInfo != NULL)
delete sqlInfo;
}
char *BiSqlInfo::getSqlInfo()
{
return sqlInfo;
}
void BiSqlInfo::setSqlInfo(const char *info)
{
if (sqlInfo != NULL)
delete sqlInfo;
if (info == NULL)
sqlInfo = NULL;
else
{
sqlInfo = new char[(strlen(info)+1)];
strcpy(sqlInfo, info);
}
}
/* END SQLINFO */
/* START SQLRETURN */
BiSqlReturn::BiSqlReturn()
{
sqlReturn = 0;
}
BiSqlReturn::~BiSqlReturn()
{
return;
}
int BiSqlReturn::getSqlReturn()
{
return sqlReturn;
}
void BiSqlReturn::setSqlReturn(int returnVal)
{
sqlReturn = returnVal;
}
/* END SQLRETURN */
/* START SQLSTATUS */
BiSqlStatus::BiSqlStatus()
{
sqlStatus = 0;
}
BiSqlStatus::~BiSqlStatus()
{
return;
}
int BiSqlStatus::getSqlStatus()
{
return sqlStatus;
}
void BiSqlStatus::setSqlStatus(int status)
{
sqlStatus = status;
}
/* END SQLSTATUS */
/* START REPOSITORYSTATUS */
BiRepositoryStatus::BiRepositoryStatus()
{
repositoryStatus = 0;
}
BiRepositoryStatus::~BiRepositoryStatus()
{
return;
}
int BiRepositoryStatus::getRepositoryStatus()
{
return repositoryStatus;
}
void BiRepositoryStatus::setRepositoryStatus(int status)
{
repositoryStatus = status;
}
/* END REPOSITORYSTATUS */
/* START TABLESTATUS */
BiTableStatus::BiTableStatus()
{
tableStatus = 0;
}
BiTableStatus::~BiTableStatus()
{
return;
}
int BiTableStatus::getTableStatus()
{
return tableStatus;
}
void BiTableStatus::setTableStatus(int status)
{
tableStatus = status;
}
/* END TABLESTATUS */
/* START THREADEXIT */
BiThreadExit::BiThreadExit()
{
return;
}
BiThreadExit::~BiThreadExit()
{
return;
}
bool BiThreadExit::getThreadExit(pthread_t tid)
{
// if ( threadPtr->getExitFlagByTid(threadPtr, tid) == false )
// {
// printf("FALSE!!!!!%ld!!!!!!!!\n", tid);
// return false;
// }
// else
// {
// printf("TRUE!!!!!!%ld!!!!!!!\n", tid);
// return true;
// }
return threadPtr->getExitFlagByTid(threadPtr, tid);
}
/* END THREADEXIT */
/* START THREADSTATUS */
BiThreadStatus::BiThreadStatus()
{
threadStatus = 0;
}
BiThreadStatus::~BiThreadStatus()
{
return;
}
int BiThreadStatus::getThreadStatus()
{
return threadStatus;
}
void BiThreadStatus::setThreadStatus(int status)
{
threadStatus = status;
}
/* END THREADSTATUS */
/* START LISTCOLCOUNT */
BiListColCount::BiListColCount()
{
return;
}
BiListColCount::~BiListColCount()
{
return;
}
int BiListColCount::getListColCount(char *value)
{
return listStorePtr->getNumberColumns(listStorePtr, value);
}
/* END LISTCOLCOUNT */
/* START LISTROWCOUNT */
BiListRowCount::BiListRowCount()
{
return;
}
BiListRowCount::~BiListRowCount()
{
return;
}
int BiListRowCount::getListRowCount(char *value, bool isMainThread)
{
return listStorePtr->getNumberRows(listStorePtr, value, isMainThread);
}
/* END LISTROWCOUNT */
/* START TEXTSTATUS */
BiTextStatus::BiTextStatus()
{
textStatus = 0;
}
BiTextStatus::~BiTextStatus()
{
return;
}
int BiTextStatus::getTextStatus()
{
return textStatus;
}
void BiTextStatus::setTextStatus(int status)
{
textStatus = status;
}
/* END TEXTSTATUS */
/* START FALSE */
BiFalse::BiFalse()
{
xmlDocPtr docRes;
xmlXPathContextPtr ctxRes;
xmlXPathObjectPtr resRes;
int retStatus;
/* Get True value from administrator */
retStatus = repGet(&docRes, "Administrator", "System", "System");
if (retStatus == 0)
{
/* Create XPath environment */
ctxRes = xmlXPathNewContext(docRes);
/* Get true value */
resRes = xmlXPathEval((const xmlChar *)"/ProLinga/Repository/Command/Object/System/FalseValue", ctxRes);
falseValue = new char[strlen((char *)xmlXPathCastToString(resRes)+1)];
strcpy(falseValue, (char *)xmlXPathCastToString(resRes));
/* Free */
xmlXPathFreeObject(resRes);
xmlXPathFreeContext(ctxRes);
xmlFreeDoc(docRes);
}
else
{
falseValue = new char[6];
strcpy(falseValue, "False");
}
}
BiFalse::~BiFalse()
{
if (falseValue != NULL)
delete falseValue;
}
char *BiFalse::getFalse()
{
return falseValue;
}
void BiFalse::setFalse(char *value)
{
falseValue = value;
}
/* END FALSE */
/* START TRUE */
BiTrue::BiTrue()
{
xmlDocPtr docRes;
xmlXPathContextPtr ctxRes;
xmlXPathObjectPtr resRes;
int retStatus;
/* Get True value from administrator */
retStatus = repGet(&docRes, "Administrator", "System", "System");
if (retStatus == 0)
{
/* Create XPath environment */
ctxRes = xmlXPathNewContext(docRes);
/* Get true value */
resRes = xmlXPathEval((const xmlChar *)"/ProLinga/Repository/Command/Object/System/TrueValue", ctxRes);
trueValue = new char[strlen((char *)xmlXPathCastToString(resRes)+1)];
strcpy(trueValue, (char *)xmlXPathCastToString(resRes));
/* Free */
xmlXPathFreeObject(resRes);
xmlXPathFreeContext(ctxRes);
xmlFreeDoc(docRes);
}
else
{
trueValue = new char[5];
strcpy(trueValue, "True");
}
}
BiTrue::~BiTrue()
{
if (trueValue != NULL)
delete trueValue;
}
char *BiTrue::getTrue()
{
return trueValue;
}
void BiTrue::setTrue(char *value)
{
trueValue = value;
}
/* END TRUE */
/* START XMLSTATUS */
BiXmlStatus::BiXmlStatus()
{
xmlStatus = 0;
}
BiXmlStatus::~BiXmlStatus()
{
return;
}
int BiXmlStatus::getXmlStatus()
{
return xmlStatus;
}
void BiXmlStatus::setXmlStatus(int status)
{
xmlStatus = status;
}
/* END XMLSTATUS */
/* START WEBPARAMETER */
BiWebParameter::BiWebParameter()
{
strcpy(paramName, "");
paramValue = NULL;
nextPtr = NULL;
}
BiWebParameter::~BiWebParameter()
{
delete paramValue;
}
char *BiWebParameter::getValue(BiWebParameter *biWebPtr, const char *name)
{
BiWebParameterPtr curPtr;
/* Get parameter (if exists) */
curPtr = biWebPtr;
while (curPtr != NULL)
{
if (strcmp(curPtr->paramName, name) == 0)
return curPtr->paramValue;
curPtr = curPtr->nextPtr;
}
/* Return */
return NULL;
}
void BiWebParameter::putValue(BiWebParameterPtr *biWebPtr, const char *name, const char *value)
{
BiWebParameterPtr curPtr, newPtr;
/* Get parameter (if exists) */
curPtr = *biWebPtr;
while (curPtr != NULL)
{
if (strcmp(curPtr->paramName, name) == 0)
{
if (curPtr->paramValue != NULL)
delete curPtr->paramValue;
curPtr->paramValue = new char[strlen(value)];
strcpy(curPtr->paramValue, value);
return;
}
curPtr = curPtr->nextPtr;
}
/* Prepend value */
newPtr = new BiWebParameter;
strcpy(newPtr->paramName, name);
newPtr->paramValue = new char[strlen(value)];
strcpy(newPtr->paramValue, value);
/* Prepend in list */
newPtr->nextPtr = *biWebPtr;
*biWebPtr = newPtr;
}
void BiWebParameter::deleteList(BiWebParameterPtr *biWebPtr)
{
BiWebParameterPtr tmpPtr;
while (*biWebPtr != NULL)
{
tmpPtr = *biWebPtr;
*biWebPtr = (*biWebPtr)->nextPtr;
delete tmpPtr;
}
}
void BiWebParameter::printList(BiWebParameterPtr biWebPtr) const
{
BiWebParameterPtr curPtr;
curPtr = biWebPtr;
while (curPtr != NULL)
{
printf("Name %s - Value %s\n", curPtr->paramName, curPtr->paramValue);
curPtr = curPtr->nextPtr;
}
}
/* END WEBPARAMETER */
/* START USER */
BiUser::BiUser()
{
strcpy(user, "");
}
BiUser::~BiUser()
{
return;
}
char *BiUser::getUser()
{
return user;
}
void BiUser::setUser(char *userName)
{
strcpy(user, userName);
}
/* END USER */
/* START QUITLASTSCREEN */
BiQuitLastScreen::BiQuitLastScreen()
{
quitLastScreenSetting = 0;
}
BiQuitLastScreen::~BiQuitLastScreen()
{
return;
}
int BiQuitLastScreen::getQuitLastScreen()
{
return quitLastScreenSetting;
}
void BiQuitLastScreen::setQuitLastScreen(int setting)
{
quitLastScreenSetting = setting;
}
/* END QUITLASTSCREEN */