Package org.jets3t.service.impl.rest

Source Code of org.jets3t.service.impl.rest.CloudFrontXmlResponsesSaxParser$DistributionSummaryHandler

/*
* JetS3t : Java S3 Toolkit
* Project hosted at http://bitbucket.org/jmurty/jets3t/
*
* Copyright 2008-2010 James Murty
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License 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.
*/
package org.jets3t.service.impl.rest;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jets3t.service.CloudFrontServiceException;
import org.jets3t.service.Constants;
import org.jets3t.service.Jets3tProperties;
import org.jets3t.service.S3ServiceException;
import org.jets3t.service.ServiceException;
import org.jets3t.service.model.cloudfront.*;
import org.jets3t.service.model.cloudfront.CacheBehavior.ViewerProtocolPolicy;
import org.jets3t.service.utils.ServiceUtils;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* XML Sax parser to read XML documents returned by the CloudFront service via
* the REST interface, and convert these documents into JetS3t objects.
*
* @author James Murty
*/
public class CloudFrontXmlResponsesSaxParser {
    private static final Log log = LogFactory.getLog(CloudFrontXmlResponsesSaxParser.class);

    private XMLReader xr = null;
    private Jets3tProperties properties = null;

    /**
     * Constructs the XML SAX parser.
     *
     * @param properties the JetS3t properties that will be applied when parsing XML documents.
     * @throws S3ServiceException
     */
    public CloudFrontXmlResponsesSaxParser(Jets3tProperties properties) throws ServiceException {
        this.properties = properties;
        this.xr = ServiceUtils.loadXMLReader();
    }

    public Jets3tProperties getProperties() {
        return this.properties;
    }

    /**
     * Parses an XML document from an input stream using a document handler.
     *
     * @param handler     The handler for the XML document
     * @param inputStream An input stream containing the XML document to parse
     * @throws CloudFrontServiceException Any parsing, IO or other exceptions are wrapped in an S3ServiceException.
     */
    protected void parseXmlInputStream(DefaultHandler handler, InputStream inputStream)
            throws CloudFrontServiceException {
        try {
            if(log.isDebugEnabled()) {
                log.debug("Parsing XML response document with handler: " + handler.getClass());
            }
            BufferedReader breader = new BufferedReader(new InputStreamReader(inputStream,
                    Constants.DEFAULT_ENCODING));
            xr.setContentHandler(handler);
            xr.setErrorHandler(handler);
            xr.parse(new InputSource(breader));
        }
        catch(Exception t) {
            try {
                inputStream.close();
            }
            catch(IOException e) {
                if(log.isErrorEnabled()) {
                    log.error("Unable to close response InputStream up after XML parse failure", e);
                }
            }
            throw new CloudFrontServiceException("Failed to parse XML document with handler "
                    + handler.getClass(), t);
        }
    }

    /**
     * Parses a ListBucket response XML document from an input stream.
     *
     * @param inputStream XML data input stream.
     * @return the XML handler object populated with data parsed from the XML stream.
     * @throws CloudFrontServiceException
     */
    public DistributionListHandler parseDistributionListResponse(InputStream inputStream)
            throws CloudFrontServiceException {
        DistributionListHandler handler = new DistributionListHandler(xr);
        parseXmlInputStream(handler, inputStream);
        return handler;
    }

    public DistributionHandler parseDistributionResponse(InputStream inputStream)
            throws CloudFrontServiceException {
        DistributionHandler handler = new DistributionHandler(xr);
        parseXmlInputStream(handler, inputStream);
        return handler;
    }

    public DistributionConfigHandler parseDistributionConfigResponse(InputStream inputStream)
            throws CloudFrontServiceException {
        DistributionConfigHandler handler = new DistributionConfigHandler(xr);
        parseXmlInputStream(handler, inputStream);
        return handler;
    }

    public OriginAccessIdentityHandler parseOriginAccessIdentity(
            InputStream inputStream) throws CloudFrontServiceException {
        OriginAccessIdentityHandler handler = new OriginAccessIdentityHandler(xr);
        parseXmlInputStream(handler, inputStream);
        return handler;
    }

