#include <wx/dir.h>
#include "dll/gcomp.h"
#include "declarations.h"
#include "commonfunctions.h"
#include "mms.h"
#include "nametable.h"
#include "ordering.h"
void CMMSObject::AssembleMetadata(wxString& Dir)
{
CNameTableRecord* nt_rec = NameTable.Find(MMS_Type);
if( nt_rec == NULL || nt_rec->Ext != _U("mdp") )
nt_rec = NameTable.Find(NT_MetadataPart);
wxString FileName = nt_rec->PrepareFileName(Dir);
if( !wxFileExists(FileName) )
{
nt_rec = NameTable.Find(NT_MetadataPart);
FileName = nt_rec->PrepareFileName(Dir);
}
if( wxFileExists(FileName) )
ParseFile(FileName);
}
void CMMSAttributes::AssembleMetadata(wxString& Dir)
{
//на случай, если все метаданные собраны в одном файле, а не по каталогам
CMMSObject::AssembleMetadata(Dir);
if( GetNChildren() > 0 )
return;
CNameTableRecord* nt_rec = NameTable.Find(MMS_Type);
if( nt_rec == NULL ) return;
if( nt_rec->Dir.IsEmpty() ) return;
wxString DirName = nt_rec->PrepareDirName(Dir);
if( wxDirExists(DirName) )
{
wxString SubDir, fname;
wxDir dir(Dir);
bool cont = dir.GetFirst(&fname, _U("*"), wxDIR_DIRS);
while(cont)
{
if( IsIgnoredFile(fname) ) continue;
SubDir.Printf(_U("%s/%s"), DirName.c_str(), fname.c_str());
wxDir subdir(SubDir);
wxString tmp;
if( !subdir.GetFirst(&tmp, SubDir+_U("/*.mdp")) ) continue; //пустые каталоги нам не нужны
CMMSObject* Child = CreateChild(wxEmptyString);
Child->AssembleMetadata(SubDir);
AddChild(Child);
}
ImportOrdering(DirName);
}
}
void CMMSAccountPlan::AssembleMetadata(wxString& PlanDir)
{
CNameTableRecord* nt_rec = NameTable.Find(NT_MetadataPart);
wxString PlanMDP = nt_rec->PrepareFileName(PlanDir);
ParseFile(PlanMDP);
CObjectOrdering Order(3);
if( Order.OpenFile(PlanDir) )
{
wxString AccFName;
while( Order.ReadString() )
{
AccFName.Printf(_U("%s/%s"), PlanDir.c_str(), Order.GetValue(2).c_str());
CMMSObject* Account = Accounts.CreateChild(wxEmptyString);
Account->ParseFile(AccFName);
Accounts.AddChild(Account);
}
}
AddChild(&Accounts);
}
void CMMSAccountPlanList::AssembleMetadata(wxString& BuhDir)
{
CNameTableRecord* nt_rec_plans = NameTable.Find(MMS_Plans);
// CNameTableRecord* nt_rec_plan = NameTable.Find(MMS_Plan);
wxString PlansDir = nt_rec_plans->PrepareDirName(BuhDir);
CObjectOrdering Order(3);
if( Order.OpenFile(PlansDir) )
{
wxString PlanDir;
while( Order.ReadString() )
{
PlanDir.Printf(_U("%s/%s"), PlansDir.c_str(), Order.GetValue(2).c_str());
CMMSObject* Plan = CreateChild(wxEmptyString);
Plan->AssembleMetadata(PlanDir);
AddChild(Plan);
}
}
}
void CMMSBuh::AssembleMetadata(wxString& BuhDir)
{
CNameTableRecord* nt_rec;
AccountPlans.AssembleMetadata(BuhDir);
AddChild(&AccountPlans);
//формы списков
nt_rec = NameTable.Find(NT_AccListForm);
AccListForms.ParseFile(nt_rec->PrepareFileName(BuhDir));
AddChild(&AccListForms);
nt_rec = NameTable.Find(NT_UnknownListForm);
UnknownListForms.ParseFile(nt_rec->PrepareFileName(BuhDir));
AddChild(&UnknownListForms);
nt_rec = NameTable.Find(NT_ProvListForm);
ProvListForms.ParseFile(nt_rec->PrepareFileName(BuhDir));
AddChild(&ProvListForms);
}
void CMMSBuhContainer::AssembleMetadata(wxString& Dir)
{
CNameTableRecord* nt_rec = NameTable.Find(MMS_Buh);
CNameTableRecord* nt_rec_mdp = NameTable.Find(NT_MetadataPart);
wxString BuhDir = nt_rec->PrepareDirName(Dir);
if( GetNChildren() == 0 )
AddChild(new CMMSBuh);
GetChild(0)->ParseFile(nt_rec_mdp->PrepareFileName(BuhDir));
GetChild(0)->AssembleMetadata(BuhDir);
}