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

📄 vcard.java

📁 JBother是纯Java开发的Jabber(即时消息开源软件)客户端。支持群组聊天
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            }        }        return buffer;    }    /**     * Save this vCard for the user connected by 'connection'. Connection should be authenticated     * and not anonymous.<p>     * <p/>     * NOTE: the method is asynchronous and does not wait for the returned value.     */    public void save(XMPPConnection connection) {        checkAuthenticated(connection);        setType(IQ.Type.SET);        setFrom(connection.getUser());        connection.sendPacket(this);    }    /**     * Load VCard information for a connected user. Connection should be authenticated     * and not anonymous.     */    public void load(XMPPConnection connection) throws XMPPException {        checkAuthenticated(connection);        setFrom(connection.getUser());        doLoad(connection, connection.getUser());    }    /**     * Load VCard information for a given user. Connection should be authenticated and not anonymous.     */    public void load(XMPPConnection connection, String user) throws XMPPException {        checkAuthenticated(connection);        setTo(user);        doLoad(connection, user);    }    private void doLoad(XMPPConnection connection, String user) throws XMPPException {        setType(Type.GET);        PacketCollector collector = connection.createPacketCollector(                new PacketIDFilter(getPacketID()));        connection.sendPacket(this);        VCard result = null;        try {            result = (VCard) collector.nextResult(SmackConfiguration.getPacketReplyTimeout());            if (result == null) {                throw new XMPPException(new XMPPError(408, "Timeout getting VCard information"));            }            if (result.getError() != null) {                throw new XMPPException(result.getError());            }        }        catch (ClassCastException e) {            System.out.println("No VCard for " + user);        }        copyFieldsFrom(result);    }    public String getChildElementXML() {        StringBuffer sb = new StringBuffer();        new VCardWriter(sb).write();        return sb.toString();    }    private void copyFieldsFrom(VCard result) {        if (result == null) result = new VCard();        Field[] fields = VCard.class.getDeclaredFields();        for (int i = 0; i < fields.length; i++) {            Field field = fields[i];            if (field.getDeclaringClass() == VCard.class &&                    !Modifier.isFinal(field.getModifiers())) {                try {                    field.setAccessible(true);                    field.set(this, field.get(result));                }                catch (IllegalAccessException e) {                    throw new RuntimeException("This cannot happen:" + field, e);                }            }        }    }    private void checkAuthenticated(XMPPConnection connection) {        if (connection == null) {            new IllegalArgumentException("No connection was provided");        }        if (!connection.isAuthenticated()) {            new IllegalArgumentException("Connection is not authenticated");        }        if (connection.isAnonymous()) {            new IllegalArgumentException("Connection cannot be anonymous");        }    }    private boolean hasContent() {        //noinspection OverlyComplexBooleanExpression        return hasNameField()                || hasOrganizationFields()                || emailHome != null                || emailWork != null                || otherSimpleFields.size() > 0                || homeAddr.size() > 0                || homePhones.size() > 0                || workAddr.size() > 0                || workPhones.size() > 0                ;    }    private boolean hasNameField() {        return firstName != null || lastName != null || middleName != null;    }    private boolean hasOrganizationFields() {        return organization != null || organizationUnit != null;    }    // Used in tests:    public boolean equals(Object o) {        if (this == o) return true;        if (o == null || getClass() != o.getClass()) return false;        final VCard vCard = (VCard) o;        if (emailHome != null ? !emailHome.equals(vCard.emailHome) : vCard.emailHome != null) {            return false;        }        if (emailWork != null ? !emailWork.equals(vCard.emailWork) : vCard.emailWork != null) {            return false;        }        if (firstName != null ? !firstName.equals(vCard.firstName) : vCard.firstName != null) {            return false;        }        if (!homeAddr.equals(vCard.homeAddr)) {            return false;        }        if (!homePhones.equals(vCard.homePhones)) {            return false;        }        if (lastName != null ? !lastName.equals(vCard.lastName) : vCard.lastName != null) {            return false;        }        if (middleName != null ? !middleName.equals(vCard.middleName) : vCard.middleName != null) {            return false;        }        if (organization != null ?                !organization.equals(vCard.organization) : vCard.organization != null) {            return false;        }        if (organizationUnit != null ?                !organizationUnit.equals(vCard.organizationUnit) : vCard.organizationUnit != null) {            return false;        }        if (!otherSimpleFields.equals(vCard.otherSimpleFields)) {            return false;        }        if (!workAddr.equals(vCard.workAddr)) {            return false;        }        if (!workPhones.equals(vCard.workPhones)) {            return false;        }        return true;    }    public int hashCode() {        int result;        result = homePhones.hashCode();        result = 29 * result + workPhones.hashCode();        result = 29 * result + homeAddr.hashCode();        result = 29 * result + workAddr.hashCode();        result = 29 * result + (firstName != null ? firstName.hashCode() : 0);        result = 29 * result + (lastName != null ? lastName.hashCode() : 0);        result = 29 * result + (middleName != null ? middleName.hashCode() : 0);        result = 29 * result + (emailHome != null ? emailHome.hashCode() : 0);        result = 29 * result + (emailWork != null ? emailWork.hashCode() : 0);        result = 29 * result + (organization != null ? organization.hashCode() : 0);        result = 29 * result + (organizationUnit != null ? organizationUnit.hashCode() : 0);        result = 29 * result + otherSimpleFields.hashCode();        return result;    }    public String toString() {        return getChildElementXML();    }    //==============================================================    private class VCardWriter {        private final StringBuffer sb;        VCardWriter(StringBuffer sb) {            this.sb = sb;        }        public void write() {            appendTag("vCard", "xmlns", "vcard-temp", hasContent(), new ContentBuilder() {                public void addTagContent() {                    buildActualContent();                }            });        }        private void buildActualContent() {            if (hasNameField()) {                appendFN();                appendN();            }            appendOrganization();            appendGenericFields();            appendEmail(emailWork, "WORK");            appendEmail(emailHome, "HOME");            //appendPhones(workPhones, "WORK");            appendPhones(homePhones, "HOME");            //appendAddress(workAddr, "WORK");            appendAddress(homeAddr, "HOME");        }        private void appendEmail(final String email, final String type) {            if (email != null) {                appendTag("EMAIL", true, new ContentBuilder() {                    public void addTagContent() {                        appendEmptyTag(type);                        appendEmptyTag("INTERNET");                        appendEmptyTag("PREF");                        appendTag("USERID", email);                    }                });            }        }        private void appendPhones(Map phones, final String code) {            Iterator it = phones.entrySet().iterator();            while (it.hasNext()) {                final Map.Entry entry = (Map.Entry) it.next();                appendTag("TEL", true, new ContentBuilder() {                    public void addTagContent() {                        //appendEmptyTag(entry.getKey());                        //appendEmptyTag(code);                        appendTag("NUMBER", (String) entry.getValue());                    }                });            }        }        private void appendAddress(final Map addr, final String code) {            if (addr.size() > 0) {                appendTag("ADR", true, new ContentBuilder() {                    public void addTagContent() {                        //appendEmptyTag(code);                        Iterator it = addr.entrySet().iterator();                        while (it.hasNext()) {                            final Map.Entry entry = (Map.Entry) it.next();                            appendTag((String) entry.getKey(), (String) entry.getValue());                        }                    }                });            }        }        private void appendEmptyTag(Object tag) {            sb.append('<').append(tag).append("/>");        }        private void appendGenericFields() {            Iterator it = otherSimpleFields.entrySet().iterator();            while (it.hasNext()) {                Map.Entry entry = (Map.Entry) it.next();                appendTag(entry.getKey().toString(), (String) entry.getValue());            }        }        private void appendOrganization() {            if (hasOrganizationFields()) {                appendTag("ORG", true, new ContentBuilder() {                    public void addTagContent() {                        appendTag("ORGNAME", organization);                        appendTag("ORGUNIT", organizationUnit);                    }                });            }        }        private void appendField(String tag) {            String value = (String) otherSimpleFields.get(tag);            appendTag(tag, value);        }        private void appendFN() {            final ContentBuilder contentBuilder = new ContentBuilder() {                public void addTagContent() {                    if (firstName != null) {                        sb.append(firstName + ' ');                    }                    if (middleName != null) {                        sb.append(middleName + ' ');                    }                    if (lastName != null) {                        sb.append(lastName);                    }                }            };            appendTag("FN", true, contentBuilder);        }        private void appendN() {            appendTag("N", true, new ContentBuilder() {                public void addTagContent() {                    appendTag("FAMILY", lastName);                    appendTag("GIVEN", firstName);                    appendTag("MIDDLE", middleName);                }            });        }        private void appendTag(String tag, String attr, String attrValue, boolean hasContent,                ContentBuilder builder) {            sb.append('<').append(tag);            if (attr != null) {                sb.append(' ').append(attr).append('=').append('\'').append(attrValue).append('\'');            }            if (hasContent) {                sb.append('>');                builder.addTagContent();                sb.append("</").append(tag).append(">\n");            }            else {                sb.append("/>\n");            }        }        private void appendTag(String tag, boolean hasContent, ContentBuilder builder) {            appendTag(tag, null, null, hasContent, builder);        }        private void appendTag(String tag, final String tagText) {            if (tagText == null) return;            final ContentBuilder contentBuilder = new ContentBuilder() {                public void addTagContent() {                    sb.append(tagText.trim());                }            };            appendTag(tag, true, contentBuilder);        }    }    //==============================================================    private interface ContentBuilder {        void addTagContent();    }    //==============================================================}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -