コード例 #1
0
  synchronized Element cacheVCard(String username) {
    Element vCardElement = null;
    User user = UnfortunateLackOfSpringSupportFactory.getValidUsers().getUserByJid(username);
    if (user != null) {
      Element avatarFromDB = getAvatarCopy(defaultProvider.loadVCard(username));
      vCardElement = RestInterface.buildVCardFromXMLContactInfo(user, avatarFromDB);
      if (vCardElement != null) {
        vcardCache.remove(username);
        vcardCache.put(username, vCardElement);
      } else {
        logger.error("In cacheVCard buildVCardFromXMLContactInfo failed! ");
      }
    } else {
      logger.error("In cacheVCard Failed to find peer SIP user account for XMPP user " + username);
    }

    return vCardElement;
  }
コード例 #2
0
  /** Updates the vCard both in SipX and in the database. */
  @Override
  public Element updateVCard(String username, Element vCardElement) {
    if (username.compareToIgnoreCase(PA_USER) == 0) {
      try {
        return defaultProvider.updateVCard(username, vCardElement);
      } catch (NotFoundException e) {
        e.printStackTrace();
        logger.error("update " + PA_USER + "'s vcard failed!");
        return null;
      }
    }

    try {
      defaultProvider.updateVCard(username, vCardElement);
    } catch (NotFoundException e) {
      try {
        defaultProvider.createVCard(username, vCardElement);
      } catch (AlreadyExistsException e1) {
        logger.error("Failed to create vcard due to existing vcard found");
        e1.printStackTrace();
      }
      e.printStackTrace();
    }

    try {
      String sipUserName = getAORFromJABBERID(username);
      if (sipUserName != null) {

        int attempts = 0;
        boolean tryAgain;
        do {
          tryAgain = false;
          try {
            RestInterface.sendRequest(MODIFY_METHOD, vCardElement);
          } catch (ConnectException e) {
            try {
              Thread.sleep(ATTEMPT_INTERVAL);
            } catch (Exception e1) {
              e1.printStackTrace();
            }
            attempts++;
            tryAgain = true;
          }
        } while (attempts < MAX_ATTEMPTS && tryAgain);

        if (attempts >= MAX_ATTEMPTS)
          logger.error(
              "Failed to update contact info for user " + username + ", sipXconfig might be down");

        Element vcardAfterUpdate = cacheVCard(username);

        // If client doesn't set local avatar, use the avatar from sipx/gravatar.
        if (getAvatar(vCardElement) == null) {
          VCardManager.getInstance().reset();
          Util.updateAvatar(username, vcardAfterUpdate);
        }

        return vcardAfterUpdate;

      } else {
        logger.error("Failed to find a valid SIP account for user " + username);
        return vCardElement;
      }
    } catch (Exception ex) {
      logger.error("updateVCard failed! " + ex.getMessage());
      return vCardElement;
    }
  }