Creation of Vendor Licensing Model is an optional step in VSP onboarding

Issue-ID: SDC-3471
Signed-off-by: JerzySzachniewicz <jerzy.szachniewicz@nokia.com>
Change-Id: Icb98d0832c49939e200ece77f4ca26744cb82222
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVspDescriptionDtoToVspDetails.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVspDescriptionDtoToVspDetails.java
index 634bd90..3ab2667 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVspDescriptionDtoToVspDetails.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVspDescriptionDtoToVspDetails.java
@@ -20,6 +20,7 @@
 
 package org.openecomp.sdcrests.vsp.rest.mapping;
 
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.LicenseType;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
 import org.openecomp.sdc.vendorsoftwareproduct.types.LicensingData;
 import org.openecomp.sdc.versioning.dao.types.Version;
@@ -38,12 +39,15 @@
     target.setVendorName(source.getVendorName());
     target.setVendorId(source.getVendorId());
 
-    if (source.getLicensingVersion() != null) {
+    if (source.getLicensingVersion() != null && source.getLicenseType() != LicenseType.EXTERNAL) {
       target.setVlmVersion(new Version(source.getLicensingVersion()));
     }
+    if (source.getLicenseType() != null) {
+      target.setLicenseType(source.getLicenseType().name());
+    }
 
     LicensingData licensingData = source.getLicensingData();
-    if (licensingData != null) {
+    if (licensingData != null && source.getLicenseType() != LicenseType.EXTERNAL) {
       target.setLicenseAgreement(licensingData.getLicenseAgreement());
       target.setFeatureGroups(licensingData.getFeatureGroups());
     }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVspDetailsToDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVspDetailsToDto.java
index 6e659cb..1ba5d13 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVspDetailsToDto.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVspDetailsToDto.java
@@ -20,6 +20,8 @@
 
 package org.openecomp.sdcrests.vsp.rest.mapping;
 
+import org.apache.commons.lang3.StringUtils;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.LicenseType;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
 import org.openecomp.sdc.vendorsoftwareproduct.types.LicensingData;
 import org.openecomp.sdcrests.mapping.MappingBase;
@@ -40,7 +42,11 @@
     target.setVendorName(source.getVendorName());
     target.setLicensingVersion(
         source.getVlmVersion() == null ? null : source.getVlmVersion().getId());
-
+    if (StringUtils.isNotBlank(source.getLicenseType())) {
+      target.setLicenseType(LicenseType.valueOf(source.getLicenseType()));
+    } else if (StringUtils.isNotBlank(target.getLicensingVersion())){
+      target.setLicenseType(LicenseType.INTERNAL);
+    }
     if (source.getLicenseAgreement() != null || source.getFeatureGroups() != null) {
       LicensingData licensingData = new LicensingData();
       licensingData.setLicenseAgreement(source.getLicenseAgreement());
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/test/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVspDescriptionDtoToVspDetailsTest.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/test/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVspDescriptionDtoToVspDetailsTest.java
index 9ec43e9..20a5449 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/test/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVspDescriptionDtoToVspDetailsTest.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/test/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVspDescriptionDtoToVspDetailsTest.java
@@ -17,9 +17,13 @@
 package org.openecomp.sdcrests.vsp.rest.mapping;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
 
-import org.junit.Test;
+import java.util.Collections;
+import org.junit.jupiter.api.Test;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.LicenseType;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
+import org.openecomp.sdc.vendorsoftwareproduct.types.LicensingData;
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.VspDescriptionDto;
 
 /**
@@ -65,4 +69,21 @@
         assertEquals(vendorName, target.getVendorName());
         assertEquals(vendorId, target.getVendorId());
     }
+
+    @Test
+    public void testLicenceTypeMapping() {
+        final VspDescriptionDto source = new VspDescriptionDto();
+        LicensingData licensingData = new LicensingData();
+        licensingData.setLicenseAgreement("testLicenseAgreement");
+        licensingData.setFeatureGroups(Collections.emptyList());
+        source.setLicenseType(LicenseType.EXTERNAL);
+        source.setLicensingData(licensingData);
+
+        final VspDetails target = new VspDetails();
+        final MapVspDescriptionDtoToVspDetails mapper = new MapVspDescriptionDtoToVspDetails();
+        mapper.doMapping(source, target);
+        assertEquals(LicenseType.EXTERNAL.name(), target.getLicenseType());
+        assertNull(target.getLicenseAgreement());
+        assertNull(target.getFeatureGroups());
+    }
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/test/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVspDetailsToDtoTest.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/test/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVspDetailsToDtoTest.java
index d5eb7be..2386328 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/test/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVspDetailsToDtoTest.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/test/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVspDetailsToDtoTest.java
@@ -18,9 +18,9 @@
 
 import static org.junit.Assert.assertEquals;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.LicenseType;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
-import org.openecomp.sdc.vendorsoftwareproduct.types.LicensingData;
 import org.openecomp.sdc.versioning.dao.types.Version;
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.VspDetailsDto;
 
@@ -68,6 +68,9 @@
         final String onboardingMethod = "b46520ac-e62f-4a24-8f40-ee6e65889bfc";
         source.setOnboardingMethod(onboardingMethod);
 
+        final String licenseType = LicenseType.EXTERNAL.name();
+        source.setLicenseType(licenseType);
+
         final VspDetailsDto target = new VspDetailsDto();
         final MapVspDetailsToDto mapper = new MapVspDetailsToDto();
         mapper.doMapping(source, target);
@@ -83,5 +86,6 @@
         assertEquals(vendorName, target.getVendorName());
         assertEquals(vlmVersionId, target.getLicensingVersion());
         assertEquals(onboardingMethod, target.getOnboardingMethod());
+        assertEquals(LicenseType.EXTERNAL, target.getLicenseType());
     }
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/VspDescriptionDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/VspDescriptionDto.java
index 1b64ab7..3cddb5d 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/VspDescriptionDto.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/VspDescriptionDto.java
@@ -17,6 +17,7 @@
 package org.openecomp.sdcrests.vendorsoftwareproducts.types;
 
 import lombok.Data;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.LicenseType;
 import org.openecomp.sdc.vendorsoftwareproduct.types.LicensingData;
 
 import javax.validation.constraints.NotNull;
@@ -37,5 +38,6 @@
     @NotNull
     private String vendorId;            // this will be populated with vlm id
     private String licensingVersion;    // this will be populated with vlm version
+    private LicenseType licenseType;
     private LicensingData licensingData;
 }
diff --git a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/dao/type/LicenseType.java b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/dao/type/LicenseType.java
new file mode 100644
index 0000000..35dfda4
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/dao/type/LicenseType.java
@@ -0,0 +1,27 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2021 Nokia. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+
+package org.openecomp.sdc.vendorsoftwareproduct.dao.type;
+
+public enum LicenseType {
+    EXTERNAL,
+    INTERNAL
+}
diff --git a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/dao/type/VspDetails.java b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/dao/type/VspDetails.java
index 14e6bf5..8f4aed8 100644
--- a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/dao/type/VspDetails.java
+++ b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/dao/type/VspDetails.java
@@ -44,6 +44,7 @@
     private String vendorName;
     private String vendorId;
     private Version vlmVersion;
+    private String licenseType;
     private String licenseAgreement;
     private List<String> featureGroups;
     private String onboardingMethod;
diff --git a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/dao/impl/zusammen/VendorSoftwareProductInfoDaoZusammenImpl.java b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/dao/impl/zusammen/VendorSoftwareProductInfoDaoZusammenImpl.java
index e1be8b9..de42344 100644
--- a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/dao/impl/zusammen/VendorSoftwareProductInfoDaoZusammenImpl.java
+++ b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/dao/impl/zusammen/VendorSoftwareProductInfoDaoZusammenImpl.java
@@ -251,6 +251,8 @@
       info.addProperty(InfoPropertyName.VENDOR_VERSION.getValue(),
           vspDetails.getVlmVersion().getId());
     }
+    info.addProperty(InfoPropertyName.LICENSE_TYPE.getValue(),
+        vspDetails.getLicenseType());
     info.addProperty(InfoPropertyName.LICENSE_AGREEMENT.getValue(),
         vspDetails.getLicenseAgreement());
     info.addProperty(InfoPropertyName.FEATURE_GROUPS.getValue(), vspDetails.getFeatureGroups());
@@ -267,6 +269,7 @@
     VENDOR_ID("vendorId"),
     VENDOR_NAME("vendorName"),
     VENDOR_VERSION("vendorVersion"),
+    LICENSE_TYPE("licenseType"),
     LICENSE_AGREEMENT("licenseAgreement"),
     FEATURE_GROUPS("featureGroups"),
     ON_BOARDING_METHOD("onboardingMethod");
diff --git a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/dao/impl/zusammen/convertor/ElementToVSPGeneralConvertor.java b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/dao/impl/zusammen/convertor/ElementToVSPGeneralConvertor.java
index 8c63167..d8bb179 100644
--- a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/dao/impl/zusammen/convertor/ElementToVSPGeneralConvertor.java
+++ b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/dao/impl/zusammen/convertor/ElementToVSPGeneralConvertor.java
@@ -84,6 +84,8 @@
           VendorSoftwareProductInfoDaoZusammenImpl.InfoPropertyName.VENDOR_VERSION.getValue())));
     }
 
+    vspDetails.setLicenseType(info.getProperty(
+        VendorSoftwareProductInfoDaoZusammenImpl.InfoPropertyName.LICENSE_TYPE.getValue()));
     vspDetails.setLicenseAgreement(info.getProperty(
         VendorSoftwareProductInfoDaoZusammenImpl.InfoPropertyName.LICENSE_AGREEMENT.getValue()));
     vspDetails.setFeatureGroups(info.getProperty(
diff --git a/openecomp-ui/resources/scss/modules/_softwareProductLandingPage.scss b/openecomp-ui/resources/scss/modules/_softwareProductLandingPage.scss
index 8f0803f..a0620b3 100644
--- a/openecomp-ui/resources/scss/modules/_softwareProductLandingPage.scss
+++ b/openecomp-ui/resources/scss/modules/_softwareProductLandingPage.scss
@@ -97,7 +97,7 @@
                         margin-right: 0;
                     }
                     .software-product-landing-view-top-block-col-upl {
-                        height: 215px;
+                        height: 225px;
                         width: initial;
                     }
                 }
@@ -132,7 +132,7 @@
                     }
                     border: 1px solid $light-gray;
                     padding: 20px 18px 0 18px;
-                    height: 215px;
+                    height: 225px;
                     display: flex;
                     justify-content: space-between;
                     background-color: $white;
@@ -161,7 +161,7 @@
 
                 .software-product-landing-view-top-block-col-upl {
                     @extend .flex;
-                    height: 215px;
+                    height: 225px;
                     text-align: center;
                     flex-direction: column;
                     justify-content: center;
@@ -219,6 +219,10 @@
             }
         }
     }
+    .licenceLabel {
+        float: right;
+        margin-left: 5px;
+    }
 }
 
 .vsp-details-page {
diff --git a/openecomp-ui/src/nfvo-utils/i18n/en.json b/openecomp-ui/src/nfvo-utils/i18n/en.json
index 5b2d09a..786fe16 100644
--- a/openecomp-ui/src/nfvo-utils/i18n/en.json
+++ b/openecomp-ui/src/nfvo-utils/i18n/en.json
@@ -194,6 +194,8 @@
   "Select file": "Select file",
   "Software Product Details": "Software Product Details",
   "Missing": "Missing",
+  "Internal license": "Internal",
+  "External license": "External",
   "Filter Networks": "Filter Networks",
   "DHCP": "DHCP",
   "YES": "YES",
diff --git a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProductActionHelper.js b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProductActionHelper.js
index a067fd4..02e5a24 100644
--- a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProductActionHelper.js
+++ b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProductActionHelper.js
@@ -134,6 +134,7 @@
                 ? softwareProduct.licensingVersion
                 : undefined,
             icon: softwareProduct.icon,
+            licenseType: softwareProduct.licenseType,
             licensingData: getLicensingData(softwareProduct.licensingData)
         }
     );
diff --git a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/details/SoftwareProductDetailsView.jsx b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/details/SoftwareProductDetailsView.jsx
index dbc04d0..06ecf6b 100644
--- a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/details/SoftwareProductDetailsView.jsx
+++ b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/details/SoftwareProductDetailsView.jsx
@@ -204,7 +204,8 @@
         onLicensingDataChanged: PropTypes.func.isRequired,
         featureGroupsList: PropTypes.array,
         licenseAgreementList: PropTypes.array,
-        isVendorArchived: PropTypes.bool
+        isVendorArchived: PropTypes.bool,
+        licenseType: PropTypes.string
     };
 
     onVendorParamChanged(e) {
@@ -234,7 +235,10 @@
                         onChange={e => this.onVendorParamChanged(e)}
                         value={this.props.licensingVersion || ''}
                         label={i18n('Licensing Version')}
-                        disabled={this.props.isVendorArchived}
+                        disabled={
+                            this.props.isVendorArchived ||
+                            this.props.licenseType !== 'internal'
+                        }
                         type="select">
                         {this.props.licensingVersionsList.map(version => (
                             <option key={version.enum} value={version.enum}>
@@ -248,7 +252,10 @@
                         data-test-id="vsp-license-agreement"
                         label={i18n('License Agreement')}
                         type="select"
-                        disabled={this.props.isVendorArchived}
+                        disabled={
+                            this.props.isVendorArchived ||
+                            this.props.licenseType !== 'internal'
+                        }
                         value={
                             this.props.licensingData.licenseAgreement
                                 ? this.props.licensingData.licenseAgreement
@@ -272,7 +279,10 @@
                             type="select"
                             isMultiSelect={true}
                             onInputChange={() => {}}
-                            disabled={this.props.isVendorArchived}
+                            disabled={
+                                this.props.isVendorArchived ||
+                                this.props.licenseType !== 'internal'
+                            }
                             onEnumChange={featureGroups =>
                                 this.props.onFeatureGroupsChanged({
                                     featureGroups
@@ -466,6 +476,7 @@
             vendorId: PropTypes.string,
             vendorName: PropTypes.string,
             licensingVersion: PropTypes.string,
+            licenseType: PropTypes.string,
             licensingData: PropTypes.shape({
                 licenceAgreement: PropTypes.string,
                 featureGroups: PropTypes.array
@@ -527,7 +538,8 @@
         let {
             vendorId,
             licensingVersion,
-            licensingData = {}
+            licensingData = {},
+            licenseType
         } = currentSoftwareProduct;
         return {
             onVendorParamChanged: args => this.onVendorParamChanged(args),
@@ -539,7 +551,8 @@
             onLicensingDataChanged: args => this.onLicensingDataChanged(args),
             featureGroupsList,
             licenseAgreementList,
-            isVendorArchived
+            isVendorArchived,
+            licenseType
         };
     }
 
diff --git a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPage.js b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPage.js
index 52a6980..5dc0aab 100644
--- a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPage.js
+++ b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPage.js
@@ -75,14 +75,32 @@
     };
 };
 
+function handleScreenChange(softwareProduct, dispatch, version) {
+    const softwareProductId = softwareProduct.id;
+    if (softwareProduct.licenseType === 'INTERNAL') {
+        ScreensHelper.loadScreen(dispatch, {
+            screen: enums.SCREEN.SOFTWARE_PRODUCT_DETAILS,
+            screenType: screenTypes.SOFTWARE_PRODUCT,
+            props: { softwareProductId, version }
+        });
+    } else {
+        ScreensHelper.loadScreen(dispatch, {
+            screen: enums.SCREEN.SOFTWARE_PRODUCT_LANDING_PAGE,
+            screenType: screenTypes.SOFTWARE_PRODUCT,
+            props: { softwareProductId, version }
+        });
+    }
+}
+
 const mapActionsToProps = (dispatch, { version }) => {
     return {
-        onDetailsSelect: ({ id: softwareProductId }) =>
-            ScreensHelper.loadScreen(dispatch, {
-                screen: enums.SCREEN.SOFTWARE_PRODUCT_DETAILS,
-                screenType: screenTypes.SOFTWARE_PRODUCT,
-                props: { softwareProductId, version }
-            }),
+        onLicenseChange: softwareProduct => {
+            SoftwareProductActionHelper.updateSoftwareProductData(dispatch, {
+                softwareProduct,
+                version
+            }).then(() => {});
+            handleScreenChange(softwareProduct, dispatch, version);
+        },
         onCandidateInProcess: softwareProductId =>
             ScreensHelper.loadScreen(dispatch, {
                 screen: enums.SCREEN.SOFTWARE_PRODUCT_ATTACHMENTS_SETUP,
diff --git a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPageView.jsx b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPageView.jsx
index e4337c7..f5cd4c6 100644
--- a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPageView.jsx
+++ b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPageView.jsx
@@ -23,7 +23,6 @@
 import DraggableUploadFileBox from 'nfvo-components/fileupload/DraggableUploadFileBox.jsx';
 import VnfRepositorySearchBox from 'nfvo-components/vnfMarketPlace/VnfRepositorySearchBox.jsx';
 
-import { SVGIcon } from 'onap-ui-react';
 import SoftwareProductComponentsList from 'sdc-app/onboarding/softwareProduct/components/SoftwareProductComponents.js';
 
 const SoftwareProductPropType = PropTypes.shape({
@@ -33,6 +32,7 @@
     id: PropTypes.string,
     categoryId: PropTypes.string,
     vendorId: PropTypes.string,
+    licenseType: PropTypes.string,
     status: PropTypes.string,
     licensingData: PropTypes.object,
     validationData: PropTypes.object
@@ -57,7 +57,7 @@
         isReadOnlyMode: PropTypes.bool,
         componentsList: PropTypes.arrayOf(ComponentPropType),
         version: PropTypes.object,
-        onDetailsSelect: PropTypes.func,
+        onLicenseChange: PropTypes.func,
         onUpload: PropTypes.func,
         onUploadConfirmation: PropTypes.func,
         onInvalidFileSizeUpload: PropTypes.func,
@@ -74,13 +74,20 @@
             onCandidateInProcess(currentSoftwareProduct.id);
         }
     }
+
+    licenceChange = (e, currentSoftwareProduct, onLicenseChange) => {
+        currentSoftwareProduct.licenseType = e.target.value;
+        onLicenseChange(currentSoftwareProduct);
+    };
+
     render() {
         let {
             currentSoftwareProduct,
             isReadOnlyMode,
             isManual,
-            onDetailsSelect
+            onLicenseChange
         } = this.props;
+        let licenceChange = this.licenceChange;
         return (
             <div className="software-product-landing-wrapper">
                 <Dropzone
@@ -106,7 +113,8 @@
                                     currentSoftwareProduct={
                                         currentSoftwareProduct
                                     }
-                                    onDetailsSelect={onDetailsSelect}
+                                    licenceChange={licenceChange}
+                                    onLicenseChange={onLicenseChange}
                                 />
                                 {this.renderProductDetails(
                                     isManual,
@@ -223,22 +231,23 @@
     }
 }
 
-const ProductSummary = ({ currentSoftwareProduct, onDetailsSelect }) => {
+const ProductSummary = ({
+    currentSoftwareProduct,
+    licenceChange,
+    onLicenseChange
+}) => {
     let {
         name = '',
         description = '',
         vendorName = '',
-        fullCategoryDisplayName = '',
-        licenseAgreementName = ''
+        fullCategoryDisplayName = ''
     } = currentSoftwareProduct;
     return (
         <div className="details-panel">
             <div className="software-product-landing-view-heading-title">
                 {i18n('Software Product Details')}
             </div>
-            <div
-                className="software-product-landing-view-top-block clickable"
-                onClick={() => onDetailsSelect(currentSoftwareProduct)}>
+            <div className="software-product-landing-view-top-block">
                 <div className="details-container">
                     <div className="single-detail-section title-section">
                         <div className="single-detail-section title-text">
@@ -263,9 +272,11 @@
                                 </div>
                                 <div className="description">
                                     <LicenseAgreement
-                                        licenseAgreementName={
-                                            licenseAgreementName
+                                        licenceChange={licenceChange}
+                                        currentSoftwareProduct={
+                                            currentSoftwareProduct
                                         }
+                                        onLicenseChange={onLicenseChange}
                                     />
                                 </div>
                             </div>
@@ -281,16 +292,52 @@
     );
 };
 
-const LicenseAgreement = ({ licenseAgreementName }) => {
-    if (!licenseAgreementName) {
-        return (
-            <div className="missing-license">
-                <SVGIcon color="warning" name="exclamationTriangleFull" />
-                <div className="warning-text">{i18n('Missing')}</div>
-            </div>
-        );
-    }
-    return <div>{licenseAgreementName}</div>;
+const LicenseAgreement = ({
+    licenceChange,
+    currentSoftwareProduct,
+    onLicenseChange
+}) => {
+    return (
+        <div className="missing-license">
+            <form>
+                <input
+                    type="radio"
+                    value="INTERNAL"
+                    id="INTERNAL"
+                    onChange={event =>
+                        licenceChange(
+                            event,
+                            currentSoftwareProduct,
+                            onLicenseChange
+                        )
+                    }
+                    checked={currentSoftwareProduct.licenseType === 'INTERNAL'}
+                    name="license"
+                />
+                <div className="description licenceLabel">
+                    {i18n('Internal license')}
+                </div>
+                <br />
+                <input
+                    type="radio"
+                    value="EXTERNAL"
+                    id="EXTERNAL"
+                    onChange={event =>
+                        licenceChange(
+                            event,
+                            currentSoftwareProduct,
+                            onLicenseChange
+                        )
+                    }
+                    checked={currentSoftwareProduct.licenseType === 'EXTERNAL'}
+                    name="license"
+                />
+                <div className="description licenceLabel">
+                    {i18n('External license')}
+                </div>
+            </form>
+        </div>
+    );
 };
 
 export default SoftwareProductLandingPageView;
diff --git a/openecomp-ui/test/softwareProduct/landingPage/landingPage.test.js b/openecomp-ui/test/softwareProduct/landingPage/landingPage.test.js
index 0b99933..3928a3d 100644
--- a/openecomp-ui/test/softwareProduct/landingPage/landingPage.test.js
+++ b/openecomp-ui/test/softwareProduct/landingPage/landingPage.test.js
@@ -107,6 +107,34 @@
 		expect(vspLandingView).toBeTruthy();
 	});
 
+	it('vsp licence agreement type change', () => {
+		const params = {
+			...currentScreen.props,
+			currentSoftwareProduct,
+			componentsList: VSPComponentsFactory.buildList(2)
+		};
+		const e = { target: {
+			value: 'INTERNAL'
+			}};
+		const obj = {dummyFunction: x => true};
+		const store = storeCreator();
+		let vspLandingView = TestUtils.renderIntoDocument(
+			<Provider store={store}>
+				<SoftwareProductLandingPageView {...params}/>
+			</Provider>
+		);
+		let vspLandingViewWrapper = TestUtils.findRenderedComponentWithType(
+			vspLandingView,
+			SoftwareProductLandingPageView
+		);
+		const spy = jest.spyOn(obj, "dummyFunction");
+		vspLandingViewWrapper.licenceChange(e, currentSoftwareProduct, obj.dummyFunction);
+		expect(spy).toHaveBeenCalled();
+		expect(currentSoftwareProduct.licenseType).toBe("INTERNAL");
+		expect(vspLandingViewWrapper).toBeTruthy();
+
+	})
+
 	it('vsp landing handleOnDragEnter test ', () => {
 
 		const params = {