2 * Copyright © 2016-2018 European Support Limited
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package org.openecomp.sdc.versioning.dao.impl;
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;
33 public class VersionableEntityDaoZusammenImpl implements VersionableEntityDao {
35 private ZusammenAdaptor zusammenAdaptor;
37 public VersionableEntityDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
38 this.zusammenAdaptor = zusammenAdaptor;
42 public void initVersion(VersionableEntityMetadata versionableTableMetadata, String entityId,
43 Version baseVersion, Version newVersion) {
44 // redundant in zusammen impl.
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());
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);
63 .tagVersion(context, itemId, versionId, new Tag(versionToClose.toString(), null));
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();
74 private Optional<ItemVersion> getFirstVersion(SessionContext context, Id itemId) {
75 Collection<ItemVersion> versions = zusammenAdaptor.listPublicVersions(context, itemId);
76 return CollectionUtils.isEmpty(versions)
78 : versions.stream().min(getVersionModificationTimeDescComparator());
81 private static Comparator<ItemVersion> getVersionModificationTimeDescComparator() {
82 return (o1, o2) -> Integer.compare(o2.getId().getValue().length(), o1.getId().getValue().length());