    public OriginAccessIdentityConfigHandler parseOriginAccessIdentityConfig(
            InputStream inputStream) throws CloudFrontServiceException {
        OriginAccessIdentityConfigHandler handler = new OriginAccessIdentityConfigHandler(xr);
        parseXmlInputStream(handler, inputStream);
        return handler;
    }

    public OriginAccessIdentityListHandler parseOriginAccessIdentityListResponse(
            InputStream inputStream) throws CloudFrontServiceException {
        OriginAccessIdentityListHandler handler = new OriginAccessIdentityListHandler(xr);
        parseXmlInputStream(handler, inputStream);
        return handler;
    }

    public InvalidationHandler parseInvalidationResponse(
            InputStream inputStream) throws CloudFrontServiceException {
        InvalidationHandler handler = new InvalidationHandler(xr);
        parseXmlInputStream(handler, inputStream);
        return handler;
    }

    public InvalidationListHandler parseInvalidationListResponse(
            InputStream inputStream) throws CloudFrontServiceException {
        InvalidationListHandler handler = new InvalidationListHandler(xr);
        parseXmlInputStream(handler, inputStream);
        return handler;
    }

    public ErrorHandler parseErrorResponse(InputStream inputStream)
            throws CloudFrontServiceException {
        ErrorHandler handler = new ErrorHandler(xr);
        parseXmlInputStream(handler, inputStream);
        return handler;
    }

    // ////////////
    // Handlers //
    // ////////////

    public class DistributionHandler extends SimpleHandler {
        private Distribution distribution = null;

        private String id = null;
        private String status = null;
        private Date lastModifiedTime = null;
        private String domainName = null;
        private final Map<String, List<String>> activeTrustedSigners =
                new HashMap<String, List<String>>();

        private boolean inSignerElement;
        private String lastSignerIdentifier = null;

        public DistributionHandler(XMLReader xr) {
            super(xr);
        }

        public Distribution getDistribution() {
            return distribution;
        }

        public void endId(String text) {
            this.id = text;
        }

        public void endStatus(String text) {
            this.status = text;
        }

        public void endLastModifiedTime(String text) throws ParseException {
            this.lastModifiedTime = ServiceUtils.parseIso8601Date(text);
        }

        public void endDomainName(String text) {
            this.domainName = text;
        }

        // Handle ActiveTrustedSigner elements //
        public void startSigner() {
            inSignerElement = true;
        }

        public void endSigner(String text) {
            inSignerElement = false;
            lastSignerIdentifier = null;
        }

        public void endSelf(String text) {
            if(inSignerElement) {
                lastSignerIdentifier = "Self";
            }
        }

        public void endAwsAccountNumber(String text) {
            if(inSignerElement) {
                lastSignerIdentifier = text;
            }
        }

        public void endKeyPairId(String text) {
            if(inSignerElement) {
                List<String> keypairIdList = activeTrustedSigners.get(lastSignerIdentifier);
                if(keypairIdList == null) {
                    keypairIdList = new ArrayList<String>();
                    activeTrustedSigners.put(lastSignerIdentifier, keypairIdList);
                }
                keypairIdList.add(text);
            }
        }
        // End handle ActiveTrustedSigner elements //

        public void startDistributionConfig() {
            transferControlToHandler(new DistributionConfigHandler(xr));
        }

        public void startStreamingDistributionConfig() {
            transferControlToHandler(new DistributionConfigHandler(xr));
        }

        @Override
        public void controlReturned(SimpleHandler childHandler) {
            DistributionConfig config =
                    ((DistributionConfigHandler) childHandler).getDistributionConfig();
            if(config instanceof StreamingDistributionConfig) {
                this.distribution = new StreamingDistribution(id, status,
                        lastModifiedTime, domainName, activeTrustedSigners, config);
            }
            else {
                this.distribution = new Distribution(id, status,
                        lastModifiedTime, 0L, domainName, activeTrustedSigners, config);
            }
        }

        // End of a normal Distribution
        public void endDistribution(String text) {
            returnControlToParentHandler();
        }

        // End of a StreamingDistribution
        public void endStreamingDistribution(String text) {
            returnControlToParentHandler();
        }
    }

