All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.qcloud.cos.internal.RequestXmlFactory Maven / Gradle / Ivy

/*
 * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 *
 *  http://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.

 * According to cos feature, we modify some class,comment, field name, etc.
 */


package com.qcloud.cos.internal;

import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;

import com.qcloud.cos.exception.CosClientException;
import com.qcloud.cos.model.CASJobParameters;
import com.qcloud.cos.model.CSVInput;
import com.qcloud.cos.model.CSVOutput;
import com.qcloud.cos.model.InputSerialization;
import com.qcloud.cos.model.JSONInput;
import com.qcloud.cos.model.JSONOutput;
import com.qcloud.cos.model.OutputSerialization;
import com.qcloud.cos.model.PartETag;
import com.qcloud.cos.model.RequestProgress;
import com.qcloud.cos.model.RestoreObjectRequest;
import com.qcloud.cos.model.ScanRange;
import com.qcloud.cos.model.SelectObjectContentRequest;
import com.qcloud.cos.model.SelectParameters;
import com.qcloud.cos.model.ciModel.auditing.AudioAuditingRequest;
import com.qcloud.cos.model.ciModel.auditing.BatchImageAuditingInputObject;
import com.qcloud.cos.model.ciModel.auditing.BatchImageAuditingRequest;
import com.qcloud.cos.model.ciModel.auditing.Conf;
import com.qcloud.cos.model.ciModel.auditing.DocumentAuditingRequest;
import com.qcloud.cos.model.ciModel.auditing.TextAuditingRequest;
import com.qcloud.cos.model.ciModel.auditing.UserInfo;
import com.qcloud.cos.model.ciModel.auditing.VideoAuditingRequest;
import com.qcloud.cos.model.ciModel.auditing.WebpageAuditingRequest;
import com.qcloud.cos.model.ciModel.common.MediaOutputObject;
import com.qcloud.cos.model.ciModel.job.DocJobObject;
import com.qcloud.cos.model.ciModel.job.DocJobRequest;
import com.qcloud.cos.model.ciModel.job.DocProcessObject;
import com.qcloud.cos.model.ciModel.job.ExtractDigitalWatermark;
import com.qcloud.cos.model.ciModel.job.MediaAudioObject;
import com.qcloud.cos.model.ciModel.job.MediaConcatFragmentObject;
import com.qcloud.cos.model.ciModel.job.MediaConcatTemplateObject;
import com.qcloud.cos.model.ciModel.job.MediaDigitalWatermark;
import com.qcloud.cos.model.ciModel.job.MediaJobOperation;
import com.qcloud.cos.model.ciModel.job.MediaJobsRequest;
import com.qcloud.cos.model.ciModel.job.MediaRemoveWaterMark;
import com.qcloud.cos.model.ciModel.job.MediaTimeIntervalObject;
import com.qcloud.cos.model.ciModel.job.MediaTransConfigObject;
import com.qcloud.cos.model.ciModel.job.MediaTranscodeObject;
import com.qcloud.cos.model.ciModel.job.MediaTranscodeVideoObject;
import com.qcloud.cos.model.ciModel.job.MediaVideoObject;
import com.qcloud.cos.model.ciModel.mediaInfo.MediaInfoRequest;
import com.qcloud.cos.model.ciModel.queue.DocQueueRequest;
import com.qcloud.cos.model.ciModel.queue.MediaQueueRequest;
import com.qcloud.cos.model.ciModel.snapshot.SnapshotRequest;
import com.qcloud.cos.model.ciModel.template.MediaSnapshotObject;
import com.qcloud.cos.model.ciModel.template.MediaTemplateRequest;
import com.qcloud.cos.model.ciModel.template.MediaWaterMarkImage;
import com.qcloud.cos.model.ciModel.template.MediaWaterMarkText;
import com.qcloud.cos.model.ciModel.template.MediaWatermark;
import com.qcloud.cos.model.ciModel.workflow.MediaOperation;
import com.qcloud.cos.model.ciModel.workflow.MediaWorkflowDependency;
import com.qcloud.cos.model.ciModel.workflow.MediaWorkflowNode;
import com.qcloud.cos.model.ciModel.workflow.MediaWorkflowRequest;
import com.qcloud.cos.utils.StringUtils;


public class RequestXmlFactory {

    /**
     * Converts the specified list of PartETags to an XML fragment that can be sent to the
     * CompleteMultipartUpload operation of Qcloud COS.
     *
     * @param partETags The list of part ETags containing the data to include in the new XML
     *                  fragment.
     * @return A byte array containing the data
     */
    public static byte[] convertToXmlByteArray(List partETags) {
        XmlWriter xml = new XmlWriter();
        xml.start("CompleteMultipartUpload");
        if (partETags != null) {
            Collections.sort(partETags, new Comparator() {
                public int compare(PartETag tag1, PartETag tag2) {
                    if (tag1.getPartNumber() < tag2.getPartNumber())
                        return -1;
                    if (tag1.getPartNumber() > tag2.getPartNumber())
                        return 1;
                    return 0;
                }
            });

            for (PartETag partEtag : partETags) {
                xml.start("Part");
                xml.start("PartNumber").value(Integer.toString(partEtag.getPartNumber())).end();
                xml.start("ETag").value(partEtag.getETag()).end();
                xml.end();
            }
        }
        xml.end();

        return xml.getBytes();
    }

    /**
     * Converts the SelectObjectContentRequest to an XML fragment that can be sent to
     * the SelectObjectContent operation of COS.
     */
    public static byte[] convertToXmlByteArray(SelectObjectContentRequest selectRequest) {
        XmlWriter xml = new XmlWriter();
        xml.start("SelectObjectContentRequest");

        addIfNotNull(xml, "Expression", selectRequest.getExpression());
        addIfNotNull(xml, "ExpressionType", selectRequest.getExpressionType());

        addScanRangeIfNotNull(xml, selectRequest.getScanRange());
        addRequestProgressIfNotNull(xml, selectRequest.getRequestProgress());
        addInputSerializationIfNotNull(xml, selectRequest.getInputSerialization());
        addOutputSerializationIfNotNull(xml, selectRequest.getOutputSerialization());

        xml.end();
        return xml.getBytes();
    }


    private static void addRequestProgressIfNotNull(XmlWriter xml, RequestProgress requestProgress) {
        if (requestProgress == null) {
            return;
        }

        xml.start("RequestProgress");

        addIfNotNull(xml, "Enabled", requestProgress.getEnabled());

        xml.end();
    }

    private static void addSelectParametersIfNotNull(XmlWriter xml, SelectParameters selectParameters) {
        if (selectParameters == null) {
            return;
        }

        xml.start("SelectParameters");

        addInputSerializationIfNotNull(xml, selectParameters.getInputSerialization());

        addIfNotNull(xml, "ExpressionType", selectParameters.getExpressionType());
        addIfNotNull(xml, "Expression", selectParameters.getExpression());

        addOutputSerializationIfNotNull(xml, selectParameters.getOutputSerialization());

        xml.end();
    }

    private static void addScanRangeIfNotNull(XmlWriter xml, ScanRange scanRange) {
        if (scanRange != null) {
            xml.start("ScanRange");

            addIfNotNull(xml, "Start", scanRange.getStart());
            addIfNotNull(xml, "End", scanRange.getEnd());

            xml.end();
        }
    }

    private static void addInputSerializationIfNotNull(XmlWriter xml, InputSerialization inputSerialization) {
        if (inputSerialization != null) {
            xml.start("InputSerialization");

            if (inputSerialization.getCsv() != null) {
                xml.start("CSV");
                CSVInput csvInput = inputSerialization.getCsv();
                addIfNotNull(xml, "FileHeaderInfo", csvInput.getFileHeaderInfo());
                addIfNotNull(xml, "Comments", csvInput.getCommentsAsString());
                addIfNotNull(xml, "QuoteEscapeCharacter", csvInput.getQuoteEscapeCharacterAsString());
                addIfNotNull(xml, "RecordDelimiter", csvInput.getRecordDelimiterAsString());
                addIfNotNull(xml, "FieldDelimiter", csvInput.getFieldDelimiterAsString());
                addIfNotNull(xml, "QuoteCharacter", csvInput.getQuoteCharacterAsString());
                addIfNotNull(xml, "AllowQuotedRecordDelimiter", csvInput.getAllowQuotedRecordDelimiter());
                xml.end();
            }

            if (inputSerialization.getJson() != null) {
                xml.start("JSON");
                JSONInput jsonInput = inputSerialization.getJson();
                addIfNotNull(xml, "Type", jsonInput.getType());
                xml.end();
            }

            if (inputSerialization.getParquet() != null) {
                xml.start("Parquet");
                xml.end();
            }

            addIfNotNull(xml, "CompressionType", inputSerialization.getCompressionType());

            xml.end();
        }
    }

    private static void addOutputSerializationIfNotNull(XmlWriter xml, OutputSerialization outputSerialization) {
        if (outputSerialization != null) {
            xml.start("OutputSerialization");

            if (outputSerialization.getCsv() != null) {
                xml.start("CSV");
                CSVOutput csvOutput = outputSerialization.getCsv();
                addIfNotNull(xml, "QuoteFields", csvOutput.getQuoteFields());
                addIfNotNull(xml, "QuoteEscapeCharacter", csvOutput.getQuoteEscapeCharacterAsString());
                addIfNotNull(xml, "RecordDelimiter", csvOutput.getRecordDelimiterAsString());
                addIfNotNull(xml, "FieldDelimiter", csvOutput.getFieldDelimiterAsString());
                addIfNotNull(xml, "QuoteCharacter", csvOutput.getQuoteCharacterAsString());
                xml.end();
            }

            if (outputSerialization.getJson() != null) {
                xml.start("JSON");
                JSONOutput jsonOutput = outputSerialization.getJson();
                addIfNotNull(xml, "RecordDelimiter", jsonOutput.getRecordDelimiterAsString());
                xml.end();
            }

            xml.end();
        }
    }

    /**
     * Converts the RestoreObjectRequest to an XML fragment that can be sent to the RestoreObject
     * operation of COS.
     *
     * @param restoreObjectRequest The container which provides options for restoring an object,
     *                             which was transitioned to the CAS from COS when it was expired, into COS again.
     * @return A byte array containing the data
     * @throws CosClientException
     */
    public static byte[] convertToXmlByteArray(RestoreObjectRequest restoreObjectRequest)
            throws CosClientException {
        XmlWriter xml = new XmlWriter();

        xml.start("RestoreRequest");
        xml.start("Days").value(Integer.toString(restoreObjectRequest.getExpirationInDays())).end();
        final CASJobParameters casJobParameters = restoreObjectRequest.getCasJobParameters();
        if (casJobParameters != null) {
            xml.start("CASJobParameters");
            addIfNotNull(xml, "Tier", casJobParameters.getTier());
            xml.end();
        }
        xml.end();

        return xml.getBytes();
    }

    /**
     * Converts the MediaWorkflowRequest to an XML fragment that can be sent to the RestoreObject
     * operation of COS.
     *
     * @param request The container which provides options for restoring an object,
     *                which was transitioned to the CAS from COS when it was expired, into COS again.
     * @return A byte array containing the data
     * @throws CosClientException
     */
    public static byte[] convertToXmlByteArray(MediaWorkflowRequest request)
            throws CosClientException, UnsupportedEncodingException {
        XmlWriter xml = new XmlWriter();

        xml.start("Request");
        xml.start("MediaWorkflow");
        xml.start("Name").value(request.getName()).end();
        addIfNotNull(xml, "State", request.getState());
        addIfNotNull(xml, "WorkflowId", request.getWorkflowId());
        xml.start("Topology");
        xml.start("Dependencies");
        Map mediaWorkflowDependency = request.getTopology().getMediaWorkflowDependency();
        for (String key : mediaWorkflowDependency.keySet()) {
            xml.start(key).value(mediaWorkflowDependency.get(key).getValue()).end();
        }
        xml.end();
        xml.start("Nodes");
        Map mediaWorkflowNodes = request.getTopology().getMediaWorkflowNodes();
        for (String key : mediaWorkflowNodes.keySet()) {
            xml.start(key);
            MediaWorkflowNode mediaWorkflowNode = mediaWorkflowNodes.get(key);
            xml.start("Type").value(mediaWorkflowNode.getType()).end();
            if (mediaWorkflowNode.getInput().getObjectPrefix() != null || mediaWorkflowNode.getInput().getQueueId() != null) {
                xml.start("Input");
                addIfNotNull(xml, "QueueId", mediaWorkflowNode.getInput().getQueueId());
                addIfNotNull(xml, "ObjectPrefix", mediaWorkflowNode.getInput().getObjectPrefix());
                xml.end();
            }
            MediaOperation operation = mediaWorkflowNode.getOperation();
            MediaOutputObject output = operation.getOutput();
            if (operation.getTemplateId() != null || output.getBucket() != null
                    || output.getObject() != null || output.getRegion() != null) {
                xml.start("Operation");
                addIfNotNull(xml, "TemplateId", operation.getTemplateId());
                xml.start("Output");
                addIfNotNull(xml, "Region", output.getRegion());
                addIfNotNull(xml, "Bucket", output.getBucket());
                addIfNotNull(xml, "Object", output.getObject());
                xml.end();
                xml.end();
            }
            xml.end();
        }
        xml.end();
        xml.end();
        xml.end();
        xml.end();
        return xml.getBytes();
    }

