`
dajieangel
  • 浏览: 4150 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
社区版块
存档分类
最新评论

用心写的

 
阅读更多
package com.huawei.rcs.cab.cabserver.transport.rest.provider;

import java.io.IOException;
import java.io.InputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.text.ParseException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.ws.rs.Consumes;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.MessageBodyReader;
import javax.ws.rs.ext.Provider;
import javax.xml.bind.annotation.XmlRootElement;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;

import org.apache.cxf.jaxrs.ext.MessageContext;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

import com.huawei.rcs.cab.cabserver.facade.util.PinyinUtil;
import com.huawei.rcs.cab.cabserver.facade.validate.util.GzipUtility;
import com.huawei.rcs.cab.cabserver.module.contact.constants.Constant;
import com.huawei.rcs.cab.cabserver.module.contact.vo.ContactExVO;
import com.huawei.rcs.cab.cabserver.module.contact.vo.ContactNameVO;
import com.huawei.rcs.cab.cabserver.module.contact.vo.ContactVO;
import com.huawei.rcs.cab.cabserver.module.contact.vo.ContactWithListIDObj;
import com.huawei.rcs.cab.cabserver.module.contact.vo.dto.ContactDTO;
import com.huawei.rcs.cab.cabserver.module.contact.vo.dto.ContactJacksonDTO;
import com.huawei.rcs.cab.cabserver.transport.rest.util.json.CustomTransform;
import com.huawei.rcs.cab.pub.constants.Constants;
import com.huawei.rcs.cab.pub.manager.ContextManager;
import com.huawei.rcs.cab.pub.util.DateUtil;
import com.huawei.rcs.cab.pub.util.HttpUtil;
import com.huawei.rcs.cab.pub.util.IOUtil;
import com.huawei.rcs.cab.pub.util.LogUtil;
import com.huawei.rcs.comm.log.bme.DebugLog;
import com.huawei.rcs.comm.log.bme.LogFactory;

/**
* 鎻愪緵contactDTO瀵硅薄鍜孲tring涔嬮棿浜掕浆
*
* @author pengjinhui
* @version RCS CAB V100R002 2010-7-19
* @since RCS CAB V100R002C01L00201
*/
@Produces("application/json")
@Consumes("application/json")
@Provider
public final class ContactDTOProvider implements MessageBodyReader<ContactDTO>
{
    /**
     * 璋冩祴鏃ュ織璁板綍鍣ㄣ€?
     */
    private static final DebugLog DEBUGGER = LogFactory
            .getDebugLog(ContactDTOProvider.class);

    private static JsonGenerator jsonGenerator = null;

    private static final ObjectMapper MAPPER = new ObjectMapper();

    @Context
    private MessageContext messageContext;

    /**
     * 鏄惁鍙
     *
     * @param type
     *            contact瀵硅薄绫诲瀷
     * @param genericType
     *            genericType
     * @param annotations
     *            annotations
     * @param m
     *            璇锋眰娑堟伅鏍煎紡
     * @return boolean 鏄惁鍙
     */
    public boolean isReadable(Class<?> type, Type genericType,
            Annotation[] annotations, MediaType m)
    {
        return type.getAnnotation(XmlRootElement.class) != null;
    }

    /**
     * 鑾峰彇娑堟伅闀垮害
     *
     * @param contactDTO
     *            contactDTO
     * @param type
     *            contact瀵硅薄绫诲瀷
     * @param genericType
     *            genericType
     * @param annotations
     *            annotations
     * @param m
     *            璇锋眰娑堟伅鏍煎紡
     * @return long 娑堟伅闀垮害
     */
    public long getSize(ContactDTO contactDTO, Class<?> type, Type genericType,
            Annotation[] annotations, MediaType m)
    {
        return -1;
    }

    /**
     * 璇锋眰娑堟伅杞寲鎴怌ontact瀵硅薄
     *
     * @param type
     *            contact瀵硅薄绫诲瀷
     * @param genericType
     *            genericType
     * @param annotations
     *            annotations
     * @param m
     *            璇锋眰娑堟伅鏍煎紡
     * @param headers
     *            璇锋眰娑堟伅澶翠俊鎭?
     * @param is
     *            杈撳叆娴?
     * @return ContactDTO contactDTO
     */
    public ContactDTO readFrom(Class<ContactDTO> type, Type genericType,
            Annotation[] annotations, MediaType m,
            MultivaluedMap<String, String> headers, InputStream is)
    {
        // 鑾峰彇鎺ュ叆鏂瑰紡
        int accessType = ContextManager.getContext().getAccessType();

        ContactDTO contactDTO = new ContactDTO();

        Map<String, String> headersMap = HttpUtil
                .getRequestHeaders(messageContext.getHttpServletRequest());
        String isGzip = headersMap.get(Constants.CONTENT_ENCODING);
        // 浠嶤ontactDTO涓緱鍒癈ontactWithListIDObj鐨勯泦鍚?
        List<ContactWithListIDObj> contactList = contactDTO.getContactVoList();
        String json = "";

        if (null != isGzip && Constant.FORMAT_GZIP.equals(isGzip))
        {
            // 鏄痝zip鐨勫帇缂╁寘鏉ヨВ鍘?
            json = new String(GzipUtility.unzip(is));
            contactDTO.setGzip(isGzip);
        }
        else
        {
            // 闈瀏zip鐨勫帇缂╂姤锛岄€氳繃io娴佽鍙栵紝骞惰浆鍖栨垚瀛楃涓?
            json = IOUtil.ioToString(is);
        }

        if (DEBUGGER.isInfoEnable())
        {
            LogUtil.info(DEBUGGER, LogUtil.LogType.USER, "addContactJson = "
                    + json);
        }

        // 濡傛灉鎺ュ叆鏂瑰紡涓?锛屽嵆DSServer鍒欓噰鐢╦ackson杞寲
        ContactJacksonDTO contactJacksonDTO = new ContactJacksonDTO();
        if (accessType == 3)
        {
            try
            {
                // 杞崲褰撳墠鏃堕棿涓篣TC鏃堕棿
                String localTime = DateUtil.localTime2UTC(
                        System.currentTimeMillis(), Constant.UTCPATTERN,
                        Constant.UTCPATTERN).toString();
                // jackson杞崲
                contactJacksonDTO = MAPPER.readValue(json,
                        ContactJacksonDTO.class);

                List<ContactWithListIDObj> contactWithListIDObjs = contactJacksonDTO
                        .getContactWithListIDs();
                ContactNameVO contactName = new ContactNameVO();

                if (null != contactWithListIDObjs
                        && !contactWithListIDObjs.isEmpty())
                {
                    for (ContactWithListIDObj contactWithListIDObj : contactWithListIDObjs)
                    {
                        // 灏嗚仈绯讳汉鍚嶅瓧涓惈鏈変腑鏂囧瓧绗︾殑杞崲涓烘嫾闊?
                        contactName = PinyinUtil
                                .chineseToSpell(contactWithListIDObj
                                        .getContactInfo().getName());
                        contactWithListIDObj.getContactInfo().setName(
                                contactName);
                        contactWithListIDObj
                                .getContactInfo()
                                .setDisplayNameSpell(
                                        PinyinUtil
                                                .chineseToSpell(contactWithListIDObj
                                                        .getContactInfo()
                                                        .getDisplayName()));
                        contactWithListIDObj.getContactInfo()
                                .setLastUpdateTime(localTime);
                    }
                    contactDTO.setContactVoList(contactWithListIDObjs);
                }

            }
            catch (JsonParseException e)
            {
                if (DEBUGGER.isErrorEnable())
                {
                    LogUtil.error(DEBUGGER, "parse json to object fail", e);
                }
                contactDTO.setFlag(true);// 璁剧疆json杞崲澶辫触鐨勬爣蹇?
            }
            catch (JsonMappingException e)
            {
                if (DEBUGGER.isErrorEnable())
                {
                    LogUtil.error(DEBUGGER, "parse json to object fail", e);
                }
                contactDTO.setFlag(true);// 璁剧疆json杞崲澶辫触鐨勬爣蹇?
            }
            catch (IOException e)
            {
                if (DEBUGGER.isErrorEnable())
                {
                    LogUtil.error(DEBUGGER, "parse json to object fail", e);
                }
                contactDTO.setFlag(true);// 璁剧疆json杞崲澶辫触鐨勬爣蹇?
            }
            catch (ParseException e)
            {
                if (DEBUGGER.isErrorEnable())
                {
                    LogUtil.error(DEBUGGER, "parse json to object fail", e);
                }
                contactDTO.setFlag(true);// 璁剧疆json杞崲澶辫触鐨勬爣蹇?
            }
            contactDTO.setHeadersMap(headersMap);
            return contactDTO;
        }

        try
        {
            JsonConfig jsonConfig = new JsonConfig();

            // jsonConfig.getJavaIdentifierTransformer();

            jsonConfig.setJavaIdentifierTransformer(new CustomTransform());
            // 灏唈son杞崲鎴恓son瀵硅薄
            JSONObject object = JSONObject.fromObject(json, jsonConfig);
            // 璁剧疆json瀵硅薄鐨勬牴绫?
            jsonConfig.setRootClass(ContactVO.class);

            Map<String, Class<?>> classMap = new HashMap<String, Class<?>>();
            // 鎸囧畾绫诲瀷鏄泦鍚堢殑灞炴€? 鏄犲皠鍒扮殑绫?
            classMap.put(Constant.ADUCONTACTINTERFACE.INTERFACE_PROPERTIES,
                    ContactExVO.class);
            classMap
                    .put(
                            Constant.ADUCONTACTINTERFACE.INTERFACE_ALTERNATECHATACCOUNTS,
                            ContactExVO.class);
            classMap
                    .put(
                            Constant.ADUCONTACTINTERFACE.INTERFACE_ALTERNATESOCIALACCOUNT,
                            ContactExVO.class);
            classMap.put(Constant.ADUCONTACTINTERFACE.INTERFACE_OTHERACCOUNT,
                    ContactExVO.class);
            jsonConfig.setClassMap(classMap);

            // 浠巎son瀵硅薄涓彇contactWithListIDs,寰楀埌涓€涓猨son鏁扮粍;
            JSONArray jsonArray = object
                    .getJSONArray(Constant.ADUCONTACTINTERFACE.INTERFACE_CONTACTWITHLISTIDS);

            // 寰楀埌褰撳墠绯荤粺鏃堕棿鐨勫瓧绗︿覆
            // modify by jinjungang 20110113 for 淇敼闂鍗旸TS2010121002382锛屼娇鐢║TC鏃堕棿
            // begin
            // String localTime = ContactUtil.getLocalTime();
            String localTime = DateUtil.localTime2UTC(
                    System.currentTimeMillis(), Constant.UTCPATTERN,
                    Constant.UTCPATTERN).toString();
            // modify by jinjungang 20110113 for 淇敼闂鍗旸TS2010121002382锛屼娇鐢║TC鏃堕棿
            // end
            ContactWithListIDObj contactWithListIDObj;
            String[] ids;
            JSONObject obj;
            ContactVO pro;
            JSONArray contactListIDs;
            int temp = 0;
            ContactNameVO contactNameVO;
            String displayname;
            for (int i = 0; i < jsonArray.size(); i++)
            {
                contactWithListIDObj = new ContactWithListIDObj();
                obj = jsonArray.getJSONObject(i);
                JSONObject contactJSONObject = (JSONObject) obj
                        .get(Constant.ADUCONTACTINTERFACE.INTERFACE_CONTACTINFO); // 浠巎son瀵硅薄涓彇鍑篶ontactInfo

                if (null == contactJSONObject)
                {
                    contactJSONObject = (JSONObject) obj
                            .get(Constant.ADUCONTACTINTERFACE.CONTACTINFO);
                }

                ValidateIntegerProperty.validateIntProperty(contactJSONObject,
                        Constant.ADUCONTACTINTERFACE.INTERFACE_GENDER);
                ValidateIntegerProperty.validateIntProperty(contactJSONObject,
                        Constant.ADUCONTACTINTERFACE.INTERFACE_MARRIAGESTATUS);
                // 鍒ゆ柇json瀵硅薄涓槸鍚︽湁鍒嗙粍ID鐨勯泦鍚?
                if (null != obj
                        .get(Constant.ADUCONTACTINTERFACE.INTERFACE_CONTACTLISTIDS))
                {
                    contactListIDs = (JSONArray) obj
                            .getJSONArray(Constant.ADUCONTACTINTERFACE.INTERFACE_CONTACTLISTIDS);// 浠巎son瀵硅薄涓彇鍑哄垎缁処D鐨勯泦鍚?
                    ids = new String[contactListIDs.size()];
                    Iterator iter = contactListIDs.iterator();// 閬嶅巻鍒嗙粍ID鐨勯泦鍚?
                    temp = 0;// 璁℃暟鍣?
                    while (iter.hasNext())
                    {
                        Object obj1 = iter.next();
                        ids[temp] = obj1.toString();// 灏嗘瘡涓垎缁刬d鏀惧叆鍒版暟缁勪腑
                        temp++;
                    }
                    contactWithListIDObj.setContactListIDs(ids);// 璁剧疆鍒嗙粍ID鐨勯泦鍚堝埌ContactWithListIDObj涓?
                }
                pro = (ContactVO) JSONObject.toBean(contactJSONObject,
                        jsonConfig);// 灏唈son瀵硅薄杞崲鎴恈ontactVO
                pro.setLastUpdateTime(localTime);// 璁剧疆褰撳墠鏃堕棿
                pro.setContactID((String) obj
                        .get(Constant.ADUCONTACTINTERFACE.INTERFACE_CONTACTID));// 鑾峰緱contactID,鐒跺悗璁剧疆鍒癱ontactVO涓?
                /** add by caolang 2011-07-05 start **/
                // 灏嗚仈绯讳汉鍚嶅瓧涓惈鏈変腑鏂囧瓧绗︾殑杞崲涓烘嫾闊?
                contactNameVO = pro.getName();
                contactNameVO = PinyinUtil.chineseToSpell(contactNameVO);
                pro.setName(contactNameVO);
                displayname = pro.getDisplayName();
                pro.setDisplayNameSpell(PinyinUtil.chineseToSpell(displayname));
                /** add by caolang 2011-07-05 start **/
                contactWithListIDObj.setContactInfo(pro);// 璁剧疆contactVO鍒癈ontactWithListIDObj涓?
                contactList.add(contactWithListIDObj);// 灏咰ontactWithListIDObj鏀惧叆鍒癓ist闆嗗悎涓?
            }
        }
        catch (Exception e)
        {
            // if (DEBUGGER.isErrorEnable())
            // {
            // DEBUGGER.error(Constants.VALIDATELOG_FLAG
            // + "parse json to object fail" + e.toString());
            // }
            if (DEBUGGER.isErrorEnable())
            {
                LogUtil.error(DEBUGGER, "parse json to object fail", e);
            }
            contactDTO.setFlag(true);// 璁剧疆json杞崲澶辫触鐨勬爣蹇?
        }

        contactDTO.setHeadersMap(headersMap);
        contactDTO.setContactVoList(contactList);// 璁剧疆contactList鍒癱ontactDTO涓?
        return contactDTO;
    }

    /**
     * 鑾峰彇娑堟伅闀垮害
     *
     * @param cotnactVO
     *            cotnactVO
     * @param type
     *            contact瀵硅薄绫诲瀷
     * @param genericType
     *            genericType
     * @param annotations
     *            annotations
     * @param m
     *            璇锋眰娑堟伅鏍煎紡
     * @return long 娑堟伅闀垮害
     */
    public long getSize(ContactVO cotnactVO, Class<?> type, Type genericType,
            Annotation[] annotations, MediaType m)
    {

        return -1;
    }

}
分享到:
评论

相关推荐

    Android-用心打造一款极致体验的TODO开源Android客户端

    在项目中,开发者强调"不放过每一个细节,用心写代码",这暗示了他们对代码质量和应用性能的高要求。良好的代码结构、合理的模块划分、充分的注释以及遵循最佳实践,都是保证代码可读性、可维护性和可扩展性的关键...

    如何写英文情书.doc

    一封用心写成的情书是表达深情厚意的最佳方式,它能让收信人感受到你的真诚与心意。以下是一些撰写英文情书的技巧和建议,帮助你更好地表达爱意。 1. 个性化表达:爱是独一无二的,因此,情书也应该如此。在信中,...

    我是用心在写

    我是用心在写

    070.用心打磨的100个写材料过渡句

    070.用心打磨的100个写材料过渡句

    【心得体会】寒假读书心得体会怎么写【20篇】.doc

    【心得体验】寒假读书是个人成长的重要组成部分,它不仅能拓宽我们的知识视野,还能提升我们的思考能力和情感理解。...因此,每个学生都应该珍惜寒假时光,用心读书,用心感受,用心写下自己的心得体会。

    如何写三年级作文批改评语.doc

    - 对于字迹潦草的学生,应以建设性的方式提出改进意见,如“试着慢下来,用心写每一个字,你的字会更漂亮的”。 2. 容方面: - 对于内容丰富、生动的作文,可以赞扬其想象力和表达力,如“你的作文充满想象力,...

    写给老师的新学期寄语.doc

    您用心写下的话语,如同清澈的小河,流淌在孩子们的心间,激起层层爱的涟漪。您不仅是传授知识的导师,更是引导他们成长的引路人。您的勤奋和敬业,如同一头默默耕耘的牛,无私地付出,以无比的真诚和智慧感染着每一...

    构建命令行的Python库PythonPromptToolkit.zip

    可选文本复制/粘贴 (Both Emacs and Vi style.)多输入缓冲没有全局的状态轻量级,唯一的依赖是 Pygments,six 和 wcwidth用心写的代码可在 Linux, OS X, OpenBSD 和 Windows 运行 标签:Python

    中考语文课外文言文练习题及答案5精选.doc

    ”译为“太宗写的字本来写得很好了,但如果马上说写得好,恐怕皇帝不再用心写了。” 4. 人物分析:通过王著对太宗书法的评价,可以看出他是一个严谨的教育者,注重鼓励学生持续进步,而不是轻易表扬。 5. 文言文特殊...

    基于JSP的个人博客系统的设计与实现 开题报告

    * 包装自己:看到一篇篇用心写出的文章,自然是对自己知识技能的最好宣传。 4. 系统设计和实现 为了设计和实现一个基于JSP的个人博客系统,我们将使用以下技术和工具: * JSP(JavaServer Pages):用于创建动态...

    我那心爱的日记本作文.doc

    最后,作者表达了自己对日记本的珍视,决定要用心写好每一篇日记,并期望得到老师的认可。这种情感的流露体现了作者的自律性和对自我提升的渴望,也反映出日记作为一种记录工具对个人成长的重要性。 总结知识点: 1...

    教官带同学军训心得___五篇.docx

    军训结束后,学生们的感恩之心体现在他们用心写的军训心得中,这成为教官珍贵的回忆。教官与学生的互动不仅限于军训期间,他们可以继续参与学生活动,关心学生的发展,成为学生在大学生活中的一股积极力量。 总结来...

    二年级评语后进生4篇.docx

    - 例子:“假如在课堂上能再用心写,你会更加了不起的。” - “假如能克服缺点发扬优点,那么你一定会让老师刮目相看。” 3. **持续进步**:鼓励学生不断进步,设定更高的目标。 - 例子:“连续努力吧,老师期望...

    小学语文妇女节作文给妈妈的一件礼物

    文章部分内容描述了一个小学生为妈妈准备礼物的过程,首先是用心写了一封信,表达了对妈妈的敬爱之情。这个过程体现了小学语文教学中重视书写规范、表达清晰以及情感传达的部分。接着,孩子通过实际行动,如为妈妈...

    初中语文文学讨论美文荐读五月的阳光依然灿烂无比!

    再者,"我们用心写就的那些日记和诗歌充满了灵性和真情,却不能化成碟",这暗示了创作与表达的挑战,即便在数字化时代,如何将个人情感以真实且有影响力的方式呈现出来仍然是个艺术和技术的结合问题。在IT中,这可能...

    2020年有关大学军训心得体会范文.doc

    军训结束后,看着学生们用心写下的心得,字里行间充满了对教官的感激和对军训的独特感悟。那些真挚的话语,那些流露出的对未来的期待,都让我深感欣慰。军训虽短,但留下的回忆和影响却是长久的。 总的来说,大学...

    初中军训教官总结.doc

    军训结束后,学生们用心写的军训心得,不仅是对这段经历的记录,也是对教官辛勤付出的感恩。这些心得体会反映了学生们的成长,他们对教官的尊重和感激,也体现了军训在他们心中留下的深刻印记。 总的来说,初中军训...

    教官军训心得体会.docx

    军训结束后,看着他们用心写出的心得体会,我深感欣慰。那些质朴的文字,流露出他们对教官的尊重和感激,让我明白了付出的价值。尽管军训结束,但与他们的联系并未中断,我依然可以参与他们的校园生活,继续关心、...

    简简单单用OpenOffice写书 use_OO_for_writing

    很少见、用心写的 OpenOffice 学习资源。*.odt 格式请用 LiberOffice/OpenOffice 打开

    市场需求文档(MRD)写作方法与技巧(上)

    因此,用心写好MRD是必须的,它应该是一份有说服力和征服力的文档。 一个完整的互联网产品MRD文档通常包含以下几个部分:文档说明、市场说明、用户说明和产品说明。文档说明部分包含了文档的基本信息,例如公司名称...

Global site tag (gtag.js) - Google Analytics