/*
*
* 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
*
*
*/
#ifndef __DATA_REF_HPP
#define __DATA_REF_HPP
#include "BuiltIn.hpp"
#include
#include
#include
/* Data Types */
#define PL_DT_STRING 1 /* Any characters */
#define PL_DT_SIGNED_DECIMAL 2 /* Signed Integer */
#define PL_DT_UNSIGNED_DECIMAL 3 /* Unsigned Integer */
#define PL_DT_DATE 4 /* Date / Time according date format field */
#define PL_DT_BOOLEAN 5 /* True/False */
/* Date Types */
#define PL_DT_FORMAT_1 1 /* CCYY-MM-DD */
#define PL_DT_FORMAT_2 2 /* DD/MM/CCYY */
#define PL_DT_FORMAT_3 3 /* MM/DD/CCYY */
#define PL_DT_FORMAT_4 4 /* CCYYMMDD */
/* Justification */
#define PL_JTF_LEFT_CHAR 'L' /* Left */
#define PL_JTF_CENTER_CHAR 'C' /* Center */
#define PL_JTF_NONE_CHAR 'N' /* None */
#define PL_JTF_RIGHT_CHAR 'R' /* Right */
/* get data ref value from mem */
char *getDataRef(const char *dataRef, bool isMainThread, char *dataRefValue, bool allocate_mem);
/* get unformatted data ref value from mem */
char *getDataRefRaw(const char *dataRef, bool isMainThread, char *dataRefValue, bool allocate_mem);
/* store data ref value in mem */
void putDataRef(const char *dataRef, const char *dataRefValue, int dateFormat, bool isMainThread);
/* Format date from one format to another */
void FormatDate(const char *valueIn, int dateFormatIn, char *valueOut, int dateFormatOut);
/* Get Date Format DataRef */
int getDateFormatDataRef(const char *dataRef);
void ResetBuffers(void);
/* Get non-memory resident data refs */
/* Text Document */
char *getContentsTextDocument(const char *name, char *retValue);
/* Data Ref Structs */
class DataDictionary
{
public:
DataDictionary();
~DataDictionary();
DataDictionary *createList();
void clearList(DataDictionary **dicPtr);
void deleteList(DataDictionary **dicPtr);
char *getValue(DataDictionary **dicPtr, const char *name);
char *getValueData(DataDictionary **dicPtr, const char *name, int &retLength, char &retPadChar, char &retJustification);
char *getNameSeqNo(DataDictionary **dicPtr, const int sequence);
char *getValueSeqNo(DataDictionary **dicPtr, const int sequence);
int getDateFormat(DataDictionary *dicPtr, const char *name);
int getDateFormatSeqNo(DataDictionary *dicPtr, const int sequence);
void putValue(DataDictionary **dicPtr, const char *name, const int sequence, const char *value);
void putValueSeqNo(DataDictionary **dicPtr, const int sequence, const char *value);
void printList(DataDictionary *dicPtr) const;
private:
char dicName[32];
int seqNo;
int maxLength;
int editCode;
int dateFormat;
int decimalPlaces;
char padCharacter;
char justification;
char *dicValue;
DataDictionary *nextPtr;
};
typedef DataDictionary *DataDictionaryPtr;
/* Local DataDictionary (L-) */
class LocalDataDictionary
{
public:
LocalDataDictionary();
void push(LocalDataDictionary **topPtr, DataDictionary *dicPtr);
void pop(LocalDataDictionary **topPtr);
void deleteStack(LocalDataDictionary **topPtr);
DataDictionary *getValue(LocalDataDictionary *topPtr);
private:
DataDictionary *startPtr;
LocalDataDictionary *nextPtr;
};
typedef LocalDataDictionary *LocalDicPtr;
/* Global Variable (V-) */
class Variable
{
public:
Variable();
~Variable();
char *getValue(Variable **varPtr, const char *name);
char *getValueData(Variable **varPtr, const char *name, int &retLength, char &retPadChar, char &retJustification);
int getDateFormat(Variable *varPtr, const char *name);
void putValue(Variable **varPtr, const char *name, const char *value);
void deleteOne(Variable **varPtr, const char *name);
void deleteList(Variable **varPtr);
void printList(Variable *varPtr) const;
private:
char varName[32];
char dicName[32];
DataDictionary *startPtr;
Variable *nextPtr;
};
typedef Variable *VariablePtr;
/* VariableGroup (G-) */
class VariableGroup
{
public:
VariableGroup();
~VariableGroup();
char *getValue(VariableGroup **vgrpPtr, const char *name);
char *getValueData(VariableGroup **vgrpPtr, const char *name, int &retLength, char &retPadChar, char &retJustification);
char *getValueSeqNo(VariableGroup **vgrpPtr, const char *vargroup, const int sequence);
int getNumEntries(VariableGroup **vgrpPtr, const char *vargroup);
int getDateFormat(VariableGroup *vgrpPtr, const char *name);
int getDateFormatSeqNo(VariableGroup *vgrpPtr, const char *vargroup, const int sequence);
void putValue(VariableGroup **vgrpPtr, const char *name, const char *value);
void putValueSeqNo(VariableGroup **vgrpPtr, const char *vargroup, const int sequence, const char *value);
void deleteOne(VariableGroup **vgrpPtr, const char *name);
void deleteList(VariableGroup **vgrpPtr);
void printList(VariableGroup *vgrpPtr) const;
private:
char vgrpName[32];
int numEntries;
DataDictionary *startPtr;
VariableGroup *nextPtr;
};
typedef VariableGroup *VariableGroupPtr;
/* Record (To be used by Table only) */
class Record
{
friend class Table;
public:
Record();
~Record();
private:
char recName[32];
int numEntries;
DataDictionary *startPtr;
Record *nextPtr;
char *getValue(Record **recPtr, const char *name);
char *getValueData(Record **recPtr, const char *name, int &retLength, char &retPadChar, char &retJustification);
char *getNameSeqNo(Record **recPtr, const char *record, const int sequence);
char *getValueSeqNo(Record **recPtr, const char *record, const int sequence);
int getNumEntries(Record **recPtr, const char *record);
int getDateFormat(Record *recPtr, const char *name);
int getDateFormatSeqNo(Record *recPtr, const char *record, const int sequence);
void putValue(Record **recPtr, const char *name, const char *value);
void putValueSeqNo(Record **recPtr, const char *record, const int sequence, const char *value);
void clearOne(Record **recPtr, const char *name);
void deleteOne(Record **recPtr, const char *name);
void deleteList(Record **recPtr);
void printList(Record *recPtr) const;
};
typedef Record *RecordPtr;
/* Table (F-dd.table.rec) */
class Table
{
public:
Table();
~Table();
char *getValue(Table **tablePtr, const char *name);
char *getValueData(Table **tablePtr, const char *name, int &retLength, char &retPadChar, char &retJustification);
char *getNameSeqNo(Table **tablePtr, const char *tabrec, const int sequence);
char *getValueSeqNo(Table **tablePtr, const char *tabrec, const int sequence);
int getNumEntries(Table **tablePtr, const char *tabrec);
char *getExternalName(Table **tablePtr, const char *name);
char *getDataSourceName(Table **tablePtr, const char *name);
int getDateFormat(Table *tablePtr, const char *name);
int getDateFormatSeqNo(Table *tablePtr, const char *tabrec, const int sequence);
void putValue(Table **tablePtr, const char *name, const char *value);
void putValueSeqNo(Table **recPtr, const char *tabrec, const int sequence, const char *value);
void clearOneRecord(Table **tablePtr, const char *tableName, const char *recordName);
void deleteOne(Table **tablePtr, const char *name);
void deleteList(Table **tablePtr);
void printList(Table *tablePtr) const;
void putDocBuffer(Table **tablePtr, const char *name, const xmlDocPtr docBuf);
xmlDocPtr getDocBuffer(Table **tablePtr, const char *name);
private:
char tableName[32];
char defRecordName[32];
char externalName[64];
char dataSourceName[64];
xmlDocPtr docTable;
Record *startPtr;
Table *nextPtr;
};
typedef Table *TablePtr;
/* PickList Entry Structs */
class PickListEntry
{
friend class PickList;
public:
PickListEntry();
~PickListEntry();
private:
int entry;
char *plentryValue;
PickListEntry *nextPtr;
void initList(PickListEntry **plentryPtr, const char *name);
char *getValue(PickListEntry **plentryPtr, const int entry);
char *getValuePtr(PickListEntry **plentryPtr, const int entry);
void putValue(PickListEntry **plentryPtr, const int entry, const char *value);
//void populateGList(PickListEntry *plentryPtr, GList ***items);
int tableCount(PickListEntry *plentryPtr);
void deleteList(PickListEntry **plentryPtr);
void printList(PickListEntry *plentryPtr) const;
};
typedef PickListEntry *PickListEntryPtr;
/* PickList (P-) */
class PickList
{
public:
PickList();
~PickList();
char *getValue(PickList **pickPtr, const char *name);
char *getValueEntry(PickList **pickPtr, const char *name, const int entry);
char *getValueEntryPtr(PickList **pickPtr, const char *name, const int entry);
void putValue(PickList **pickPtr, const char *name, const char *value);
//void populateGList(PickList **pickPtr, GList **items, const char *name);
int tableCount(PickList **pickPtr, const char *name);
void deleteList(PickList **pickPtr);
void printList(PickList *pickPtr) const;
private:
char pickName[32];
PickListEntry *startPtr;
PickList *nextPtr;
};
typedef PickList *PickListPtr;
/* Constant (C-) */
class Constant
{
public:
Constant();
~Constant();
char *getValue(Constant **consPtr, const char *name);
char *getValueData(Constant **consPtr, const char *name, int &retLength, char &retPadChar, char &retJustification);
int getDateFormat(Constant *consPtr, const char *name);
void deleteOne(Constant **consPtr, const char *name);
void deleteList(Constant **consPtr);
void printList(Constant *consPtr) const;
private:
char consName[32];
char dicName[32];
DataDictionary *startPtr;
Constant *nextPtr;
};
typedef Constant *ConstantPtr;
/* DataModel Entry */
class DataModelEntry
{
friend class DataModel;
public:
DataModelEntry();
~DataModelEntry();
private:
int colNo;
char *colName;
char *dataValue;
int dataLength;
DataModelEntry *nextPtr;
char *getDataValueColNo(DataModelEntry *dmentryPtr, const int col);
char *getDataValueColName(DataModelEntry *dmentryPtr, const char *colname);
char *getColName(DataModelEntry *dmentryPtr, const int col);
void putDataValue(DataModelEntry **dmentryPtr, const int col, const char *colname, const char *value, const int length);
void updateDataValue(DataModelEntry **dmentryPtr, const int col, const char *value);
void updateDataValueName(DataModelEntry **dmentryPtr, const char *name, const char *value);
void deleteList(DataModelEntry **dmentryPtr);
void printList(DataModelEntry *dmentryPtr) const;
};
typedef DataModelEntry *DataModelEntryPtr;
/* Datamodel (M-) */
class DataModel
{
public:
DataModel();
~DataModel();
bool existsDataModel(DataModel *dmPtr, const char *name);
char *getDataSource(DataModel *dmPtr, const char *name);
int getColumns(DataModel *dmPtr, const char *name);
int getRows(DataModel *dmPtr, const char *name);
int getCurrentRow(DataModel *dmPtr, const char *name);
void putDataSource(DataModel **dmPtr, const char *name, const char *dataSource);
void putColumns(DataModel **dmPtr, const char *name, const int numberCols);
void putRows(DataModel **dmPtr, const char *name, const int numberRows);
void putCurrentRow(DataModel **dmPtr, const char *name, const int currentRow);
char *getValue(DataModel *dmPtr, const char *reference);
char *getDataValueColNo(DataModel *dmPtr, const char *name, const int col);
char *getDataValueColName(DataModel *dmPtr, const char *name, const char *colname);
char *getColName(DataModel *dmPtr, const char *name, const int col);
void putDataValue(DataModel **dmPtr, const char *name, const int col, const char *colname, const char *value, const int length);
void updateDataValue(DataModel **dmPtr, const char *name, const int col, const char *value);
void updateDataValueCol(DataModel **dmPtr, const char *name, const char *value);
void deleteOne(DataModel **dmPtr, const char *name);
void deleteList(DataModel **dmPtr);
void printList(DataModel *dmPtr) const;
private:
char dmName[32];
char *dmDataSource;
int dmNumberCols;
int dmNumberRows;
int dmCurrentRow;
DataModelEntry *startPtr;
DataModel *nextPtr;
};
typedef DataModel *DataModelPtr;
/* TextDocument (X-) */
class TextDocument
{
public:
TextDocument();
~TextDocument();
char *getValue(TextDocument **txtPtr, const char *name);
void appendStringValue(TextDocument **txtPtr, const char *name, const char *value);
void clearDocument(TextDocument **txtPtr, const char *name);
void deleteDocument(TextDocument **txtPtr, const char *name);
void deleteList(TextDocument **txtPtr);
void printList(TextDocument *txtPtr) const;
private:
char txtName[32];
char *txtValue;
TextDocument *nextPtr;
};
typedef TextDocument *TextDocumentPtr;
/* XmlDocument */
class XmlDocument
{
public:
XmlDocument();
~XmlDocument();
xmlDocPtr getDocument(XmlDocument **xmlPtr, const char *name);
xmlNodePtr getNode(XmlDocument *xmlPtr, const char *name);
char *getRootElementName(XmlDocument *xmlPtr, const char *name);
char *getNavPath(XmlDocument *xmlPtr, const char *name);
void putDocument(XmlDocument **xmlPtr, const char *name, xmlDocPtr doc);
void putNode(XmlDocument **xmlPtr, const char *name, xmlNodePtr node);
void putRootElementName(XmlDocument **xmlPtr, const char *name, char *root);
void putNavPath(XmlDocument **xmlPtr, const char *name, char *path);
void deleteDocument(XmlDocument **xmlPtr, const char *name);
void deleteList(XmlDocument **xmlPtr);
void printList(XmlDocument *xmlPtr) const;
private:
char xmlName[32];
char *rootElementName;
char *navPath;
xmlDocPtr docXml;
xmlNodePtr curXml;
XmlDocument *nextPtr;
};
typedef XmlDocument *XmlDocumentPtr;
#endif /* __DATAREF_HPP */