    /**
     * Converts the MediaJobsRequest to an XML fragment that can be sent to the JobObject of COS
     *
     * @param request The container which provides options for restoring an object
     * @return A byte array containing the data
     * @throws CosClientException
     */
    public static byte[] convertToXmlByteArray(MediaJobsRequest request) {
        XmlWriter xml = new XmlWriter();

        xml.start("Request");
        xml.start("Tag").value(request.getTag()).end();
        xml.start("BucketName").value(request.getBucketName()).end();
        xml.start("Input");
        xml.start("Object").value(request.getInput().getObject()).end();
        xml.end();

        MediaJobOperation operation = request.getOperation();
        xml.start("Operation");
        addIfNotNull(xml,"TemplateId",operation.getTemplateId());

        List watermarkTemplateId = operation.getWatermarkTemplateId();
        if (watermarkTemplateId.size() != 0) {
            for (String templateId : watermarkTemplateId) {
                xml.start("WatermarkTemplateId").value(templateId).end();
            }
        }

        MediaWatermark watermark = operation.getWatermark();
        if (CheckObjectUtils.objIsNotValid(watermark)) {
            addIfNotNull(xml, "Type", watermark.getType());
            addIfNotNull(xml, "Dx", watermark.getDx());
            addIfNotNull(xml, "Dy", watermark.getDy());
            addIfNotNull(xml, "EndTime", watermark.getEndTime());
            addIfNotNull(xml, "LocMode", watermark.getLocMode());
            addIfNotNull(xml, "Pos", watermark.getPos());
            addIfNotNull(xml, "StartTime", watermark.getStartTime());

            if ("Text".equalsIgnoreCase(watermark.getType())) {
                MediaWaterMarkText text = watermark.getText();
                xml.start("Text");
                addIfNotNull(xml, "FontColor", text.getFontColor());
                addIfNotNull(xml, "FontSize", text.getFontSize());
                addIfNotNull(xml, "FontType", text.getFontType());
                addIfNotNull(xml, "Text", text.getText());
                addIfNotNull(xml, "Transparency", text.getTransparency());
                xml.end();
            } else if ("Image".equalsIgnoreCase(watermark.getType())) {
                MediaWaterMarkImage image = watermark.getImage();
                xml.start("Image");
                addIfNotNull(xml, "Height", image.getHeight());
                addIfNotNull(xml, "Mode", image.getMode());
                addIfNotNull(xml, "Transparency", image.getTransparency());
                addIfNotNull(xml, "Url", image.getUrl());
                addIfNotNull(xml, "Width", image.getWidth());
                xml.end();
            }
        }
        MediaRemoveWaterMark removeWatermark = operation.getRemoveWatermark();
        if (CheckObjectUtils.objIsNotValid(removeWatermark)) {
            xml.start("RemoveWatermark");
            addIfNotNull(xml, "Height", removeWatermark.getHeight());
            addIfNotNull(xml, "Dx", removeWatermark.getDx());
            addIfNotNull(xml, "Dy", removeWatermark.getDy());
            addIfNotNull(xml, "Switch", removeWatermark.get_switch());
            addIfNotNull(xml, "Width", removeWatermark.getWidth());
            xml.end();
        }

        MediaConcatTemplateObject mediaConcatTemplate = operation.getMediaConcatTemplate();
        if (CheckObjectUtils.objIsNotValid(mediaConcatTemplate)){
            xml.start("ConcatTemplate");
            List concatFragmentList = mediaConcatTemplate.getConcatFragmentList();
            for (MediaConcatFragmentObject concatFragment : concatFragmentList) {
                xml.start("ConcatFragment");
                addIfNotNull(xml,"Mode",concatFragment.getMode());
                addIfNotNull(xml,"Url",concatFragment.getUrl());
                xml.end();
            }
            addVideo(xml,mediaConcatTemplate.getVideo());
            addAudio(xml,mediaConcatTemplate.getAudio());
            addIfNotNull(xml,"Index",mediaConcatTemplate.getIndex());
            String format = mediaConcatTemplate.getContainer().getFormat();
            if (!StringUtils.isNullOrEmpty(format)){
                xml.start("Container");
                xml.start("Format").value(format).end();
                xml.end();
            }
            xml.end();
        }

        MediaTranscodeObject transcode = operation.getTranscode();
        String format = transcode.getContainer().getFormat();
        if (CheckObjectUtils.objIsNotValid(transcode) && !StringUtils.isNullOrEmpty(format)) {
            xml.start("Transcode");
            MediaTranscodeVideoObject video = transcode.getVideo();
            MediaAudioObject audio = transcode.getAudio();
            MediaTransConfigObject transConfig = transcode.getTransConfig();
            MediaTimeIntervalObject timeInterval = transcode.getTimeInterval();
            if (format != null) {
                xml.start("Container");
                xml.start("Format").value(format).end();
                xml.end();
            }
            if (CheckObjectUtils.objIsNotValid(timeInterval)) {
                xml.start("TimeInterval");
                xml.start("Duration").value(timeInterval.getDuration()).end();
                xml.start("Start").value(timeInterval.getStart()).end();
                xml.end();
            }
            if (CheckObjectUtils.objIsNotValid(video)) {
                addVideo(xml, video);

            }
            if (CheckObjectUtils.objIsNotValid(audio)) {
                addAudio(xml, audio);
            }

            if (CheckObjectUtils.objIsNotValid(transConfig)) {
                xml.start("TransConfig");
                addIfNotNull(xml, "AdjDarMethod", transConfig.getAdjDarMethod());
                addIfNotNull(xml, "AudioBitrateAdjMethod", transConfig.getAudioBitrateAdjMethod());
                addIfNotNull(xml, "IsCheckAudioBitrate", transConfig.getIsCheckAudioBitrate());
                addIfNotNull(xml, "IsCheckReso", transConfig.getIsCheckReso());
                addIfNotNull(xml, "IsCheckVideoBitrate", transConfig.getIsCheckVideoBitrate());
                addIfNotNull(xml, "ResoAdjMethod", transConfig.getResoAdjMethod());
                addIfNotNull(xml, "TransMode", transConfig.getTransMode());
                addIfNotNull(xml, "VideoBitrateAdjMethod", transConfig.getVideoBitrateAdjMethod());
                xml.end();
            }
            xml.end();
        }

        MediaDigitalWatermark digitalWatermark = operation.getDigitalWatermark();
        if (CheckObjectUtils.objIsNotValid(digitalWatermark)) {
            xml.start("DigitalWatermark");
            addIfNotNull(xml, "Message",digitalWatermark.getMessage());
            addIfNotNull(xml, "Type",digitalWatermark.getType());
            addIfNotNull(xml, "Version",digitalWatermark.getVersion());
            xml.end();
        }

        ExtractDigitalWatermark extractDigitalWatermark = operation.getExtractDigitalWatermark();
        if (extractDigitalWatermark.getType() != null || extractDigitalWatermark.getMessage() != null) {
            xml.start("ExtractDigitalWatermark");
            addIfNotNull(xml, "Message",extractDigitalWatermark.getMessage());
            addIfNotNull(xml, "Type",extractDigitalWatermark.getType());
            addIfNotNull(xml, "Version",extractDigitalWatermark.getVersion());
            xml.end();
        }
        MediaOutputObject output = operation.getOutput();
        if (CheckObjectUtils.objIsNotValid(output)){
            xml.start("Output");
            addIfNotNull(xml,"Region",output.getRegion());
            addIfNotNull(xml,"Object",output.getObject());
            addIfNotNull(xml,"Bucket",output.getBucket());
            xml.end();
        }

        xml.end();
        xml.start("QueueId").value(request.getQueueId()).end();
        addIfNotNull(xml, "CallBack", request.getCallBack());
        xml.end();
        return xml.getBytes();
    }

    /**
     * Converts the MediaQueueRequest to an XML fragment that can be sent to the QueueObject of COS
     *
     * @param request The container which provides options for restoring an object
     * @return A byte array containing the data
     * @throws CosClientException
     */
    public static byte[] convertToXmlByteArray(MediaQueueRequest request) {
        XmlWriter xml = new XmlWriter();

        xml.start("Request");
        xml.start("Name").value(request.getName()).end();
        xml.start("QueueId").value(request.getQueueId()).end();
        xml.start("State").value(request.getState()).end();
        xml.start("NotifyConfig");
        addIfNotNull(xml, "Type", request.getNotifyConfig().getType());
        addIfNotNull(xml, "Url", request.getNotifyConfig().getUrl());
        addIfNotNull(xml, "Event", request.getNotifyConfig().getEvent());
        addIfNotNull(xml, "State", request.getNotifyConfig().getState());
        xml.end();
        xml.end();
        return xml.getBytes();
    }

