⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clearspacevcardtranslator.java

📁 openfire 服务器源码下载
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
                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 + -