Added oparent to sdc main
[sdc.git] / openecomp-be / lib / openecomp-sdc-versioning-lib / openecomp-sdc-versioning-core / src / main / java / org / openecomp / sdc / versioning / dao / impl / zusammen / VersionZusammenDaoImpl.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
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
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
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=========================================================
19  */
20 package org.openecomp.sdc.versioning.dao.impl.zusammen;
21
22 import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
23
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;
42
43 public class VersionZusammenDaoImpl implements VersionDao {
44
45   public static final class ZusammenProperty {
46     public static final String LABEL = "label";
47     public static final String STATUS = "status";
48
49     private ZusammenProperty() {
50       throw new IllegalStateException("Constants class");
51     }
52   }
53
54   private ZusammenAdaptor zusammenAdaptor;
55
56   public VersionZusammenDaoImpl(ZusammenAdaptor zusammenAdaptor) {
57     this.zusammenAdaptor = zusammenAdaptor;
58   }
59
60   @Override
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());
66   }
67
68   @Override
69   public void create(String itemId, Version version) {
70     Id versionId =
71         zusammenAdaptor.createVersion(createSessionContext(), new Id(itemId),
72             version.getBaseId() == null ? null : new Id(version.getBaseId()),
73             mapToZusammenVersion(version));
74
75     version.setId(versionId.getValue());
76   }
77
78   @Override
79   public void update(String itemId, Version version) {
80     zusammenAdaptor.updateVersion(createSessionContext(), new Id(itemId), new Id(version.getId()),
81         mapToZusammenVersion(version));
82   }
83
84   @Override
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);
90
91     if (itemVersion == null) {
92       return Optional.empty();
93     }
94
95     VersionState versionState =
96         convertState(zusammenAdaptor.getVersionStatus(context, itemIdObj, versionId));
97     updateVersionStatus(context, itemIdObj, versionId, versionState, itemVersion);
98
99     Version result = new ItemVersionToVersionConvertor().convert(itemVersion);
100     result.setState(versionState);
101     return Optional.of(result);
102   }
103
104   @Override
105   public void delete(String itemId, Version version) {
106     throw new UnsupportedOperationException("Delete version operation is not yet supported.");
107   }
108
109   @Override
110   public void publish(String itemId, Version version, String message) {
111     zusammenAdaptor
112         .publishVersion(createSessionContext(), new Id(itemId), new Id(version.getId()), message);
113   }
114
115   @Override
116   public void sync(String itemId, Version version) {
117     zusammenAdaptor
118         .syncVersion(createSessionContext(), new Id(itemId), new Id(version.getId()));
119   }
120
121   @Override
122   public void forceSync(String itemId, Version version) {
123     zusammenAdaptor
124         .forceSyncVersion(createSessionContext(), new Id(itemId), new Id(version.getId()));
125   }
126
127   @Override
128   public void clean(String itemId, Version version) {
129     zusammenAdaptor.cleanVersion(createSessionContext(), new Id(itemId), new Id(version.getId()));
130   }
131
132   @Override
133   public void revert(String itemId, Version version, String revisionId) {
134     zusammenAdaptor.revert(createSessionContext(), new Id(itemId), new Id(version.getId()),
135         new Id(revisionId));
136   }
137
138   @Override
139   public List<Revision> listRevisions(String itemId, Version version) {
140     ItemVersionRevisions itemVersionRevisions = zusammenAdaptor
141         .listRevisions(createSessionContext(), new Id(itemId), new Id(version.getId()));
142
143     return itemVersionRevisions == null || itemVersionRevisions.getItemVersionRevisions() == null ||
144         itemVersionRevisions.getItemVersionRevisions().isEmpty()
145         ? new ArrayList<>()
146         : itemVersionRevisions.getItemVersionRevisions().stream()
147             .map(this::convertRevision)
148             .sorted(this::compareRevisionsTime)
149             .collect(Collectors.toList());
150   }
151
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);
158     }
159   }
160
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());
167
168     ItemVersionData itemVersionData = new ItemVersionData();
169     itemVersionData.setInfo(info);
170     return itemVersionData;
171   }
172
173   private VersionState convertState(ItemVersionStatus versionStatus) {
174     VersionState state = new VersionState();
175     state.setSynchronizationState(getSyncState(versionStatus.getSynchronizationStatus()));
176     state.setDirty(versionStatus.isDirty());
177     return state;
178   }
179
180   private SynchronizationState getSyncState(SynchronizationStatus synchronizationStatus) {
181     switch (synchronizationStatus) {
182       case UP_TO_DATE:
183         return SynchronizationState.UpToDate;
184       case OUT_OF_SYNC:
185         return SynchronizationState.OutOfSync;
186       case MERGING:
187         return SynchronizationState.Merging;
188       default:
189         throw new CoreException(new ErrorCode.ErrorCodeBuilder()
190             .withCategory(ErrorCategory.APPLICATION)
191             .withId("UNKNOWN_VERSION_STATE")
192             .withMessage("Version state is unknown").build());
193     }
194   }
195
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());
203     return revision;
204   }
205
206   private int compareRevisionsTime(Revision revision1, Revision revision2) {
207     return revision1.getTime().before(revision2.getTime()) ? 1 : -1;
208   }
209 }