    public class LoggingStatusHandler extends SimpleHandler {
        private LoggingStatus loggingStatus = new LoggingStatus(false, null, null);

        public LoggingStatusHandler(XMLReader xr) {
            super(xr);
        }

        public LoggingStatus getLoggingStatus() {
            return loggingStatus;
        }

        public void endEnabled(String text) {
            loggingStatus.setEnabled(String.valueOf(true).equals(text));
        }

        public void endBucket(String text) {
            loggingStatus.setBucket(text);
        }

        public void endPrefix(String text) {
            loggingStatus.setPrefix(text);
        }

        public void endLogging(String text) {
            returnControlToParentHandler();
        }
    }

    public class TrustedSignersHandler extends SimpleHandler {
        private List<String> trustedSigners = new ArrayList<String>();

        public TrustedSignersHandler(XMLReader xr) {
            super(xr);
        }

        public String[] getTrustedSigners() {
            return trustedSigners.toArray(new String[trustedSigners.size()]);
        }

        public void endAwsAccountNumber(String text) {
            trustedSigners.add(text);
        }

        public void endTrustedSigners(String text) {
            returnControlToParentHandler();
        }
    }

    public class CacheBehaviorHandler extends SimpleHandler {
        private CacheBehavior cacheBehavior = new CacheBehavior();

        public CacheBehaviorHandler(XMLReader xr) {
            super(xr);
        }

        public CacheBehavior getCacheBehavior() {
            return cacheBehavior;
        }

        public void endPathPattern(String text) {
            cacheBehavior.setPathPattern(text);
        }

        public void endTargetOriginId(String text) {
            cacheBehavior.setTargetOriginId(text);
        }

        public void endQueryString(String text) {
            cacheBehavior.setIsForwardQueryString(String.valueOf(true).equals(text));
        }

        public void endViewerProtocolPolicy(String text) {
            cacheBehavior.setViewerProtocolPolicy(ViewerProtocolPolicy.fromText(text));
        }

        public void endMinTTL(String text) {
            cacheBehavior.setMinTTL(new Long(text));
        }

        public void startTrustedSigners() {
            transferControlToHandler(new TrustedSignersHandler(xr));
        }

        @Override
        public void controlReturned(SimpleHandler childHandler) {
            cacheBehavior.setTrustedSignerAwsAccountNumbers(
                    ((TrustedSignersHandler) childHandler).getTrustedSigners());
        }

        public void endDefaultCacheBehavior(String text) {
            returnControlToParentHandler();
        }

        public void endCacheBehavior(String text) {
            returnControlToParentHandler();
        }
    }

    public class DistributionConfigHandler extends SimpleHandler {
        private DistributionConfig distributionConfig = null;

        private String callerReference = null;
        private List<Origin> origins = new ArrayList<Origin>();
        private final List<String> cnamesList = new ArrayList<String>();
        private String comment = null;
        private boolean enabled = false;
        private LoggingStatus loggingStatus = null;
        private String defaultRootObject = null;
        private CacheBehavior defaultCacheBehavior;
        private List<CacheBehavior> cacheBehaviors = new ArrayList<CacheBehavior>();
        List<String> trustedSignerAwsAccountNumberList = new ArrayList<String>();

        private boolean inDefaultCacheBehavior = false;

        public DistributionConfigHandler(XMLReader xr) {
            super(xr);
        }

        public DistributionConfig getDistributionConfig() {
            return distributionConfig;
        }

        public void endCallerReference(String text) {
            this.callerReference = text;
        }

        public void endCNAME(String text) {
            this.cnamesList.add(text);
        }

        public void endDefaultRootObject(String text) {
            this.defaultRootObject = text;
        }

        public void endComment(String text) {
            this.comment = text;
        }

        public void endEnabled(String text) {
            this.enabled = String.valueOf(true).equalsIgnoreCase(text);
        }

        public void startOrigin() {
            // For DistributionConfig
            transferControlToHandler(new OriginHandler(xr));
        }

        public void startS3Origin() {
            // For StreamingDistributionConfig
            transferControlToHandler(new OriginHandler(xr));
        }

