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=========================================================
21 package org.openecomp.sdc.conflicts.impl;
23 import org.openecomp.conflicts.ItemMergeHandler;
24 import org.openecomp.conflicts.ItemMergeHandlerFactory;
25 import org.openecomp.conflicts.dao.ConflictsDao;
26 import org.openecomp.conflicts.types.Conflict;
27 import org.openecomp.conflicts.types.ConflictResolution;
28 import org.openecomp.conflicts.types.ItemVersionConflict;
29 import org.openecomp.conflicts.types.Resolution;
30 import org.openecomp.sdc.common.errors.CoreException;
31 import org.openecomp.sdc.common.errors.ErrorCategory;
32 import org.openecomp.sdc.common.errors.ErrorCode;
33 import org.openecomp.sdc.conflicts.ConflictsManager;
34 import org.openecomp.sdc.versioning.dao.types.Version;
36 import java.util.Optional;
38 public class ConflictsManagerImpl implements ConflictsManager {
40 private static final String ELEMENT_CONFLICT_NOT_EXIST_ERR_ID = "ELEMENT_CONFLICT_NOT_EXIST";
41 private static final String ELEMENT_CONFLICT_NOT_EXISTS_MSG =
42 "Item Id %s, version Id %s, element conflict with Id %s does not exists.";
44 private final ConflictsDao conflictsDao;
46 public ConflictsManagerImpl(ConflictsDao conflictsDao) {
47 this.conflictsDao = conflictsDao;
51 public boolean isConflicted(String itemId, Version version) {
52 Optional<ItemMergeHandler> itemMergeHandler =
53 ItemMergeHandlerFactory.getInstance().createInterface(itemId);
55 return conflictsDao.isConflicted(itemId, version) ||
56 (itemMergeHandler.isPresent() &&
57 itemMergeHandler.get().isConflicted(itemId, version));
61 public ItemVersionConflict getConflict(String itemId, Version version) {
62 ItemVersionConflict conflicts = conflictsDao.getConflict(itemId, version);
64 ItemMergeHandlerFactory.getInstance().createInterface(itemId)
65 .ifPresent(itemMergeHandler -> itemMergeHandler
66 .postListConflicts(itemId, version, conflicts));
72 public void finalizeMerge(String itemId, Version version) {
73 ItemMergeHandlerFactory.getInstance().createInterface(itemId)
74 .ifPresent(mergeHandler -> mergeHandler.finalizeMerge(itemId, version));
78 public Conflict getConflict(String itemId, Version version, String conflictId) {
79 Optional<ItemMergeHandler> itemMergeHandler =
80 ItemMergeHandlerFactory.getInstance().createInterface(itemId);
81 if (itemMergeHandler.isPresent()) {
82 Optional<Conflict> conflict =
83 itemMergeHandler.get().getConflict(itemId, version, conflictId);
84 if (conflict.isPresent()) {
85 return conflict.get();
89 Conflict conflict = conflictsDao.getConflict(itemId, version, conflictId);
91 itemMergeHandler.ifPresent(mergeHandler ->
92 mergeHandler.postGetConflict(itemId, version, conflict));
94 if (conflict == null) {
95 throw getConflictNotExistException(itemId, version, conflictId);
101 public void resolveConflict(String itemId, Version version, String conflictId,
102 ConflictResolution resolution) {
103 if (Resolution.OTHER.equals(resolution.getResolution())) {
104 throw new UnsupportedOperationException(
105 "Resolution other than 'THEIRS' or 'YOURS' is not supported.");
108 Optional<ItemMergeHandler> itemMergeHandler =
109 ItemMergeHandlerFactory.getInstance().createInterface(itemId);
110 if (!itemMergeHandler.isPresent() ||
111 !itemMergeHandler.get()
112 .resolveConflict(itemId, version, conflictId, resolution)) {
114 getConflict(itemId, version, conflictId); // validate that the conflict exist
115 itemMergeHandler.ifPresent(mergeHandler ->
116 mergeHandler.preResolveConflict(itemId, version, conflictId, resolution));
118 conflictsDao.resolveConflict(itemId, version, conflictId, resolution);
122 private CoreException getConflictNotExistException(String itemId, Version version,
124 return new CoreException(new ErrorCode.ErrorCodeBuilder()
125 .withCategory(ErrorCategory.APPLICATION)
126 .withId(ELEMENT_CONFLICT_NOT_EXIST_ERR_ID)
128 String.format(ELEMENT_CONFLICT_NOT_EXISTS_MSG, itemId, version.getId(), conflictId))