public static void sendImage(MediaFeedData feed, WebSocket.Out<JsonNode> out) {

    if (feed != null) {

      Logger.info("			image id:" + feed.getId());

      Caption caption = feed.getCaption();
      Images images = feed.getImages();

      ObjectNode msg = Json.newObject();
      msg.put("kind", "newImage");
      msg.put("id", feed.getId());
      msg.put("createdTime", feed.getCreatedTime());
      if (caption != null) {
        msg.put("authorFullName", caption.getFrom().getFullName());
        msg.put("authorPic", caption.getFrom().getProfilePicture());
      }
      msg.put("nLikes", feed.getLikes().getCount());
      msg.put("uLikes", feed.getLikes().getLikesUserList().toString());
      msg.put("nComments", feed.getComments().getCount());
      msg.put("uComments", feed.getComments().getComments().toString());
      msg.put("stdImageUrl", images.getStandardResolution().getImageUrl());
      out.write(msg);
    }
  } // sendImage
  // ----------------------------------------------------------------
  // ---- Image Database---------------------------------------------
  public static void addImagesToDB(Instagram instagram) {
    Logger.info("  --Add images to db-------------");

    TagMediaFeed mediaFeed = getMediaFeed(instagram);

    List<MediaFeedData> images = mediaFeed.getData();
    List<MediaFeedData> imagesAll = new ArrayList<MediaFeedData>();

    // add first media feeds to imagesAll
    for (int i = 0; i < images.size(); i++) {
      if (imagesAll.size() < maxNumberOfImagesInst) {
        imagesAll.add(0, images.get(i));
      }
    }

    // add additional media feed to imagesAll[maxNumberOfImagesInst]
    String nextMaxId = getPagination(mediaFeed);
    while ((imagesAll.size() < maxNumberOfImagesInst) && (nextMaxId != null)) {
      // get new set of images
      TagMediaFeed nextMediaFeed = getNextMediaFeed(instagram, nextMaxId);
      List<MediaFeedData> imagesNext = nextMediaFeed.getData();

      // add  imagesNext to imagesAll
      for (int i = 0; i < imagesNext.size(); i++) {
        if (imagesAll.size() < maxNumberOfImagesInst) {
          imagesAll.add(0, imagesNext.get(i));
        }
      }

      nextMaxId = getPagination(nextMediaFeed);

      // Logger.info("imagesNext: "+imagesNext.size());
      Logger.info("imagesAll: " + imagesAll.size());
    } // while

    // print all images and add them to the db
    Logger.info("imagesAll: " + imagesAll.size());
    if (imagesAll != null) {
      int counter = 1;
      for (MediaFeedData image : imagesAll) {
        if (image != null) {
          Date d = new Date(Long.parseLong(image.getCreatedTime()) * 1000);
          Caption caption = image.getCaption();
          Logger.info(
              "   " + (counter++) + "." + " id:" + image.getId() + " time: " + d.toString() + " ");

          if (caption != null) {
            Logger.info("       from, full name: " + caption.getFrom().getFullName());
            // add image to db
            MImages.addNew(
                new MImages(
                    image.getId(),
                    image.getImages().getLowResolution().getImageUrl(),
                    "instagram",
                    caption.getFrom().getFullName(),
                    caption.getFrom().getProfilePicture(),
                    image.getCreatedTime(),
                    (long) image.getLikes().getCount(),
                    (long) 0));
          } // if
        } // if
      } // for
    } // if
  } // addImagesToDB
  public static void tagWatchDog(Instagram instagram) {
    Logger.info("  --tag watchdog");

    Long nImages = checkNumberOfNewImages(instagram, appDisplayNameTag);

    if (nImages > 0) { // there are new images to take care of
      Logger.info("    number of new images: " + nImages);

      // get the first page of media feeds (images)
      TagMediaFeed mediaFeed = getMediaFeed(instagram);
      List<MediaFeedData> images = mediaFeed.getData();

      // TODO: support adding new images from other pages
      // limit number of new images to the first page
      if (nImages > images.size()) { // number of new images excides the first page
        nImages = (long) images.size();
        Logger.info("    number of limited images: " + nImages);
      }

      // TODO check if the image is already in db, double images problem!!!
      // for each new image from the first page
      for (int i = (int) (nImages - 1); i >= 0; i--) {
        // add new images to db
        MediaFeedData image = images.get(i);
        Caption caption = image.getCaption();
        MImages newDbImage =
            new MImages(
                image.getId(),
                image.getImages().getLowResolution().getImageUrl(),
                "instagram",
                caption.getFrom().getFullName(),
                caption.getFrom().getProfilePicture(),
                image.getCreatedTime(),
                (long) image.getLikes().getCount(),
                (long) 0);
        MImages.addNew(newDbImage);
        Logger.info(
            "    add image to db: index: "
                + i
                + " id: "
                + image.getId()
                + " from: "
                + caption.getFrom().getFullName());

        // send the new image to clients
        sendImageToClients(newDbImage);
      }

      // update the tag count
      TagInfo.delete((long) 1);
      Logger.info("		update the tag +");
      TagInfo.addNew(
          new TagInfo(appDisplayNameTag, getNumberOfImagesByTag(instagram, appDisplayNameTag)));
      displayTagInfo();

    } else if (nImages < 0) {
      // TODO
      // some images have been deleted
      // for now keep them in the db, later consider deleting them

      // update the tag
      TagInfo.delete((long) 1);
      Logger.info("		update the tag -");
      TagInfo.addNew(
          new TagInfo(appDisplayNameTag, getNumberOfImagesByTag(instagram, appDisplayNameTag)));
      displayTagInfo();
    }

    Logger.info("  --tag watchdog---");
  } // tagWatchDog()