2 * Copyright © 2016-2017 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.
16 package org.openecomp.core.zusammen.db.impl;
18 import com.amdocs.zusammen.adaptor.inbound.api.health.HealthAdaptorFactory;
19 import com.amdocs.zusammen.adaptor.inbound.api.item.ElementAdaptorFactory;
20 import com.amdocs.zusammen.adaptor.inbound.api.item.ItemAdaptorFactory;
21 import com.amdocs.zusammen.adaptor.inbound.api.item.ItemVersionAdaptorFactory;
22 import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element;
23 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementConflict;
24 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo;
25 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ItemVersionConflict;
26 import com.amdocs.zusammen.adaptor.inbound.api.types.item.MergeResult;
27 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement;
28 import com.amdocs.zusammen.commons.health.data.HealthInfo;
29 import com.amdocs.zusammen.datatypes.Id;
30 import com.amdocs.zusammen.datatypes.SessionContext;
31 import com.amdocs.zusammen.datatypes.Space;
32 import com.amdocs.zusammen.datatypes.item.ElementContext;
33 import com.amdocs.zusammen.datatypes.item.Info;
34 import com.amdocs.zusammen.datatypes.item.Item;
35 import com.amdocs.zusammen.datatypes.item.ItemVersion;
36 import com.amdocs.zusammen.datatypes.item.ItemVersionData;
37 import com.amdocs.zusammen.datatypes.item.ItemVersionStatus;
38 import com.amdocs.zusammen.datatypes.item.Resolution;
39 import com.amdocs.zusammen.datatypes.itemversion.ItemVersionRevisions;
40 import com.amdocs.zusammen.datatypes.itemversion.Tag;
41 import com.amdocs.zusammen.datatypes.response.Response;
42 import com.amdocs.zusammen.datatypes.response.ReturnCode;
43 import org.openecomp.core.zusammen.db.ZusammenConnector;
44 import org.openecomp.core.zusammen.impl.CassandraConnectionInitializer;
45 import org.openecomp.core.zusammen.impl.ItemElementLoggerTargetServiceName;
46 import org.openecomp.sdc.datatypes.error.ErrorLevel;
47 import org.openecomp.sdc.logging.context.impl.MdcDataErrorMessage;
48 import org.openecomp.sdc.logging.types.LoggerConstants;
49 import org.openecomp.sdc.logging.types.LoggerErrorCode;
51 import java.util.Collection;
53 public class ZusammenConnectorImpl implements ZusammenConnector {
55 private static final String GET_ELEMENT_ERR_MSG =
56 "Failed to get element. Item Id: %s, version Id: %s, element Id: %s message: %s";
57 private static final String GET_ELEMENT_IN_REV_ERR_MSG =
58 "Failed to get element. Item Id: %s, version Id: %s, revision Id: %s, element Id: %s message: %s";
59 private ItemAdaptorFactory itemAdaptorFactory;
60 private ItemVersionAdaptorFactory versionAdaptorFactory;
61 private ElementAdaptorFactory elementAdaptorFactory;
62 private HealthAdaptorFactory healthAdaptorFactory;
64 public ZusammenConnectorImpl(
65 ItemAdaptorFactory itemAdaptorFactory,
66 ItemVersionAdaptorFactory versionAdaptorFactory,
67 ElementAdaptorFactory elementAdaptorFactory,
68 HealthAdaptorFactory healthAdaptorFactory) {
69 this.itemAdaptorFactory = itemAdaptorFactory;
70 this.versionAdaptorFactory = versionAdaptorFactory;
71 this.elementAdaptorFactory = elementAdaptorFactory;
72 this.healthAdaptorFactory = healthAdaptorFactory;
73 CassandraConnectionInitializer.setCassandraConnectionPropertiesToSystem();
77 public Collection<HealthInfo> checkHealth(SessionContext sessionContext) {
78 return healthAdaptorFactory.createInterface(sessionContext).getHealthStatus(sessionContext);
82 public String getVersion(SessionContext sessionContext) {
83 return healthAdaptorFactory.createInterface(sessionContext).getVersion();
87 public Collection<Item> listItems(SessionContext context) {
88 Response<Collection<Item>> response = itemAdaptorFactory.createInterface(context).list(context);
89 if (!response.isSuccessful()) {
90 throw new RuntimeException(
91 "Failed to list Items. message:" + response.getReturnCode().toString());
93 return response.getValue();
97 public Item getItem(SessionContext context, Id itemId) {
98 Response<Item> response = itemAdaptorFactory.createInterface(context).get(context, itemId);
99 if (!response.isSuccessful()) {
100 throw new RuntimeException(
101 "Failed to get Item. message:" + response.getReturnCode().toString());
103 return response.getValue();
107 public Id createItem(SessionContext context, Info info) {
108 Response<Id> response = itemAdaptorFactory.createInterface(context).create(context, info);
109 if (!response.isSuccessful()) {
110 throw new RuntimeException(
111 "Failed to create Item. message:" + response.getReturnCode().toString());
113 return response.getValue();
117 public void updateItem(SessionContext context, Id itemId, Info info) {
118 Response<Void> response =
119 itemAdaptorFactory.createInterface(context).update(context, itemId, info);
121 if (!response.isSuccessful()) {
122 throw new RuntimeException("failed to update Item . ItemId:" + itemId + "" +
123 " message:" + response.getReturnCode().toString());
128 public Collection<ItemVersion> listPublicVersions(SessionContext context, Id itemId) {
129 Response<Collection<ItemVersion>> versions =
130 versionAdaptorFactory.createInterface(context).list(context, Space.PUBLIC, itemId);
131 if (!versions.isSuccessful()) {
132 logErrorMessageToMdc(ItemElementLoggerTargetServiceName.ITEM_VERSION_RETRIEVAL, versions
134 throw new RuntimeException(versions.getReturnCode().toString());
136 return versions.getValue();
140 public ItemVersion getPublicVersion(SessionContext context, Id itemId, Id versionId) {
141 Response<ItemVersion> response = versionAdaptorFactory.createInterface(context)
142 .get(context, Space.PUBLIC, itemId, versionId);
143 if (!response.isSuccessful()) {
144 throw new RuntimeException(
145 String.format("failed to get public Item Version. ItemId: %s, versionId: %s, message: %s",
146 itemId.getValue(), versionId.getValue(), response.getReturnCode().toString()));
148 return response.getValue();
152 public Id createVersion(SessionContext context, Id itemId, Id baseVersionId,
153 ItemVersionData itemVersionData) {
154 Response<Id> response = versionAdaptorFactory.createInterface(context).create(context, itemId,
155 baseVersionId, itemVersionData);
156 if (response.isSuccessful()) {
157 return response.getValue();
159 throw new RuntimeException(String.format(
160 "failed to create Item Version. ItemId: %s, base versionId: %s, message: %s",
161 itemId.getValue(), baseVersionId.getValue(), response.getReturnCode().toString()));
166 public void updateVersion(SessionContext context, Id itemId, Id versionId,
167 ItemVersionData itemVersionData) {
168 Response<Void> response = versionAdaptorFactory.createInterface(context)
169 .update(context, itemId, versionId, itemVersionData);
170 if (!response.isSuccessful()) {
171 throw new RuntimeException(
172 String.format("failed to update Item Version. ItemId: %s, versionId: %s, message: %s",
173 itemId.getValue(), versionId.getValue(), response.getReturnCode().toString()));
178 public ItemVersion getVersion(SessionContext context, Id itemId, Id versionId) {
179 Response<ItemVersion> response = versionAdaptorFactory.createInterface(context)
180 .get(context, Space.PRIVATE, itemId, versionId);
181 if (!response.isSuccessful()) {
182 throw new RuntimeException(
183 String.format("failed to get Item Version. ItemId: %s, versionId: %s, message: %s",
184 itemId.getValue(), versionId.getValue(), response.getReturnCode().toString()));
186 return response.getValue();
190 public ItemVersionStatus getVersionStatus(SessionContext context, Id itemId, Id versionId) {
191 Response<ItemVersionStatus> response =
192 versionAdaptorFactory.createInterface(context).getStatus(context, itemId, versionId);
193 if (!response.isSuccessful()) {
194 throw new RuntimeException(
195 String.format("failed to get Item Version status. ItemId: %s, versionId: %s, message: %s",
196 itemId.getValue(), versionId.getValue(), response.getReturnCode().toString()));
198 return response.getValue();
202 public void tagVersion(SessionContext context, Id itemId, Id versionId, Tag tag) {
203 Response<Void> response = versionAdaptorFactory.createInterface(context)
204 .tag(context, itemId, versionId, null, tag);
205 if (!response.isSuccessful()) {
206 throw new RuntimeException(String.format(
207 "failed to tag Item Version with tag %s. ItemId: %s, versionId: %s, message: %s",
208 tag.getName(), itemId.getValue(), versionId.getValue(),
209 response.getReturnCode().toString()));
214 public void resetVersionRevision(SessionContext context, Id itemId, Id versionId,
216 Response<Void> response = versionAdaptorFactory.createInterface(context)
217 .resetRevision(context, itemId, versionId, revisionId);
218 if (!response.isSuccessful()) {
219 throw new RuntimeException(String.format(
220 "failed to reset Item Version back to revision: %s. ItemId: %s, versionId: %s, message:" +
222 revisionId.getValue(), itemId.getValue(), versionId.getValue(),
223 response.getReturnCode().toString()));
228 public void revertVersionRevision(SessionContext context, Id itemId, Id versionId,
230 Response<Void> response = versionAdaptorFactory.createInterface(context)
231 .revertRevision(context, itemId, versionId, revisionId);
232 if (!response.isSuccessful()) {
233 throw new RuntimeException(String.format(
234 "failed to revert Item Version back to revision: %s. ItemId: %s, versionId: %s, " +
236 revisionId.getValue(), itemId.getValue(), versionId.getValue(),
237 response.getReturnCode().toString()));
242 public ItemVersionRevisions listVersionRevisions(SessionContext context, Id itemId,
244 Response<ItemVersionRevisions> response =
245 versionAdaptorFactory.createInterface(context)
246 .listRevisions(context, itemId, versionId);
247 if (!response.isSuccessful()) {
248 throw new RuntimeException(String.format(
249 "failed to list revisions of Item Version. ItemId: %s, versionId: %s, message: %s",
250 itemId.getValue(), versionId.getValue(), response.getReturnCode().toString()));
252 return response.getValue();
257 public void publishVersion(SessionContext context, Id itemId, Id versionId, String message) {
258 Response<Void> response =
259 versionAdaptorFactory.createInterface(context).publish(context, itemId, versionId, message);
260 if (!response.isSuccessful()) {
261 throw new RuntimeException(String.format(
262 "failed to publish item Version. ItemId: %s, versionId: %s, message: %s",
263 itemId.getValue(), versionId.getValue(), response.getReturnCode().toString()));
268 public void syncVersion(SessionContext context, Id itemId, Id versionId) {
269 Response<MergeResult> response =
270 versionAdaptorFactory.createInterface(context).sync(context, itemId, versionId);
271 if (!response.isSuccessful()) {
272 throw new RuntimeException(String.format(
273 "failed to sync item Version. ItemId: %s, versionId: %s, message: %s",
274 itemId.getValue(), versionId.getValue(), response.getReturnCode().toString()));
279 public void forceSyncVersion(SessionContext context, Id itemId, Id versionId) {
280 Response<MergeResult> response =
281 versionAdaptorFactory.createInterface(context).forceSync(context, itemId, versionId);
282 if (!response.isSuccessful()) {
283 throw new RuntimeException(String.format(
284 "failed to force sync item Version. ItemId: %s, versionId: %s, message: %s",
285 itemId.getValue(), versionId.getValue(), response.getReturnCode().toString()));
290 public ItemVersionConflict getVersionConflict(SessionContext context, Id itemId, Id versionId) {
291 Response<ItemVersionConflict> response =
292 versionAdaptorFactory.createInterface(context).getConflict(context, itemId, versionId);
293 if (!response.isSuccessful()) {
294 throw new RuntimeException(String
295 .format("failed to get Item Version conflict. ItemId: %s, versionId: %s, message: %s",
296 itemId.getValue(), versionId.getValue(), response.getReturnCode().toString()));
298 return response.getValue();
302 public Collection<ElementInfo> listElements(SessionContext context,
303 ElementContext elementContext,
304 Id parentElementId) {
305 Response<Collection<ElementInfo>> response = elementAdaptorFactory
306 .createInterface(context).list(context, elementContext, parentElementId);
307 if (response.isSuccessful()) {
308 return response.getValue();
310 logErrorMessageToMdc(ItemElementLoggerTargetServiceName.ELEMENT_GET_BY_PROPERTY,
311 response.getReturnCode());
312 throw new RuntimeException(response.getReturnCode().toString());
318 public ElementInfo getElementInfo(SessionContext context, ElementContext elementContext,
320 Response<ElementInfo> response =
321 elementAdaptorFactory.createInterface(context).getInfo(context, elementContext, elementId);
322 if (!response.isSuccessful()) {
323 throw buildGetElementException(elementContext, elementId,
324 response.getReturnCode().toString());
327 return response.getValue();
331 public Element getElement(SessionContext context, ElementContext elementContext,
333 Response<Element> response =
334 elementAdaptorFactory.createInterface(context).get(context, elementContext, elementId);
335 if (!response.isSuccessful()) {
336 throw buildGetElementException(elementContext, elementId,
337 response.getReturnCode().toString());
339 return response.getValue();
343 public ElementConflict getElementConflict(SessionContext context, ElementContext elementContext,
345 Response<ElementConflict> response = elementAdaptorFactory.createInterface(context)
346 .getConflict(context, elementContext, elementId);
347 if (!response.isSuccessful()) {
348 throw new RuntimeException(String.format(
349 "Failed to get element conflict. Item Id: %s, version Id: %s, element Id: %s message: %s",
350 elementContext.getItemId().getValue(), elementContext.getVersionId().getValue(),
351 elementId.getValue(), response.getReturnCode().toString()));
353 return response.getValue();
357 public Element saveElement(SessionContext context, ElementContext elementContext,
358 ZusammenElement element, String message) {
359 Response<Element> response = elementAdaptorFactory.createInterface(context)
360 .save(context, elementContext, element, message);
361 if (!response.isSuccessful()) {
362 throw new RuntimeException(String
363 .format("Failed to create element %s. ItemId: %s, versionId: %s, message: %s",
364 element.getElementId().getValue(), elementContext.getItemId().getValue(),
365 elementContext.getVersionId().getValue(), response.getReturnCode().toString()));
367 return response.getValue();
371 public void resolveElementConflict(SessionContext context, ElementContext elementContext,
372 ZusammenElement element,
373 Resolution resolution) {
374 Response<Void> response = elementAdaptorFactory.createInterface(context)
375 .resolveConflict(context, elementContext, element, resolution);
376 if (!response.isSuccessful()) {
377 throw new RuntimeException(
378 "Failed to resolve conflict. message:" + response.getReturnCode().toString());
383 public void resetVersionHistory(SessionContext context, Id itemId, Id versionId,
385 // no-op, required by the interface
388 private RuntimeException buildGetElementException(ElementContext elementContext, Id elementId,
389 String zusammenErrorMessage) {
390 if (elementContext.getRevisionId() == null) {
391 return new RuntimeException(String.format(GET_ELEMENT_ERR_MSG,
392 elementContext.getItemId().getValue(), elementContext.getVersionId().getValue(),
393 elementId.getValue(), zusammenErrorMessage));
395 return new RuntimeException(String.format(GET_ELEMENT_IN_REV_ERR_MSG,
396 elementContext.getItemId().getValue(), elementContext.getVersionId().getValue(),
397 elementContext.getRevisionId().getValue(),
398 elementId.getValue(), zusammenErrorMessage));
401 private void logErrorMessageToMdc(ItemElementLoggerTargetServiceName
402 itemElementLoggerTargetServiceName,
403 ReturnCode returnCode) {
404 logErrorMessageToMdc(itemElementLoggerTargetServiceName, returnCode.toString());
407 private void logErrorMessageToMdc(ItemElementLoggerTargetServiceName
408 itemElementLoggerTargetServiceName,
410 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
411 itemElementLoggerTargetServiceName.getDescription(),
412 ErrorLevel.ERROR.name(),
413 LoggerErrorCode.BUSINESS_PROCESS_ERROR.getErrorCode(),