    /**
     * Converts the SnapshotRequest to an XML fragment that can be sent to the SnapshotObject of COS
     *
     * @param request The container which provides options for restoring an object
     * @return A byte array containing the data
     * @throws CosClientException
     */
    public static byte[] convertToXmlByteArray(SnapshotRequest request) {
        XmlWriter xml = new XmlWriter();

        xml.start("Request");
        xml.start("Input");
        xml.start("Object").value(request.getInput().getObject()).end();
        xml.end();

        xml.start("Output");
        xml.start("Region").value(request.getOutput().getRegion()).end();
        xml.start("Object").value(request.getOutput().getObject()).end();
        xml.start("Bucket").value(request.getOutput().getBucket()).end();
        xml.end();

        addIfNotNull(xml, "Time", request.getTime());
        addIfNotNull(xml, "Format", request.getFormat());
        addIfNotNull(xml, "Height", request.getHeight());
        addIfNotNull(xml, "Mode", request.getMode());
        addIfNotNull(xml, "Rotate", request.getRotate());
        addIfNotNull(xml, "Width", request.getWidth());

        xml.end();
        return xml.getBytes();
    }

    /**
     * Converts the MediaTemplateRequest to an XML fragment that can be sent to the TemplateObject of COS MediaTemplate
     *
     * @param request The container which provides options for restoring an object
     * @return A byte array containing the data
     * @throws CosClientException
     */
    public static byte[] convertToXmlByteArray(MediaTemplateRequest request) {
        XmlWriter xml = new XmlWriter();
        String tag = request.getTag();
        xml.start("Request");
        xml.start("Tag").value(tag).end();
        xml.start("Name").value(request.getName()).end();

        if ("Animation".equalsIgnoreCase(tag)) {
            xml.start("Container");
            xml.start("Format").value(request.getContainer().getFormat()).end();
            xml.end();
            addVideo(xml, request);
            if (CheckObjectUtils.objIsNotValid(request.getTimeInterval())) {
                xml.start("TimeInterval");
                xml.start("Duration").value(request.getTimeInterval().getDuration()).end();
                xml.start("Start").value(request.getTimeInterval().getStart()).end();
                xml.end();
            }
        } else if ("Snapshot".equalsIgnoreCase(tag)) {
            if (CheckObjectUtils.objIsNotValid(request.getSnapshot())) {
                xml.start("Snapshot");
                MediaSnapshotObject snapshot = request.getSnapshot();
                addIfNotNull(xml, "Mode", snapshot.getMode());
                addIfNotNull(xml, "Count", snapshot.getCount());
                addIfNotNull(xml, "Fps", snapshot.getFps());
                addIfNotNull(xml, "Height", snapshot.getHeight());
                addIfNotNull(xml, "Start", snapshot.getStart());
                addIfNotNull(xml, "TimeInterval", snapshot.getTimeInterval());
                addIfNotNull(xml, "Width", snapshot.getWidth());
                xml.end();
            }
        } else if ("Watermark".equalsIgnoreCase(tag)) {
            xml.start("Watermark");
            addIfNotNull(xml, "Type", request.getWatermark().getType());
            addIfNotNull(xml, "Dx", request.getWatermark().getDx());
            addIfNotNull(xml, "Dy", request.getWatermark().getDy());
            addIfNotNull(xml, "EndTime", request.getWatermark().getEndTime());
            addIfNotNull(xml, "LocMode", request.getWatermark().getLocMode());
            addIfNotNull(xml, "Pos", request.getWatermark().getPos());
            addIfNotNull(xml, "StartTime", request.getWatermark().getStartTime());
            if ("Text".equalsIgnoreCase(request.getWatermark().getType())) {
                xml.start("Text");
                MediaWaterMarkText text = request.getWatermark().getText();
                addIfNotNull(xml, "FontColor", text.getFontColor());
                addIfNotNull(xml, "FontSize", text.getFontSize());
                addIfNotNull(xml, "FontType", text.getFontType());
                addIfNotNull(xml, "Text", text.getText());
                addIfNotNull(xml, "Transparency", text.getTransparency());
                xml.end();
            } else if ("Image".equalsIgnoreCase(request.getWatermark().getType())) {
                xml.start("Image");
                MediaWaterMarkImage image = request.getWatermark().getImage();
                addIfNotNull(xml, "Height", image.getHeight());
                addIfNotNull(xml, "Mode", image.getMode());
                addIfNotNull(xml, "Url", image.getUrl());
                addIfNotNull(xml, "Transparency", image.getTransparency());
                addIfNotNull(xml, "Width", image.getWidth());
                xml.end();
            }
            xml.end();
        } else if ("Transcode".equalsIgnoreCase(tag)) {
            xml.start("Container");
            xml.start("Format").value(request.getContainer().getFormat()).end();
            xml.end();
            xml.start("TimeInterval");
            xml.start("Duration").value(request.getTimeInterval().getDuration()).end();
            xml.start("Start").value(request.getTimeInterval().getStart()).end();
            xml.end();

            addAudio(xml, request.getAudio());

            xml.start("TransConfig");
            addIfNotNull(xml, "AdjDarMethod", request.getTransConfig().getAdjDarMethod());
            addIfNotNull(xml, "AudioBitrateAdjMethod", request.getTransConfig().getAudioBitrateAdjMethod());
            addIfNotNull(xml, "IsCheckAudioBitrate", request.getTransConfig().getIsCheckAudioBitrate());
            addIfNotNull(xml, "IsCheckReso", request.getTransConfig().getIsCheckReso());
            addIfNotNull(xml, "IsCheckVideoBitrate", request.getTransConfig().getIsCheckVideoBitrate());
            addIfNotNull(xml, "ResoAdjMethod", request.getTransConfig().getResoAdjMethod());
            addIfNotNull(xml, "TransMode", request.getTransConfig().getTransMode());
            addIfNotNull(xml, "VideoBitrateAdjMethod", request.getTransConfig().getVideoBitrateAdjMethod());
            xml.end();

            addVideo(xml, request);

        }
        xml.end();
        return xml.getBytes();
    }

