public String setMessageLabel(String messageId, String labelName) {
    try {
      Gmail service =
          new Gmail.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
              .setApplicationName("Gmail Quickstart")
              .build();
      // For now assuming that when a label is set, we make it read also.

      List<String> labelsToRemove = new ArrayList();
      labelsToRemove.add("UNREAD");
      List<String> labelsToAdd = new ArrayList();
      if (labelName != null) {
        // this can be optimized by get all label names once they login
        ListLabelsResponse response = service.users().labels().list("me").execute();
        List<Label> labels = response.getLabels();
        boolean labelExists = false;
        for (Label label : labels) {
          // System.out.println(label.toPrettyString());
          if (label.getName().equalsIgnoreCase(labelName)) {
            labelsToAdd.add(label.getId());
            System.out.println("Adding label:" + labelName);
            labelExists = true;
            break;
          }
        }

        if (!labelExists) {
          Label label =
              new Label()
                  .setName(labelName)
                  .setLabelListVisibility("labelShow")
                  .setMessageListVisibility("show");
          label = service.users().labels().create("me", label).execute();
          labelsToAdd.add(label.getId());
        }
      }

      ModifyMessageRequest mods;
      mods =
          new ModifyMessageRequest().setRemoveLabelIds(labelsToRemove).setAddLabelIds(labelsToAdd);
      Message message = service.users().messages().modify("me", messageId, mods).execute();
      return "success";
    } catch (IOException ioe) {
      System.out.println("ioerror");
      // ioe.printStackTrace();
      return "error";
    }
  }
  public static void main(String[] args) throws IOException {
    // Build a new authorized API client service.
    Gmail service = getGmailService();

    // Print the labels in the user's account.
    String user = "******";
    ListLabelsResponse listResponse = service.users().labels().list(user).execute();
    List<Label> labels = listResponse.getLabels();
    if (labels.size() == 0) {
      System.out.println("No labels found.");
    } else {
      System.out.println("Labels:");
      for (Label label : labels) {
        System.out.printf("- %s\n", label.getName());
      }
    }
  }