private DoMetaQueryResult parseDoMetaQueryResult()

in src/main/java/com/aliyun/oss/internal/ResponseParsers.java [4119:4396]


        private DoMetaQueryResult parseDoMetaQueryResult(InputStream inputStream) throws ResponseParseException {
            DoMetaQueryResult doMetaQueryResult = new DoMetaQueryResult();
            if (inputStream == null) {
                return doMetaQueryResult;
            }

            try {
                Element root = getXmlRootElement(inputStream);

                if (root.getChildText("NextToken") != null) {
                    doMetaQueryResult.setNextToken(root.getChildText("NextToken"));
                }
                Element filesElem = root.getChild("Files");
                if(filesElem != null){
                    ObjectFiles objectFiles = new ObjectFiles();
                    List<Element> fileElem = filesElem.getChildren();
                    List<ObjectFile> fileList = new ArrayList<ObjectFile>();
                    for(Element elem : fileElem){
                        ObjectFile objectFile = new ObjectFile();
                        if (elem.getChild("URI") != null) {
                            objectFile.setUri(elem.getChildText("URI"));
                        }
                        objectFile.setFilename(elem.getChildText("Filename"));
                        if(!StringUtils.isNullOrEmpty(elem.getChildText("Size"))){
                            objectFile.setSize(Long.parseLong(elem.getChildText("Size")));
                        }
                        objectFile.setFileModifiedTime(elem.getChildText("FileModifiedTime"));
                        objectFile.setFileCreateTime(elem.getChildText("FileCreateTime"));
                        objectFile.setFileAccessTime(elem.getChildText("FileAccessTime"));
                        objectFile.setOssObjectType(elem.getChildText("OSSObjectType"));
                        objectFile.setOssStorageClass(elem.getChildText("OSSStorageClass"));
                        objectFile.setObjectACL(elem.getChildText("ObjectACL"));
                        objectFile.setETag(elem.getChildText("ETag"));
                        objectFile.setOssCRC64(elem.getChildText("OSSCRC64"));
                        if(!StringUtils.isNullOrEmpty(elem.getChildText("OSSTaggingCount"))){
                            objectFile.setOssTaggingCount(Integer.parseInt(elem.getChildText("OSSTaggingCount")));
                        }

                        Element ossTaggingElem = elem.getChild("OSSTagging");
                        if(ossTaggingElem != null){
                            OSSTagging ossTagging = new OSSTagging();
                            List<Element> taggingElem = ossTaggingElem.getChildren();
                            List<Tagging> taggingList = new ArrayList<Tagging>();
                            for(Element ele : taggingElem){
                                Tagging tagging = new Tagging();
                                tagging.setKey(ele.getChildText("Key"));
                                tagging.setValue(ele.getChildText("Value"));
                                taggingList.add(tagging);
                            }
                            ossTagging.setTagging(taggingList);
                            objectFile.setOssTagging(ossTagging);
                        }

                        Element ossUserMetaElem = elem.getChild("OSSUserMeta");
                        if(ossUserMetaElem != null){
                            OSSUserMeta ossUserMeta = new OSSUserMeta();
                            List<Element> userMetaElem = ossUserMetaElem.getChildren();
                            List<UserMeta> userMetaList = new ArrayList<UserMeta>();
                            for(Element ele : userMetaElem){
                                UserMeta userMeta = new UserMeta();
                                userMeta.setKey(ele.getChildText("Key"));
                                userMeta.setValue(ele.getChildText("Value"));
                                userMetaList.add(userMeta);
                            }
                            ossUserMeta.setUserMeta(userMetaList);
                            objectFile.setOssUserMeta(ossUserMeta);
                        }

                        if (elem.getChild("MediaType") != null) {
                            objectFile.setMediaType(elem.getChildText("MediaType"));
                        }
                        if (elem.getChild("ContentType") != null) {
                            objectFile.setContentType(elem.getChildText("ContentType"));
                        }

                        objectFile.setServerSideEncryption(elem.getChildText("ServerSideEncryption"));
                        objectFile.setServerSideEncryptionCustomerAlgorithm(elem.getChildText("ServerSideEncryptionCustomerAlgorithm"));
                        objectFile.setProduceTime(elem.getChildText("ProduceTime"));
                        objectFile.setMediaType(elem.getChildText("MediaType"));
                        objectFile.setContentType(elem.getChildText("ContentType"));
                        objectFile.setLatLong(elem.getChildText("LatLong"));
                        objectFile.setTitle(elem.getChildText("Title"));
                        objectFile.setOssExpiration(elem.getChildText("OSSExpiration"));
                        objectFile.setAccessControlAllowOrigin(elem.getChildText("AccessControlAllowOrigin"));
                        objectFile.setAccessControlRequestMethod(elem.getChildText("AccessControlRequestMethod"));
                        objectFile.setServerSideDataEncryption(elem.getChildText("ServerSideDataEncryption"));
                        objectFile.setServerSideEncryptionKeyId(elem.getChildText("ServerSideEncryptionKeyId"));
                        objectFile.setCacheControl(elem.getChildText("CacheControl"));
                        objectFile.setContentDisposition(elem.getChildText("ContentDisposition"));
                        objectFile.setContentEncoding(elem.getChildText("ContentEncoding"));
                        objectFile.setContentLanguage(elem.getChildText("ContentLanguage"));

                        if (elem.getChild("ImageHeight") != null) {
                            objectFile.setImageHeight(Long.parseLong(elem.getChildText("ImageHeight")));
                        }
                        if (elem.getChild("ImageWidth") != null) {
                            objectFile.setImageWidth(Long.parseLong(elem.getChildText("ImageWidth")));
                        }
                        if (elem.getChild("VideoHeight") != null) {
                            objectFile.setVideoHeight(Long.parseLong(elem.getChildText("VideoHeight")));
                        }
                        if (elem.getChild("VideoWidth") != null) {
                            objectFile.setVideoWidth(Long.parseLong(elem.getChildText("VideoWidth")));
                        }

                        Element videoStreamElem = elem.getChild("VideoStreams");
                        if(videoStreamElem != null){
                            List<Element> videoElem = videoStreamElem.getChildren();
                            List<MetaQueryVideoStream> metaQueryVideoStreamList = new ArrayList<MetaQueryVideoStream>();
                            for(Element ele : videoElem){
                                MetaQueryVideoStream metaQueryVideoStream = new MetaQueryVideoStream();
                                metaQueryVideoStream.setCodecName(ele.getChildText("CodecName"));
                                metaQueryVideoStream.setLanguage(ele.getChildText("Language"));
                                if (ele.getChild("Bitrate") != null) {
                                    metaQueryVideoStream.setBitrate(Long.parseLong(ele.getChildText("Bitrate")));
                                }
                                metaQueryVideoStream.setFrameRate(ele.getChildText("FrameRate"));
                                if (ele.getChild("StartTime") != null) {
                                    metaQueryVideoStream.setStartTime(Double.parseDouble(ele.getChildText("StartTime")));
                                }
                                if (ele.getChild("Duration") != null) {
                                    metaQueryVideoStream.setDuration(Double.parseDouble(ele.getChildText("Duration")));
                                }
                                if (ele.getChild("FrameCount") != null) {
                                    metaQueryVideoStream.setFrameCount(Long.parseLong(ele.getChildText("FrameCount")));
                                }
                                if (ele.getChild("BitDepth") != null) {
                                    metaQueryVideoStream.setBitDepth(Long.parseLong(ele.getChildText("BitDepth")));
                                }
                                metaQueryVideoStream.setPixelFormat(ele.getChildText("PixelFormat"));
                                metaQueryVideoStream.setColorSpace(ele.getChildText("ColorSpace"));
                                if (ele.getChild("Height") != null) {
                                    metaQueryVideoStream.setHeight(Long.parseLong(ele.getChildText("Height")));
                                }
                                if (ele.getChild("Width") != null) {
                                    metaQueryVideoStream.setWidth(Long.parseLong(ele.getChildText("Width")));
                                }

                                metaQueryVideoStreamList.add(metaQueryVideoStream);
                            }

                            objectFile.setMetaQueryVideoStreams(metaQueryVideoStreamList);
                        }

                        Element audioStreamElem = elem.getChild("AudioStreams");
                        if(audioStreamElem != null) {
                            List<Element> audioElem = audioStreamElem.getChildren();
                            List<MetaQueryAudioStream> metaQueryAudioStreamList = new ArrayList<MetaQueryAudioStream>();
                            for(Element ele : audioElem){
                                MetaQueryAudioStream metaQueryAudioStream = new MetaQueryAudioStream();
                                metaQueryAudioStream.setCodecName(ele.getChildText("CodecName"));
                                if (ele.getChild("Bitrate") != null) {
                                    metaQueryAudioStream.setBitrate(Long.parseLong(ele.getChildText("Bitrate")));
                                }
                                if (ele.getChild("SampleRate") != null) {
                                    metaQueryAudioStream.setSampleRate(Long.parseLong(ele.getChildText("SampleRate")));
                                }
                                if (ele.getChild("StartTime") != null) {
                                    metaQueryAudioStream.setStartTime(Double.parseDouble(ele.getChildText("StartTime")));
                                }

                                if (ele.getChild("Duration") != null) {
                                    metaQueryAudioStream.setDuration(Double.parseDouble(ele.getChildText("Duration")));
                                }

                                if (ele.getChild("Channels") != null) {
                                    metaQueryAudioStream.setChannels(Long.parseLong(ele.getChildText("Channels")));
                                }

                                metaQueryAudioStream.setLanguage(ele.getChildText("Language"));

                                metaQueryAudioStreamList.add(metaQueryAudioStream);
                            }
                            objectFile.setMetaQueryAudioStreams(metaQueryAudioStreamList);
                        }

                        Element subtitleElem = elem.getChild("Subtitles");
                        if (subtitleElem != null) {
                            List<Element> subtitleElemList = subtitleElem.getChildren();
                            List<MetaQuerySubtitle> metaQuerySubtitleList = new ArrayList<MetaQuerySubtitle>();
                            for (Element ele : subtitleElemList) {
                                MetaQuerySubtitle metaQuerySubtitle = new MetaQuerySubtitle();
                                metaQuerySubtitle.setCodecName(ele.getChildText("CodecName"));
                                metaQuerySubtitle.setLanguage(ele.getChildText("Language"));

                                if (ele.getChild("StartTime") != null) {
                                    metaQuerySubtitle.setStartTime(Double.parseDouble(ele.getChildText("StartTime")));
                                }

                                if (ele.getChild("Duration") != null) {
                                    metaQuerySubtitle.setDuration(Double.parseDouble(ele.getChildText("Duration")));
                                }

                                metaQuerySubtitleList.add(metaQuerySubtitle);
                            }
                            objectFile.setMetaQuerySubtitles(metaQuerySubtitleList);
                        }

                        if (elem.getChild("Bitrate") != null) {
                            objectFile.setBitrate(Long.parseLong(elem.getChildText("Bitrate")));
                        }

                        objectFile.setArtist(elem.getChildText("Artist"));
                        objectFile.setAlbumArtist(elem.getChildText("AlbumArtist"));
                        objectFile.setComposer(elem.getChildText("Composer"));
                        objectFile.setPerformer(elem.getChildText("Performer"));
                        objectFile.setAlbum(elem.getChildText("Album"));

                        if (elem.getChild("Duration") != null) {
                            objectFile.setDuration(Double.parseDouble(elem.getChildText("Duration")));
                        }

                        Element addressElem = elem.getChild("Addresses");
                        if (addressElem != null) {
                            List<Element> addressElemList = addressElem.getChildren();
                            List<MetaQueryAddress> addressList = new ArrayList<MetaQueryAddress>();
                            for (Element ele : addressElemList) {
                                MetaQueryAddress address = new MetaQueryAddress();
                                address.setAddressLine(ele.getChildText("AddressLine"));
                                address.setCity(ele.getChildText("City"));
                                address.setCountry(ele.getChildText("Country"));
                                address.setDistrict(ele.getChildText("District"));
                                address.setLanguage(ele.getChildText("Language"));
                                address.setProvince(ele.getChildText("Province"));
                                address.setTownship(ele.getChildText("Township"));

                                addressList.add(address);
                            }
                            objectFile.setAddresses(addressList);
                        }

                        fileList.add(objectFile);
                    }
                    objectFiles.setFile(fileList);
                    doMetaQueryResult.setFiles(objectFiles);
                }

                Element elem = root.getChild("Aggregations");
                if(elem != null){
                    List<Aggregation> aggregationList = new ArrayList<Aggregation>();
                    Aggregations aggregations = new Aggregations();
                    for(Element el : elem.getChildren()){
                        Aggregation aggregation = new Aggregation();
                        aggregation.setField(el.getChildText("Field"));
                        aggregation.setOperation(el.getChildText("Operation"));
                        if(!StringUtils.isNullOrEmpty(el.getChildText("Value"))){
                            aggregation.setValue(Double.parseDouble(el.getChildText("Value")));
                        }

                        Element elemGroup = el.getChild("Groups");
                        if(elemGroup != null){
                            List<AggregationGroup> groupList = new ArrayList<AggregationGroup>();
                            AggregationGroups aggregationGroups = new AggregationGroups();
                            for(Element e : elemGroup.getChildren()){
                                AggregationGroup aggregationGroup = new AggregationGroup();
                                aggregationGroup.setValue(e.getChildText("Value"));
                                if(!StringUtils.isNullOrEmpty(e.getChildText("Count"))){
                                    aggregationGroup.setCount(Integer.parseInt(e.getChildText("Count")));
                                }
                                groupList.add(aggregationGroup);
                            }
                            aggregationGroups.setGroup(groupList);
                            aggregation.setGroups(aggregationGroups);
                        }

                        aggregationList.add(aggregation);
                    }
                    aggregations.setAggregation(aggregationList);
                    doMetaQueryResult.setAggregations(aggregations);
                }

                return doMetaQueryResult;
            } catch (JDOMParseException e) {
                throw new ResponseParseException(e.getPartialDocument() + ": " + e.getMessage(), e);
            } catch (Exception e) {
                throw new ResponseParseException(e.getMessage(), e);
            }
        }