Upgrade Vulnerable Direct Dependencies [snakeyaml]
[sdc.git] / common / onap-tosca-datatype / src / main / java / org / onap / sdc / tosca / services / ToscaExtensionYamlUtil.java
1 /*
2  * Copyright © 2016-2018 European Support Limited
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package org.onap.sdc.tosca.services;
18
19 import java.beans.IntrospectionException;
20 import org.onap.sdc.tosca.error.ToscaRuntimeException;
21 import org.yaml.snakeyaml.constructor.Constructor;
22 import org.yaml.snakeyaml.introspector.Property;
23 import org.yaml.snakeyaml.introspector.PropertyUtils;
24 import org.yaml.snakeyaml.nodes.MappingNode;
25 import org.yaml.snakeyaml.nodes.NodeId;
26
27
28 public class ToscaExtensionYamlUtil extends YamlUtil {
29
30     public static final String TOSCA_MODEL_PARAMETER_DEFINITION =
31             "org.onap.sdc.tosca.datatypes.model.ParameterDefinition";
32     public static final String TOSCA_MODEL_EXT_PARAMETER_DEFINITION =
33             "org.onap.sdc.tosca.datatypes.model.heatextend.ParameterDefinitionExt";
34     public static final String TOSCA_MODEL_REQUIREMENT_ASSIGNMENT =
35             "org.onap.sdc.tosca.datatypes.model.RequirementAssignment";
36     public static final String TOSCA_MODEL_EXT_REQUIREMENT_ASSIGNMENT =
37             "org.onap.sdc.tosca.datatypes.model.extension.RequirementAssignmentExt";
38     public static final String TOSCA_MODEL_SUBSTITUTION_MAPPING =
39             "org.onap.sdc.tosca.datatypes.model.SubstitutionMapping";
40
41     @Override
42     public <T> Constructor getConstructor(Class<T> typClass) {
43         return new ToscaWithHeatExtensionConstructor(typClass);
44     }
45
46     @Override
47     protected PropertyUtils getPropertyUtils() {
48         return new ToscaPropertyUtilsWithHeatExtension();
49     }
50
51     public class ToscaPropertyUtilsWithHeatExtension extends MyPropertyUtils {
52
53         @Override
54         public Property getProperty(Class<? extends Object> type, String name)  {
55             Class<? extends Object> classType = type;
56             try {
57                 if (type.equals(Class.forName(TOSCA_MODEL_PARAMETER_DEFINITION))) {
58                     classType = Class.forName(TOSCA_MODEL_EXT_PARAMETER_DEFINITION);
59                 }
60                 if (type.equals(Class.forName(TOSCA_MODEL_REQUIREMENT_ASSIGNMENT))) {
61                     classType = Class.forName(TOSCA_MODEL_EXT_REQUIREMENT_ASSIGNMENT);
62                 }
63             } catch (ClassNotFoundException ex) {
64                 throw new ToscaRuntimeException(ex);
65             }
66             return super.getProperty(classType, name);
67         }
68     }
69
70     protected class ToscaWithHeatExtensionConstructor extends StrictMapAppenderConstructor {
71
72         public ToscaWithHeatExtensionConstructor(Class<?> theRoot) {
73             super(theRoot);
74             yamlClassConstructors.put(NodeId.mapping, new MyPersistentObjectConstruct());
75         }
76
77         class MyPersistentObjectConstruct extends Constructor.ConstructMapping {
78
79             @Override
80             protected Object constructJavaBean2ndStep(MappingNode node, Object object) {
81                 Class type = node.getType();
82                 try {
83                     final Class<?> substitutionMappingClass = Class.forName(TOSCA_MODEL_SUBSTITUTION_MAPPING);
84                     if (type.equals(Class.forName(TOSCA_MODEL_PARAMETER_DEFINITION))) {
85                         Class extendHeatClass = Class.forName(TOSCA_MODEL_EXT_PARAMETER_DEFINITION);
86                         Object extendHeatObject = extendHeatClass.newInstance();
87                         // create JavaBean
88                         return super.constructJavaBean2ndStep(node, extendHeatObject);
89                     } else if (type.equals(Class.forName(TOSCA_MODEL_REQUIREMENT_ASSIGNMENT))) {
90                         Class extendHeatClass = Class.forName(TOSCA_MODEL_EXT_REQUIREMENT_ASSIGNMENT);
91                         Object extendHeatObject = extendHeatClass.newInstance();
92                         // create JavaBean
93                         return super.constructJavaBean2ndStep(node, extendHeatObject);
94                     } else if (type.equals(substitutionMappingClass)) {
95                         return super.constructJavaBean2ndStep(node, substitutionMappingClass.newInstance());
96                     } else {
97                         // create JavaBean
98                         return super.constructJavaBean2ndStep(node, object);
99                     }
100                 } catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
101                     throw new ToscaRuntimeException(ex);
102                 }
103             }
104         }
105     }
106 }