Add collaboration feature
[sdc.git] / openecomp-be / lib / openecomp-healing-lib / openecomp-sdc-healing-impl / src / main / java / org / openecomp / sdc / healing / healers / SubEntitiesQuestionnaireHealer.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.sdc.healing.healers;
22
23 import org.openecomp.core.utilities.json.JsonSchemaDataGenerator;
24 import org.openecomp.sdc.healing.interfaces.Healer;
25 import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
26 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentDao;
27 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentDaoFactory;
28 import org.openecomp.sdc.vendorsoftwareproduct.dao.NetworkDao;
29 import org.openecomp.sdc.vendorsoftwareproduct.dao.NetworkDaoFactory;
30 import org.openecomp.sdc.vendorsoftwareproduct.dao.NicDao;
31 import org.openecomp.sdc.vendorsoftwareproduct.dao.NicDaoFactory;
32 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
33 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.CompositionEntity;
34 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity;
35 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity;
36 import org.openecomp.sdc.vendorsoftwareproduct.services.schemagenerator.SchemaGenerator;
37 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType;
38 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateContext;
39 import org.openecomp.sdc.versioning.dao.types.Version;
40
41 import java.util.Collection;
42 import java.util.Objects;
43
44 public class SubEntitiesQuestionnaireHealer implements Healer {
45   private static Version version00 = new Version(0, 0);
46   private MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
47
48   private static ComponentDao componentDao = ComponentDaoFactory.getInstance().createInterface();
49   private static NicDao nicDao = NicDaoFactory.getInstance().createInterface();
50   private static NetworkDao networkDao = NetworkDaoFactory.getInstance().createInterface();
51
52   private static String emptyString = "";
53   private static String emptyJson = "{}";
54
55   @Override
56   public Object heal(String vspId, Version version) throws Exception {
57
58
59     mdcDataDebugMessage.debugEntryMessage(null);
60
61     Collection<ComponentEntity> componentEntities =
62         componentDao.listCompositionAndQuestionnaire(vspId, version);
63
64     networkDao.list(new NetworkEntity(vspId, version, null));
65
66     Collection<NicEntity> nicEntities = nicDao.listByVsp(vspId, version);
67
68     healCompositionEntityQuestionnaire(componentEntities, version, CompositionEntityType.component);
69     healCompositionEntityQuestionnaire(nicEntities, version, CompositionEntityType.nic);
70
71     mdcDataDebugMessage.debugExitMessage(null);
72     return new Object();
73   }
74
75
76   private void healCompositionEntityQuestionnaire(Collection
77                                                       compositionEntities,
78                                                   Version newVersion, CompositionEntityType type) {
79
80
81     mdcDataDebugMessage.debugEntryMessage(null);
82
83     for (Object entity : compositionEntities) {
84       CompositionEntity compositionEntity = (CompositionEntity) entity;
85       if (isQuestionnaireNeedsToGetHealed(compositionEntity)) {
86         compositionEntity.setVersion(newVersion);
87         updateNullQuestionnaire(compositionEntity, type);
88       }
89     }
90
91     mdcDataDebugMessage.debugExitMessage(null);
92   }
93
94   private boolean isQuestionnaireNeedsToGetHealed(CompositionEntity compositionEntity) {
95     return Objects.isNull(compositionEntity.getQuestionnaireData())
96         || emptyString.equals(compositionEntity.getQuestionnaireData())
97         || emptyJson.equals(compositionEntity.getQuestionnaireData());
98   }
99
100   private void updateNullQuestionnaire(CompositionEntity entity,
101                                        CompositionEntityType type) {
102
103
104     mdcDataDebugMessage.debugEntryMessage(null);
105
106     entity.setQuestionnaireData(
107         new JsonSchemaDataGenerator(SchemaGenerator
108             .generate(SchemaTemplateContext.questionnaire, type,
109                 null)).generateData());
110
111     switch (type) {
112       case component:
113         ComponentEntity component = (ComponentEntity) entity;
114         componentDao.updateQuestionnaireData(component.getVspId(), component
115             .getVersion(), component.getId(), component.getQuestionnaireData());
116         break;
117
118       case nic:
119         NicEntity nic = (NicEntity) entity;
120         nicDao.updateQuestionnaireData(nic.getVspId(), nic.getVersion(), nic.getComponentId(),
121             nic.getId(), nic.getQuestionnaireData());
122         break;
123     }
124     mdcDataDebugMessage.debugExitMessage(null);
125   }
126
127 }