Add collaboration feature
[sdc.git] / openecomp-be / lib / openecomp-sdc-versioning-lib / openecomp-sdc-versioning-core / src / main / java / org / openecomp / sdc / versioning / dao / impl / zusammen / ItemZusammenDaoImpl.java
1 package org.openecomp.sdc.versioning.dao.impl.zusammen;
2
3 import com.amdocs.zusammen.datatypes.Id;
4 import com.amdocs.zusammen.datatypes.item.Info;
5 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
6 import org.openecomp.core.zusammen.api.ZusammenUtil;
7 import org.openecomp.sdc.versioning.dao.ItemDao;
8 import org.openecomp.sdc.versioning.dao.types.VersionStatus;
9 import org.openecomp.sdc.versioning.types.Item;
10
11 import java.util.Collection;
12 import java.util.Map;
13 import java.util.stream.Collectors;
14
15 public class ItemZusammenDaoImpl implements ItemDao {
16
17   private ZusammenAdaptor zusammenAdaptor;
18
19   public ItemZusammenDaoImpl(ZusammenAdaptor zusammenAdaptor) {
20     this.zusammenAdaptor = zusammenAdaptor;
21   }
22
23   @Override
24   public Collection<Item> list() {
25     return zusammenAdaptor.listItems(ZusammenUtil.createSessionContext())
26         .stream().map(this::mapFromZusammenItem)
27         .collect(Collectors.toList());
28   }
29
30   @Override
31   public Item get(Item item) {
32     return mapFromZusammenItem(
33         zusammenAdaptor.getItem(ZusammenUtil.createSessionContext(), new Id(item.getId())));
34   }
35
36   @Override
37   public Item create(Item item) {
38     Id itemId = zusammenAdaptor
39         .createItem(ZusammenUtil.createSessionContext(), mapToZusammenItemInfo(item));
40     item.setId(itemId.getValue());
41     return item;
42   }
43
44   @Override
45   public void update(Item item) {
46     zusammenAdaptor
47         .updateItem(ZusammenUtil.createSessionContext(), new Id(item.getId()),
48             mapToZusammenItemInfo(item));
49   }
50
51   private Item mapFromZusammenItem(com.amdocs.zusammen.datatypes.item.Item zusammenItem) {
52     if (zusammenItem == null) {
53       return null;
54     }
55     Item item = new Item();
56     item.setId(zusammenItem.getId().getValue());
57     item.setName(zusammenItem.getInfo().getName());
58     item.setDescription(zusammenItem.getInfo().getDescription());
59
60     zusammenItem.getInfo().getProperties().entrySet()
61         .forEach(property -> addPropertyToItem(property.getKey(), property.getValue(), item));
62
63     item.setCreationTime(zusammenItem.getCreationTime());
64     item.setModificationTime(zusammenItem.getModificationTime());
65     return item;
66   }
67
68   private void addPropertyToItem(String propertyKey, Object propertyValue, Item item) {
69     switch (propertyKey) {
70       case InfoPropertyName.ITEM_TYPE:
71         item.setType((String) propertyValue);
72         break;
73       case InfoPropertyName.ITEM_VERSIONS_STATUSES:
74         for (Map.Entry<String, Number> statusCounter :
75             ((Map<String, Number>) propertyValue).entrySet()) {
76           item.getVersionStatusCounters().put(VersionStatus.valueOf(statusCounter.getKey()),
77               statusCounter.getValue().intValue());
78         }
79         break;
80       default:
81         item.addProperty(propertyKey, propertyValue);
82     }
83   }
84
85   private Info mapToZusammenItemInfo(Item item) {
86     Info info = new Info();
87     info.setName(item.getName());
88     info.setDescription(item.getDescription());
89     info.addProperty(InfoPropertyName.ITEM_TYPE, item.getType());
90     info.addProperty(InfoPropertyName.ITEM_VERSIONS_STATUSES, item.getVersionStatusCounters());
91     item.getProperties().entrySet()
92         .forEach(property -> info.addProperty(property.getKey(), property.getValue()));
93     return info;
94   }
95
96   private static final class InfoPropertyName {
97     private static final String ITEM_TYPE = "item_type";
98     private static final String ITEM_VERSIONS_STATUSES = "item_versions_statuses";
99
100     private InfoPropertyName() {
101       throw new IllegalStateException("Constants class");
102     }
103   }
104 }