Skip to content

Commit

Permalink
Merge pull request e8tools#200 from andreevlex/feature/issue-181
Browse files Browse the repository at this point in the history
Feature/issue 181
  • Loading branch information
dmpas authored Feb 10, 2018
2 parents e8abc42 + f011cf8 commit 8d4144d
Show file tree
Hide file tree
Showing 10 changed files with 246 additions and 210 deletions.
4 changes: 2 additions & 2 deletions src/tool1cd/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ set (TOOL1CD_SOURCES MessageRegistration.cpp Class_1CD.cpp
V8Object.cpp Field.cpp Index.cpp Table.cpp TableFiles.cpp TableFileStream.cpp
MemBlock.cpp CRC32.cpp Packdata.cpp PackDirectory.cpp FieldType.cpp DetailedException.cpp
BinaryDecimalNumber.cpp save_depot_config.cpp save_part_depot_config.cpp
SupplierConfig.cpp TableRecord.cpp BinaryGuid.cpp TableIterator.cpp)
SupplierConfig.cpp TableRecord.cpp BinaryGuid.cpp TableIterator.cpp SupplierConfigBuilder.cpp)

set (TOOL1CD_HEADERS MessageRegistration.h Class_1CD.h
Common.h ConfigStorage.h Parse_tree.h TempStream.h Base64.h UZLib.h Messenger.h
db_ver.h NodeTypes.h V8Object.h Constants.h Field.h Index.h Table.h TableFiles.h
TableFileStream.h MemBlock.h CRC32.h Packdata.h PackDirectory.h FieldType.h DetailedException.h
BinaryDecimalNumber.h SupplierConfig.h TableRecord.h BinaryGuid.h TableIterator.h)
BinaryDecimalNumber.h SupplierConfig.h TableRecord.h BinaryGuid.h TableIterator.h SupplierConfigBuilder.h)

# .CF API
set (TOOL1CD_SOURCES ${TOOL1CD_SOURCES} cfapi/V8File.cpp cfapi/V8Catalog.cpp cfapi/TV8FileStream.cpp
Expand Down
207 changes: 3 additions & 204 deletions src/tool1cd/Class_1CD.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -525,211 +525,10 @@ void T_1CD::find_supplier_configs()
}

//---------------------------------------------------------------------------
void T_1CD::add_supplier_config(TableFile* tf)
void T_1CD::add_supplier_config(TableFile* table_file)
{
ContainerFile* f;
TStream* s;
int32_t i;
V8Catalog* cat = nullptr;
V8Catalog* cat2;
V8File* file;
tree* tr = nullptr;
String filenamemeta;
String nodetype;
String _name; // имя конфигурация поставщика
String _supplier; // синоним конфигурация поставщика
String _version; // версия конфигурация поставщика

f = new ContainerFile(tf, tf->name);
if(!f->open())
{
delete f;
return;
}

s = new TTempStream;

try
{
try
{
ZInflateStream(f->stream, s);
}
catch(...)
{
msreg_m.AddError("Ошибка распаковки конфигурации поставщика",
"Таблица", tf->t->getname(),
"Имя", tf->name);
delete s;
return;
}
f->close();
delete f;
f = nullptr;

cat = new V8Catalog(s, true);
s = nullptr;
file = cat->GetFile("version");
if(!file)
{
msreg_m.AddError("Не найден файл version в конфигурации поставщика",
"Таблица", tf->t->getname(),
"Имя файла", tf->name);
delete cat;
return;
}

tr = file->get_tree();
i = (*tr)[0][0][0].get_value().ToInt();
delete tr;
tr = nullptr;

#ifdef _DEBUG
msreg_m.AddDebugMessage("Найдена версия контейнера конфигурации поставщика", MessageState::Info,
"Таблица", tf->t->getname(),
"Имя файла", tf->name,
"Версия", i);
#endif

if(i < 100) // 8.0
{
file = cat->GetFile("metadata");
if(!file)
{
msreg_m.AddError("Не найден каталог metadata в конфигурации поставщика",
"Таблица", tf->t->getname(),
"Имя файла", tf->name);
delete cat;
return;
}
cat2 = file->GetCatalog();
if(!cat2)
{
msreg_m.AddError("Файл metadata не является каталогом в конфигурации поставщика",
"Таблица", tf->t->getname(),
"Имя файла", tf->name);
delete cat;
return;
}

}
else cat2 = cat; // else 8.1 или 8.2

file = cat2->GetFile("root");
if(!file)
{
msreg_m.AddError("Не найден файл root в конфигурации поставщика",
"Таблица", tf->t->getname(),
"Имя файла", tf->name);
delete cat;
return;
}

tr = file->get_tree();
filenamemeta = (*tr)[0][1].get_value();
delete tr;
tr = nullptr;

file = cat2->GetFile(filenamemeta);
if(!file)
{
msreg_m.AddError("Не найден файл метаданных в конфигурации поставщика",
"Таблица", tf->t->getname(),
"Имя файла", tf->name,
"Имя мета", filenamemeta);
delete cat;
return;
}

#ifdef _DEBUG
msreg_m.AddDebugMessage("Найден файл метаданных в конфигурации поставщика", MessageState::Info,
"Таблица", tf->t->getname(),
"Имя файла", tf->name,
"Имя мета", filenamemeta);
#endif

tr = file->get_tree();
int32_t numnode = (*tr)[0][2].get_value().ToInt();
for(i = 0; i < numnode; i++)
{
tree& node = (*tr)[0][3 + i];
nodetype = node[0].get_value();
if(nodetype.CompareIC(NODE_GENERAL) == 0) // узел "Общие"
{
tree& confinfo = node[1][1];
int32_t verconfinfo = confinfo[0].get_value().ToInt();
switch(verconfinfo)
{
case 15:
_name = confinfo[1][1][2].get_value();
_supplier = confinfo[11].get_value();
_version = confinfo[12].get_value();
break;
case 22:
case 32:
case 34:
case 36:
case 37:
_name = confinfo[1][1][2].get_value();
_supplier = confinfo[14].get_value();
_version = confinfo[15].get_value();
break;
default:
_name = confinfo[1][1][2].get_value();
_supplier = confinfo[14].get_value();
_version = confinfo[15].get_value();
#ifdef _DEBUG
msreg_m.AddDebugMessage("Неизвестная версия свойств конфигурации поставщика", MessageState::Info,
"Таблица", tf->t->getname(),
"Имя файла", tf->name,
"Имя мета", filenamemeta,
"Версия свойств", verconfinfo);
#endif
break;
}
break;
}
}
delete tr;
tr = nullptr;

if(i >= numnode)
{
msreg_m.AddError("Не найден узел Общие в метаданных конфигурации поставщика",
"Таблица", tf->t->getname(),
"Имя файла", tf->name,
"Имя мета", filenamemeta);
_supplier = "";
_version = "";
}
#ifdef _DEBUG
else
{
msreg_m.AddDebugMessage("Найдена конфигурация поставщика", MessageState::Info,
"Таблица", tf->t->getname(),
"Имя файла", tf->name,
"Имя", _name,
"Версия", _version,
"Поставщик", _supplier);
}
#endif

std::shared_ptr<SupplierConfig> sup_conf = std::make_shared<SupplierConfig>(tf, _name, _supplier, _version);
_supplier_configs.push_back(sup_conf);

delete cat;
cat = nullptr;
}
catch(...)
{
msreg_m.AddError("Произошла ошибка при разборе конфигурации поставщика",
"Таблица", tf->t->getname(),
"Имя файла", tf->name);
delete cat;
delete s;
delete tr;
delete f;
}
auto sup_conf = SupplierConfig::create_supplier_config(table_file);
_supplier_configs.push_back(sup_conf);
}

