// Инициализировать блок из данных сохраненных блоков в файлы func (b *block) InitFromFiles(pathToDir string, fileInfo os.FileInfo, c chan<- bool) { utils.AddTextToLog(utils.LogLevel_TRACE, "Начало инициализации блока") var err error b.attrs.name = fileInfo.Name() currentTime := time.Now().UnixNano() / int64(time.Millisecond) fullPathToFile := path.Join(pathToDir, b.attrs.name) funcGenerateErr := func(errorNum int) { err = errors.New(fmt.Sprintf("Ошибка инициализации блока из даных файла №%d: %s", errorNum, err.Error())) utils.AddTextToLog(utils.LogLevel_ERROR, err.Error()) panic(err.Error()) } if fileInfo.IsDir() { b.blockType = blockType_multiple var files []os.FileInfo if files, err = utils.ReadFilesInDir(fullPathToFile); err != nil { funcGenerateErr(1) } b.subBlocks = make([]subBlock, len(files)) for i, fi := range files { b.subBlocks[i].Attrs.name = fi.Name() b.subBlocks[i].Attrs.creationDate = currentTime b.subBlocks[i].Attrs.modificationDate = b.subBlocks[i].Attrs.creationDate pathToSubBlock := path.Join(fullPathToFile, fi.Name()) if b.subBlocks[i].Data, err = ioutil.ReadFile(pathToSubBlock); err != nil { funcGenerateErr(2) } } } else { b.blockType = blockType_simply if b.data, err = ioutil.ReadFile(fullPathToFile); err != nil { funcGenerateErr(3) } } b.attrs.creationDate = currentTime b.attrs.modificationDate = b.attrs.creationDate if b.IsForm() { b.attrs.groupType = groupTypeForm } else if b.IsModule() { b.attrs.groupType = groupTypeModule } else { b.attrs.groupType = groupTypeNoModule } utils.AddTextToLog(utils.LogLevel_TRACE, "Окончание инициализации блока") c <- true }
// Инициализация объекта данными из каталого содержащего распакованный конфигурационный блок func (c ConfCf) InitFromCatalog(pathToDir string) (err error) { utils.AddTextToLog(utils.LogLevel_INFO, "Начало инициализации объекта данными конфигурационного файла из каталога") var fileInfos []os.FileInfo if fileInfos, err = utils.ReadFilesInDir(pathToDir); err != nil { return err } funcForInitBlocks := func(numStream int, processBlocksTotal int, countBlocks int, blockInitResultChanal chan bool) { for i := processBlocksTotal; i < countBlocks && i-processBlocksTotal != numStream; i++ { fi := fileInfos[i] go c.blocksList[i].InitFromFiles(pathToDir, fi, blockInitResultChanal) } } c.initBlocks(len(fileInfos), funcForInitBlocks) utils.AddTextToLog(utils.LogLevel_INFO, "-Окончание инициализации объекта данными конфигурационного файла из каталога") return nil }