        public void startDefaultCacheBehavior() {
            inDefaultCacheBehavior = true;
            transferControlToHandler(new CacheBehaviorHandler(xr));
        }

        public void startCacheBehavior() {
            inDefaultCacheBehavior = false;
            transferControlToHandler(new CacheBehaviorHandler(xr));
        }

        public void startLogging() {
            transferControlToHandler(new LoggingStatusHandler(xr));
        }

        @Override
        public void controlReturned(SimpleHandler childHandler) {
            if(childHandler instanceof OriginHandler) {
                this.origins.add(((OriginHandler) childHandler).origin);
            }
            else if(childHandler instanceof CacheBehaviorHandler) {
                if(inDefaultCacheBehavior) {
                    this.defaultCacheBehavior = ((CacheBehaviorHandler) childHandler).cacheBehavior;
                }
                else {
                    this.cacheBehaviors.add(((CacheBehaviorHandler) childHandler).cacheBehavior);
                }
            }
            else if(childHandler instanceof LoggingStatusHandler) {
                this.loggingStatus = ((LoggingStatusHandler) childHandler).loggingStatus;
            }
        }

        public void endDistributionConfig(String text) {
            this.distributionConfig = new DistributionConfig(
                    origins.toArray(new Origin[origins.size()]),
                    callerReference,
                    cnamesList.toArray(new String[cnamesList.size()]),
                    comment, enabled, loggingStatus, defaultRootObject,
                    defaultCacheBehavior,
                    cacheBehaviors.toArray(new CacheBehavior[cacheBehaviors.size()]));
            returnControlToParentHandler();
        }

        public void endStreamingDistributionConfig(String text) {
            this.distributionConfig = new StreamingDistributionConfig(
                    origins.toArray(new Origin[origins.size()]),
                    callerReference,
                    cnamesList.toArray(new String[cnamesList.size()]), comment,
                    enabled, loggingStatus,
                    trustedSignerAwsAccountNumberList.toArray(
                            new String[trustedSignerAwsAccountNumberList.size()]));
            returnControlToParentHandler();
        }
    }

    public class DistributionSummaryHandler extends SimpleHandler {
        private Distribution distribution = null;

        private String id = null;
        private String status = null;
        private Date lastModifiedTime = null;
        private Long inProgressInvalidationBatches = 0l;
        private String domainName = null;
        private List<Origin> origins = new ArrayList<Origin>();
        private final List<String> cnamesList = new ArrayList<String>();
        private String comment = null;
        private boolean enabled = false;
        private CacheBehavior defaultCacheBehavior = null;
        private List<CacheBehavior> cacheBehaviors = new ArrayList<CacheBehavior>();

        private boolean inDefaultCacheBehavior = false;

        public DistributionSummaryHandler(XMLReader xr) {
            super(xr);
        }

        public Distribution getDistribution() {
            return distribution;
        }

        public void endId(String text) {
            this.id = text;
        }

        public void endStatus(String text) {
            this.status = text;
        }

        public void endLastModifiedTime(String text) throws ParseException {
            this.lastModifiedTime = ServiceUtils.parseIso8601Date(text);
        }

        public void endInProgressInvalidationBatches(String text) {
            this.inProgressInvalidationBatches = Long.parseLong(text);
        }

        public void endDomainName(String text) {
            this.domainName = text;
        }

        public void endCNAME(String text) {
            this.cnamesList.add(text);
        }

        public void startOrigin() {
            // For download distribution origins
            transferControlToHandler(new OriginHandler(xr));
        }

        public void startS3Origin() {
            // For streaming distribution origins
            transferControlToHandler(new OriginHandler(xr));
        }

        public void startDefaultCacheBehavior() {
            inDefaultCacheBehavior = true;
            transferControlToHandler(new CacheBehaviorHandler(xr));
        }

        public void startCacheBehavior() {
            inDefaultCacheBehavior = false;
            transferControlToHandler(new CacheBehaviorHandler(xr));
        }

