package com.netflix.schlep.sqs; import org.apache.commons.lang.StringUtils; import com.google.common.base.Preconditions; /** * Wrapper for queuename providing access to parts of the name. * * A queue name may be a simple string or a fully qualified queue name. * 1: /accountid/queuename * 2: /queuename * * * @author elandau * */ public class QueueName { private boolean isFullyQualified; private final String name; private final String accountId; public QueueName(String uriOrName) { Preconditions.checkNotNull(uriOrName, "QueueName cannot be null"); isFullyQualified = isFullQualifiedQueueName(uriOrName); if (!isFullyQualified) { name = uriOrName; accountId = null; } else { String[] pair = splitFullyQualifiedQueueName(uriOrName); accountId = pair[0]; name = pair[1]; } } public boolean isFullQualifiedName() { return isFullyQualified; } public String getName() { return name; } public String getAccountId() { return accountId; } /** * @return first = ownerAccountId, second = queueName */ private static String[] splitFullyQualifiedQueueName(String fullyQualifiedQueueName) { if(fullyQualifiedQueueName.charAt(0) != '/') throw new IllegalArgumentException("invalid fully qualified queue name: " + fullyQualifiedQueueName); String[] parts = fullyQualifiedQueueName.split("/"); if(parts == null || parts.length != 3) throw new IllegalArgumentException("invalid fully qualified queue name: " + fullyQualifiedQueueName); if(StringUtils.isNotBlank(parts[1]) && StringUtils.isNotBlank(parts[2])) { String ownerAccountId = parts[1]; String queueName = parts[2]; return new String[]{ownerAccountId, queueName}; } else { throw new IllegalArgumentException("invalid fully qualified queue name: " + fullyQualifiedQueueName); } } private static boolean isFullQualifiedQueueName(String queueName) { if ((queueName.charAt(0) == '/' && queueName.lastIndexOf('/') > 0)) return true; else return false; } }