/*
* Copyright 2016 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.amazonaws.eclipse.lambda.serverless.model.transform;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.amazonaws.eclipse.lambda.serverless.model.Resource;
import com.amazonaws.eclipse.lambda.serverless.model.ResourceType;
import com.amazonaws.eclipse.lambda.serverless.model.TypeProperties;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
public class ServerlessFunction extends Resource {
private static final String DEFAULT_RUNTIME = "java8";
private static final Integer DEFAULT_TIMEOUT = 300;
private static final Integer DEFAULT_MEMORY_SIZE = 512;
@JsonProperty("Handler")
private String handler;
@JsonProperty("Runtime")
private String runtime;
@JsonProperty("CodeUri")
private String codeUri;
@JsonProperty("Description")
private String description;
@JsonProperty("MemorySize")
private Integer memorySize;
@JsonProperty("Timeout")
private Integer timeout;
@JsonProperty("Role")
private String role;
@JsonProperty("Policies")
private List<String> policies;
@JsonIgnore
private Map<String, TypeProperties> additionalEvents;
// Additional properties that we don't care for now such as Environment
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
public String getHandler() {
return handler;
}
public void setHandler(String handler) {
this.handler = handler;
}
public String getRuntime() {
return runtime == null ? DEFAULT_RUNTIME : runtime;
}
public void setRuntime(String runtime) {
this.runtime = runtime;
}
public String getCodeUri() {
return codeUri;
}
public void setCodeUri(String codeUri) {
this.codeUri = codeUri;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Integer getMemorySize() {
return memorySize == null ? DEFAULT_MEMORY_SIZE : memorySize;
}
public void setMemorySize(Integer memorySize) {
this.memorySize = memorySize;
}
public Integer getTimeout() {
return timeout == null ? DEFAULT_TIMEOUT : timeout;
}
public void setTimeout(Integer timeout) {
this.timeout = timeout;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public List<String> getPolicies() {
return policies;
}
public void setPolicies(List<String> policies) {
this.policies = policies;
}
public Map<String, TypeProperties> getAdditionalEvents() {
return additionalEvents == null ? new HashMap<String, TypeProperties>() : additionalEvents;
}
public void setAdditionalEvents(Map<String, TypeProperties> additionalEvents) {
this.additionalEvents = additionalEvents;
}
public TypeProperties toTypeProperties() {
TypeProperties tp = new TypeProperties();
tp.setType(ResourceType.AWS_SERVERLESS_FUNCTION.toString());
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> properties = mapper.convertValue(this, Map.class);
properties.put("Events", additionalEvents);
tp.setProperties(properties);
return tp;
}
@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
@JsonAnySetter
public void addAdditionalProperty(String key, Object value) {
this.additionalProperties.put(key, value);
}
public void setAdditionalProperties(Map<String, Object> additionalProperties) {
this.additionalProperties = additionalProperties;
}
@Override
public String toString() {
return "ServerlessFunction [handler=" + handler + ", runtime=" + runtime
+ ", codeUri=" + codeUri + ", description=" + description
+ ", memorySize=" + memorySize + ", timeout=" + timeout
+ ", role=" + role + ", policies=" + policies + "]";
}
}