/*
* Copyright 2010-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Portions copyright 2006-2009 James Murty. Please see LICENSE.txt
* for applicable license terms and NOTICE.txt for applicable notices.
*
* 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.
*/
package com.amazonaws.services.s3.model;
import com.amazonaws.services.s3.AmazonS3;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* <p>
* Represents a bucket's notification configuration. The notification
* configuration is used to control reception of notifications for specific
* events for Amazon S3 buckets.
* </p>
* <p>
* Using SNS as the delivery service, the notification configuration of an
* Amazon S3 bucket provides near real-time notifications of events the user is
* interested in. Notification is turned on by enabling configuration on a
* bucket, specifying the events and the SNS topic. This configuration can only
* be turned on by the bucket owner.
* </p>
* <p>
* If a notification configuration already exists for the specified bucket, the
* new notification configuration will replace the existing notification
* configuration. To remove a notification configuration, pass an an empty
* configuration directly to
* {@link AmazonS3#setBucketNotificationConfiguration(String,BucketNotificationConfiguration)}
* .
* </p>
* <p>
* Note: Currently buckets may only have a single event and topic configuration.
* </p>
*
* @see AmazonS3#getBucketNotificationConfiguration(String)
* @see AmazonS3#setBucketNotificationConfiguration(String,
* BucketNotificationConfiguration)
*/
public class BucketNotificationConfiguration {
private List<TopicConfiguration> topicConfigurations = null;
/**
* <p>
* Creates a new bucket notification configuration. By default, the newly
* created configuration is empty.
* </p>
* <p>
* Passing the new configuration directly to
* {@link AmazonS3#setBucketNotificationConfiguration(String,BucketNotificationConfiguration)}
* will remove any existing bucket notification configuration.
* </p>
*
* @see BucketNotificationConfiguration#BucketNotificationConfiguration(Collection)
*/
public BucketNotificationConfiguration() {
this.topicConfigurations = new ArrayList<TopicConfiguration>(1);
}
/**
* <p>
* Creates a new bucket notification configuration containing the specified
* <code>TopicConfigurations</code>.
* </p>
* <p>
* Passing the new configuration directly to
* {@link AmazonS3#setBucketNotificationConfiguration(String,BucketNotificationConfiguration)}
* will set the bucket's notification configuration and overwrite any
* existing configuration.
* </p>
*
* @see BucketNotificationConfiguration#BucketNotificationConfiguration()
*/
public BucketNotificationConfiguration(Collection<TopicConfiguration> topicConfigurations) {
this.topicConfigurations = new ArrayList<TopicConfiguration>(1);
this.topicConfigurations.addAll(topicConfigurations);
}
/**
* <p>
* Sets the {@link BucketNotificationConfiguration.TopicConfiguration}
* <code>TopicConfigurations</code> and returns this object, enabling
* additional method calls to be chained together.
* </p>
* <p>
* Calling this method will overwrite any previously set
* <code>TopicConfigurations</code> for this object.
* </p>
*
* @param topicConfigurations A set of topic configurations.
* @return The updated {@link BucketNotificationConfiguration} object,
* enabling additional method calls to be chained together.
* @see BucketNotificationConfiguration#setTopicConfigurations(Collection)
*/
public BucketNotificationConfiguration withTopicConfigurations(
TopicConfiguration... topicConfigurations) {
this.topicConfigurations.clear();
for (int index = 0; index < topicConfigurations.length; index++) {
this.topicConfigurations.add(topicConfigurations[index]);
}
return this;
}
/**
* <p>
* Sets the {@link BucketNotificationConfiguration.TopicConfiguration}.
* </p>
* <p>
* Calling this method will overwrite any previously set
* <code>TopicConfigurations</code> for this object.
* </p>
*
* @param topicConfigurations A collection of topic configurations.
* @see BucketNotificationConfiguration#withTopicConfigurations(TopicConfiguration)
*/
public void setTopicConfigurations(Collection<TopicConfiguration> topicConfigurations) {
this.topicConfigurations.clear();
this.topicConfigurations.addAll(topicConfigurations);
}
/**
* <p>
* Gets the list of
* {@link BucketNotificationConfiguration.TopicConfiguration} objects
* contained in this object. This method may return an empty list if no
* <code>TopicConfiguration</code> objects are present.
* </p>
*
* @return The list of <code>TopicConfiguration</code> objects contained in
* this object. May return an empty list.
*/
public List<TopicConfiguration> getTopicConfigurations() {
return this.topicConfigurations;
}
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("{");
sb.append("TopicConfigurations: " + this.getTopicConfigurations());
sb.append("}");
return sb.toString();
}
/**
* <p>
* Represents the SNS topic to publish event notification to. Notifications
* are published to the topic only if the specified event is triggered.
* </p>
*/
public static class TopicConfiguration {
private final String topic;
private final String event;
/**
* <p>
* Creates a new
* {@link BucketNotificationConfiguration.TopicConfiguration}.
* </p>
*
* @param topic The SNS Topic ARN (Amazon Resource Name) to publish
* notifications to.
* @param event The event that must occur to trigger the notification
* publication.
*/
public TopicConfiguration(final String topic, final String event) {
this.topic = topic;
this.event = event;
}
/**
* <p>
* Gets the topic ARN (Amazon Resource Name) for the topic to publish
* events to.
* </p>
*
* @return The topic ARN for the topic to publish events to.
*/
public String getTopic() {
return this.topic;
}
/**
* <p>
* Gets the event that must occur for the notification to be published.
* </p>
*
* @return The event that must occur for the notification to be
* published.
*/
public String getEvent() {
return this.event;
}
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("{");
sb.append("Topic: " + this.getTopic() + ", ");
sb.append("Event: " + this.getEvent() + ", ");
sb.append("}");
return sb.toString();
}
}
}