    001// License: GPL. For details, see LICENSE file.
    002package org.openstreetmap.josm.plugins.streetside.utils;
    003
    004import static org.openstreetmap.josm.tools.I18n.tr;
    005
    006import javax.swing.JOptionPane;
    007
    008import org.apache.log4j.Logger;
    009import org.openstreetmap.josm.Main;
    010import org.openstreetmap.josm.tools.I18n;
    011
    012/**
    013 * @author nokutu
    014 *
    015 */
    016public final class PluginState {
    017
    018  final static Logger logger = Logger.getLogger(PluginState.class);
    019
    020  private static boolean submittingChangeset;
    021
    022  private static int runningDownloads;
    023  /** Images that have to be uploaded. */
    024  private static int imagesToUpload;
    025  /** Images that have been uploaded. */
    026  private static int imagesUploaded;
    027
    028  private PluginState() {
    029    // Empty constructor to avoid instantiation
    030  }
    031
    032  /**
    033   * Called when a download is started.
    034   */
    035  public static void startDownload() {
    036    runningDownloads++;
    037  }
    038
    039  /**
    040   * Called when a download is finished.
    041   */
    042  public static void finishDownload() {
    043    if (runningDownloads == 0) {
    044      logger.warn(I18n.tr("The amount of running downloads is equal to 0"));
    045      return;
    046    }
    047    runningDownloads--;
    048  }
    049
    050  /**
    051   * Checks if there is any running download.
    052   *
    053   * @return true if the plugin is downloading; false otherwise.
    054   */
    055  public static boolean isDownloading() {
    056    return runningDownloads > 0;
    057  }
    058
    059  /**
    060   * Checks if there is a changeset being submitted.
    061   *
    062   * @return true if the plugin is submitting a changeset false otherwise.
    063   */
    064  public static boolean isSubmittingChangeset() {
    065    return submittingChangeset;
    066  }
    067   /**
    068   * Checks if there is any running upload.
    069   *
    070   * @return true if the plugin is uploading; false otherwise.
    071   */
    072  public static boolean isUploading() {
    073    return imagesToUpload > imagesUploaded;
    074  }
    075
    076  /**
    077   * Sets the amount of images that are going to be uploaded.
    078   *
    079   * @param amount
    080   *          The amount of images that are going to be uploaded.
    081   */
    082  public static void addImagesToUpload(int amount) {
    083    if (imagesToUpload <= imagesUploaded) {
    084      imagesToUpload = 0;
    085      imagesUploaded = 0;
    086    }
    087    imagesToUpload += amount;
    088  }
    089
    090  public static int getImagesToUpload() {
    091    return imagesToUpload;
    092  }
    093
    094  public static int getImagesUploaded() {
    095    return imagesUploaded;
    096  }
    097
    098  /**
    099   * Called when an image is uploaded.
    100   */
    101  public static void imageUploaded() {
    102    imagesUploaded++;
    103    if (imagesToUpload == imagesUploaded && Main.main != null) {
    104        finishedUploadDialog(imagesUploaded);
    105    }
    106  }
    107
    108  private static void finishedUploadDialog(int numImages) {
    109    JOptionPane.showMessageDialog(
    110      Main.parent,
    111      tr("You have successfully uploaded {0} images to Bing.com", numImages),
    112      tr("Finished upload"),
    113      JOptionPane.INFORMATION_MESSAGE
    114    );
    115  }
    116
    117  public static void notLoggedInToMapillaryDialog() {
    118    if (Main.main == null) {
    119      return;
    120    }
    121    JOptionPane.showMessageDialog(
    122        Main.parent,
    123        tr("You are not logged in, please log in to Streetside in the preferences"),
    124        tr("Not Logged in to Streetside"),
    125        JOptionPane.WARNING_MESSAGE
    126    );
    127  }
    128
    129
    130
    131  /**
    132   * Returns the text to be written in the status bar.
    133   *
    134   * @return The {@code String} that is going to be written in the status bar.
    135   */
    136  public static String getUploadString() {
    137    return tr("Uploading: {0}", "(" + imagesUploaded + "/" + imagesToUpload + ")");
    138  }
    139
    140  public static void setSubmittingChangeset(boolean isSubmitting) {
    141      submittingChangeset = isSubmitting;
    142  }
    143}