665bf06b9148a43ad717954271118f1ae6f62174
[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 import org.openecomp.sdc.versioning.types.ItemStatus;
11
12 import java.util.Collection;
13 import java.util.Map;
14 import java.util.stream.Collectors;
15
16 public class ItemZusammenDaoImpl implements ItemDao {
17
18   private ZusammenAdaptor zusammenAdaptor;
19
20   public ItemZusammenDaoImpl(ZusammenAdaptor zusammenAdaptor) {
21     this.zusammenAdaptor = zusammenAdaptor;
22   }
23
24   @Override
25   public Collection<Item> list() {
26     return zusammenAdaptor.listItems(ZusammenUtil.createSessionContext())
27         .stream().map(this::mapFromZusammenItem)
28         .collect(Collectors.toList());
29   }
30
31   @Override
32   public Item get(Item item) {
33     return mapFromZusammenItem(
34         zusammenAdaptor.getItem(ZusammenUtil.createSessionContext(), new Id(item.getId())));
35   }
36
37   @Override
38   public Item create(Item item) {
39     Id itemId = zusammenAdaptor
40         .createItem(ZusammenUtil.createSessionContext(), mapToZusammenItemInfo(item));
41     item.setId(itemId.getValue());
42     return item;
43   }
44
45   @Override
46   public void delete(Item item){
47     zusammenAdaptor.deleteItem(ZusammenUtil.createSessionContext(),new Id(item.getId()));
48   }
49
50   @Override
51   public void update(Item item) {
52     zusammenAdaptor
53         .updateItem(ZusammenUtil.createSessionContext(), new Id(item.getId()),
54             mapToZusammenItemInfo(item));
55   }
56
57   private Item mapFromZusammenItem(com.amdocs.zusammen.datatypes.item.Item zusammenItem) {
58     if (zusammenItem == null) {
59       return null;
60     }
61     Item item = new Item();
62     item.setId(zusammenItem.getId().getValue());
63     item.setName(zusammenItem.getInfo().getName());
64     item.setDescription(zusammenItem.getInfo().getDescription());
65
66     zusammenItem.getInfo().getProperties().entrySet()
67         .forEach(property -> addPropertyToItem(property.getKey(), property.getValue(), item));
68
69     item.setCreationTime(zusammenItem.getCreationTime());
70     item.setModificationTime(zusammenItem.getModificationTime());
71
72     if(item.getStatus() == null){
73       item.setStatus(ItemStatus.ACTIVE);
74       update(item);
75     }
76
77     return item;
78   }
79
80   private void addPropertyToItem(String propertyKey, Object propertyValue, Item item) {
81     switch (propertyKey) {
82       case InfoPropertyName.ITEM_TYPE:
83         item.setType((String) propertyValue);
84         break;
85       case InfoPropertyName.ITEM_OWNER:
86         item.setOwner((String) propertyValue);
87         break;
88       case InfoPropertyName.ITEM_STATUS:
89         item.setStatus(ItemStatus.valueOf((String)propertyValue));
90         break;
91       case InfoPropertyName.ITEM_VERSIONS_STATUSES:
92         for (Map.Entry<String, Number> statusCounter :
93             ((Map<String, Number>) propertyValue).entrySet()) {
94           item.getVersionStatusCounters().put(VersionStatus.valueOf(statusCounter.getKey()),
95               statusCounter.getValue().intValue());
96         }
97         break;
98       default:
99         item.addProperty(propertyKey, propertyValue);
100     }
101   }
102
103   private Info mapToZusammenItemInfo(Item item) {
104     Info info = new Info();
105     info.setName(item.getName());
106     info.setDescription(item.getDescription());
107     info.addProperty(InfoPropertyName.ITEM_TYPE, item.getType());
108     info.addProperty(InfoPropertyName.ITEM_OWNER,item.getOwner());
109     if (item.getStatus() != null) {
110       info.addProperty(InfoPropertyName.ITEM_STATUS, item.getStatus());
111     }
112     info.addProperty(InfoPropertyName.ITEM_VERSIONS_STATUSES, item.getVersionStatusCounters());
113     item.getProperties().entrySet()
114         .forEach(property -> info.addProperty(property.getKey(), property.getValue()));
115     return info;
116   }
117
118   private static final class InfoPropertyName {
119     private static final String ITEM_TYPE = "item_type";
120     private static final String ITEM_VERSIONS_STATUSES = "item_versions_statuses";
121     private static final String ITEM_OWNER = "Owner";
122     private static final String ITEM_STATUS = "status";
123
124     private InfoPropertyName() {
125       throw new IllegalStateException("Constants class");
126     }
127   }
128 }