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

com.amazon.ask.mvc.SkillContext Maven / Gradle / Ivy

Go to download

The Alexa Skills Kit MVC Framework extends the existing ASK SDK, adding features for mapping requests to methods and rendering responses via view scripts and templates such as Nashorn Javascript and Freemarker. It also integrates with the ASK SDK Interaction Model Mapper framework to create a single environment where both the interaction model and business logic of skills can be managed as code packages.

The newest version!
/*
    Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.

    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.amazon.ask.mvc;

import com.amazon.ask.interaction.definition.Model;
import com.amazon.ask.mvc.mapper.ControllerMethodContext;
import com.amazon.ask.mvc.plugin.*;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.Collections;
import java.util.Set;

import static com.amazon.ask.util.ValidationUtils.assertNotNull;

/**
 * A MVC skill's context. Contains resolvers, the skill model, controllers and an object mapper.
 *
 * @see ControllerMethodContext
 */
public class SkillContext {
    private static final ObjectMapper DEFAULT_MAPPER = new ObjectMapper();

    private final Set controllers;
    private final Model model;
    private final ObjectMapper objectMapper;

    private final Set requestHandlerResolvers;
    private final Set argumentResolvers;
    private final Set predicateResolvers;
    private final Set requestInterceptorResolvers;
    private final Set responseInterceptorResolvers;
    private final Set exceptionHandlerResolvers;
    private final Set viewResolvers;

    private SkillContext(Set controllers,
                         Model model,
                         ObjectMapper objectMapper,
                         Set requestHandlerResolvers,
                         Set argumentResolvers,
                         Set predicateResolvers,
                         Set requestInterceptorResolvers,
                         Set responseInterceptorResolvers,
                         Set exceptionHandlerResolvers,
                         Set viewResolvers) {
        this.controllers = Collections.unmodifiableSet(assertNotNull(controllers, "controllers"));
        this.model = model == null ? Model.empty() : model;
        this.objectMapper = objectMapper == null ? DEFAULT_MAPPER : objectMapper;

        this.requestHandlerResolvers = emptyOrImmutable(requestHandlerResolvers);
        this.argumentResolvers = emptyOrImmutable(argumentResolvers);
        this.predicateResolvers = emptyOrImmutable(predicateResolvers);
        this.requestInterceptorResolvers = emptyOrImmutable(requestInterceptorResolvers);
        this.responseInterceptorResolvers = emptyOrImmutable(responseInterceptorResolvers);
        this.exceptionHandlerResolvers = emptyOrImmutable(exceptionHandlerResolvers);
        this.viewResolvers = emptyOrImmutable(viewResolvers);
    }

    private static  Set emptyOrImmutable(Set set) {
        return set == null ? Collections.emptySet() : Collections.unmodifiableSet(set);
    }

    public Set getControllers() {
        return controllers;
    }

    public Model getModel() {
        return model;
    }

    public ObjectMapper getObjectMapper() {
        return objectMapper;
    }

    public Set getRequestHandlerResolvers() {
        return requestHandlerResolvers;
    }

    public Set getArgumentResolvers() {
        return argumentResolvers;
    }

    public Set getPredicateResolvers() {
        return predicateResolvers;
    }

    public Set getRequestInterceptorResolvers() {
        return requestInterceptorResolvers;
    }

    public Set getResponseInterceptorResolvers() {
        return responseInterceptorResolvers;
    }

    public Set getExceptionHandlerResolvers() {
        return exceptionHandlerResolvers;
    }

    public Set getViewResolvers() {
        return viewResolvers;
    }

    public static Builder builder() {
        return new Builder();
    }

    public static final class Builder {
        private Set controllers;
        private Model model;
        private ObjectMapper objectMapper;

        private Set argumentResolvers;
        private Set exceptionHandlerResolvers;
        private Set requestHandlerResolvers;
        private Set requestInterceptorResolvers;
        private Set responseInterceptorResolvers;
        private Set predicateResolvers;
        private Set viewResolvers;

        private Builder() {
        }

        public Builder withPredicateResolvers(Set predicateResolvers) {
            this.predicateResolvers = predicateResolvers;
            return this;
        }

        public Builder withArgumentResolvers(Set argumentResolvers) {
            this.argumentResolvers = argumentResolvers;
            return this;
        }

        public Builder withExceptionHandlerResolvers(Set exceptionHandlerResolvers) {
            this.exceptionHandlerResolvers = exceptionHandlerResolvers;
            return this;
        }

        public Builder withRequestHandlerResolvers(Set requestHandlerResolvers) {
            this.requestHandlerResolvers = requestHandlerResolvers;
            return this;
        }

        public Builder withRequestInterceptorResolvers(Set requestInterceptorResolvers) {
            this.requestInterceptorResolvers = requestInterceptorResolvers;
            return this;
        }

        public Builder withResponseInterceptorResolvers(Set responseInterceptorResolvers) {
            this.responseInterceptorResolvers = responseInterceptorResolvers;
            return this;
        }

        public Builder withViewResolvers(Set viewResolvers) {
            this.viewResolvers = viewResolvers;
            return this;
        }

        public Builder withModel(Model model) {
            this.model = model;
            return this;
        }

        public Builder withControllers(Set controllers) {
            this.controllers = controllers;
            return this;
        }

        public Builder withObjectMapper(ObjectMapper objectMapper) {
            this.objectMapper = objectMapper;
            return this;
        }

        public SkillContext build() {
            return new SkillContext(controllers, model, objectMapper, requestHandlerResolvers, argumentResolvers,
                predicateResolvers, requestInterceptorResolvers, responseInterceptorResolvers, exceptionHandlerResolvers,
                viewResolvers);
        }
    }
}