class ContributorsListItemPresenter {

    public void remove() {
        canRemoveContributor().then(canRemoveContributor -> {
            if (canRemoveContributor) {
                contributorsListService.getContributors(contributors -> {
                    if (isLastOwner(persistedContributor,
                                    contributors)) {
                        notificationEvent.fire(new NotificationEvent(view.getSingleOwnerIsMandatoryMessage(),
                                                                     NotificationEvent.NotificationType.ERROR));
                    } else {
                        contributors.remove(persistedContributor);

                        view.showBusyIndicator(view.getSavingMessage());
                        contributorsListService.saveContributors(contributors,
                                                                 () -> {
                                                                     view.hideBusyIndicator();
                                                                     notificationEvent.fire(new NotificationEvent(view.getRemoveSuccessMessage(),
                                                                                                                  NotificationEvent.NotificationType.SUCCESS));
                                                                     view.removeContributor();
                                                                     parentPresenter.refresh();
                                                                 },
                                                                 new HasBusyIndicatorDefaultErrorCallback(view));
                    }
                });
            }

            return promises.resolve();
        });
    }

    @Inject public  ContributorsListItemPresenter(final View view,
                                         final LibraryPlaces libraryPlaces,
                                         final Event<NotificationEvent> notificationEvent,
                                         final Promises promises);

}