diff --git a/src/main/java/com/mauvaisetroupe/eadesignit/service/LandscapeViewService.java b/src/main/java/com/mauvaisetroupe/eadesignit/service/LandscapeViewService.java index b1831110..1577ec08 100644 --- a/src/main/java/com/mauvaisetroupe/eadesignit/service/LandscapeViewService.java +++ b/src/main/java/com/mauvaisetroupe/eadesignit/service/LandscapeViewService.java @@ -1,17 +1,22 @@ package com.mauvaisetroupe.eadesignit.service; +import com.mauvaisetroupe.eadesignit.domain.CapabilityApplicationMapping; import com.mauvaisetroupe.eadesignit.domain.DataFlow; +import com.mauvaisetroupe.eadesignit.domain.DataObject; import com.mauvaisetroupe.eadesignit.domain.FlowGroup; import com.mauvaisetroupe.eadesignit.domain.FlowInterface; import com.mauvaisetroupe.eadesignit.domain.FunctionalFlow; import com.mauvaisetroupe.eadesignit.domain.FunctionalFlowStep; import com.mauvaisetroupe.eadesignit.domain.LandscapeView; +import com.mauvaisetroupe.eadesignit.repository.CapabilityApplicationMappingRepository; import com.mauvaisetroupe.eadesignit.repository.DataFlowRepository; +import com.mauvaisetroupe.eadesignit.repository.DataObjectRepository; import com.mauvaisetroupe.eadesignit.repository.FlowGroupRepository; import com.mauvaisetroupe.eadesignit.repository.FlowInterfaceRepository; import com.mauvaisetroupe.eadesignit.repository.FunctionalFlowRepository; import com.mauvaisetroupe.eadesignit.repository.FunctionalFlowStepRepository; import com.mauvaisetroupe.eadesignit.repository.LandscapeViewRepository; +import java.util.ArrayList; import java.util.HashSet; import java.util.Set; import java.util.stream.Collectors; @@ -20,6 +25,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.Assert; /** * Service Implementation for managing {@link LandscapeView}. @@ -51,6 +57,12 @@ public class LandscapeViewService { @Autowired private FlowGroupRepository flowGroupRepository; + @Autowired + private CapabilityApplicationMappingRepository capabilityApplicationMappingRepository; + + @Autowired + private DataObjectRepository dataObjectRepository; + /** * Delete the landscapeView by id. * @@ -58,9 +70,20 @@ public class LandscapeViewService { * @param deleteDatas * @param deleteFlowInterface * @param deleteFunctionalFlow + * @param deleteDataObjects + * @param deleteCapabilityMappings */ - public void delete(Long id, boolean deleteFunctionalFlow, boolean deleteFlowInterface, boolean deleteDatas) { + public void delete( + Long id, + boolean deleteFunctionalFlow, + boolean deleteFlowInterface, + boolean deleteDatas, + boolean deleteCapabilityMappings, + boolean deleteDataObjects + ) { log.debug("Request to delete LandscapeView : {}", id); + + Assert.isTrue(!deleteDataObjects, "Not implemented due to complexity with parents relationships"); // delete landscape and all entities without references to other landscape LandscapeView landscapeView = landscapeViewRepository.getById(id); @@ -90,6 +113,21 @@ public void delete(Long id, boolean deleteFunctionalFlow, boolean deleteFlowInte landscapeView.removeFlows(flow); functionalFlowRepository.save(flow); } + + // Detach all CapabilitiesMapping + Set landscapeCapabilitiesMappings = new HashSet<>(landscapeView.getCapabilityApplicationMappings()); + for (CapabilityApplicationMapping capabilityApplicationMapping : landscapeCapabilitiesMappings) { + landscapeView.removeCapabilityApplicationMapping(capabilityApplicationMapping); + capabilityApplicationMappingRepository.save(capabilityApplicationMapping); + } + + // Detach all DataObjectes + Set landsccapeDataObjects = new HashSet<>(landscapeView.getDataObjects()); + for (DataObject dataObject : landsccapeDataObjects) { + landscapeView.removeDataObjects(dataObject); + dataObjectRepository.save(dataObject); + } + // delete landscape landscapeViewRepository.deleteById(id); @@ -174,5 +212,14 @@ public void delete(Long id, boolean deleteFunctionalFlow, boolean deleteFlowInte } } } + + // delete capabilitiesmapping not linked to another landscape + if (deleteCapabilityMappings) { + for (CapabilityApplicationMapping capabilityApplicationMapping : landscapeCapabilitiesMappings) { + if (capabilityApplicationMapping.getLandscapes() == null || capabilityApplicationMapping.getLandscapes().isEmpty()) { + capabilityApplicationMappingRepository.delete(capabilityApplicationMapping); + } + } + } } } diff --git a/src/main/java/com/mauvaisetroupe/eadesignit/web/rest/LandscapeViewResource.java b/src/main/java/com/mauvaisetroupe/eadesignit/web/rest/LandscapeViewResource.java index 1c94c580..a433591f 100644 --- a/src/main/java/com/mauvaisetroupe/eadesignit/web/rest/LandscapeViewResource.java +++ b/src/main/java/com/mauvaisetroupe/eadesignit/web/rest/LandscapeViewResource.java @@ -275,10 +275,19 @@ public ResponseEntity deleteLandscapeView( @PathVariable Long id, @RequestParam boolean deleteFunctionalFlows, @RequestParam boolean deleteFlowInterfaces, - @RequestParam boolean deleteDatas + @RequestParam boolean deleteDatas, + @RequestParam boolean deleteCapabilityMappings, + @RequestParam boolean deleteDataObjects ) { log.debug("REST request to delete LandscapeView : {}, {}, {}, {}", id, deleteFunctionalFlows, deleteFlowInterfaces, deleteDatas); - landscapeViewService.delete(id, deleteFunctionalFlows, deleteFlowInterfaces, deleteDatas); + landscapeViewService.delete( + id, + deleteFunctionalFlows, + deleteFlowInterfaces, + deleteDatas, + deleteCapabilityMappings, + deleteDataObjects + ); return ResponseEntity .noContent() .headers(HeaderUtil.createEntityDeletionAlert(applicationName, false, ENTITY_NAME, id.toString())) diff --git a/src/main/webapp/app/entities/landscape-view/landscape-view.component.ts b/src/main/webapp/app/entities/landscape-view/landscape-view.component.ts index 0ed418b5..e0418d43 100644 --- a/src/main/webapp/app/entities/landscape-view/landscape-view.component.ts +++ b/src/main/webapp/app/entities/landscape-view/landscape-view.component.ts @@ -24,6 +24,9 @@ export default defineComponent({ const deleteFunctionalFlows = ref(true); const deleteInterfaces = ref(true); const deleteDatas = ref(true); + const deleteCapabilityMappings = ref(false); + const deleteDataObjects = ref(false); + function deleteCoherence() { if (!deleteFunctionalFlows.value) { deleteInterfaces.value = false; @@ -66,7 +69,14 @@ export default defineComponent({ }; const removeLandscapeView = async () => { try { - await landscapeViewService().delete(removeId.value, deleteFunctionalFlows.value, deleteInterfaces.value, deleteDatas.value); + await landscapeViewService().delete( + removeId.value, + deleteFunctionalFlows.value, + deleteInterfaces.value, + deleteDatas.value, + deleteCapabilityMappings.value, + deleteDataObjects.value, + ); const message = 'A LandscapeView is deleted with identifier ' + removeId.value; alertService.showInfo(message, { variant: 'danger' }); removeId.value = -1; @@ -94,6 +104,8 @@ export default defineComponent({ deleteDatas, deleteCoherence, deleteFunctionalFlows, + deleteCapabilityMappings, + deleteDataObjects, }; }, }); diff --git a/src/main/webapp/app/entities/landscape-view/landscape-view.service.ts b/src/main/webapp/app/entities/landscape-view/landscape-view.service.ts index 6742ebaa..9860b803 100644 --- a/src/main/webapp/app/entities/landscape-view/landscape-view.service.ts +++ b/src/main/webapp/app/entities/landscape-view/landscape-view.service.ts @@ -35,8 +35,21 @@ export default class LandscapeViewService { }); } - public delete(id: number, deleteFunctionalFlows: boolean, deleteFlowInterfaces: boolean, deleteDatas: boolean): Promise { - const params = { deleteFunctionalFlows: deleteFunctionalFlows, deleteFlowInterfaces: deleteFlowInterfaces, deleteDatas: deleteDatas }; + public delete( + id: number, + deleteFunctionalFlows: boolean, + deleteFlowInterfaces: boolean, + deleteDatas: boolean, + deleteCapabilityMappings: boolean, + deleteDataObjects: boolean, + ): Promise { + const params = { + deleteFunctionalFlows: deleteFunctionalFlows, + deleteFlowInterfaces: deleteFlowInterfaces, + deleteDatas: deleteDatas, + deleteCapabilityMappings: deleteCapabilityMappings, + deleteDataObjects: deleteDataObjects, + }; return new Promise((resolve, reject) => { axios .delete(`${baseApiUrl}/${id}`, { params }) diff --git a/src/main/webapp/app/entities/landscape-view/landscape-view.vue b/src/main/webapp/app/entities/landscape-view/landscape-view.vue index 177b38e7..9870217b 100644 --- a/src/main/webapp/app/entities/landscape-view/landscape-view.vue +++ b/src/main/webapp/app/entities/landscape-view/landscape-view.vue @@ -103,6 +103,11 @@ Delete unused Data Flows & Data Flow Items

+

Delete unused Capability Mappings

+

+ Delete unused Data Objects (not + implemented) +