class SettingsPresenter {

    public void showSaveModal() {
        projectController.canUpdateProject(projectContext.getActiveWorkspaceProject().get()).then(userCanUpdateProject -> {
            if (userCanUpdateProject) {
                sectionManager.validateAll().then(i -> {
                    savePopUpPresenter.show(this::save);
                    return promises.resolve();
                }).catch_(o -> promises.catchOrExecute(o, e -> {
                    view.hideBusyIndicator();
                    return promises.reject(e);
                }, (final Section<ProjectScreenModel> section) -> {
                    view.hideBusyIndicator();
                    return sectionManager.goTo(section);
                }));
            }

            return promises.resolve();
        });
    }

    @Inject public  SettingsPresenter(final View view,
                             final Promises promises,
                             final Event<NotificationEvent> notificationEvent,
                             final @Customizable SettingsSections<ProjectScreenModel> settingsSections,
                             final SavePopUpPresenter savePopUpPresenter,
                             final Caller<ProjectScreenService> projectScreenService,
                             final WorkspaceProjectContext projectContext,
                             final ManagedInstance<ObservablePath> observablePaths,
                             final ConflictingRepositoriesPopup conflictingRepositoriesPopup,
                             final SectionManager<ProjectScreenModel> sectionManager,
                             final ProjectController projectController);

}