Skip to content
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

package com.azure.core.amqp.models;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

/**
* Amqp representation of the message.
*/
public final class AmqpAnnotatedMessage {
private final AmqpMessageBody amqpMessageBody;
private Map<String, Object> applicationProperties;
private Map<String, Object> deliveryAnnotations;
private Map<String, Object> messageAnnotations;
private Map<String, Object> footer;
Comment thread
hemanttanwar marked this conversation as resolved.
Outdated
private AmqpMessageHeader header;
private AmqpMessageProperties properties;

/**
* Creates instance of {@link AmqpAnnotatedMessage} with given {@link AmqpMessageBody}.
*
* @param body to be set on amqp message.
*/
public AmqpAnnotatedMessage(AmqpMessageBody body) {
this.amqpMessageBody = Objects.requireNonNull(body, "'body' cannot be null.");
}

/**
* Creates instance of {@link AmqpAnnotatedMessage} with given {@link AmqpAnnotatedMessage}.
*
* @param message used to create another instance of {@link AmqpAnnotatedMessage}.
*/
public AmqpAnnotatedMessage(AmqpAnnotatedMessage message) {
Objects.requireNonNull(message, "'message' cannot be null.");
this.amqpMessageBody = Objects.requireNonNull(message.getBody(), "'message.body' cannot be null.");
this.applicationProperties = message.getApplicationProperties();
this.deliveryAnnotations = message.getDeliveryAnnotations();
this.messageAnnotations = message.getMessageAnnotations();
this.header = message.getHeader();
this.properties = message.getProperties();
}

/**
* Gets the {@link Map} of application properties.
* @return The application properties.
*/
public Map<String, Object> getApplicationProperties() {
if (this.applicationProperties == null) {
this.applicationProperties = new HashMap<>();
}
return applicationProperties;
}

/**
* Gets the {@link AmqpMessageBody}.
*
* @return the {@link AmqpMessageBody} object.
*/
public AmqpMessageBody getBody() {
return amqpMessageBody;
}

/**
* Gets the {@link Map} representation of delivery annotations.
*
* @return the {@link Map} representation of delivery annotations.
*/
public Map<String, Object> getDeliveryAnnotations() {
if (deliveryAnnotations == null) {
this.deliveryAnnotations = new HashMap<>();
Comment thread
hemanttanwar marked this conversation as resolved.
Outdated
}

return deliveryAnnotations;
}

/**
* Gets the {@link Map} representation of footer.
*
* @return the {@link Map} representation of footer.
*/
public Map<String, Object> getFooter() {
if (this.footer == null) {
this.footer = new HashMap<>();
}
return footer;
}

/**
* Gets the {@link AmqpMessageHeader}.
*
* @return the {@link AmqpMessageHeader} object.
*/
public AmqpMessageHeader getHeader() {
if (this.header == null) {
this.header = new AmqpMessageHeader();
}
return header;
}

/**
* Gets the {@link Map} representation of message annotations.
*
* @return the {@link Map} representation of message annotations.
*/
public Map<String, Object> getMessageAnnotations() {
if (messageAnnotations == null) {
this.messageAnnotations = new HashMap<>();
}
return messageAnnotations;
}

/**
* Gets the {@link AmqpMessageProperties}.
*
* @return the {@link AmqpMessageProperties} object.
*/
public AmqpMessageProperties getProperties() {
if (properties == null) {
this.properties = new AmqpMessageProperties();
}
return properties;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

package com.azure.core.amqp.models;

import java.util.Locale;

/**
* All AmqpBodyType available for AMQP Message.
*/
public enum AmqpBodyType {
/**
* Represent Amqp Data type
*/
DATA("Data"),
Comment thread
hemanttanwar marked this conversation as resolved.
Outdated
/**
* Represent Amqp Value type
*/
VALUE("Value"),
/**
* Represent Amqp Sequence type
*/
SEQUENCE("Sequence");

private final String value;

AmqpBodyType(final String value) {
this.value = value;
}

/**
* {@inheritDoc}
*/
@Override
public String toString() {
return this.value;
}
/**
* Creates an AmqpBodyType from its display value.
*
* @param value The string value of the AmqpBodyType.
* @return The AmqpBodyType represented by the value.
* @throws IllegalArgumentException If a AmqpBodyType cannot be parsed from the string value.
*/
public static AmqpBodyType fromString(final String value) {
for (AmqpBodyType bodyType : values()) {
if (bodyType.value.equalsIgnoreCase(value)) {
return bodyType;
}
}

throw new IllegalArgumentException(String.format(Locale.US, "Could not convert %s to a AmqpBodyType", value));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

package com.azure.core.amqp.models;

import com.azure.core.util.IterableStream;

import java.util.Objects;

/**
*
Comment thread
hemanttanwar marked this conversation as resolved.
Outdated
*/
public final class AmqpDataBody implements AmqpMessageBody {
Comment thread
hemanttanwar marked this conversation as resolved.
private final AmqpBodyType bodyType;
private final IterableStream<BinaryData> data;

/**
* @param data to be set.
*/
public AmqpDataBody(Iterable<BinaryData> data) {
Objects.requireNonNull(data, "'data' cannot be null.");
this.data = new IterableStream<>(data);
this.bodyType = AmqpBodyType.DATA;
}

@Override
public AmqpBodyType getBodyType() {
return bodyType;
Comment thread
hemanttanwar marked this conversation as resolved.
Outdated
}

/**
* @return data.
*/
public IterableStream<BinaryData> getData() {
return data;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

package com.azure.core.amqp.models;

/**
* Interface representing Amqp Message Body.
*/
public interface AmqpMessageBody {
/**
*
* @return The {@link AmqpBodyType}.
*/
AmqpBodyType getBodyType();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

package com.azure.core.amqp.models;

import com.azure.core.annotation.Fluent;

import java.time.Duration;

/**
* Represents Header from Amqp message.
*/
@Fluent
public class AmqpMessageHeader {

private Long deliveryCount;
private Boolean durable;
private Boolean firstAcquirer;
private Short priority;
private Duration timeToLive;

AmqpMessageHeader() {
// This class does not have any public constructors, and is not able to be instantiated using 'new'.
}

/**
* Gets delivery count.
*
* @return delivery count.
*/
public Long getDeliveryCount() {
return deliveryCount;
}

/**
* Sets the given {@code deliveryCount} value on {@link AmqpMessageHeader} object.
*
* @param deliveryCount to be set.
* @return updated {@link AmqpMessageHeader} object.
*/
public AmqpMessageHeader setDeliveryCount(Long deliveryCount) {
this.deliveryCount = deliveryCount;
return this;
}

/**
* Gets durable boolean flag.
*
* @return The durable.
*/
public Boolean getDurable() {
Comment thread
hemanttanwar marked this conversation as resolved.
Outdated
return this.durable;
}

/**
* Sets the given {@code durable} value on {@link AmqpMessageHeader} object.
*
* @param durable to set on {@link AmqpMessageHeader}.
* @return updated {@link AmqpMessageHeader} object.
*/
public AmqpMessageHeader setDurable(Boolean durable) {
this.durable = durable;
return this;
}

/**
* Gets boolean flag for {@code firstAcquirer}
*
* @return The {@code firstAcquirer}.
*/
public Boolean getFirstAcquirer() {
Comment thread
hemanttanwar marked this conversation as resolved.
Outdated
return this.firstAcquirer;
}

/**
* Sets the given {@code firstAcquirer} value on {@link AmqpMessageHeader} object.
*
* @param firstAcquirer to set on {@link AmqpMessageHeader}.
* @return updated {@link AmqpMessageHeader} object.
*/
public AmqpMessageHeader setFirstAcquirer(Boolean firstAcquirer) {
this.firstAcquirer = firstAcquirer;
return this;
}

/**
* Gets the priority on {@code amqpMessage}.
* @return the priority.
*/
public Short getPriority() {
return this.priority;
}

/**
* Sets the given {@code priority} value on {@link AmqpMessageHeader} object.
*
* @param priority to set on {@link AmqpMessageHeader}.
* @return updated {@link AmqpMessageHeader} object.
*/
public AmqpMessageHeader setPriority(short priority) {
Comment thread
hemanttanwar marked this conversation as resolved.
Outdated
this.priority = priority;
return this;
}

/**
* Gets {@code timeToLive}.
* @return {@code timeToLive}.
*/
public Duration getTimeToLive() {
return this.timeToLive;
}

/**
* Sets the given {@code timeToLive} value on {@link AmqpMessageHeader} object.
*
* @param timeToLive to set on {@link AmqpMessageHeader}.
* @return updated {@link AmqpMessageHeader} object.
*/
public AmqpMessageHeader setTimeToLive(Duration timeToLive) {
this.timeToLive = timeToLive;
return this;
}
}
Loading