Unit Tests
[sdc.git] / openecomp-be / lib / openecomp-core-lib / openecomp-zusammen-lib / openecomp-zusammen-plugin / src / main / java / org / openecomp / core / zusammen / plugin / main / CassandraStateStorePluginImpl.java
1 /*
2  * Copyright © 2016-2017 European Support Limited
3  *
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
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 package org.openecomp.core.zusammen.plugin.main;
18
19
20 import com.amdocs.zusammen.datatypes.Id;
21 import com.amdocs.zusammen.datatypes.SessionContext;
22 import com.amdocs.zusammen.datatypes.Space;
23 import com.amdocs.zusammen.datatypes.item.ElementContext;
24 import com.amdocs.zusammen.datatypes.item.ItemVersion;
25 import com.amdocs.zusammen.datatypes.item.ItemVersionData;
26 import com.amdocs.zusammen.datatypes.response.Response;
27 import com.amdocs.zusammen.plugin.statestore.cassandra.StateStoreImpl;
28 import com.amdocs.zusammen.plugin.statestore.cassandra.dao.types.ElementEntityContext;
29 import com.amdocs.zusammen.sdk.state.types.StateElement;
30 import org.openecomp.core.zusammen.plugin.ZusammenPluginUtil;
31 import org.openecomp.core.zusammen.plugin.collaboration.ElementPrivateStore;
32 import org.openecomp.core.zusammen.plugin.collaboration.impl.ElementPrivateStoreImpl;
33 import org.openecomp.core.zusammen.plugin.dao.ElementRepository;
34 import org.openecomp.core.zusammen.plugin.dao.ElementRepositoryFactory;
35 import org.openecomp.core.zusammen.plugin.dao.VersionDao;
36 import org.openecomp.core.zusammen.plugin.dao.VersionDaoFactory;
37 import org.openecomp.core.zusammen.plugin.dao.types.ElementEntity;
38 import org.openecomp.core.zusammen.plugin.dao.types.VersionDataElement;
39 import org.openecomp.core.zusammen.plugin.dao.types.VersionEntity;
40
41 import java.util.Collection;
42 import java.util.Date;
43 import java.util.stream.Collectors;
44
45 import static org.openecomp.core.zusammen.plugin.ZusammenPluginUtil.convertToItemVersion;
46 import static org.openecomp.core.zusammen.plugin.ZusammenPluginUtil.getSpaceName;
47
48 public class CassandraStateStorePluginImpl extends StateStoreImpl {
49
50   private ElementPrivateStore elementPrivateStore = new ElementPrivateStoreImpl();
51
52   @Override
53   public Response<Collection<ItemVersion>> listItemVersions(SessionContext context, Space space,
54                                                             Id itemId) {
55     String spaceName = getSpaceName(context, space);
56     return new Response<>(getVersionDao(context).list(context, spaceName, itemId).stream()
57         .map(versionEntity -> getItemVersion(context, spaceName, itemId, versionEntity))
58         .collect(Collectors.toList()));
59   }
60
61   @Override
62   public Response<Boolean> isItemVersionExist(SessionContext context, Space space, Id itemId,
63                                               Id versionId) {
64     return new Response<>(
65         getVersionDao(context).get(context, getSpaceName(context, space), itemId, versionId)
66             .isPresent());
67   }
68
69   @Override
70   public Response<ItemVersion> getItemVersion(SessionContext context, Space space, Id itemId,
71                                               Id versionId) {
72     String spaceName = getSpaceName(context, space);
73     return new Response<>(getVersionDao(context).get(context, spaceName, itemId, versionId)
74         .map(versionEntity -> getItemVersion(context, spaceName, itemId, versionEntity))
75         .orElse(null));
76   }
77
78   @Override
79   public Response<Void> createItemVersion(SessionContext context, Space space, Id itemId,
80                                           Id baseVersionId, Id versionId, ItemVersionData data,
81                                           Date creationTime) {
82     // done by collaboration store
83     return new Response(Void.TYPE);
84   }
85
86   @Override
87   public Response<Void> updateItemVersion(SessionContext context, Space space, Id itemId,
88                                           Id versionId, ItemVersionData data,
89                                           Date modificationTime) {
90     // done by collaboration store
91     return new Response(Void.TYPE);
92   }
93
94   @Override
95   public Response<Void> deleteItemVersion(SessionContext context, Space space, Id itemId,
96                                           Id versionId) {
97     // done by collaboration store
98     return new Response(Void.TYPE);
99   }
100
101   @Override
102   public Response<Void> createElement(SessionContext context, StateElement element) {
103     ElementEntity elementEntity = new ElementEntity(element.getId());
104     elementEntity.setNamespace(element.getNamespace());
105
106     ElementRepositoryFactory.getInstance().createInterface(context)
107         .createNamespace(context,
108             new ElementEntityContext(getSpaceName(context, element.getSpace()),
109                 element.getItemId(), element.getVersionId()), elementEntity);
110     // create element is done by collaboration store
111     return new Response(Void.TYPE);
112   }
113
114   @Override
115   public Response<Void> updateElement(SessionContext context, StateElement element) {
116     // done by collaboration store
117     return new Response(Void.TYPE);
118   }
119
120   @Override
121   public Response<Void> deleteElement(SessionContext context, StateElement element) {
122     // done by collaboration store
123     return new Response(Void.TYPE);
124   }
125
126   @Override
127   public Response<Collection<StateElement>> listElements(SessionContext context,
128                                                          ElementContext elementContext,
129                                                          Id elementId) {
130     return new Response(elementPrivateStore.listSubs(context, elementContext, elementId).stream()
131         .map(elementEntity -> ZusammenPluginUtil.getStateElement(elementContext, elementEntity))
132         .collect(Collectors.toList()));
133
134   }
135
136   @Override
137   public Response<StateElement> getElement(SessionContext context, ElementContext elementContext,
138                                            Id elementId) {
139
140     return new Response(elementPrivateStore.get(context, elementContext, elementId)
141         .map(elementEntity -> ZusammenPluginUtil
142             .getStateElement(elementContext, elementEntity))
143         .orElse
144             (null));
145
146
147   }
148
149   private ItemVersion getItemVersion(SessionContext context, String spaceName, Id itemId,
150                                      VersionEntity versionEntity) {
151
152     ItemVersionData itemVersionData = getElementRepository(context)
153         .get(context, new ElementEntityContext(spaceName, itemId, versionEntity.getId(), null),
154             new VersionDataElement())
155         .map(ZusammenPluginUtil::convertToVersionData)
156         .orElseThrow(() -> new IllegalStateException("Version must have data"));
157
158     return convertToItemVersion(versionEntity, itemVersionData);
159   }
160
161   protected VersionDao getVersionDao(SessionContext context) {
162     return VersionDaoFactory.getInstance().createInterface(context);
163   }
164
165   protected ElementRepository getElementRepository(SessionContext context) {
166     return ElementRepositoryFactory.getInstance().createInterface(context);
167   }
168 }