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

org.elasticmq.rest.sqs.CreateQueueHandlerModule.scala Maven / Gradle / Ivy

The newest version!
package org.elasticmq.rest.sqs


import org.elasticmq.rest.RequestHandlerBuilder._
import org.elasticmq.rest.RestPath._

import org.jboss.netty.handler.codec.http.HttpMethod._

import Constants._
import ActionUtil._
import ParametersUtil._
import org.joda.time.Duration
import org.elasticmq.{QueueBuilder, MillisVisibilityTimeout}

trait CreateQueueHandlerModule { this: ClientModule with QueueURLModule with RequestHandlerLogicModule
  with AttributesModule with SQSLimitsModule =>

  val DefaultVisibilityTimeout = 30L
  val DefaultDelay = 0L

  val CreateQueueAction = createAction("CreateQueue")

  val createQueueLogic = logicWithQueueName((queueName, request, parameters) => {
    val queueOption = client.lookupQueue(queueName)

    val attributes = attributeNameAndValuesReader.read(parameters)

    val secondsVisibilityTimeout =
      (attributes.parseOptionalLong(VisibilityTimeoutParameter)
              .getOrElse(DefaultVisibilityTimeout))

    val secondsDelay =
      (attributes.parseOptionalLong(DelayParameter)
        .getOrElse(DefaultDelay))

    val queue = queueOption.getOrElse(client.createQueue(
      QueueBuilder(queueName)
        .withDefaultVisibilityTimeout(MillisVisibilityTimeout.fromSeconds(secondsVisibilityTimeout))
        .withDelay(Duration.standardSeconds(secondsDelay))))

    if (queue.defaultVisibilityTimeout.seconds != secondsVisibilityTimeout) {
      // Special case: the queue existed, but has a different visibility timeout
      throw new SQSException("AWS.SimpleQueueService.QueueNameExists")
    }

    if (!queueName.matches("[\\p{Alnum}_-]*")) {
      throw new SQSException("InvalidParameterValue")
    }

    
      
        {queueURL(queue)}
      
      
        {EmptyRequestId}
      
    
  })

  val createQueueGetHandler = (createHandler
            forMethod GET
            forPath (root)
            requiringParameters List(QueueNameParameter)
            requiringParameterValues Map(CreateQueueAction)
            running createQueueLogic)

  val createQueuePostHandler = (createHandler
            forMethod POST
            forPath (root)
            includingParametersFromBody()
            requiringParameters List(QueueNameParameter)
            requiringParameterValues Map(CreateQueueAction)
            running createQueueLogic)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy