From 2e984294ac28c6f2ede290c38164c5d536ccaf4a Mon Sep 17 00:00:00 2001 From: ChrisC Date: Tue, 31 Jan 2017 13:57:24 +0100 Subject: Initial OpenECOMP MSO OpenStack SDK lib commit Change-Id: Ieaacb2b2c0dcc469669880e73f0cda9fa59a6c5a Signed-off-by: ChrisC --- .../com/woorea/openstack/heat/model/Stack.java | 243 +++++++++++++++++++++ 1 file changed, 243 insertions(+) create mode 100644 heat-model/src/main/java/com/woorea/openstack/heat/model/Stack.java (limited to 'heat-model/src/main/java/com/woorea/openstack/heat/model/Stack.java') diff --git a/heat-model/src/main/java/com/woorea/openstack/heat/model/Stack.java b/heat-model/src/main/java/com/woorea/openstack/heat/model/Stack.java new file mode 100644 index 0000000..5f58195 --- /dev/null +++ b/heat-model/src/main/java/com/woorea/openstack/heat/model/Stack.java @@ -0,0 +1,243 @@ +package com.woorea.openstack.heat.model; + +/* + * Modifications copyright (c) 2017 AT&T Intellectual Property + */ + +import org.codehaus.jackson.annotate.JsonIgnore; +import org.codehaus.jackson.annotate.JsonIgnoreProperties; +import org.codehaus.jackson.annotate.JsonProperty; +import org.codehaus.jackson.map.ObjectMapper; +import org.codehaus.jackson.map.annotate.JsonRootName; + +import java.io.IOException; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonRootName("stack") +public class Stack { + @JsonProperty("description") + private String description; + + @JsonProperty("links") + private List links; + + @JsonProperty("stack_status_reason") + private String stackStatusReason; + + @JsonProperty("stack_name") + private String stackName; + + @JsonProperty("updated_time") + private Date updatedTime; + + @JsonProperty("creation_time") + private Date creationTime; + + @JsonProperty("stack_status") + private String stackStatus; + + @JsonProperty("id") + private String id; + + @JsonProperty("files") + private Map files = null; + + // ObjectMapper instance to parse Json stack outputs + @JsonIgnore + private static ObjectMapper mapper = new ObjectMapper(); + + public Date getUpdatedTime() { + return updatedTime; + } + + public void setUpdatedTime(Date updatedTime) { + this.updatedTime = updatedTime; + } + + public String getStackStatus() { + return stackStatus; + } + + public void setStackStatus(String stackStatus) { + this.stackStatus = stackStatus; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public Date getCreationTime() { + return creationTime; + } + + public void setCreationTime(Date creationTime) { + this.creationTime = creationTime; + } + + public String getStackName() { + return stackName; + } + + public void setStackName(String stackName) { + this.stackName = stackName; + } + + public String getStackStatusReason() { + return stackStatusReason; + } + + public void setStackStatusReason(String stackStatusReason) { + this.stackStatusReason = stackStatusReason; + } + + public List getLinks() { + return links; + } + + public void setLinks(List links) { + this.links = links; + } + + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Map getFiles() { + return this.files; + } + public void setFiles(Map files) { + this.files = files; + } + + + @Override + public String toString() { + return "Stack{" + + "description='" + description + '\'' + + ", links=" + links + + ", stackStatusReason='" + stackStatusReason + '\'' + + ", stackName='" + stackName + '\'' + + ", updatedTime=" + updatedTime + + ", creationTime=" + creationTime + + ", stackStatus='" + stackStatus + '\'' + + ", id='" + id + '\'' + + ", outputs='" + outputs + '\'' + + ", parameters='" + parameters + '\'' + + ", files='" + files + '\'' + + '}'; + } + + @JsonIgnoreProperties(ignoreUnknown=true) + public static final class Output { + @JsonProperty("output_value") + private Object outputValue; + + private String description; + + @JsonProperty("output_key") + private String outputKey; + + public Object getOutputValue() { + return outputValue; + } + + public String getDescription() { + return description; + } + + public String getOutputKey() { + return outputKey; + } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return "Output [key=" + outputKey + ", value=" + + outputValue + "]"; + } + } + + private List outputs; + + public List getOutputs() { + return outputs; + } + + private Object _findOutputValue (String key) { + for (Output o : outputs) { + if (o.getOutputKey().equals(key)) { + return o.getOutputValue(); + } + } + return null; + } + + /* + * Return a stack output as a String. + * Generally speaking, most outputs will be Strings. + */ + public String getOutputValue (String key) + { + Object value = _findOutputValue(key); + if (value != null) + return value.toString(); + else + return null; + } + + /* + * Return a stack output as a Json-mapped Object of the provided type. + * This is useful for json-object stack outputs. + */ + public T getOutputValue (String key, Class type) + { + try { + String s = mapper.writeValueAsString(_findOutputValue(key)); + return (mapper.readValue(s, type)); + } + catch (IOException e) { + return null; + } + } + + @JsonProperty("parameters") + private Map parameters = new HashMap(); + + public void setParameters (Map params) + { + // Need to "fix" comma-delimited-list parameters for pre-Juno Heat + // (see https://bugs.launchpad.net/heat/+bug/1367393) + parameters = params; + + for (Entry param : parameters.entrySet()) + { + // CDL params are returned as a string with format: + // "[u'',u'',...]" + String value = param.getValue().toString(); + if (value.startsWith("[") && value.endsWith("]")) + { + param.setValue(value.substring(1,value.length()-1).replaceAll("u'([^\']+)'","$1")); + } + } + } + + public Map getParameters() { + return parameters; + } +} -- cgit 1.2.3-korg