blob: b8c03750fbe9e354a131cb072a352e55a2204931 [file] [log] [blame]
AviZi280f8012017-06-09 02:39:56 +03001/*!
Michael Landoefa037d2017-02-19 12:57:33 +02002 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
AviZi280f8012017-06-09 02:39:56 +03003 *
Michael Landoefa037d2017-02-19 12:57:33 +02004 * 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
AviZi280f8012017-06-09 02:39:56 +03007 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
Michael Landoefa037d2017-02-19 12:57:33 +020010 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
AviZi280f8012017-06-09 02:39:56 +030012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
13 * or implied. See the License for the specific language governing
14 * permissions and limitations under the License.
Michael Landoefa037d2017-02-19 12:57:33 +020015 */
Michael Landoefa037d2017-02-19 12:57:33 +020016import RestAPIUtil from 'nfvo-utils/RestAPIUtil.js';
17import Configuration from 'sdc-app/config/Configuration.js';
18import {actionTypes as featureGroupsActionConstants} from './FeatureGroupsConstants.js';
19import LicenseModelActionHelper from 'sdc-app/onboarding/licenseModel/LicenseModelActionHelper.js';
20import EntitlementPoolsActionHelper from 'sdc-app/onboarding/licenseModel/entitlementPools/EntitlementPoolsActionHelper.js';
21import LicenseKeyGroupsActionHelper from 'sdc-app/onboarding/licenseModel/licenseKeyGroups/LicenseKeyGroupsActionHelper.js';
22
AviZi280f8012017-06-09 02:39:56 +030023function baseUrl(licenseModelId, version) {
Michael Landoefa037d2017-02-19 12:57:33 +020024 const restPrefix = Configuration.get('restPrefix');
AviZi280f8012017-06-09 02:39:56 +030025 const {id: versionId} = version;
26 return `${restPrefix}/v1.0/vendor-license-models/${licenseModelId}/versions/${versionId}/feature-groups`;
Michael Landoefa037d2017-02-19 12:57:33 +020027}
28
29function fetchFeatureGroupsList(licenseModelId, version) {
AviZi280f8012017-06-09 02:39:56 +030030 return RestAPIUtil.fetch(`${baseUrl(licenseModelId, version)}`);
Michael Landoefa037d2017-02-19 12:57:33 +020031}
32
AviZi280f8012017-06-09 02:39:56 +030033function deleteFeatureGroup(licenseModelId, featureGroupId, version) {
34 return RestAPIUtil.destroy(`${baseUrl(licenseModelId, version)}/${featureGroupId}`);
Michael Landoefa037d2017-02-19 12:57:33 +020035}
36
AviZi280f8012017-06-09 02:39:56 +030037function addFeatureGroup(licenseModelId, featureGroup, version) {
38 return RestAPIUtil.post(baseUrl(licenseModelId, version), {
Michael Landoefa037d2017-02-19 12:57:33 +020039 name: featureGroup.name,
40 description: featureGroup.description,
41 partNumber: featureGroup.partNumber,
Avi Ziv61070c92017-07-26 17:37:57 +030042 manufacturerReferenceNumber: featureGroup.manufacturerReferenceNumber,
Michael Landoefa037d2017-02-19 12:57:33 +020043 addedLicenseKeyGroupsIds: featureGroup.licenseKeyGroupsIds,
44 addedEntitlementPoolsIds: featureGroup.entitlementPoolsIds
45 });
46}
47
AviZi280f8012017-06-09 02:39:56 +030048function updateFeatureGroup(licenseModelId, previousFeatureGroup, featureGroup, version) {
Michael Landoefa037d2017-02-19 12:57:33 +020049
50 const {licenseKeyGroupsIds = []} = featureGroup;
51 const {licenseKeyGroupsIds: prevLicenseKeyGroupsIds = []} = previousFeatureGroup;
52 const {entitlementPoolsIds = []} = featureGroup;
53 const {entitlementPoolsIds: prevEntitlementPoolsIds = []} = previousFeatureGroup;
AviZi280f8012017-06-09 02:39:56 +030054 return RestAPIUtil.put(`${baseUrl(licenseModelId, version)}/${featureGroup.id}`, {
Michael Landoefa037d2017-02-19 12:57:33 +020055 name: featureGroup.name,
56 description: featureGroup.description,
57 partNumber: featureGroup.partNumber,
Avi Ziv61070c92017-07-26 17:37:57 +030058 manufacturerReferenceNumber: featureGroup.manufacturerReferenceNumber,
Michael Landoefa037d2017-02-19 12:57:33 +020059 addedLicenseKeyGroupsIds: licenseKeyGroupsIds.filter(licenseKeyGroupId => prevLicenseKeyGroupsIds.indexOf(licenseKeyGroupId) === -1),
60 removedLicenseKeyGroupsIds: prevLicenseKeyGroupsIds.filter(prevLicenseKeyGroupId => licenseKeyGroupsIds.indexOf(prevLicenseKeyGroupId) === -1),
61 addedEntitlementPoolsIds: entitlementPoolsIds.filter(entitlementPoolId => prevEntitlementPoolsIds.indexOf(entitlementPoolId) === -1),
62 removedEntitlementPoolsIds: prevEntitlementPoolsIds.filter(prevEntitlementPoolId => entitlementPoolsIds.indexOf(prevEntitlementPoolId) === -1)
63
64 });
65}
66
67export default {
68 fetchFeatureGroupsList(dispatch, {licenseModelId, version}) {
69 return fetchFeatureGroupsList(licenseModelId, version).then(response => dispatch({
70 type: featureGroupsActionConstants.FEATURE_GROUPS_LIST_LOADED,
71 response
72 }));
73 },
74
AviZi280f8012017-06-09 02:39:56 +030075 deleteFeatureGroup(dispatch, {licenseModelId, featureGroupId, version}) {
76 return deleteFeatureGroup(licenseModelId, featureGroupId, version).then(() => dispatch({
Michael Landoefa037d2017-02-19 12:57:33 +020077 type: featureGroupsActionConstants.DELETE_FEATURE_GROUPS,
78 featureGroupId
79 }));
80 },
81
AviZi280f8012017-06-09 02:39:56 +030082 saveFeatureGroup(dispatch, {licenseModelId, previousFeatureGroup, featureGroup, version}) {
Michael Landoefa037d2017-02-19 12:57:33 +020083 if (previousFeatureGroup) {
AviZi280f8012017-06-09 02:39:56 +030084 return updateFeatureGroup(licenseModelId, previousFeatureGroup, featureGroup, version).then(() =>{
85 dispatch({
86 type: featureGroupsActionConstants.EDIT_FEATURE_GROUPS,
87 featureGroup
88 });
89 EntitlementPoolsActionHelper.fetchEntitlementPoolsList(dispatch, {licenseModelId, version});
90 LicenseKeyGroupsActionHelper.fetchLicenseKeyGroupsList(dispatch, {licenseModelId, version});
91 });
Michael Landoefa037d2017-02-19 12:57:33 +020092 }
93 else {
AviZi280f8012017-06-09 02:39:56 +030094 return addFeatureGroup(licenseModelId, featureGroup, version).then(response => {
95 dispatch({
96 type: featureGroupsActionConstants.ADD_FEATURE_GROUPS,
97 featureGroup: {
98 ...featureGroup,
99 id: response.value,
100 referencingLicenseAgreements: []
101 }
102 });
103 EntitlementPoolsActionHelper.fetchEntitlementPoolsList(dispatch, {licenseModelId, version});
104 LicenseKeyGroupsActionHelper.fetchLicenseKeyGroupsList(dispatch, {licenseModelId, version});
105 });
Michael Landoefa037d2017-02-19 12:57:33 +0200106 }
107 },
108
109 selectEntitlementPoolsEditorTab(dispatch, {tab}) {
110 dispatch({
111 type: featureGroupsActionConstants.featureGroupsEditor.SELECT_TAB,
112 tab
113 });
114 },
115
AviZi280f8012017-06-09 02:39:56 +0300116 openFeatureGroupsEditor(dispatch, {featureGroup, licenseModelId, version}) {
117 EntitlementPoolsActionHelper.fetchEntitlementPoolsList(dispatch, {licenseModelId, version});
118 LicenseKeyGroupsActionHelper.fetchLicenseKeyGroupsList(dispatch, {licenseModelId, version});
Michael Landoefa037d2017-02-19 12:57:33 +0200119 dispatch({
120 type: featureGroupsActionConstants.featureGroupsEditor.OPEN,
121 featureGroup
122 });
123 },
124
125 closeFeatureGroupsEditor(dispatch) {
126 dispatch({
127 type: featureGroupsActionConstants.featureGroupsEditor.CLOSE
128 });
129 },
130
Michael Landoefa037d2017-02-19 12:57:33 +0200131
132 switchVersion(dispatch, {licenseModelId, version}) {
133 LicenseModelActionHelper.fetchLicenseModelById(dispatch, {licenseModelId, version}).then(() => {
134 this.fetchFeatureGroupsList(dispatch, {licenseModelId, version});
135 });
136 }
137};