Skip to content
Snippets Groups Projects
Commit ec091fd4 authored by Lukasz Lopatowski's avatar Lukasz Lopatowski
Browse files

Merge branch '198-handle-application-instances-from-a-deleted-application' into 'develop'

Remove app instances on base removal

See merge request !10
parents 0767bf90 e43a1b1d
Branches
Tags
1 merge request!10Remove app instances on base removal
Pipeline #87520 passed
......@@ -9,23 +9,15 @@ import lombok.extern.log4j.Log4j2;
import net.geant.nmaas.notifications.MailAttributes;
import net.geant.nmaas.notifications.NotificationEvent;
import net.geant.nmaas.notifications.templates.MailType;
import net.geant.nmaas.portal.api.domain.AppRateView;
import net.geant.nmaas.portal.api.domain.ApplicationBaseView;
import net.geant.nmaas.portal.api.domain.ApplicationStateChangeRequest;
import net.geant.nmaas.portal.api.domain.ApplicationView;
import net.geant.nmaas.portal.api.domain.Id;
import net.geant.nmaas.portal.api.domain.UserView;
import net.geant.nmaas.orchestration.AppLifecycleManager;
import net.geant.nmaas.portal.api.domain.*;
import net.geant.nmaas.portal.api.exception.MarketException;
import net.geant.nmaas.portal.api.exception.MissingElementException;
import net.geant.nmaas.portal.api.exception.ProcessingException;
import net.geant.nmaas.portal.exceptions.ObjectAlreadyExistsException;
import net.geant.nmaas.portal.persistent.entity.Application;
import net.geant.nmaas.portal.persistent.entity.ApplicationBase;
import net.geant.nmaas.portal.persistent.entity.ApplicationState;
import net.geant.nmaas.portal.persistent.entity.ApplicationVersion;
import net.geant.nmaas.portal.persistent.entity.Role;
import net.geant.nmaas.portal.persistent.entity.User;
import net.geant.nmaas.portal.persistent.entity.*;
import net.geant.nmaas.portal.persistent.repositories.RatingRepository;
import net.geant.nmaas.portal.service.ApplicationInstanceService;
import net.geant.nmaas.portal.service.impl.ApplicationServiceImpl;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.http.HttpStatus;
......@@ -81,6 +73,12 @@ public class ApplicationController extends AppBaseController {
private final RatingRepository ratingRepository;
private final ApplicationInstanceService applicationInstanceService;
private final AppLifecycleManager appLifecycleManager;
private final AppInstanceController appInstanceController;
/*
* Application Base Part
*/
......@@ -159,10 +157,8 @@ public class ApplicationController extends AppBaseController {
ApplicationState state = ApplicationState.DELETED;
for (ApplicationVersion appVersion : base.getVersions()) {
Application app = getApp(appVersion.getAppVersionId());
applicationService.changeApplicationState(app, state);
appVersion.setState(state);
if(app.getState() != ApplicationState.DELETED) throw new ProcessingException("Can not delete base, version " + app.getVersion() +" is not deleted");
}
appBaseService.deleteAppBase(base);
}
......@@ -339,8 +335,23 @@ public class ApplicationController extends AppBaseController {
@PatchMapping(value = "/state/{id}")
@PreAuthorize("hasRole('ROLE_SYSTEM_ADMIN')")
@Transactional
public void changeApplicationState(@PathVariable long id, @RequestBody ApplicationStateChangeRequest stateChangeRequest) {
public void changeApplicationState(@PathVariable long id, @RequestBody ApplicationStateChangeRequest stateChangeRequest, Principal principal) {
Application app = getApp(id);
if(stateChangeRequest.getState().equals(ApplicationState.DELETED)) {
applicationInstanceService.findAllByApplication(app).forEach(ai -> {
AppInstanceStatus instanceState = appInstanceController.getState(ai.getId(), principal);
int numberOfRunningInstances = 0;
if(!(instanceState.getState().equals(AppInstanceState.DONE)
|| instanceState.getState().equals(AppInstanceState.FAILURE)
|| instanceState.getState().equals(AppInstanceState.REMOVED) )) {
numberOfRunningInstances = +1;
}
if(numberOfRunningInstances > 0) {
throw new ProcessingException("Can not set state to Disabled. There is still " + numberOfRunningInstances + " running instances of this version.");
}
}
);
}
applicationService.changeApplicationState(app, stateChangeRequest.getState());
appBaseService.updateApplicationVersionState(app.getName(), app.getVersion(), stateChangeRequest.getState());
this.sendMails(app, stateChangeRequest);
......
......@@ -97,7 +97,7 @@ public class ApplicationBaseServiceImpl implements ApplicationBaseService {
.findAny()
.ifPresent(appVersion -> appVersion.setState(state));
appBase.validate();
appBaseRepository.save(appBase);
appBaseRepository.save(appBase);
if (state.equals(ApplicationState.ACTIVE)) {
eventPublisher.publishEvent(new ApplicationActivatedEvent(this, name, version));
}
......
......@@ -735,6 +735,7 @@
"VIEW_BUTTON": "Anzeigen",
"EDIT_BUTTON": "Bearbeiten",
"DELETE_BUTTON": "Remove",
"SELECT_VERSION" : "Select version to be base in creator",
"CONFIRM_REMOVAL" : {
"HEADER": "Confirm application removal",
"DESCRIPTION": "Do you want to completely remove this application from the catalogue along with all its versions?",
......
......@@ -736,6 +736,7 @@
"VIEW_BUTTON": "View",
"EDIT_BUTTON": "Edit",
"DELETE_BUTTON": "Remove",
"SELECT_VERSION" : "Select version to be base in creator",
"CONFIRM_REMOVAL" : {
"HEADER": "Confirm application removal",
"DESCRIPTION": "Do you want to completely remove this application from the catalogue along with all its versions?",
......
......@@ -734,6 +734,7 @@
"VIEW_BUTTON": "View",
"EDIT_BUTTON": "Edit",
"DELETE_BUTTON": "Remove",
"SELECT_VERSION" : "Select version to be base in creator",
"CONFIRM_REMOVAL" : {
"HEADER": "Confirm application removal",
"DESCRIPTION": "Do you want to completely remove this application from the catalogue along with all its versions?",
......
......@@ -735,6 +735,7 @@
"VIEW_BUTTON": "Pokaż",
"EDIT_BUTTON": "Edytuj",
"DELETE_BUTTON": "Usuń",
"SELECT_VERSION" : "Wybierz wersję aplikacji, która ma być podstawą w kreatorze",
"CONFIRM_REMOVAL" : {
"HEADER": "Potwierdź usunięcie aplikacji",
"DESCRIPTION": "Czy na pewno chcesz całkowicie usunąć tą aplikację z katalogu razem ze wszystkimi wersjami?",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment