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

com.syndicate.deployment.model.LambdaConfiguration Maven / Gradle / Ivy

/*
 * Copyright 2018 EPAM Systems, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License 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.syndicate.deployment.model;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.syndicate.deployment.model.events.EventSourceItem;

import java.security.InvalidParameterException;
import java.util.Arrays;
import java.util.Map;
import java.util.Objects;
import java.util.Set;

/**
 * Created by Vladyslav Tereshchenko on 10/5/2016.
 */
@JsonInclude(JsonInclude.Include.NON_NULL)
public class LambdaConfiguration {

    @JsonProperty("lambda_path")
    private String path;

    @JsonProperty("version")
    private String version;

    @JsonProperty("func_name")
    private String function;

    @JsonProperty("deployment_package")
    private String packageName;

    @JsonProperty("concurrent_executions")
    private Integer concurrentExecutions;

    @JsonProperty("resource_type")
    private ResourceType resourceType;

    @JsonProperty("runtime")
    private DeploymentRuntime runtime;

    @JsonProperty("iam_role_name")
    private String role;

    @JsonProperty("memory")
    private long memory;

    @JsonProperty("timeout")
    private long timeout;

    @JsonProperty("region")
    private String region;

    @JsonProperty("subnet_ids")
    private String[] subnetIds;

    @JsonProperty("security_group_ids")
    private String[] securityGroupIds;

    @JsonProperty("dependencies")
    private Set dependencies;

    @JsonProperty("event_sources")
    private Set eventSources;

    @JsonProperty("env_variables")
    private Map variables;

    @JsonProperty("dl_resource_name")
    private String dlResourceName;

    @JsonProperty("dl_resource_type")
    private String dlResourceType;

    @JsonProperty("tracing_mode")
    private String tracingMode;

    @JsonProperty("publish_version")
    private boolean isPublishVersion;

    @JsonProperty("alias")
    private String alias;

    public String getPath() {
        return path;
    }

    public String getVersion() {
        return version;
    }

    public String getFunction() {
        return function;
    }

    public String getPackageName() {
        return packageName;
    }

    public Integer getConcurrentExecutions() {
        return concurrentExecutions;
    }

    public void setConcurrentExecutions(Integer concurrentExecutions) {
        this.concurrentExecutions = concurrentExecutions;
    }

    public ResourceType getResourceType() {
        return resourceType;
    }

    public DeploymentRuntime getRuntime() {
        return runtime;
    }

    public String getRole() {
        return role;
    }

    public long getMemory() {
        return memory;
    }

    public long getTimeout() {
        return timeout;
    }

    public Set getDependencies() {
        return dependencies;
    }

    public Set getEventSources() {
        return eventSources;
    }

    public Map getVariables() {
        return variables;
    }

    public String getDlResourceName() {
        return dlResourceName;
    }

    public void setDlResourceName(String dlResourceName) {
        this.dlResourceName = dlResourceName;
    }

    public String getDlResourceType() {
        return dlResourceType;
    }

    public void setDlResourceType(String dlResourceType) {
        this.dlResourceType = dlResourceType;
    }

    public String getTracingMode() {
        return tracingMode;
    }

    public void setTracingMode(String tracingMode) {
        this.tracingMode = tracingMode;
    }

    @JsonIgnore
    public boolean isPublishVersion() {
        return isPublishVersion;
    }

    public void setPublishVersion(boolean publishVersion) {
        isPublishVersion = publishVersion;
    }

    public String getAlias() {
        return alias;
    }

    public void setAlias(String alias) {
        this.alias = alias;
    }

    public String[] getSubnetIds() {
        return subnetIds;
    }

    public void setSubnetIds(String[] subnetIds) {
        this.subnetIds = subnetIds;
    }

    public String[] getSecurityGroupIds() {
        return securityGroupIds;
    }

    public void setSecurityGroupIds(String[] securityGroupIds) {
        this.securityGroupIds = securityGroupIds;
    }

    public static class Builder {

        private final LambdaConfiguration configuration = new LambdaConfiguration();

        public Builder withPath(String path) {
            Objects.requireNonNull(path, "Path cannot be null");
            configuration.path = path;
            return this;
        }

        public Builder withVersion(String version) {
            Objects.requireNonNull(version, "Version cannot be null");
            configuration.version = version;
            return this;
        }

        public Builder withFunction(String function) {
            Objects.requireNonNull(function, "Function cannot be null");
            configuration.function = function;
            return this;
        }

        public Builder withRegionScope(RegionScope regionScope) {
            Objects.requireNonNull(regionScope, "region scope cannot be null");
            configuration.region = regionScope.getName();
            return this;
        }

        public Builder withPackageName(String path) {
            Objects.requireNonNull(path, "Path cannot be null");
            configuration.packageName = path;
            return this;
        }

        public Builder withConcurrentExecutions(Integer concurrentExecutions) {
            Objects.requireNonNull(concurrentExecutions, "Сoncurrent executions cannot be null");
            configuration.concurrentExecutions = concurrentExecutions;
            return this;
        }

        public Builder withResourceType(ResourceType resourceType) {
            Objects.requireNonNull(resourceType, "ResourceType cannot be null");
            configuration.resourceType = resourceType;
            return this;
        }

