/*************************************************************************
* Copyright 2013-2014 Eucalyptus Systems, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see http://www.gnu.org/licenses/.
*
* Please contact Eucalyptus Systems, Inc., 6755 Hollister Ave., Goleta
* CA 93117, USA or visit http://www.eucalyptus.com/licenses/ if you need
* additional information or have any questions.
************************************************************************/
package com.eucalyptus.cloudformation.resources;
import com.eucalyptus.cloudformation.CloudFormationException;
import com.eucalyptus.cloudformation.template.JsonHelper;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.collect.Lists;
import org.apache.log4j.Logger;
import java.util.Collection;
public class ResourceInfoHelper {
private static final Logger LOG = Logger.getLogger(ResourceInfoHelper.class);
public static void setResourceAttributesJson(ResourceInfo resourceInfo, String json) throws CloudFormationException {
JsonNode attributeNode = JsonHelper.getJsonNodeFromString(json);
for (String attributeName: Lists.newArrayList(attributeNode.fieldNames())) {
if (resourceInfo.getAttributeNames().contains(attributeName)) {
resourceInfo.setResourceAttributeJson(attributeName, attributeNode.get(attributeName).asText());
} else {
LOG.warn("Attempting to set non-existent attribute '" + attributeName + "' on resource " + resourceInfo.getLogicalResourceId() + " (" + resourceInfo.getType() + "). " +
"Perhaps this attribute previously existed? Ignoring this request.");
}
}
}
public static String getResourceAttributesJson(ResourceInfo resourceInfo) throws CloudFormationException {
Collection<String> attributeNames = resourceInfo.getAttributeNames();
ObjectNode attributesNode = JsonHelper.createObjectNode();
if (attributeNames != null) {
for (String attributeName: attributeNames) {
String resourceAttributeJson = resourceInfo.getResourceAttributeJson(attributeName);
if (resourceAttributeJson == null) {
continue; // no real point in setting a value to null (which is default)
}
attributesNode.put(attributeName, resourceAttributeJson);
}
}
return JsonHelper.getStringFromJsonNode(attributesNode);
}
}