📄 clearspacevcardtranslator.java
字号:
if (tel.element("WORK") != null) { if (tel.element("VOICE") != null) { vCardValues.put(VCardField.PHONE_WORK, number); } else if (tel.element("FAX") != null) { vCardValues.put(VCardField.FAX_WORK, number); } else if (tel.element("CELL") != null) { vCardValues.put(VCardField.MOBILE_WORK, number); } else if (tel.element("PAGER") != null) { vCardValues.put(VCardField.PAGER_WORK, number); } } else if (tel.element("HOME") != null && tel.element("VOICE") != null) { vCardValues.put(VCardField.PHONE_HOME, number); } } } return vCardValues; } /** * Translates the information from Clearspace into a VCard. * * @param profile the profile * @param user the user * @param avatar the avatar * @return the vCard with the information */ protected Element translateClearspaceInfo(Element profile, User user, Element avatar) { Document vCardDoc = DocumentHelper.createDocument(); Element vCard = vCardDoc.addElement("vCard", "vcard-temp"); translateUserInformation(user, vCard); translateProfileInformation(profile, vCard); translateAvatarInformation(avatar, vCard); return vCard; } /** * Translates the profile information to the vCard * * @param profiles the profile information * @param vCard the vCard to add the information to */ private void translateProfileInformation(Element profiles, Element vCard) { // Translate the profile XML /* Profile response sample <ns1:getProfileResponse xmlns:ns1="http://jivesoftware.com/clearspace/webservices"> <return> <fieldID>2</fieldID> <value>RTC</value> </return> <return> <fieldID>9</fieldID> <value>-300</value> </return> <return> <fieldID>11</fieldID> <value>street1:San Martin,street2:1650,city:Cap Fed,state:Buenos Aires,country:Argentina,zip:1602,type:HOME</value> </return> <return> <fieldID>1</fieldID> <value>Mr.</value> </return> <return> <fieldID>3</fieldID> <value>street1:Alder 2345,city:Portland,state:Oregon,country:USA,zip:32423,type:WORK</value> </return> <return> <fieldID>10</fieldID> <values>gguardin@gmail.com|work</values> </return> <return> <fieldID>5</fieldID> <values>http://www.gguardin.com.ar</values> </return> </ns1:getProfileResponse> */ List<Element> profilesList = (List<Element>) profiles.elements("return"); for (Element profileElement : profilesList) { long fieldID = Long.valueOf(profileElement.elementText("fieldID")); ClearspaceField field = ClearspaceField.valueOf(fieldID); // If the field is not known, skip it if (field == null) { continue; } // The value name of the value field could be value or values String fieldText = profileElement.elementText("value"); if (fieldText == null) { fieldText = profileElement.elementText("values"); // if it is an empty field, continue with the next field if (fieldText == null) { continue; } } String fieldType = getFieldType(fieldText); String fieldValue = getFieldValue(fieldText); switch (field) { case TITLE: vCard.addElement("TITLE").setText(fieldValue); break; case DEPARTMENT: vCard.addElement("ORG").addElement("ORGUNIT").setText(fieldValue); break; case TIME_ZONE: vCard.addElement("TZ").setText(fieldValue); break; case ADDRESS: Element workAdr = vCard.addElement("ADR"); workAdr.addElement("WORK"); translateAddress(fieldValue, workAdr); break; case HOME_ADDRESS: Element homeAdr = vCard.addElement("ADR"); homeAdr.addElement("HOME"); translateAddress(fieldValue, homeAdr); break; case URL: vCard.addElement("URL").setText(fieldValue); break; case ALT_EMAIL: fieldValue = getFieldValue(fieldValue); Element email = vCard.addElement("EMAIL"); email.addElement("USERID").setText(fieldValue); email.addElement("INTERNET").setText(fieldValue); if ("work".equalsIgnoreCase(fieldType)) { email.addElement("WORK"); } else if ("home".equalsIgnoreCase(fieldType)) { email.addElement("HOME"); } break; case PHONE: Element tel = vCard.addElement("TEL"); tel.addElement("NUMBER").setText(fieldValue); if ("home".equalsIgnoreCase(fieldType)) { tel.addElement("HOME"); tel.addElement("VOICE"); } else if ("work".equalsIgnoreCase(fieldType)) { tel.addElement("WORK"); tel.addElement("VOICE"); } else if ("fax".equalsIgnoreCase(fieldType)) { tel.addElement("WORK"); tel.addElement("FAX"); } else if ("mobile".equalsIgnoreCase(fieldType)) { tel.addElement("WORK"); tel.addElement("CELL"); } else if ("pager".equalsIgnoreCase(fieldType)) { tel.addElement("WORK"); tel.addElement("PAGER"); } else if ("other".equalsIgnoreCase(fieldType)) { // don't send } break; } } } /** * Translates the user information to the vCard * * @param user the user information * @param vCard the vCard to add the information to */ private void translateUserInformation(User user, Element vCard) { // Only set the name to the VCard if it is visible if (user.isNameVisible()) { vCard.addElement("FN").setText(user.getName()); vCard.addElement("N").addElement("FAMILY").setText(user.getName()); } // Only set the eamail to the VCard if it is visible if (user.isEmailVisible()) { Element email = vCard.addElement("EMAIL"); email.addElement("PREF"); email.addElement("USERID").setText(user.getEmail()); } String jid = XMPPServer.getInstance().createJID(user.getUsername(), null).toBareJID(); vCard.addElement("JABBERID").setText(jid); } /** * Translates the avatar information to the vCard. * * @param avatarResponse the avatar information * @param vCard the vCard to add the information to */ private void translateAvatarInformation(Element avatarResponse, Element vCard) { Element avatar = avatarResponse.element("return"); if (avatar != null) { Element attachment = avatar.element("attachment"); if (attachment != null) { String contentType = attachment.elementText("contentType"); String data = attachment.elementText("data"); // Add the avatar to the vCard Element photo = vCard.addElement("PHOTO"); photo.addElement("TYPE").setText(contentType); photo.addElement("BINVAL").setText(data); } } } /** * Translates the address string of Clearspace to the vCard format. * * @param address the address string of Clearspae * @param addressE the address element to add the address to */ private void translateAddress(String address, Element addressE) { StringTokenizer strTokenize = new StringTokenizer(address, ","); while (strTokenize.hasMoreTokens()) { String token = strTokenize.nextToken(); int index = token.indexOf(":"); String field = token.substring(0, index); String value = token.substring(index + 1); if ("street1".equals(field)) { addressE.addElement("STREET").setText(value); } else if ("street2".equals(field)) { addressE.addElement("EXTADD").setText(value); } else if ("city".equals(field)) { addressE.addElement("LOCALITY").setText(value); } else if ("state".equals(field)) { addressE.addElement("REGION").setText(value); } else if ("country".equals(field)) { addressE.addElement("CTRY").setText(value); } else if ("zip".equals(field)) { addressE.addElement("PCODE").setText(value); } else if ("type".equals(field)) { if ("HOME".equals(value)) { addressE.addElement("HOME"); } else if ("WORK".equals(value)) { addressE.addElement("WORK"); } } } } /** * Translates the address form the vCard format to the Clearspace string. * * @param addressElement the address in the vCard format * @return the address int the Clearspace format */ private String translateAddress(Element addressElement) { StringBuilder sb = new StringBuilder(); translateAddressField(addressElement, "STREET", "street1", sb); translateAddressField(addressElement, "EXTADD", "street2", sb); translateAddressField(addressElement, "LOCALITY", "city", sb); translateAddressField(addressElement, "REGION", "state", sb); translateAddressField(addressElement, "CTRY", "country", sb); translateAddressField(addressElement, "PCODE", "zip", sb); // if there is no address return an empty string if (sb.length() == 0) { return ""; } // if there is an address add the home or work type if (addressElement.element("HOME") != null) { sb.append("type:HOME"); } else if (addressElement.element("WORK") != null) { sb.append("type:WORK"); } return sb.toString(); } /** * Translates the address field from the vCard format to the Clearspace format. * * @param addressElement the vCard address * @param vCardFieldName the vCard field name * @param fieldName the Clearspace field name * @param sb the string builder to append the field string to */ private void translateAddressField(Element addressElement, String vCardFieldName, String fieldName, StringBuilder sb) { String field = addressElement.elementTextTrim(vCardFieldName); if (field != null && !"".equals(field)) { sb.append(fieldName).append(":").append(field).append(","); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -