5a212afc8e1b389aa49549e2c5dd7775bdf06a72
[sdc.git] /
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 delete(Item item){
46     zusammenAdaptor.deleteItem(ZusammenUtil.createSessionContext(),new Id(item.getId()));
47   }
48
49   @Override
50   public void update(Item item) {
51     zusammenAdaptor
52         .updateItem(ZusammenUtil.createSessionContext(), new Id(item.getId()),
53             mapToZusammenItemInfo(item));
54   }
55
56   private Item mapFromZusammenItem(com.amdocs.zusammen.datatypes.item.Item zusammenItem) {
57     if (zusammenItem == null) {
58       return null;
59     }
60     Item item = new Item();
61     item.setId(zusammenItem.getId().getValue());
62     item.setName(zusammenItem.getInfo().getName());
63     item.setDescription(zusammenItem.getInfo().getDescription());
64
65     zusammenItem.getInfo().getProperties().entrySet()
66         .forEach(property -> addPropertyToItem(property.getKey(), property.getValue(), item));
67
68     item.setCreationTime(zusammenItem.getCreationTime());
69     item.setModificationTime(zusammenItem.getModificationTime());
70     return item;
71   }
72
73   private void addPropertyToItem(String propertyKey, Object propertyValue, Item item) {
74     switch (propertyKey) {
75       case InfoPropertyName.ITEM_TYPE:
76         item.setType((String) propertyValue);
77         break;
78       case InfoPropertyName.ITEM_OWNER:
79         item.setOwner((String) propertyValue);
80         break;
81       case InfoPropertyName.ITEM_VERSIONS_STATUSES:
82         for (Map.Entry<String, Number> statusCounter :
83             ((Map<String, Number>) propertyValue).entrySet()) {
84           item.getVersionStatusCounters().put(VersionStatus.valueOf(statusCounter.getKey()),
85               statusCounter.getValue().intValue());
86         }
87         break;
88       default:
89         item.addProperty(propertyKey, propertyValue);
90     }
91   }
92
93   private Info mapToZusammenItemInfo(Item item) {
94     Info info = new Info();
95     info.setName(item.getName());
96     info.setDescription(item.getDescription());
97     info.addProperty(InfoPropertyName.ITEM_TYPE, item.getType());
98     info.addProperty(InfoPropertyName.ITEM_OWNER,item.getOwner());
99     info.addProperty(InfoPropertyName.ITEM_VERSIONS_STATUSES, item.getVersionStatusCounters());
100     item.getProperties().entrySet()
101         .forEach(property -> info.addProperty(property.getKey(), property.getValue()));
102     return info;
103   }
104
105   private static final class InfoPropertyName {
106     private static final String ITEM_TYPE = "item_type";
107     private static final String ITEM_VERSIONS_STATUSES = "item_versions_statuses";
108     private static final String ITEM_OWNER = "Owner";
109
110     private InfoPropertyName() {
111       throw new IllegalStateException("Constants class");
112     }
113   }
114 }