        @Override
        public void controlReturned(SimpleHandler childHandler) {
            if(childHandler instanceof OriginHandler) {
                this.origins.add(((OriginHandler) childHandler).origin);
            }
            else if(childHandler instanceof CacheBehaviorHandler) {
                if(inDefaultCacheBehavior) {
                    this.defaultCacheBehavior = ((CacheBehaviorHandler) childHandler).cacheBehavior;
                }
                else {
                    this.cacheBehaviors.add(((CacheBehaviorHandler) childHandler).cacheBehavior);
                }
            }
        }

        public void endComment(String text) {
            this.comment = text;
        }

        public void endEnabled(String text) {
            this.enabled = String.valueOf(true).equalsIgnoreCase(text);
        }

        public void endDistributionSummary(String text) {
            DistributionConfig config = new DistributionConfig(
                    this.origins.toArray(new Origin[origins.size()]),
                    null,  // callerReference
                    this.cnamesList.toArray(new String[cnamesList.size()]),
                    this.comment,
                    this.enabled,
                    null,  // loggingStatus
                    null,
                    this.defaultCacheBehavior,
                    this.cacheBehaviors.toArray(new CacheBehavior[cacheBehaviors.size()])
            );
            this.distribution = new Distribution(id, status,
                    lastModifiedTime, inProgressInvalidationBatches, domainName, null, config);
            returnControlToParentHandler();
        }

        public void endStreamingDistributionSummary(String text) {
            StreamingDistributionConfig config = new StreamingDistributionConfig(
                    this.origins.toArray(new Origin[origins.size()]),
                    null,  // callerReference
                    this.cnamesList.toArray(new String[cnamesList.size()]),
                    this.comment,
                    this.enabled,
                    null,  // loggingStatus
                    null  // trustedSignerAwsAccountNumbers
            );
            this.distribution = new StreamingDistribution(id, status,
                    lastModifiedTime, domainName, null, config);
            returnControlToParentHandler();
        }
    }

    public class DistributionListHandler extends SimpleHandler {
        private final List<Distribution> distributions = new ArrayList<Distribution>();
        private String marker = null;
        private String nextMarker = null;
        private int maxItems = 100;
        private boolean isTruncated = false;

        public DistributionListHandler(XMLReader xr) {
            super(xr);
        }

        public List<Distribution> getDistributions() {
            return distributions;
        }

        public boolean isTruncated() {
            return isTruncated;
        }

        public String getMarker() {
            return marker;
        }

        public String getNextMarker() {
            return nextMarker;
        }

        public int getMaxItems() {
            return maxItems;
        }

        public void startDistributionSummary() {
            transferControlToHandler(new DistributionSummaryHandler(xr));
        }

        public void startStreamingDistributionSummary() {
            transferControlToHandler(new DistributionSummaryHandler(xr));
        }

        @Override
        public void controlReturned(SimpleHandler childHandler) {
            distributions.add(
                    ((DistributionSummaryHandler) childHandler).getDistribution());
        }

        public void endMarker(String text) {
            this.marker = text;
        }

        public void endNextMarker(String text) {
            this.nextMarker = text;
        }

        public void endMaxItems(String text) {
            this.maxItems = Integer.parseInt(text);
        }

        public void endIsTruncated(String text) {
            this.isTruncated = String.valueOf(true).equalsIgnoreCase(text);
        }
    }

    public class OriginHandler extends SimpleHandler {
        protected Origin origin = null;
        private String id;
        private String domainName = null;
        private String originAccessIdentity = null; // S3Origin
        private String httpPort = null; // CustomOrigin
        private String httpsPort = null; // CustomOrigin
        private String originProtocolPolicy = null; // CustomOrigin

        public OriginHandler(XMLReader xr) {
            super(xr);
        }

        public void endId(String text) {
            this.id = text;
        }

        public void endDomainName(String text) {
            this.domainName = text;
        }

        public void endOriginAccessIdentity(String text) {
            this.originAccessIdentity = text;
        }

        public void endHTTPPort(String text) {
            this.httpPort = text;
        }

        public void endHTTPSPort(String text) {
            this.httpsPort = text;
        }

        public void endOriginProtocolPolicy(String text) {
            this.originProtocolPolicy = text;
        }

        public void endS3OriginConfig(String text) {
            // For download distribution origins
            if(this.originAccessIdentity != null && this.originAccessIdentity.length() == 0) {
                this.originAccessIdentity = null;
            }
            this.origin = new S3Origin(this.id, this.domainName, this.originAccessIdentity);
            returnControlToParentHandler();
        }

        public void endS3Origin(String text) {
            // For streaming distribution origins
            if(this.originAccessIdentity != null && this.originAccessIdentity.length() == 0) {
                this.originAccessIdentity = null;
            }
            this.origin = new S3Origin(this.id, this.domainName, this.originAccessIdentity);
            returnControlToParentHandler();
        }

        public void endCustomOriginConfig(String text) {
            // For download distribution origins
            this.origin = new CustomOrigin(this.id, this.domainName,
                    CustomOrigin.OriginProtocolPolicy.fromText(this.originProtocolPolicy),
                    Integer.valueOf(this.httpPort), Integer.valueOf(this.httpsPort));
            returnControlToParentHandler();
        }
    }

    public class OriginAccessIdentityHandler extends SimpleHandler {
        private String id = null;
        private String s3CanonicalUserId = null;
        private String comment = null;
        private OriginAccessIdentity originAccessIdentity = null;
        private OriginAccessIdentityConfig originAccessIdentityConfig = null;

        public OriginAccessIdentityHandler(XMLReader xr) {
            super(xr);
        }

        public OriginAccessIdentity getOriginAccessIdentity() {
            return this.originAccessIdentity;
        }

        public void endId(String text) {
            this.id = text;
        }

        public void endS3CanonicalUserId(String text) {
            this.s3CanonicalUserId = text;
        }

        public void endComment(String text) {
            this.comment = text;
        }

        public void startCloudFrontOriginAccessIdentityConfig() {
            transferControlToHandler(new OriginAccessIdentityConfigHandler(xr));
        }

        @Override
        public void controlReturned(SimpleHandler childHandler) {
            this.originAccessIdentityConfig =
                    ((OriginAccessIdentityConfigHandler) childHandler).getOriginAccessIdentityConfig();
        }

        public void endCloudFrontOriginAccessIdentity(String text) {
            this.originAccessIdentity = new OriginAccessIdentity(
                    this.id, this.s3CanonicalUserId, this.originAccessIdentityConfig);
        }

        public void endCloudFrontOriginAccessIdentitySummary(String text) {
            this.originAccessIdentity = new OriginAccessIdentity(
                    this.id, this.s3CanonicalUserId, this.comment);
            returnControlToParentHandler();
        }
    }

    public class OriginAccessIdentityConfigHandler extends SimpleHandler {
        private String callerReference = null;
        private String comment = null;
        private OriginAccessIdentityConfig config = null;

        public OriginAccessIdentityConfigHandler(XMLReader xr) {
            super(xr);
        }

        public OriginAccessIdentityConfig getOriginAccessIdentityConfig() {
            return this.config;
        }

        public void endCallerReference(String text) {
            this.callerReference = text;
        }

        public void endComment(String text) {
            this.comment = text;
        }

        public void endCloudFrontOriginAccessIdentityConfig(String text) {
            this.config = new OriginAccessIdentityConfig(this.callerReference, this.comment);
            returnControlToParentHandler();
        }
    }

    public class OriginAccessIdentityListHandler extends SimpleHandler {
        private final List<OriginAccessIdentity> originAccessIdentityList =
                new ArrayList<OriginAccessIdentity>();
        private String marker = null;
        private String nextMarker = null;
        private int maxItems = 100;
        private boolean isTruncated = false;

        public OriginAccessIdentityListHandler(XMLReader xr) {
            super(xr);
        }

        public List<OriginAccessIdentity> getOriginAccessIdentityList() {
            return this.originAccessIdentityList;
        }

        public boolean isTruncated() {
            return isTruncated;
        }

        public String getMarker() {
            return marker;
        }

        public String getNextMarker() {
            return nextMarker;
        }

        public int getMaxItems() {
            return maxItems;
        }

        public void startCloudFrontOriginAccessIdentitySummary() {
            transferControlToHandler(new OriginAccessIdentityHandler(xr));
        }