        public Builder withRuntime(DeploymentRuntime deploymentRuntime) {
            Objects.requireNonNull(deploymentRuntime, "DeploymentRuntime cannot be null");
            configuration.runtime = deploymentRuntime;
            return this;
        }

        public Builder withRole(String role) {
            Objects.requireNonNull(role, "Role cannot be null");
            configuration.role = role;
            return this;
        }

        public Builder withMemory(long memory) {
            if (memory <= 0) {
                throw new InvalidParameterException("Memory cannot be negative or 0");
            }
            configuration.memory = memory;
            return this;
        }

        public Builder withTimeout(long timeout) {
            if (timeout <= 0) {
                throw new InvalidParameterException("Timeout cannot be negative or 0");
            }
            configuration.timeout = timeout;
            return this;
        }

        public Builder withDependencies(Set dependencies) {
            Objects.requireNonNull(dependencies, "Dependencies cannot be null");
            configuration.dependencies = dependencies;
            return this;
        }

        public Builder withEventSources(Set events) {
            Objects.requireNonNull(events, "Events cannot be null");
            configuration.eventSources = events;
            return this;
        }

        public Builder withVariables(Map variables) {
            Objects.requireNonNull(variables, "Variables cannot be null");
            configuration.variables = variables;
            return this;
        }

        public Builder withTracingMode(String tracingMode) {
            Objects.requireNonNull(tracingMode, "Tracing mode cannot be null");
            configuration.tracingMode = tracingMode;
            return this;
        }

        public Builder withDlResourceName(String dlResourceName) {
            Objects.requireNonNull(dlResourceName, "DL Resource name cannot be null");
            configuration.dlResourceName = dlResourceName;
            return this;
        }

        public Builder withDlResourceType(String dlResourceType) {
            Objects.requireNonNull(dlResourceType, "DL Resource type cannot be null");
            configuration.dlResourceType = dlResourceType;
            return this;
        }

        public Builder withSubnetIds(String[] subnetIds) {
            Objects.requireNonNull(subnetIds, "Subnet ids cannot be null");
            configuration.subnetIds = subnetIds;
            return this;
        }

        public Builder withSecurityGroupIds(String[] securityGroupIds) {
            Objects.requireNonNull(securityGroupIds, "Security group ids cannot be null");
            configuration.securityGroupIds = securityGroupIds;
            return this;
        }

        public Builder withPublishVersion(boolean isPublishVersion) {
            configuration.isPublishVersion = isPublishVersion;
            return this;
        }

        public Builder withAlias(String alias) {
            if (configuration.alias != null && alias.equals("")) {
                throw new InvalidParameterException("Alias cannot be empty");
            }
            configuration.alias = alias;
            return this;
        }

        public LambdaConfiguration build() {
            Objects.requireNonNull(configuration.path, "Path cannot be null");
            Objects.requireNonNull(configuration.version, "Version cannot be null");
            Objects.requireNonNull(configuration.function, "Function cannot be null");
            Objects.requireNonNull(configuration.packageName, "Package name cannot be null");
            Objects.requireNonNull(configuration.resourceType, "ResourceType cannot be null");
            Objects.requireNonNull(configuration.runtime, "DeploymentRuntime cannot be null");
            Objects.requireNonNull(configuration.role, "Role cannot be null");
            if (configuration.memory <= 0) {
                throw new InvalidParameterException("Memory cannot be negative or 0");
            }
            if (configuration.timeout <= 0) {
                throw new InvalidParameterException("Timeout cannot be negative or 0");
            }
            Objects.requireNonNull(configuration.dependencies, "Dependencies cannot be null");
            Objects.requireNonNull(configuration.eventSources, "Events cannot be null");
            Objects.requireNonNull(configuration.variables, "Variables cannot be null");
            Objects.requireNonNull(configuration.subnetIds, "Subnet ids cannot be null");
            Objects.requireNonNull(configuration.securityGroupIds, "Security group ids cannot be null");
            if (configuration.alias != null && configuration.alias.equals("")) {
                throw new InvalidParameterException("Alias cannot be empty");
            }
            return configuration;
        }

    }

    @Override
    public String toString() {
        return "LambdaConfiguration{" +
                "path='" + path + '\'' +
                ", version='" + version + '\'' +
                ", function='" + function + '\'' +
                ", packageName='" + packageName + '\'' +
                ", concurrentExecutions=" + concurrentExecutions +
                ", resourceType=" + resourceType +
                ", runtime=" + runtime +
                ", role='" + role + '\'' +
                ", memory=" + memory +
                ", timeout=" + timeout +
                ", region='" + region + '\'' +
                ", subnetIds=" + Arrays.toString(subnetIds) +
                ", securityGroupIds=" + Arrays.toString(securityGroupIds) +
                ", dependencies=" + dependencies +
                ", eventSources=" + eventSources +
                ", variables=" + variables +
                ", dlResourceName='" + dlResourceName + '\'' +
                ", dlResourceType='" + dlResourceType + '\'' +
                ", tracingMode='" + tracingMode + '\'' +
                ", alias='" + alias + '\'' +
                '}';
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy