Add collaboration feature
[sdc.git] / openecomp-be / backend / openecomp-sdc-vendor-software-product-manager / src / main / java / org / openecomp / sdc / vendorsoftwareproduct / impl / ComponentDependencyModelManagerImpl.java
1 package org.openecomp.sdc.vendorsoftwareproduct.impl;
2
3 import org.apache.commons.lang3.StringUtils;
4 import org.openecomp.core.utilities.CommonMethods;
5 import org.openecomp.sdc.common.errors.CoreException;
6 import org.openecomp.sdc.common.errors.ErrorCode;
7 import org.openecomp.sdc.datatypes.error.ErrorLevel;
8 import org.openecomp.sdc.logging.api.Logger;
9 import org.openecomp.sdc.logging.api.LoggerFactory;
10 import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
11 import org.openecomp.sdc.logging.context.impl.MdcDataErrorMessage;
12 import org.openecomp.sdc.logging.types.LoggerConstants;
13 import org.openecomp.sdc.logging.types.LoggerTragetServiceName;
14 import org.openecomp.sdc.vendorsoftwareproduct.ComponentDependencyModelManager;
15 import org.openecomp.sdc.vendorsoftwareproduct.ComponentManager;
16 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentDependencyModelDao;
17 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentDependencyModelEntity;
18 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
19 import org.openecomp.sdc.vendorsoftwareproduct.errors.ComponentDependencyModelErrorBuilder;
20 import org.openecomp.sdc.versioning.VersioningUtil;
21 import org.openecomp.sdc.versioning.dao.types.Version;
22
23 import java.util.Collection;
24
25 public class ComponentDependencyModelManagerImpl implements ComponentDependencyModelManager {
26
27   private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
28   protected static final Logger logger =
29       LoggerFactory.getLogger(ComponentDependencyModelManagerImpl.class);
30
31   private ComponentManager componentManager;
32   private ComponentDependencyModelDao componentDependencyModelDao;
33
34   public ComponentDependencyModelManagerImpl(
35       ComponentManager componentManager, ComponentDependencyModelDao componentDependencyModelDao) {
36     this.componentManager = componentManager;
37     this.componentDependencyModelDao = componentDependencyModelDao;
38   }
39
40   private void raiseException(ErrorCode errorCode) {
41     MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_API,
42         LoggerTragetServiceName.CREATE_COMPONENT_DEPENDENCY_MODEL, ErrorLevel.ERROR.name(),
43         errorCode.id(), errorCode.message());
44     throw new CoreException(errorCode);
45   }
46
47   @Override
48   public Collection<ComponentDependencyModelEntity> list(String vspId, Version version) {
49
50     mdcDataDebugMessage.debugExitMessage("VSP id, version", vspId, version.toString());
51
52     return componentDependencyModelDao
53         .list(new ComponentDependencyModelEntity(vspId, version, null));
54   }
55
56   @Override
57   public ComponentDependencyModelEntity createComponentDependency(ComponentDependencyModelEntity
58                                                                       entity, String vspId,
59                                                                   Version version) {
60
61     validateComponentDependency(entity);
62     entity.setId(CommonMethods.nextUuId());
63     componentDependencyModelDao.create(entity);
64     return entity;
65   }
66
67   private void validateComponentDependency(ComponentDependencyModelEntity entity) {
68     if (!StringUtils.isEmpty(entity.getSourceComponentId())) {
69       componentManager.validateComponentExistence(entity.getVspId(), entity.getVersion(),
70           entity.getSourceComponentId());
71       if (entity.getSourceComponentId().equals(entity.getTargetComponentId())) {
72         ErrorCode errorCode =
73             ComponentDependencyModelErrorBuilder.getSourceTargetComponentEqualErrorBuilder();
74         raiseException(errorCode);
75       }
76     } else {
77       ErrorCode errorCode = ComponentDependencyModelErrorBuilder
78           .getNoSourceComponentErrorBuilder();
79       raiseException(errorCode);
80     }
81
82     if (!StringUtils.isEmpty(entity.getTargetComponentId())) {
83       componentManager.validateComponentExistence(entity.getVspId(), entity.getVersion(),
84           entity.getTargetComponentId());
85     }
86   }
87
88   @Override
89   public void delete(String vspId, Version version, String dependencyId) {
90     mdcDataDebugMessage.debugEntryMessage("VSP id, dependencyId", vspId, dependencyId);
91     ComponentDependencyModelEntity componentDependencyEntity = getComponentDependency(vspId,
92         version, dependencyId);
93     if (componentDependencyEntity != null) {
94       componentDependencyModelDao.delete(componentDependencyEntity);
95     }
96
97     mdcDataDebugMessage.debugExitMessage("VSP id, dependencyId", vspId, dependencyId);
98   }
99
100   @Override
101   public void update(ComponentDependencyModelEntity entity) {
102     mdcDataDebugMessage.debugEntryMessage("VSP id, dependencyId", entity.getVspId(),
103         entity.getId());
104     ComponentDependencyModelEntity componentDependencyEntity = getComponentDependency(
105         entity.getVspId(), entity.getVersion(), entity.getId());
106     validateComponentDependency(entity);
107     componentDependencyModelDao.update(entity);
108   }
109
110   @Override
111   public ComponentDependencyModelEntity get(String vspId, Version version, String dependencyId) {
112     mdcDataDebugMessage.debugEntryMessage("VSP id, dependencyId", vspId, dependencyId);
113     ComponentDependencyModelEntity componentDependency =
114         getComponentDependency(vspId, version, dependencyId);
115     return componentDependency;
116   }
117
118   private ComponentDependencyModelEntity getComponentDependency(String vspId, Version version,
119                                                                 String dependencyId) {
120     ComponentDependencyModelEntity retrieved = componentDependencyModelDao.get(
121         new ComponentDependencyModelEntity(vspId, version, dependencyId));
122     VersioningUtil.validateEntityExistence(retrieved, new ComponentDependencyModelEntity(
123         vspId, version, dependencyId), VspDetails.ENTITY_TYPE);
124     return retrieved;
125   }
126 }