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; }
/** 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; } }