2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2019 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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
20 package org.openecomp.sdc.versioning.dao.impl.zusammen;
22 import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
24 import com.amdocs.zusammen.datatypes.Id;
25 import com.amdocs.zusammen.datatypes.SessionContext;
26 import com.amdocs.zusammen.datatypes.item.*;
27 import com.amdocs.zusammen.datatypes.itemversion.ItemVersionRevisions;
28 import java.util.ArrayList;
29 import java.util.List;
30 import java.util.Optional;
31 import java.util.stream.Collectors;
32 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
33 import org.openecomp.sdc.common.errors.CoreException;
34 import org.openecomp.sdc.common.errors.ErrorCategory;
35 import org.openecomp.sdc.common.errors.ErrorCode;
36 import org.openecomp.sdc.versioning.dao.VersionDao;
37 import org.openecomp.sdc.versioning.dao.impl.zusammen.convertor.ItemVersionToVersionConvertor;
38 import org.openecomp.sdc.versioning.dao.types.Revision;
39 import org.openecomp.sdc.versioning.dao.types.SynchronizationState;
40 import org.openecomp.sdc.versioning.dao.types.Version;
41 import org.openecomp.sdc.versioning.dao.types.VersionState;
43 public class VersionZusammenDaoImpl implements VersionDao {
45 public static final class ZusammenProperty {
46 public static final String LABEL = "label";
47 public static final String STATUS = "status";
49 private ZusammenProperty() {
50 throw new IllegalStateException("Constants class");
54 private ZusammenAdaptor zusammenAdaptor;
56 public VersionZusammenDaoImpl(ZusammenAdaptor zusammenAdaptor) {
57 this.zusammenAdaptor = zusammenAdaptor;
61 public List<Version> list(String itemId) {
62 ItemVersionToVersionConvertor convertor = new ItemVersionToVersionConvertor();
63 return zusammenAdaptor.listPublicVersions(createSessionContext(), new Id(itemId)).stream()
64 .map(convertor::convert)
65 .collect(Collectors.toList());
69 public void create(String itemId, Version version) {
71 zusammenAdaptor.createVersion(createSessionContext(), new Id(itemId),
72 version.getBaseId() == null ? null : new Id(version.getBaseId()),
73 mapToZusammenVersion(version));
75 version.setId(versionId.getValue());
79 public void update(String itemId, Version version) {
80 zusammenAdaptor.updateVersion(createSessionContext(), new Id(itemId), new Id(version.getId()),
81 mapToZusammenVersion(version));
85 public Optional<Version> get(String itemId, Version version) {
86 SessionContext context = createSessionContext();
87 Id itemIdObj = new Id(itemId);
88 Id versionId = new Id(version.getId());
89 ItemVersion itemVersion = zusammenAdaptor.getVersion(context, itemIdObj, versionId);
91 if (itemVersion == null) {
92 return Optional.empty();
95 VersionState versionState =
96 convertState(zusammenAdaptor.getVersionStatus(context, itemIdObj, versionId));
97 updateVersionStatus(context, itemIdObj, versionId, versionState, itemVersion);
99 Version result = new ItemVersionToVersionConvertor().convert(itemVersion);
100 result.setState(versionState);
101 return Optional.of(result);
105 public void delete(String itemId, Version version) {
106 throw new UnsupportedOperationException("Delete version operation is not yet supported.");
110 public void publish(String itemId, Version version, String message) {
112 .publishVersion(createSessionContext(), new Id(itemId), new Id(version.getId()), message);
116 public void sync(String itemId, Version version) {
118 .syncVersion(createSessionContext(), new Id(itemId), new Id(version.getId()));
122 public void forceSync(String itemId, Version version) {
124 .forceSyncVersion(createSessionContext(), new Id(itemId), new Id(version.getId()));
128 public void clean(String itemId, Version version) {
129 zusammenAdaptor.cleanVersion(createSessionContext(), new Id(itemId), new Id(version.getId()));
133 public void revert(String itemId, Version version, String revisionId) {
134 zusammenAdaptor.revert(createSessionContext(), new Id(itemId), new Id(version.getId()),
139 public List<Revision> listRevisions(String itemId, Version version) {
140 ItemVersionRevisions itemVersionRevisions = zusammenAdaptor
141 .listRevisions(createSessionContext(), new Id(itemId), new Id(version.getId()));
143 return itemVersionRevisions == null || itemVersionRevisions.getItemVersionRevisions() == null ||
144 itemVersionRevisions.getItemVersionRevisions().isEmpty()
146 : itemVersionRevisions.getItemVersionRevisions().stream()
147 .map(this::convertRevision)
148 .sorted(this::compareRevisionsTime)
149 .collect(Collectors.toList());
152 private void updateVersionStatus(SessionContext context, Id itemId, Id versionId,
153 VersionState versionState, ItemVersion itemVersion) {
154 if (versionState.getSynchronizationState() != SynchronizationState.UpToDate) {
155 String versionStatus = zusammenAdaptor.getPublicVersion(context, itemId, versionId)
156 .getData().getInfo().getProperty(ZusammenProperty.STATUS);
157 itemVersion.getData().getInfo().addProperty(ZusammenProperty.STATUS, versionStatus);
161 private ItemVersionData mapToZusammenVersion(Version version) {
162 Info info = new Info();
163 info.addProperty(ZusammenProperty.LABEL, version.toString());
164 info.addProperty(ZusammenProperty.STATUS, version.getStatus().name());
165 info.setName(version.getName());
166 info.setDescription(version.getDescription());
168 ItemVersionData itemVersionData = new ItemVersionData();
169 itemVersionData.setInfo(info);
170 return itemVersionData;
173 private VersionState convertState(ItemVersionStatus versionStatus) {
174 VersionState state = new VersionState();
175 state.setSynchronizationState(getSyncState(versionStatus.getSynchronizationStatus()));
176 state.setDirty(versionStatus.isDirty());
180 private SynchronizationState getSyncState(SynchronizationStatus synchronizationStatus) {
181 switch (synchronizationStatus) {
183 return SynchronizationState.UpToDate;
185 return SynchronizationState.OutOfSync;
187 return SynchronizationState.Merging;
189 throw new CoreException(new ErrorCode.ErrorCodeBuilder()
190 .withCategory(ErrorCategory.APPLICATION)
191 .withId("UNKNOWN_VERSION_STATE")
192 .withMessage("Version state is unknown").build());
196 private Revision convertRevision(
197 com.amdocs.zusammen.datatypes.itemversion.Revision zusammenRevision) {
198 Revision revision = new Revision();
199 revision.setId(zusammenRevision.getRevisionId().getValue());
200 revision.setTime(zusammenRevision.getTime());
201 revision.setUser(zusammenRevision.getUser());
202 revision.setMessage(zusammenRevision.getMessage());
206 private int compareRevisionsTime(Revision revision1, Revision revision2) {
207 return revision1.getTime().before(revision2.getTime()) ? 1 : -1;