Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/keenwrite.git
/*
 * Copyright 2016 White Magic Software, Ltd.
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *  o Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 *  o Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package com.scrivenvar.service.events;

import java.util.Observer;
import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType;
import javafx.stage.Window;

/**
 * Provides the application with a uniform way to notify the user of events.
 *
 * @author White Magic Software, Ltd.
 */
public interface Notifier {

  public static final ButtonType YES = ButtonType.YES;
  public static final ButtonType NO = ButtonType.NO;
  public static final ButtonType CANCEL = ButtonType.CANCEL;

  /**
   * Notifies the user of a problem.
   *
   * @param message The problem description.
   */
  public void notify( final String message );

  /**
   * Notifies the user about the exception.
   *
   * @param ex The exception containing a message to show to the user.
   */
  default public void notify( final Exception ex ) {
    notify( ex.getMessage() );
  }

  /**
   * Causes any displayed notifications to disappear.
   */
  public void clear();

  /**
   * Constructs a default alert message text for a modal alert dialog.
   *
   * @param title The dialog box message title.
   * @param message The dialog box message content (needs formatting).
   * @param args The arguments to the message content that must be formatted.
   *
   * @return The message suitable for building a modal alert dialog.
   */
  public Notification createNotification(
    String title,
    String message,
    Object... args );

  /**
   * Creates an alert of alert type error with a message showing the cause of
   * the error.
   *
   * @param parent Dialog box owner (for modal purposes).
   * @param message The error message, title, and possibly more details.
   *
   * @return A modal alert dialog box ready to display using showAndWait.
   */
  public Alert createError( Window parent, Notification message );

  /**
   * Creates an alert of alert type confirmation with Yes/No/Cancel buttons.
   *
   * @param parent Dialog box owner (for modal purposes).
   * @param message The message, title, and possibly more details.
   *
   * @return A modal alert dialog box ready to display using showAndWait.
   */
  public Alert createConfirmation( Window parent, Notification message );

  /**
   * Adds an observer to the list of objects that receive notifications about
   * error messages to be presented to the user.
   *
   * @param observer The observer instance to notify.
   */
  public void addObserver( Observer observer );

  /**
   * Removes an observer from the list of objects that receive notifications
   * about error messages to be presented to the user.
   *
   * @param observer The observer instance to no longer notify.
   */
  public void deleteObserver( Observer observer );
}