class BaseUserEditorWorkflow implements IsWidget {

    protected void doShow(final String userId) {
        assert userId != null;

        // Configure the view.
        doShowEditorView();

        // Start the show workflow's logic.
        checkDirty(new Command() {
            @Override
            public void execute() {
                checkClear();
                // Call backend service.
                showLoadingBox();
                userSystemManager.users(new RemoteCallback<User>() {
                                            @Override
                                            public void callback(User o) {
                                                hideLoadingBox();
                                                BaseUserEditorWorkflow.this.user = o;
                                                assert user != null;

                                                userEditorDriver.show(user,
                                                                      userEditor);
                                                view.setCancelButtonVisible(false);
                                                view.setSaveButtonVisible(false);
                                            }
                                        },
                                        errorCallback).get(userId);
            }
        });
    }

    public  BaseUserEditorWorkflow(final ClientUserSystemManager userSystemManager,
                                  final Event<OnErrorEvent> errorEvent,
                                  final Event<NotificationEvent> workbenchNotification,
                                  final Event<DeleteUserEvent> deleteUserEvent,
                                  final Event<SaveUserEvent> saveUserEvent,
                                  final ConfirmBox confirmBox,
                                  final UserEditor userEditor,
                                  final UserEditorDriver userEditorDriver,
                                  final ChangePassword changePassword,
                                  final LoadingBox loadingBox,
                                  final EntityWorkflowView view);

}