1 package org.openecomp.sdc.tosca.services;
3 import org.yaml.snakeyaml.constructor.Constructor;
4 import org.yaml.snakeyaml.introspector.Property;
5 import org.yaml.snakeyaml.introspector.PropertyUtils;
6 import org.yaml.snakeyaml.nodes.MappingNode;
7 import org.yaml.snakeyaml.nodes.NodeId;
9 import java.beans.IntrospectionException;
12 public class ToscaExtensionYamlUtil extends YamlUtil {
15 public <T> Constructor getConstructor(Class<T> typClass) {
16 return new ToscaWithHeatExtensionConstructor(typClass);
20 protected PropertyUtils getPropertyUtils() {
21 return new ToscaPropertyUtilsWithHeatExtension();
24 public class ToscaPropertyUtilsWithHeatExtension extends MyPropertyUtils {
26 public Property getProperty(Class<? extends Object> type, String name)
27 throws IntrospectionException {
30 .equals(Class.forName("org.openecomp.sdc.tosca.datatypes.model.ParameterDefinition"))) {
32 .forName("org.openecomp.sdc.tosca.datatypes.model.heatextend.ParameterDefinitionExt");
34 } catch (ClassNotFoundException ex) {
35 throw new RuntimeException(ex);
37 return super.getProperty(type, name);
41 protected class ToscaWithHeatExtensionConstructor extends StrictMapAppenderConstructor {
42 public ToscaWithHeatExtensionConstructor(Class<?> theRoot) {
44 yamlClassConstructors.put(NodeId.mapping, new MyPersistentObjectConstruct());
47 class MyPersistentObjectConstruct extends Constructor.ConstructMapping {
49 protected Object constructJavaBean2ndStep(MappingNode node, Object object) {
50 Class type = node.getType();
53 Class.forName("org.openecomp.sdc.tosca.datatypes.model.ParameterDefinition"))) {
54 Class extendHeatClass = Class.forName(
55 "org.openecomp.sdc.tosca.datatypes.model.heatextend.ParameterDefinitionExt");
56 Object extendHeatObject = extendHeatClass.newInstance();
58 return super.constructJavaBean2ndStep(node, extendHeatObject);
61 return super.constructJavaBean2ndStep(node, object);
63 } catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
64 throw new RuntimeException(ex);