        @Override
        public void controlReturned(SimpleHandler childHandler) {
            originAccessIdentityList.add(
                    ((OriginAccessIdentityHandler) childHandler).getOriginAccessIdentity());
        }

        public void endMarker(String text) {
            this.marker = text;
        }

        public void endNextMarker(String text) {
            this.nextMarker = text;
        }

        public void endMaxItems(String text) {
            this.maxItems = Integer.parseInt(text);
        }

        public void endIsTruncated(String text) {
            this.isTruncated = String.valueOf(true).equalsIgnoreCase(text);
        }
    }

    public class InvalidationListHandler extends SimpleHandler {
        private String marker = null;
        private String nextMarker = null;
        private int maxItems = 100;
        private boolean isTruncated = false;
        private String invalidationSummaryId = null;
        private String invalidationSummaryStatus = null;
        private List<InvalidationSummary> invalidationSummaries =
                new ArrayList<InvalidationSummary>();
        private InvalidationList invalidationList = null;

        public InvalidationListHandler(XMLReader xr) {
            super(xr);
        }

        public InvalidationList getInvalidationList() {
            return invalidationList;
        }

        public boolean isTruncated() {
            return isTruncated;
        }

        public String getMarker() {
            return marker;
        }

        public String getNextMarker() {
            return nextMarker;
        }

        public int getMaxItems() {
            return maxItems;
        }

        public void endMarker(String text) {
            this.marker = text;
        }

        public void endNextMarker(String text) {
            this.nextMarker = text;
        }

        public void endMaxItems(String text) {
            this.maxItems = Integer.parseInt(text);
        }

        public void endIsTruncated(String text) {
            this.isTruncated = String.valueOf(true).equalsIgnoreCase(text);
        }

        // Inside InvalidationSummary
        public void endId(String text) {
            this.invalidationSummaryId = text;
        }

        // Inside InvalidationSummary
        public void endStatus(String text) {
            this.invalidationSummaryStatus = text;
            this.invalidationSummaries.add(new InvalidationSummary(
                    this.invalidationSummaryId, this.invalidationSummaryStatus));
        }

        public void endInvalidationList(String ignore) {
            this.invalidationList = new InvalidationList(
                    this.marker, this.nextMarker, this.maxItems, this.isTruncated,
                    this.invalidationSummaries);
        }
    }

    public class InvalidationHandler extends SimpleHandler {
        private Invalidation invalidation = new Invalidation();

        public InvalidationHandler(XMLReader xr) {
            super(xr);
        }

        public Invalidation getInvalidation() {
            return this.invalidation;
        }

        public void endId(String text) {
            this.invalidation.setId(text);
        }

        public void endStatus(String text) {
            this.invalidation.setStatus(text);
        }

        public void endCreateTime(String text) throws ParseException {
            this.invalidation.setCreateTime(
                    ServiceUtils.parseIso8601Date(text));
        }

        public void endPath(String text) {
            this.invalidation.getObjectKeys().add(text.substring(1));
        }

        public void endCallerReference(String text) {
            this.invalidation.setCallerReference(text);
        }
    }

    public class ErrorHandler extends SimpleHandler {
        private String type = null;
        private String code = null;
        private String message = null;
        private String detail = null;
        private String requestId = null;

        public ErrorHandler(XMLReader xr) {
            super(xr);
        }

        public String getCode() {
            return code;
        }

        public String getDetail() {
            return detail;
        }

        public String getMessage() {
            return message;
        }

        public String getRequestId() {
            return requestId;
        }

        public String getType() {
            return type;
        }

        public void endType(String text) {
            this.type = text;
        }

        public void endCode(String text) {
            this.code = text;
        }

        public void endMessage(String text) {
            this.message = text;
        }

        public void endDetail(String text) {
            this.detail = text;
        }

        public void endRequestId(String text) {
            this.requestId = text;
        }

        // Handle annoying case where request id is in
        // the element "RequestID", not "RequestId"
        public void endRequestID(String text) {
            this.requestId = text;
        }
    }
}
TOP

Related Classes of org.jets3t.service.impl.rest.CloudFrontXmlResponsesSaxParser$DistributionSummaryHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.