99using Rdmp . Core . Icons . IconProvision ;
1010using Rdmp . Core . Providers ;
1111using Rdmp . Core . Repositories . Construction ;
12+ using Rdmp . Core . ReusableLibraryCode . Checks ;
1213using Rdmp . Core . ReusableLibraryCode . Icons . IconProvision ;
1314using SixLabors . ImageSharp ;
1415using SixLabors . ImageSharp . PixelFormats ;
@@ -29,7 +30,7 @@ public class ExecuteCommandMakeCatalogueProjectSpecific : BasicCommandExecution,
2930
3031 [ UseWithObjectConstructor ]
3132 public ExecuteCommandMakeCatalogueProjectSpecific ( IBasicActivateItems itemActivator , ICatalogue catalogue ,
32- IProject project , [ DemandsInitialization ( "Ignore Validation" , DemandType . Unspecified , defaultValue : false ) ] bool force ) : this ( itemActivator )
33+ IProject project , [ DemandsInitialization ( "Ignore Validation" , DemandType . Unspecified , defaultValue : false ) ] bool force ) : this ( itemActivator )
3334 {
3435 _catalogue = catalogue ;
3536 _project = project ;
@@ -49,14 +50,28 @@ public override string GetCommandHelp() =>
4950 public override void Execute ( )
5051 {
5152 if ( _catalogue == null )
52- SetCatalogue ( SelectOne ( BasicActivator . RepositoryLocator . CatalogueRepository . GetAllObjects < Catalogue > ( ) . ToList ( ) ) ) ;
53+ {
54+ var catalogues = BasicActivator . RepositoryLocator . CatalogueRepository . GetAllObjects < Catalogue > ( ) . ToList ( ) ;
55+ if ( ! catalogues . Any ( ) )
56+ {
57+ Show ( $ "No valid catalogues found to make project specific.") ;
58+ return ;
59+ }
60+ SetCatalogue ( SelectOne ( catalogues ) ) ;
61+ }
5362 if ( ! _hasRanCatalogueValidation )
5463 {
5564 SetCatalogue ( _catalogue ) ;
5665 }
57- if ( _existingProjectIDs is null )
66+ if ( _existingProjectIDs is null )
5867 GetExistingProjectIDs ( ) ;
5968
69+ var projects = GetListOfValidProjects ( ) ;
70+ if ( ! projects . Any ( ) )
71+ {
72+ Show ( $ "No valid projects found to make { _catalogue . Name } project specific.") ;
73+ return ;
74+ }
6075 _project ??= SelectOne < Project > ( GetListOfValidProjects ( ) ) ;
6176
6277 if ( _project == null || _catalogue == null )
@@ -90,15 +105,17 @@ public IAtomicCommandWithTarget SetTarget(DatabaseEntity target)
90105 private List < Project > GetListOfValidProjects ( )
91106 {
92107 var dataExportChildProvider = ( ( DataExportChildProvider ) _activator . CoreChildProvider ) ;
93-
94- var availableProjects = dataExportChildProvider . Projects . Where ( p => ! dataExportChildProvider . ExtractableDataSetProjects . Where ( edsp => edsp . Project_ID == p . ID ) . Select ( edsp => edsp . DataSet . Catalogue ) . Contains ( _catalogue ) ) ;
95- return availableProjects . Where ( p => ProjectSpecificCatalogueManager . CanMakeCatalogueProjectSpecific ( _activator . RepositoryLocator . DataExportRepository , _catalogue , p , _existingProjectIDs ) ) . ToList ( ) ;
108+ var eds = _activator . RepositoryLocator . DataExportRepository . GetAllObjectsWithParent < ExtractableDataSet > ( _catalogue ) ;
109+ var edsp = _activator . RepositoryLocator . DataExportRepository . GetAllObjects < ExtractableDataSetProject > ( ) . Where ( edsp => eds . Contains ( edsp . DataSet ) ) ;
110+ var pti = edsp . Select ( e => e . Project_ID ) . ToList ( ) ;
111+ var validProjects = dataExportChildProvider . Projects . Where ( p => _force || ( ! pti . Contains ( p . ID ) && ProjectSpecificCatalogueManager . CanMakeCatalogueProjectSpecific ( _activator . RepositoryLocator . DataExportRepository , _catalogue , p , pti ) ) ) ;
112+ return validProjects . ToList ( ) ;
96113 }
97114
98115 private void GetExistingProjectIDs ( )
99- {
116+ {
100117 var dataExportChildProvider = ( ( DataExportChildProvider ) _activator . CoreChildProvider ) ;
101- var existingProjects = dataExportChildProvider . Projects . Where ( p => dataExportChildProvider . ExtractableDataSetProjects . Where ( edsp => edsp . Project_ID == p . ID ) . Select ( edsp => edsp . DataSet . Catalogue ) . Contains ( _catalogue ) ) ;
118+ var existingProjects = dataExportChildProvider . Projects . Where ( p => dataExportChildProvider . ExtractableDataSetProjects . Where ( edsp => edsp . Project_ID == p . ID ) . Select ( edsp => edsp . DataSet . Catalogue ) . Contains ( _catalogue ) ) ;
102119 _existingProjectIDs = existingProjects . Select ( p => p . ID ) . ToList ( ) ;
103120 }
104121
@@ -113,7 +130,7 @@ private void SetCatalogue(ICatalogue catalogue)
113130 return ;
114131 }
115132 var status = _catalogue . GetExtractabilityStatus ( BasicActivator . RepositoryLocator . DataExportRepository ) ;
116- if ( ! GetListOfValidProjects ( ) . Any ( ) && ! _force )
133+ if ( ! GetListOfValidProjects ( ) . Any ( ) && ! _force )
117134 {
118135 SetImpossible ( "No valid Projects available" ) ;
119136 }
0 commit comments