    private static void addAudio(XmlWriter xml, MediaAudioObject audio) {
        if (CheckObjectUtils.objIsValid(audio)) {
            return;
        }
        xml.start("Audio");
        addIfNotNull(xml, "Bitrate", audio.getBitrate());
        addIfNotNull(xml, "Channels", audio.getChannels());
        addIfNotNull(xml, "Codec", audio.getCodec());
        addIfNotNull(xml, "Profile", audio.getProfile());
        addIfNotNull(xml, "Remove", audio.getRemove());
        addIfNotNull(xml, "Samplerate", audio.getSamplerate());
        xml.end();
    }

    /**
     * Converts the MediaInfoRequest to an XML fragment that can be sent to the MediaObject of COS
     *
     * @param request The container which provides options for restoring an object
     * @return A byte array containing the data
     * @throws CosClientException
     */
    public static byte[] convertToXmlByteArray(MediaInfoRequest request) {
        XmlWriter xml = new XmlWriter();

        xml.start("Request");
        xml.start("Input");
        xml.start("Object").value(request.getInput().getObject()).end();
        xml.end();
        xml.end();
        return xml.getBytes();
    }

    /**
     * Converts the DocJobRequest to an XML fragment that can be sent to the DocJobRequestParams of CI
     *
     * @param request The container which provides options for restoring an object
     * @return A byte array containing the data
     * @throws CosClientException
     */
    public static byte[] convertToXmlByteArray(DocJobRequest request) {
        XmlWriter xml = new XmlWriter();
        DocJobObject docJobObject = request.getDocJobObject();

        xml.start("Request");
        xml.start("Tag").value(docJobObject.getTag()).end();
        xml.start("QueueId").value(docJobObject.getQueueId()).end();
        xml.start("Input");
        xml.start("Object").value(docJobObject.getInput().getObject()).end();
        xml.end();

        if (CheckObjectUtils.objIsNotValid(docJobObject)){
            xml.start("Operation");
            xml.start("Output");
            MediaOutputObject output = docJobObject.getOperation().getOutput();
            addIfNotNull(xml, "Region", output.getRegion());
            addIfNotNull(xml, "Bucket", output.getBucket());
            addIfNotNull(xml, "Object", output.getObject());
            xml.end();

            xml.start("DocProcess");
            DocProcessObject docProcess = docJobObject.getOperation().getDocProcessObject();
            addIfNotNull(xml, "SrcType", docProcess.getSrcType());
            addIfNotNull(xml, "TgtType", docProcess.getTgtType());
            addIfNotNull(xml, "SheetId", docProcess.getSheetId());
            addIfNotNull(xml, "StartPage", docProcess.getStartPage());
            addIfNotNull(xml, "EndPage", docProcess.getEndPage());
            addIfNotNull(xml, "ImageParams", docProcess.getImageParams());
            addIfNotNull(xml, "DocPassword", docProcess.getDocPassword());
            addIfNotNull(xml, "Comments", docProcess.getComments());
            addIfNotNull(xml, "PaperDirection", docProcess.getPaperDirection());
            addIfNotNull(xml, "Quality", docProcess.getQuality());
            addIfNotNull(xml, "Zoom", docProcess.getZoom());
            xml.end();

            xml.end();
        }
        xml.end();
        return xml.getBytes();
    }

    /**
     * Converts the DocQueueRequest to an XML fragment that can be sent to the QueueObject of COS
     *
     * @param request The container which provides options for restoring an object
     * @return A byte array containing the data
     * @throws CosClientException
     */
    public static byte[] convertToXmlByteArray(DocQueueRequest request) {
        XmlWriter xml = new XmlWriter();

        xml.start("Request");
        xml.start("Name").value(request.getName()).end();
        xml.start("QueueId").value(request.getQueueId()).end();
        xml.start("State").value(request.getState()).end();
        xml.start("NotifyConfig");
        addIfNotNull(xml, "Type", request.getNotifyConfig().getType());
        addIfNotNull(xml, "Url", request.getNotifyConfig().getUrl());
        addIfNotNull(xml, "Event", request.getNotifyConfig().getEvent());
        addIfNotNull(xml, "State", request.getNotifyConfig().getState());
        xml.end();
        xml.end();
        return xml.getBytes();
    }

    /**
     * Converts the VideoAuditingRequest to an XML fragment that can be sent to the CreateVideoAuditingJob of CI
     *
     * @param request The container which provides options for restoring an object
     * @return A byte array containing the data
     * @throws CosClientException
     */
    public static byte[] convertToXmlByteArray(VideoAuditingRequest request) {
        XmlWriter xml = new XmlWriter();

        xml.start("Request");
        xml.start("Input");
        addIfNotNull(xml, "Object", request.getInput().getObject());
        addIfNotNull(xml, "Url", request.getInput().getUrl());
        addIfNotNull(xml, "DataId", request.getInput().getDataId());
        addUserInfo(xml, request.getInput().getUserInfo());
        xml.end();
        Conf conf = request.getConf();
        xml.start("Conf");
        String detectType = conf.getDetectType();
        addAuditingDetectType(xml, detectType);
        addIfNotNull(xml, "BizType", conf.getBizType());
        addIfNotNull(xml, "DetectContent", conf.getDetectContent());
        addIfNotNull(xml, "CallbackVersion", conf.getCallbackVersion());
        xml.start("Snapshot");
        addIfNotNull(xml, "Mode", conf.getSnapshot().getMode());
        addIfNotNull(xml, "TimeInterval", conf.getSnapshot().getTimeInterval());
        addIfNotNull(xml, "Count", conf.getSnapshot().getCount());
        xml.end();
        addIfNotNull(xml, "Callback", conf.getCallback());
        xml.end();

        xml.end();
        return xml.getBytes();
    }

    /**
     * Converts the AudioAuditingRequest to an XML fragment that can be sent to the CreateAudioAuditingJob of CI
     *
     * @param request The container which provides options for restoring an object
     * @return A byte array containing the data
     * @throws CosClientException
     */
    public static byte[] convertToXmlByteArray(AudioAuditingRequest request) {
        XmlWriter xml = new XmlWriter();

        xml.start("Request");
        xml.start("Input");
        addIfNotNull(xml, "Object", request.getInput().getObject());
        addIfNotNull(xml, "Url", request.getInput().getUrl());
        addIfNotNull(xml, "DataId", request.getInput().getDataId());
        addUserInfo(xml, request.getInput().getUserInfo());
        xml.end();
        Conf conf = request.getConf();
        xml.start("Conf");
        String detectType = conf.getDetectType();
        addAuditingDetectType(xml,detectType);
        addIfNotNull(xml, "Callback", conf.getCallback());
        addIfNotNull(xml, "CallbackVersion", conf.getCallbackVersion());
        addIfNotNull(xml, "BizType", conf.getBizType());
        xml.end();

        xml.end();
        return xml.getBytes();
    }

    /**
     * Converts the TextAuditingRequest to an XML fragment that can be sent to the CreateTextAuditingJob of CI
     *
     * @param request The container which provides options for restoring an object
     * @return A byte array containing the data
     * @throws CosClientException
     */
    public static byte[] convertToXmlByteArray(TextAuditingRequest request) {
        XmlWriter xml = new XmlWriter();

        xml.start("Request");
        xml.start("Input");
        addIfNotNull(xml, "Object", request.getInput().getObject());
        addIfNotNull(xml, "Content", request.getInput().getContent());
        addIfNotNull(xml, "Url", request.getInput().getUrl());
        addIfNotNull(xml, "DataId", request.getInput().getDataId());
        addUserInfo(xml, request.getInput().getUserInfo());
        xml.end();
        Conf conf = request.getConf();
        xml.start("Conf");
        String detectType = conf.getDetectType();
        addAuditingDetectType(xml,detectType);
        addIfNotNull(xml, "Callback", conf.getCallback());
        addIfNotNull(xml, "BizType", conf.getBizType());
        addIfNotNull(xml, "CallbackVersion", conf.getCallbackVersion());
        addIfNotNull(xml, "CallbackType", conf.getCallbackType());
        xml.end();

        xml.end();
        return xml.getBytes();
    }

    public static byte[] convertToXmlByteArray(DocumentAuditingRequest request) {
        XmlWriter xml = new XmlWriter();

        xml.start("Request");
        xml.start("Input");
        addIfNotNull(xml, "Url", request.getInput().getUrl());
        addIfNotNull(xml, "Object", request.getInput().getObject());
        addIfNotNull(xml, "Type", request.getInput().getType());
        addIfNotNull(xml, "DataId", request.getInput().getDataId());
        addUserInfo(xml, request.getInput().getUserInfo());
        xml.end();
        Conf conf = request.getConf();
        xml.start("Conf");
        String detectType = conf.getDetectType();
        addAuditingDetectType(xml,detectType);
        addIfNotNull(xml, "Callback", conf.getCallback());
        addIfNotNull(xml, "BizType", conf.getBizType());
        xml.end();

        xml.end();
        return xml.getBytes();
    }

    public static byte[] convertToXmlByteArray(WebpageAuditingRequest request) {
        XmlWriter xml = new XmlWriter();

        xml.start("Request");
        xml.start("Input");
        addIfNotNull(xml, "Url", request.getInput().getUrl());
        xml.end();
        Conf conf = request.getConf();
        xml.start("Conf");
        String detectType = conf.getDetectType();
        addAuditingDetectType(xml,detectType);
        addIfNotNull(xml, "Callback", conf.getCallback());
        addIfNotNull(xml, "BizType", conf.getBizType());
        addIfNotNull(xml, "ReturnHighlightHtml", conf.getReturnHighlightHtml());
        xml.end();

        xml.end();
        return xml.getBytes();
    }

    public static byte[] convertToXmlByteArray(BatchImageAuditingRequest request) {
        XmlWriter xml = new XmlWriter();

        xml.start("Request");
        List inputList = request.getInputList();
        for (BatchImageAuditingInputObject inputObject : inputList) {
            xml.start("Input");
            addIfNotNull(xml, "Url", inputObject.getUrl());
            addIfNotNull(xml, "Object", inputObject.getObject());
            addIfNotNull(xml, "DataId", inputObject.getDataId());
            addIfNotNull(xml, "MaxFrames", inputObject.getMaxFrames());
            addIfNotNull(xml, "Interval", inputObject.getInterval());
            addIfNotNull(xml, "LargeImageDetect", inputObject.getLargeImageDetect());
            addIfNotNull(xml, "Content", inputObject.getContent());
            addUserInfo(xml,inputObject.getUserInfo());
            xml.end();
        }

        Conf conf = request.getConf();
        xml.start("Conf");
        String detectType = conf.getDetectType();
        addAuditingDetectType(xml,detectType);
        addIfNotNull(xml, "BizType", conf.getBizType());
        addIfNotNull(xml, "Async", conf.getAsync());
        addIfNotNull(xml, "Callback", conf.getCallback());
        xml.end();

        xml.end();
        return xml.getBytes();
    }


    private static void addIfNotNull(XmlWriter xml, String xmlTag, String value) {
        if (value != null) {
            xml.start(xmlTag).value(value).end();
        }
    }