//---------------------------------------------------------------------------
Expand Down
2 changes: 1 addition & 1 deletion src/tool1cd/Class_1CD.h
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ friend Field;
void set_block_as_free(uint32_t block_number); // пометить блок как свободный
uint32_t get_free_block(); // получить номер свободного блока (и пометить как занятый)

void add_supplier_config(TableFile* file);
void add_supplier_config(TableFile* table_file);

bool recursive_test_stream_format(Table* t, uint32_t nrec);
bool recursive_test_stream_format2(Table* t, uint32_t nrec); // для DBSCHEMA
Expand Down
2 changes: 0 additions & 2 deletions src/tool1cd/Constants.h
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,4 @@ const String EMPTY_GUID = "00000000-0000-0000-0000-000000000000";
const BinaryGuid SNAPSHOT_VER1(std::string("3721ca9e-a272-496b-a093-206ea7629574"));
const BinaryGuid SNAPSHOT_VER2(std::string("6fdfdf78-062a-46bb-8402-62145ae55764"));

const String NODE_GENERAL = "9cd510cd-abfc-11d4-9434-004095e12fc7";

#endif
5 changes: 5 additions & 0 deletions src/tool1cd/DetailedException.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,8 @@ PackDirectoryDoesNotExistException::PackDirectoryDoesNotExistException(const Sys
: DetailedException(message)
{
}

SupplierConfigReadException::SupplierConfigReadException(const System::String &message) throw()
: DetailedException(message)
{
}
8 changes: 7 additions & 1 deletion src/tool1cd/DetailedException.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,13 @@ class SerializationException : public DetailedException
class PackDirectoryDoesNotExistException : public DetailedException
{
public:
PackDirectoryDoesNotExistException(const String &message) throw();
PackDirectoryDoesNotExistException(const String &message) throw();
};

class SupplierConfigReadException : public DetailedException
{
public:
SupplierConfigReadException(const String &message) throw();
};

#endif //TOOL1CD_PROJECT_DETAILEDEXCEPTION_H
8 changes: 8 additions & 0 deletions src/tool1cd/SupplierConfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include "MessageRegistration.h"
#include "SupplierConfig.h"
#include "ConfigStorage.h"
#include "SupplierConfigBuilder.h"
#include "UZLib.h"

extern Registrator msreg_g;
Expand Down Expand Up @@ -61,3 +62,10 @@ String SupplierConfig::supplier() const {
String SupplierConfig::version() const {
return _version;
}


std::shared_ptr<SupplierConfig> SupplierConfig::create_supplier_config(TableFile *table_file) {
SupplierConfigBuilder builder(table_file);

return builder.build();
}
2 changes: 2 additions & 0 deletions src/tool1cd/SupplierConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ class SupplierConfig
String supplier() const;
String version() const;

static std::shared_ptr<SupplierConfig> create_supplier_config(TableFile* table_file);

private:
TableFile* _file {nullptr};
String _name; // имя конфигурация поставщика
Expand Down
Loading

0 comments on commit 8d4144d

Please sign in to comment.