@@ -4187,6 +4187,167 @@ bool ProjMgrWorker::ListDependencies(vector<string>& dependencies, const string&
41874187 return true ;
41884188}
41894189
4190+ vector<RteBoard*> ProjMgrWorker::GetCompatibleBoards (ContextItem& context) {
4191+ vector<RteBoard*> compatibleBoards;
4192+ if (!context.board .empty ()) {
4193+ compatibleBoards.push_back (context.rteBoard );
4194+ } else if (!context.device .empty ()) {
4195+ context.rteFilteredModel ->GetCompatibleBoards (compatibleBoards, context.rteDevice );
4196+ }
4197+ return compatibleBoards;
4198+ }
4199+
4200+ bool ProjMgrWorker::IsBoardListCompatible (const vector<RteBoard*> compatibleBoards, const Collection<RteItem*>& boards) {
4201+ if (boards.empty () || compatibleBoards.empty ()) {
4202+ return true ;
4203+ }
4204+ for (const auto & board : boards) {
4205+ for (const auto & compatibleBoard : compatibleBoards) {
4206+ if ((compatibleBoard->GetVendorString () == board->GetVendorString ()) &&
4207+ (compatibleBoard->GetName () == board->GetName ())) {
4208+ return true ;
4209+ }
4210+ }
4211+ }
4212+ return false ;
4213+ }
4214+
4215+ std::vector<ExampleItem> ProjMgrWorker::CollectExamples (ContextItem& context) {
4216+ std::vector<ExampleItem> examples;
4217+ vector<const RteItem*> rteExamples;
4218+ const auto & packs = context.rteFilteredModel ->GetPackages ();
4219+ for (const auto & [_, pack] : packs) {
4220+ const RteItem* packExamples = pack->GetExamples ();
4221+ if (packExamples) {
4222+ const Collection<RteItem*> items = packExamples->GetChildren ();
4223+ for (const RteItem* item : items) {
4224+ if (item->GetTag () == " example" ) {
4225+ rteExamples.push_back (item);
4226+ }
4227+ }
4228+ }
4229+ }
4230+ const auto & compatibleBoards = GetCompatibleBoards (context);
4231+ for (const auto & rteExample : rteExamples) {
4232+ Collection<RteItem*> boards;
4233+ boards = rteExample->GetChildrenByTag (" board" , boards);
4234+ if (!IsBoardListCompatible (compatibleBoards, boards)) {
4235+ continue ;
4236+ }
4237+ ExampleItem example;
4238+ example.name = rteExample->GetName ();
4239+ example.description = rteExample->GetChildText (" description" );
4240+ string folder = rteExample->GetFolderString ();
4241+ RteFsUtils::NormalizePath (folder, rteExample->GetAbsolutePackagePath ());
4242+ example.doc = rteExample->GetDocValue ();
4243+ RteFsUtils::NormalizePath (example.doc , folder);
4244+ string archive = rteExample->GetAttribute (" archive" );
4245+ if (!archive.empty ()) {
4246+ RteFsUtils::NormalizePath (archive, folder);
4247+ example.archive = archive;
4248+ }
4249+ for (const auto & board : boards) {
4250+ example.boards .push_back (BoardItem{ board->GetVendorString (), board->GetName () });
4251+ }
4252+ const auto & version = rteExample->GetVersionString ();
4253+ if (!version.empty ()) {
4254+ example.version = version;
4255+ }
4256+
4257+ Collection<RteItem*> environments;
4258+ environments = rteExample->GetChildrenByTag (" environment" , environments);
4259+ for (const auto & item : environments) {
4260+ string load = item->GetAttribute (" load" );
4261+ RteFsUtils::NormalizePath (load, folder);
4262+ const auto & name = item->GetName ();
4263+ example.environments [name].load = load;
4264+ example.environments [name].folder = item->GetFolderString ();
4265+ RteFsUtils::NormalizePath (example.environments [name].folder , folder);
4266+ }
4267+
4268+ Collection<RteItem*> components;
4269+ components = rteExample->GetChildrenByTag (" component" , components);
4270+ for (const auto & item : components) {
4271+ example.components .push_back (item->GetComponentID (true ));
4272+ }
4273+
4274+ Collection<RteItem*> categories;
4275+ categories = rteExample->GetChildrenByTag (" category" , categories);
4276+ for (const auto & item : categories) {
4277+ example.categories .push_back (item->GetText ());
4278+ }
4279+
4280+ Collection<RteItem*> keywords;
4281+ components = rteExample->GetChildrenByTag (" keyword" , keywords);
4282+ for (const auto & item : keywords) {
4283+ example.keywords .push_back (item->GetText ());
4284+ }
4285+
4286+ examples.push_back (example);
4287+ }
4288+ return examples;
4289+ }
4290+
4291+ bool ProjMgrWorker::ListExamples (vector<string>& examples, const string& filter) {
4292+ const auto & selectedContext = m_selectedContexts.front ();
4293+ ContextItem& context = m_contexts[selectedContext];
4294+ if (!LoadPacks (context)) {
4295+ return false ;
4296+ }
4297+ if (!selectedContext.empty ()) {
4298+ if (!ProcessPrecedences (context, BoardOrDevice::Both)) {
4299+ return false ;
4300+ }
4301+ }
4302+ if (!SetTargetAttributes (context, context.targetAttributes )) {
4303+ return false ;
4304+ }
4305+
4306+ const auto & collectedExamples = CollectExamples (context);
4307+
4308+ for (const auto & exampleItem : collectedExamples) {
4309+ string example = exampleItem.name ;
4310+ example += exampleItem.version .empty () ? " " : " @" + exampleItem.version ;
4311+ example += " \n description: " + exampleItem.description ;
4312+ example += " \n doc: " + exampleItem.doc ;
4313+ if (!exampleItem.archive .empty ()) {
4314+ example += " \n archive: " + exampleItem.archive ;
4315+ }
4316+ for (const auto & [name, environment] : exampleItem.environments ) {
4317+ example += " \n environment: " + name + " \n load: " + environment.load ;
4318+ example += " \n folder: " + environment.folder ;
4319+ }
4320+ if (!exampleItem.boards .empty ()) {
4321+ example += " \n boards:" ;
4322+ for (const auto & board : exampleItem.boards ) {
4323+ example += " \n " + board.vendor + " ::" + board.name ;
4324+ }
4325+ }
4326+ if (!exampleItem.components .empty ()) {
4327+ example += " \n components:" ;
4328+ for (const auto & component : exampleItem.components ) {
4329+ example += " \n " + component;
4330+ }
4331+ }
4332+ if (!exampleItem.categories .empty ()) {
4333+ example += " \n categories:" ;
4334+ for (const auto & category : exampleItem.categories ) {
4335+ example += " \n " + category;
4336+ }
4337+ }
4338+ if (!exampleItem.keywords .empty ()) {
4339+ example += " \n keywords:" ;
4340+ for (const auto & keyword : exampleItem.keywords ) {
4341+ example += " \n " + keyword;
4342+ }
4343+ }
4344+ if (filter.empty () || example.find (filter) != string::npos) {
4345+ examples.push_back (example);
4346+ }
4347+ }
4348+ return true ;
4349+ }
4350+
41904351bool ProjMgrWorker::FormatValidationResults (set<string>& results, const ContextItem& context) {
41914352 for (const auto & validation : context.validationResults ) {
41924353 string resultStr = RteItem::ConditionResultToString (validation.result ) + " " + validation.id ;
0 commit comments