00001
00002
00003
00004
00005
00006
00007 #ifndef CIF_REORGANIZER_BASE_H
00008 #define CIF_REORGANIZER_BASE_H
00009
00010 #include <map>
00011
00012 #include "FileNavigator.h"
00013 #include "FileNavigatorError.h"
00014
00015
00016 class DdlContInfo
00017 {
00018 protected:
00019 class DdlItem
00020 {
00021 public:
00022 string descr;
00023 string ddlItemName;
00024 };
00025
00026 class DdlCat
00027 {
00028 public:
00029 string ddlCatName;
00030 string col1;
00031 bool nonDefaultValue;
00032 bool inheritance;
00033 vector<DdlItem> ddlItems;
00034 };
00035
00036 private:
00037 vector<DdlCat>::iterator currDdlCat;
00038
00039 public:
00040 static const string CIF_DDL_CATEGORY_BLOCK;
00041 static const string CIF_DDL_CATEGORY_DATABLOCK;
00042 static const string CIF_DDL_CATEGORY_DATABLOCK_METHODS;
00043 static const string CIF_DDL_CATEGORY_ITEM;
00044 static const string CIF_DDL_CATEGORY_ITEM_LINKED;
00045 static const string CIF_DDL_CATEGORY_CATEGORY;
00046 static const string CIF_DDL_CATEGORY_CATEGORY_EXAMPLES;
00047 static const string CIF_DDL_CATEGORY_NDB_CATEGORY_EXAMPLES;
00048 static const string CIF_DDL_CATEGORY_CATEGORY_KEY;
00049 static const string CIF_DDL_CATEGORY_CATEGORY_GROUP;
00050 static const string CIF_DDL_CATEGORY_CATEGORY_GROUP_LIST;
00051 static const string CIF_DDL_CATEGORY_CATEGORY_METHODS;
00052 static const string CIF_DDL_CATEGORY_SUB_CATEGORY;
00053 static const string CIF_DDL_CATEGORY_SUB_CATEGORY_EXAMPLES;
00054 static const string CIF_DDL_CATEGORY_SUB_CATEGORY_METHODS;
00055 static const string CIF_DDL_CATEGORY_ITEM_SUB_CATEGORY;
00056 static const string CIF_DDL_CATEGORY_ITEM_TYPE;
00057 static const string CIF_DDL_CATEGORY_ITEM_TYPE_CONDITIONS;
00058 static const string CIF_DDL_CATEGORY_ITEM_METHODS;
00059 static const string CIF_DDL_CATEGORY_ITEM_TYPE_LIST;
00060 static const string CIF_DDL_CATEGORY_ITEM_STRUCTURE;
00061 static const string CIF_DDL_CATEGORY_ITEM_STRUCTURE_LIST;
00062 static const string CIF_DDL_CATEGORY_ITEM_DESCRIPTION;
00063 static const string CIF_DDL_CATEGORY_NDB_ITEM_DESCRIPTION;
00064 static const string CIF_DDL_CATEGORY_NDB_CATEGORY_DESCRIPTION;
00065 static const string CIF_DDL_CATEGORY_ITEM_EXAMPLES;
00066 static const string CIF_DDL_CATEGORY_NDB_ITEM_EXAMPLES;
00067 static const string CIF_DDL_CATEGORY_ITEM_DEPENDENT;
00068 static const string CIF_DDL_CATEGORY_ITEM_RELATED;
00069 static const string CIF_DDL_CATEGORY_ITEM_RANGE;
00070 static const string CIF_DDL_CATEGORY_ITEM_ENUMERATION;
00071 static const string CIF_DDL_CATEGORY_NDB_ITEM_ENUMERATION;
00072 static const string CIF_DDL_CATEGORY_ITEM_DEFAULT;
00073 static const string CIF_DDL_CATEGORY_ITEM_ALIASES;
00074 static const string CIF_DDL_CATEGORY_DICTIONARY;
00075 static const string CIF_DDL_CATEGORY_DICTIONARY_HISTORY;
00076 static const string CIF_DDL_CATEGORY_ITEM_UNITS;
00077 static const string CIF_DDL_CATEGORY_ITEM_UNITS_LIST;
00078 static const string CIF_DDL_CATEGORY_ITEM_UNITS_CONVERSION;
00079 static const string CIF_DDL_CATEGORY_METHOD_LIST;
00080
00081 static const string CIF_DDL_ITEM_ID;
00082 static const string CIF_DDL_ITEM_CATEGORY_ID;
00083 static const string CIF_DDL_ITEM_SUB_CATEGORY_ID;
00084 static const string CIF_DDL_ITEM_METHOD_ID;
00085 static const string CIF_DDL_ITEM_PARENT_NAME;
00086 static const string CIF_DDL_ITEM_CHILD_NAME;
00087 static const string CIF_DDL_ITEM_ALIAS_NAME;
00088 static const string CIF_DDL_ITEM_DICTIONARY;
00089 static const string CIF_DDL_ITEM_TITLE;
00090 static const string CIF_DDL_ITEM_VERSION;
00091 static const string CIF_DDL_ITEM_NAME;
00092 static const string CIF_DDL_ITEM_CODE;
00093 static const string CIF_DDL_ITEM_PRIMITIVE_CODE;
00094 static const string CIF_DDL_ITEM_CONSTRUCT;
00095 static const string CIF_DDL_ITEM_ORGANIZATION;
00096 static const string CIF_DDL_ITEM_INDEX;
00097 static const string CIF_DDL_ITEM_DIMENSION;
00098 static const string CIF_DDL_ITEM_DATABLOCK_ID;
00099 static const string CIF_DDL_ITEM_DESCRIPTION;
00100 static const string CIF_DDL_ITEM_NDB_DESCRIPTION;
00101 static const string CIF_DDL_ITEM_CASE;
00102 static const string CIF_DDL_ITEM_MANDATORY_CODE;
00103 static const string CIF_DDL_ITEM_DETAIL;
00104 static const string CIF_DDL_ITEM_MAXIMUM;
00105 static const string CIF_DDL_ITEM_MINIMUM;
00106 static const string CIF_DDL_ITEM_VALUE;
00107 static const string CIF_DDL_ITEM_DEPENDENT_NAME;
00108 static const string CIF_DDL_ITEM_RELATED_NAME;
00109 static const string CIF_DDL_ITEM_FUNCTION_CODE;
00110 static const string CIF_DDL_ITEM_OFFSET;
00111 static const string CIF_DDL_ITEM_OPERATOR;
00112 static const string CIF_DDL_ITEM_FACTOR;
00113 static const string CIF_DDL_ITEM_FROM_CODE;
00114 static const string CIF_DDL_ITEM_TO_CODE;
00115 static const string CIF_DDL_ITEM_UPDATE;
00116 static const string CIF_DDL_ITEM_REVISION;
00117 static const string CIF_DDL_ITEM_INLINE;
00118 static const string CIF_DDL_ITEM_LANGUAGE;
00119 static const string CIF_DDL_ITEM_PARENT_ID;
00120
00121 string _contInfoDescr;
00122
00123 vector<DdlCat> _ddlCats;
00124
00125 map<pair<string, string>, pair<unsigned int, unsigned int> > _ddlCatMap;
00126
00127 DdlContInfo();
00128
00129 void AddDdlCat(const string& ddlCatName, const string& col1,
00130 const bool nonDefaultValue = false, const bool inheritance = false);
00131 void AddDdlItem(const string& descr, const string& ddlItemName);
00132
00133 unsigned int GetDdlItemIndex(const string& ddlCatName,
00134 const string& ddlItemName) const;
00135 pair<unsigned int, unsigned int> GetDdlItemIndices(
00136 const string& ddlCatName, const string& ddlItemName) const;
00137 };
00138
00139
00140 class DdlDictContInfo : public DdlContInfo
00141 {
00142 public:
00143 DdlDictContInfo::DdlDictContInfo();
00144 };
00145
00146
00147 class DdlCatContInfo : public DdlContInfo
00148 {
00149 public:
00150 DdlCatContInfo::DdlCatContInfo();
00151 };
00152
00153
00154 class DdlSubcatContInfo : public DdlContInfo
00155 {
00156 public:
00157 DdlSubcatContInfo::DdlSubcatContInfo();
00158 };
00159
00160
00161 class DdlItemContInfo : public DdlContInfo
00162 {
00163 public:
00164 DdlItemContInfo::DdlItemContInfo();
00165 };
00166
00167
00168 class DdlCont
00169 {
00170 private:
00171 int ReadDdlItem(const pair<unsigned int, unsigned int>& indexPair,
00172 unsigned int Index);
00173 int WriteDdlItem(const pair<unsigned int, unsigned int>& indices);
00174
00175 protected:
00176 string _datablock;
00177 string _id;
00178
00179 const DdlContInfo& contInfo;
00180
00181 vector<Word> _index;
00182
00183 vector<vector<vector<string> > > _ddlItemsStore;
00184
00185 FileNavigator* _fnav;
00186
00187 public:
00188 DdlCont(const string& datablock, const string& id,
00189 const DdlContInfo& inDdlContInfo, FileNavigator* fnav);
00190 virtual ~DdlCont();
00191
00192 void Init();
00193
00194 string GetName();
00195
00196 virtual int Read(uWord which, unsigned int Index = 0);
00197 virtual int Write();
00198
00199 void GetDdlItem(vector<string>& ddlItem,
00200 const string& ddlCatName, const string& ddlItemName);
00201
00202 void Print();
00203 };
00204
00205
00206 extern class DdlDictContInfo RcsbDdlDict;
00207 extern class DdlCatContInfo RcsbDdlCat;
00208 extern class DdlSubcatContInfo RcsbDdlSubcat;
00209 extern class DdlItemContInfo RcsbDdlItem;
00210
00211
00212 #endif