53f37821838c1bedb14d34e40737c6dccb26b4bf
[sdc.git] /
1 /*
2  * Copyright © 2016-2017 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.openecomp.sdc.vendorsoftwareproduct.impl;
18
19 import org.apache.commons.collections4.CollectionUtils;
20 import org.openecomp.sdc.common.errors.CoreException;
21 import org.openecomp.sdc.vendorsoftwareproduct.CompositionEntityDataManager;
22 import org.openecomp.sdc.vendorsoftwareproduct.NetworkManager;
23 import org.openecomp.sdc.vendorsoftwareproduct.dao.NetworkDao;
24 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
25 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity;
26 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
27 import org.openecomp.sdc.vendorsoftwareproduct.errors.CompositionEditNotAllowedErrorBuilder;
28 import org.openecomp.sdc.vendorsoftwareproduct.services.schemagenerator.SchemaGenerator;
29 import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityResponse;
30 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType;
31 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityValidationData;
32 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network;
33 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.NetworkCompositionSchemaInput;
34 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateContext;
35 import org.openecomp.sdc.versioning.VersioningUtil;
36 import org.openecomp.sdc.versioning.dao.types.Version;
37
38 import java.util.Collection;
39
40 public class NetworkManagerImpl implements NetworkManager {
41   private final NetworkDao networkDao;
42   private final CompositionEntityDataManager compositionEntityDataManager;
43   private final VendorSoftwareProductInfoDao vspInfoDao;
44
45   public NetworkManagerImpl(NetworkDao networkDao,
46                             CompositionEntityDataManager compositionEntityDataManager,
47                             VendorSoftwareProductInfoDao vendorSoftwareProductInfoDao) {
48     this.networkDao = networkDao;
49     this.compositionEntityDataManager = compositionEntityDataManager;
50     this.vspInfoDao = vendorSoftwareProductInfoDao;
51   }
52
53   @Override
54   public Collection<NetworkEntity> listNetworks(String vspId, Version version) {
55     return networkDao.list(new NetworkEntity(vspId, version, null));
56   }
57
58   @Override
59   public NetworkEntity createNetwork(NetworkEntity network) {
60     if (!vspInfoDao.isManual(network.getVspId(), network.getVersion())) {
61       throw new CoreException(
62           new CompositionEditNotAllowedErrorBuilder(network.getVspId(), network.getVersion())
63               .build());
64     }
65     return null;
66   }
67
68   @Override
69   public CompositionEntityValidationData updateNetwork(NetworkEntity network) {
70     NetworkEntity retrieved = getValidatedNetwork(network.getVspId(), network.getVersion(), network.getId());
71
72     NetworkCompositionSchemaInput schemaInput = new NetworkCompositionSchemaInput();
73     schemaInput.setManual(!vspInfoDao.isManual(network.getVspId(), network.getVersion()));
74     schemaInput.setNetwork(retrieved.getNetworkCompositionData());
75
76     CompositionEntityValidationData validationData = compositionEntityDataManager
77         .validateEntity(network, SchemaTemplateContext.composition, schemaInput);
78     if (CollectionUtils.isEmpty(validationData.getErrors())) {
79       networkDao.update(network);
80     }
81     return validationData;
82   }
83
84   @Override
85   public CompositionEntityResponse<Network> getNetwork(String vspId, Version version,
86                                                        String networkId) {
87     NetworkEntity networkEntity = getValidatedNetwork(vspId, version, networkId);
88     Network network = networkEntity.getNetworkCompositionData();
89
90     NetworkCompositionSchemaInput schemaInput = new NetworkCompositionSchemaInput();
91     schemaInput.setManual(!vspInfoDao.isManual(vspId, version));
92     schemaInput.setNetwork(network);
93
94     CompositionEntityResponse<Network> response = new CompositionEntityResponse<>();
95     response.setId(networkId);
96     response.setData(network);
97     response.setSchema(getCompositionSchema(schemaInput));
98     return response;
99   }
100
101
102   private NetworkEntity getValidatedNetwork(String vspId, Version version, String networkId) {
103     NetworkEntity retrieved = networkDao.get(new NetworkEntity(vspId, version, networkId));
104     VersioningUtil.validateEntityExistence(retrieved, new NetworkEntity(vspId, version, networkId),
105         VspDetails.ENTITY_TYPE);
106     return retrieved;
107   }
108
109   @Override
110   public void deleteNetwork(String vspId, Version version, String networkId) {
111     if (!vspInfoDao.isManual(vspId, version)) {
112       throw new CoreException(
113           new CompositionEditNotAllowedErrorBuilder(vspId, version).build());
114     }
115   }
116
117
118   protected String getCompositionSchema(NetworkCompositionSchemaInput schemaInput) {
119     return SchemaGenerator
120         .generate(SchemaTemplateContext.composition, CompositionEntityType.network, schemaInput);
121   }
122 }