    private static void addIfNotNull(XmlWriter xml, String xmlTag, Object value) {
        if (value != null && value.toString() != null) {
            xml.start(xmlTag).value(value.toString()).end();
        }
    }

    private static void addVideo(XmlWriter xml, MediaTemplateRequest request) {
        MediaVideoObject video = request.getVideo();
        addVideo(xml,video);
    }
    private static void addVideo(XmlWriter xml, MediaVideoObject video){
        if (CheckObjectUtils.objIsValid(video)) {
            return;
        }
        xml.start("Video");
        addIfNotNull(xml, "Codec", video.getCodec());
        addIfNotNull(xml, "Width", video.getWidth());
        addIfNotNull(xml, "Height", video.getHeight());
        addIfNotNull(xml, "Fps", video.getFps());
        addIfNotNull(xml, "Bitrate", video.getBitrate());
        addIfNotNull(xml, "BufSize", video.getBufSize());
        addIfNotNull(xml, "Crf", video.getCrf());
        addIfNotNull(xml, "Crop", video.getCrop());
        addIfNotNull(xml, "Gop", video.getGop());
        addIfNotNull(xml, "LongShortMode", video.getLongShortMode());
        addIfNotNull(xml, "Maxrate", video.getMaxrate());
        addIfNotNull(xml, "Pad", video.getPad());
        addIfNotNull(xml, "PixFmt", video.getPixFmt());
        addIfNotNull(xml, "Preset", video.getPreset());
        addIfNotNull(xml, "Profile", video.getProfile());
        addIfNotNull(xml, "Qality", video.getQality());
        addIfNotNull(xml, "Quality", video.getQuality());
        addIfNotNull(xml, "Remove", video.getRemove());
        addIfNotNull(xml, "ScanMode", video.getScanMode());
        addIfNotNull(xml, "HlsTsTime", video.getHlsTsTime());
        addIfNotNull(xml, "AnimateFramesPerSecond", video.getAnimateFramesPerSecond());
        addIfNotNull(xml, "AnimateTimeIntervalOfFrame", video.getAnimateTimeIntervalOfFrame());
        addIfNotNull(xml, "AnimateOnlyKeepKeyFrame", video.getAnimateOnlyKeepKeyFrame());
        xml.end();
    }

    private static void addVideo(XmlWriter xml, MediaTranscodeVideoObject video){
        if (CheckObjectUtils.objIsValid(video)) {
            return;
        }
        xml.start("Video");
        addIfNotNull(xml, "Codec", video.getCodec());
        addIfNotNull(xml, "Width", video.getWidth());
        addIfNotNull(xml, "Height", video.getHeight());
        addIfNotNull(xml, "Fps", video.getFps());
        addIfNotNull(xml, "Bitrate", video.getBitrate());
        addIfNotNull(xml, "BufSize", video.getBufSize());
        addIfNotNull(xml, "Crf", video.getCrf());
        addIfNotNull(xml, "Gop", video.getGop());
        addIfNotNull(xml, "Maxrate", video.getMaxrate());
        addIfNotNull(xml, "Preset", video.getPreset());
        addIfNotNull(xml, "Profile", video.getProfile());
        addIfNotNull(xml, "Remove", video.getRemove());
        addIfNotNull(xml, "ScanMode", video.getScanMode());
        xml.end();
    }

    private static void addUserInfo(XmlWriter xml, UserInfo userInfo) {
        if (CheckObjectUtils.objIsNotValid(userInfo)) {
            xml.start("UserInfo");
            addIfNotNull(xml, "TokenId", userInfo.getTokenId());
            addIfNotNull(xml, "Nickname", userInfo.getNickname());
            addIfNotNull(xml, "DeviceId", userInfo.getDeviceId());
            addIfNotNull(xml, "AppId", userInfo.getAppId());
            addIfNotNull(xml, "Room", userInfo.getRoom());
            addIfNotNull(xml, "IP", userInfo.getIp());
            addIfNotNull(xml, "Type", userInfo.getType());
            addIfNotNull(xml, "ReceiveTokenId", userInfo.getReceiveTokenId());
            addIfNotNull(xml, "Gender", userInfo.getGender());
            addIfNotNull(xml, "Level", userInfo.getLevel());
            addIfNotNull(xml, "Role", userInfo.getRole());
            xml.end();
        }
    }

    private static void addAuditingDetectType(XmlWriter xml, String detectType) {
        if (!"all".equalsIgnoreCase(detectType)) {
            addIfNotNull(xml, "DetectType", detectType);
        }
    }


    /**
     * 对象校验内部静态工具类
     */
    public static class CheckObjectUtils {

        /**
         * 校验对象是否有效,判断对象中是否含有有效的字段。
         *
         * @param obj
         * @return 包含有效值返回 true 所有字段都为空返回 false
         */
        public static Boolean objIsNotValid(Object obj) {
            //查询出对象所有的属性
            Field[] fields = obj.getClass().getDeclaredFields();
            //用于判断所有属性是否为空,如果参数为空则不查询
            for (Field field : fields) {
                //不检查 直接取值
                field.setAccessible(true);
                try {
                    Object o = field.get(obj);
                    if (!isValid(o)) {
                        //不为空
                        return true;
                    }
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
            return false;
        }

        public static Boolean objIsValid(Object obj) {
            return !objIsNotValid(obj);
        }

        public static boolean isValid(Object obj) {
            if (obj == null || isValid(obj.toString())) {
                return true;
            }
            return false;
        }

        public static boolean isValid(String str) {
            return str == null || "".equals(str.trim())
                    || "null".equalsIgnoreCase(str);
        }
    }
}







© 2015 - 2024 Weber Informatics LLC | Privacy Policy