11package eu .dzhw .fdz .metadatamanagement .datasetmanagement .rest ;
22
33import java .net .URI ;
4+ import java .util .ArrayList ;
5+ import java .util .List ;
46
7+ import org .springframework .beans .factory .annotation .Autowired ;
58import org .springframework .http .ResponseEntity ;
69import org .springframework .stereotype .Controller ;
710import org .springframework .web .bind .annotation .DeleteMapping ;
1518
1619import eu .dzhw .fdz .metadatamanagement .common .rest .GenericDomainObjectResourceController ;
1720import eu .dzhw .fdz .metadatamanagement .common .service .CrudService ;
21+ import eu .dzhw .fdz .metadatamanagement .datapackagemanagement .domain .ApprovedUsageEnum ;
22+ import eu .dzhw .fdz .metadatamanagement .datapackagemanagement .domain .DataPackage ;
23+ import eu .dzhw .fdz .metadatamanagement .datapackagemanagement .repository .DataPackageRepository ;
1824import eu .dzhw .fdz .metadatamanagement .datasetmanagement .domain .DataSet ;
25+ import eu .dzhw .fdz .metadatamanagement .datasetmanagement .domain .SubDataSet ;
26+ import eu .dzhw .fdz .metadatamanagement .projectmanagement .repository .DataAcquisitionProjectRepository ;
1927import eu .dzhw .fdz .metadatamanagement .usermanagement .security .UserInformationProvider ;
2028import io .swagger .v3 .oas .annotations .Operation ;
2129import io .swagger .v3 .oas .annotations .tags .Tag ;
30+ import lombok .extern .slf4j .Slf4j ;
2231
2332/**
2433 * DataSet REST Controller which overrides default spring data rest methods.
2736 */
2837@ Controller
2938@ Tag (name = "Dataset Resource" , description = "Endpoints used by the MDM to manage datasets." )
39+ @ Slf4j
3040public class DataSetResourceController
3141 extends GenericDomainObjectResourceController <DataSet , CrudService <DataSet >> {
3242
43+ @ Autowired
44+ DataPackageRepository dataPackageRepository ;
45+
3346 public DataSetResourceController (CrudService <DataSet > crudService ,
3447 UserInformationProvider userInformationProvider ) {
3548 super (crudService , userInformationProvider );
@@ -46,16 +59,17 @@ public ResponseEntity<DataSet> getDomainObject(@PathVariable String id) {
4659 return super .getDomainObject (id );
4760 }
4861
49-
5062 @ Override
5163 @ PostMapping (value = "/api/data-sets" )
52- public ResponseEntity <?> postDomainObject (@ RequestBody DataSet dataSet ) {
64+ public ResponseEntity <?> postDomainObject (@ RequestBody DataSet dataSet ) {
65+ addApprovedUsageIfDownloadableContent (dataSet );
5366 return super .postDomainObject (dataSet );
5467 }
5568
5669 @ Override
5770 @ PutMapping (value = "/api/data-sets/{id:.+}" )
5871 public ResponseEntity <?> putDomainObject (@ RequestBody DataSet dataSet ) {
72+ addApprovedUsageIfDownloadableContent (dataSet );
5973 return super .putDomainObject (dataSet );
6074 }
6175
@@ -69,4 +83,35 @@ public ResponseEntity<?> deleteDomainObject(@PathVariable String id) {
6983 protected URI buildLocationHeaderUri (DataSet domainObject ) {
7084 return UriComponentsBuilder .fromPath ("/api/data-sets/" + domainObject .getId ()).build ().toUri ();
7185 }
86+
87+ private void addApprovedUsageIfDownloadableContent (DataSet dataSet ) {
88+ boolean hasDownloadableContent = false ;
89+ var subsets = dataSet .getSubDataSets ();
90+ for (SubDataSet subDataSet : subsets ) {
91+ String accessWay = subDataSet .getAccessWay ();
92+ if (accessWay != null && accessWay .toLowerCase ().contains ("cuf" )) {
93+ hasDownloadableContent = true ;
94+ }
95+ }
96+
97+ log .info ("Data set has downloadable content, updating approved usages: " + hasDownloadableContent );
98+ if (hasDownloadableContent ) {
99+ String projectId = dataSet .getDataAcquisitionProjectId ();
100+ List <DataPackage > dataPackages = dataPackageRepository .findByDataAcquisitionProjectId (projectId );
101+ log .info ("found " + dataPackages .size () + " data packages for project " + projectId );
102+
103+ if (dataPackages .size () > 0 ) {
104+ log .info ("updated approved usages for project " + projectId );
105+ DataPackage entity = dataPackages .get (0 );
106+ List <ApprovedUsageEnum > approvedUsages = entity .getApprovedUsageList ();
107+ if (approvedUsages == null ) {
108+ approvedUsages = new ArrayList <>();
109+ entity .setApprovedUsageList (approvedUsages );
110+ }
111+ approvedUsages .add (ApprovedUsageEnum .TEACHING_PURPOSES );
112+
113+ dataPackageRepository .save (entity );
114+ }
115+ }
116+ }
72117}
0 commit comments