Add UT for zusammen adaptor
[sdc.git] / openecomp-be / lib / openecomp-sdc-versioning-lib / openecomp-sdc-versioning-core / src / main / java / org / openecomp / sdc / versioning / dao / impl / VersionableEntityDaoZusammenImpl.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.openecomp.sdc.versioning.dao.impl;
18
19 import com.amdocs.zusammen.datatypes.Id;
20 import com.amdocs.zusammen.datatypes.SessionContext;
21 import com.amdocs.zusammen.datatypes.item.ItemVersion;
22 import com.amdocs.zusammen.datatypes.itemversion.Tag;
23 import java.util.Collection;
24 import java.util.Comparator;
25 import java.util.Optional;
26 import org.apache.commons.collections4.CollectionUtils;
27 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
28 import org.openecomp.core.zusammen.api.ZusammenUtil;
29 import org.openecomp.sdc.versioning.dao.VersionableEntityDao;
30 import org.openecomp.sdc.versioning.dao.types.Version;
31 import org.openecomp.sdc.versioning.types.VersionableEntityMetadata;
32
33 public class VersionableEntityDaoZusammenImpl implements VersionableEntityDao {
34
35   private ZusammenAdaptor zusammenAdaptor;
36
37   public VersionableEntityDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
38     this.zusammenAdaptor = zusammenAdaptor;
39   }
40
41   @Override
42   public void initVersion(VersionableEntityMetadata versionableTableMetadata, String entityId,
43                           Version baseVersion, Version newVersion) {
44     // redundant in zusammen impl.
45   }
46
47   @Override
48   public void deleteVersion(VersionableEntityMetadata versionableTableMetadata, String entityId,
49                             Version versionToDelete, Version backToVersion) {
50     SessionContext context = ZusammenUtil.createSessionContext();
51     Id itemId = new Id(entityId);
52     Id versionId = getItemVersionId(itemId, context);
53     zusammenAdaptor.resetVersionHistory(context, itemId, versionId, backToVersion.toString());
54   }
55
56   @Override
57   public void closeVersion(VersionableEntityMetadata versionableTableMetadata, String entityId,
58                            Version versionToClose) {
59     SessionContext context = ZusammenUtil.createSessionContext();
60     Id itemId = new Id(entityId);
61     Id versionId = getItemVersionId(itemId, context);
62     zusammenAdaptor
63         .tagVersion(context, itemId, versionId, new Tag(versionToClose.toString(), null));
64   }
65
66   // TODO: 3/19/2017 move to a common util
67   private Id getItemVersionId(Id itemId, SessionContext context) {
68     Optional<ItemVersion> itemVersionOptional = getFirstVersion(context, itemId);
69     ItemVersion itemVersion = itemVersionOptional.orElseThrow(() ->
70         new RuntimeException(String.format("No version was found for item %s.", itemId)));
71     return itemVersion.getId();
72   }
73
74   private Optional<ItemVersion> getFirstVersion(SessionContext context, Id itemId) {
75     Collection<ItemVersion> versions = zusammenAdaptor.listPublicVersions(context, itemId);
76     return CollectionUtils.isEmpty(versions)
77                    ? Optional.empty()
78                    : versions.stream().min(getVersionModificationTimeDescComparator());
79   }
80
81   private static Comparator<ItemVersion> getVersionModificationTimeDescComparator() {
82     return (o1, o2) -> Integer.compare(o2.getId().getValue().length(), o1.getId().getValue().length());
83   }
84 }