[SDC] Full OnBoard health-check and NFoD support 73/6273/1
authorAvi Ziv <AVIZI@amdocs.com>
Wed, 26 Jul 2017 14:37:57 +0000 (17:37 +0300)
committerAvi Ziv <avi.ziv@amdocs.com>
Wed, 26 Jul 2017 15:27:22 +0000 (18:27 +0300)
Change-Id: I606f8a52c7e6d2bd5558f824957d890e552c5423
Signed-off-by: Avi Ziv <avi.ziv@amdocs.com>
268 files changed:
common/pom.xml
onboarding/pom.xml
openecomp-be/api/openecomp-sdc-rest-webapp/action-library-rest/action-library-rest-services/pom.xml.versionsBackup [deleted file]
openecomp-be/api/openecomp-sdc-rest-webapp/action-library-rest/action-library-rest-types/pom.xml.versionsBackup [deleted file]
openecomp-be/api/openecomp-sdc-rest-webapp/action-library-rest/pom.xml.versionsBackup [deleted file]
openecomp-be/api/openecomp-sdc-rest-webapp/application-config-rest/application-config-rest-services/pom.xml.versionsBackup [deleted file]
openecomp-be/api/openecomp-sdc-rest-webapp/application-config-rest/application-config-rest-types/pom.xml.versionsBackup [deleted file]
openecomp-be/api/openecomp-sdc-rest-webapp/application-config-rest/pom.xml.versionsBackup [deleted file]
openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/pom.xml.versionsBackup [deleted file]
openecomp-be/api/openecomp-sdc-rest-webapp/openecomp-sdc-common-rest/pom.xml.versionsBackup [deleted file]
openecomp-be/api/openecomp-sdc-rest-webapp/pom.xml.versionsBackup [deleted file]
openecomp-be/api/openecomp-sdc-rest-webapp/sequence-rest/pom.xml.versionsBackup [deleted file]
openecomp-be/api/openecomp-sdc-rest-webapp/validation-rest/pom.xml.versionsBackup [deleted file]
openecomp-be/api/openecomp-sdc-rest-webapp/validation-rest/validation-rest-services/pom.xml.versionsBackup [deleted file]
openecomp-be/api/openecomp-sdc-rest-webapp/validation-rest/validation-rest-types/pom.xml.versionsBackup [deleted file]
openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/pom.xml.versionsBackup [deleted file]
openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/pom.xml.versionsBackup [deleted file]
openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapEntitlementPoolEntityToEntitlementPoolEntityDto.java
openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapEntitlementPoolRequestDtoToEntitlementPoolEntity.java
openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapLicenseKeyGroupEntityToLicenseKeyGroupEntityDto.java
openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapLicenseKeyGroupRequestDtoToLicenseKeyGroupEntity.java
openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/services/FeatureGroupsImpl.java
openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/pom.xml.versionsBackup [deleted file]
openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/src/main/java/org/openecomp/sdcrests/vendorlicense/types/EntitlementPoolRequestDto.java
openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/src/main/java/org/openecomp/sdcrests/vendorlicense/types/FeatureGroupDescriptorDto.java
openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/src/main/java/org/openecomp/sdcrests/vendorlicense/types/LicenseKeyGroupRequestDto.java
openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/pom.xml.versionsBackup [deleted file]
openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/pom.xml.versionsBackup [deleted file]
openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/OrchestrationTemplateCandidateImpl.java
openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/VendorSoftwareProductsImpl.java
openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/pom.xml.versionsBackup [deleted file]
openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ComputeDetailsDto.java
openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/DeploymentFlavorRequestDto.java
openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ImageRequestDto.java
openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/NicRequestDto.java
openecomp-be/api/pom.xml.versionsBackup [deleted file]
openecomp-be/backend/openecomp-sdc-action-manager/pom.xml.versionsBackup [deleted file]
openecomp-be/backend/openecomp-sdc-application-config-manager/pom.xml.versionsBackup [deleted file]
openecomp-be/backend/openecomp-sdc-healthcheck-manager/pom.xml
openecomp-be/backend/openecomp-sdc-validation-manager/pom.xml.versionsBackup [deleted file]
openecomp-be/backend/openecomp-sdc-vendor-license-manager/pom.xml.versionsBackup [deleted file]
openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/main/java/org/openecomp/sdc/vendorlicense/impl/VendorLicenseManagerImpl.java
openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/test/java/org/openecomp/sdc/vendorlicense/EntitlementPoolTest.java
openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/test/java/org/openecomp/sdc/vendorlicense/LicenseKeyGroupTest.java
openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/test/java/org/openecomp/sdc/vendorlicense/VendorLicenseFacadeImplTest.java
openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/VSPPackage.zip [deleted file]
openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/pom.xml.versionsBackup [deleted file]
openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/ComputeErrorBuilder.java [new file with mode: 0644]
openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/DeploymentFlavorErrorBuilder.java
openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/ImageErrorBuilder.java
openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/NicErrorBuilder.java [new file with mode: 0644]
openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/impl/ComputeManagerImpl.java
openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/impl/DeploymentFlavorManagerImpl.java
openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/impl/ImageManagerImpl.java
openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/impl/ManualVspToscaManagerImpl.java
openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/impl/NicManagerImpl.java
openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/impl/OrchestrationTemplateCandidateManagerImpl.java
openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/impl/VendorSoftwareProductManagerImpl.java
openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/impl/ComputeManagerImplTest.java
openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/impl/DeplomentFlavorManagerImplTest.java
openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/impl/ImageManagerImplTest.java
openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/impl/ManualVspToscaManagerImplTest.java
openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/impl/NicManagerImplTest.java
openecomp-be/backend/pom.xml.versionsBackup [deleted file]
openecomp-be/configuration/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-common-lib/pom.xml
openecomp-be/lib/openecomp-common-lib/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-core-lib/openecomp-config-lib/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-core-lib/openecomp-facade-lib/openecomp-facade-api/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-core-lib/openecomp-facade-lib/openecomp-facade-core/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-core-lib/openecomp-facade-lib/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-core-lib/openecomp-nosqldb-lib/openecomp-nosqldb-api/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-core-lib/openecomp-nosqldb-lib/openecomp-nosqldb-core/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-core-lib/openecomp-nosqldb-lib/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-core-lib/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-api/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-core/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/main/java/org/openecomp/sdc/healing/healers/ComponentQuestionnaireHealer.java
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/main/java/org/openecomp/sdc/healing/healers/CompositionDataHealer.java
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/main/java/org/openecomp/sdc/healing/healers/VlmVersionHealer.java
openecomp-be/lib/openecomp-healing-lib/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-heat-lib/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/messages/AuditMessages.java
openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-logging-lib/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-migration-lib/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-action-lib/openecomp-sdc-action-api/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-action-lib/openecomp-sdc-action-api/src/main/java/org/openecomp/sdc/healthcheck/dao/ActionDao.java
openecomp-be/lib/openecomp-sdc-action-lib/openecomp-sdc-action-core/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-action-lib/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-datatypes-lib/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-enrichment-lib/openecomp-sdc-enrichment-api/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-enrichment-lib/openecomp-sdc-enrichment-core/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-enrichment-lib/openecomp-sdc-enrichment-impl/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-enrichment-lib/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-api/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-core/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-impl/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-model-lib/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-tosca-generator-lib/openecomp-sdc-tosca-generator-api/pom.xml
openecomp-be/lib/openecomp-sdc-tosca-generator-lib/openecomp-sdc-tosca-generator-api/src/main/java/org/openecomp/sdc/generator/datatypes/tosca/VspModelInfo.java
openecomp-be/lib/openecomp-sdc-tosca-generator-lib/openecomp-sdc-tosca-generator-api/src/main/java/org/openecomp/sdc/generator/util/GeneratorConstants.java
openecomp-be/lib/openecomp-sdc-tosca-generator-lib/openecomp-sdc-tosca-generator-core/src/main/java/org/openecomp/sdc/generator/core/services/ManualVspToscaGenerationService.java
openecomp-be/lib/openecomp-sdc-tosca-generator-lib/openecomp-sdc-tosca-generator-core/src/main/java/org/openecomp/sdc/generator/core/utils/GeneratorUtils.java
openecomp-be/lib/openecomp-sdc-translator-lib/att-sdc-translator-impl/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-api/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-impl/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-sdk/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-translator-lib/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-validation-lib/att-sdc-validation-impl/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-api/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-core/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/namingconvention/NovaServerNamingConventionGuideLineValidator.java
openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-sdk/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-validation-lib/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-vendor-license-lib/openecomp-sdc-vendor-license-api/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-vendor-license-lib/openecomp-sdc-vendor-license-api/src/main/java/org/openecomp/sdc/vendorlicense/dao/types/EntitlementPoolEntity.java
openecomp-be/lib/openecomp-sdc-vendor-license-lib/openecomp-sdc-vendor-license-api/src/main/java/org/openecomp/sdc/vendorlicense/dao/types/LicenseKeyGroupEntity.java
openecomp-be/lib/openecomp-sdc-vendor-license-lib/openecomp-sdc-vendor-license-api/src/main/java/org/openecomp/sdc/vendorlicense/dao/types/xml/OperationalScopeForXml.java [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-vendor-license-lib/openecomp-sdc-vendor-license-api/src/main/java/org/openecomp/sdc/vendorlicense/facade/VendorLicenseFacade.java
openecomp-be/lib/openecomp-sdc-vendor-license-lib/openecomp-sdc-vendor-license-core/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-vendor-license-lib/openecomp-sdc-vendor-license-core/src/main/java/org/openecomp/sdc/vendorlicense/dao/impl/zusammen/EntitlementPoolZusammenDaoImpl.java
openecomp-be/lib/openecomp-sdc-vendor-license-lib/openecomp-sdc-vendor-license-core/src/main/java/org/openecomp/sdc/vendorlicense/dao/impl/zusammen/LicenseKeyGroupZusammenDaoImpl.java
openecomp-be/lib/openecomp-sdc-vendor-license-lib/openecomp-sdc-vendor-license-core/src/main/java/org/openecomp/sdc/vendorlicense/facade/impl/VendorLicenseFacadeImpl.java
openecomp-be/lib/openecomp-sdc-vendor-license-lib/openecomp-sdc-vendor-license-core/src/main/java/org/openecomp/sdc/vendorlicense/licenseartifacts/impl/VendorLicenseArtifactsServiceImpl.java
openecomp-be/lib/openecomp-sdc-vendor-license-lib/openecomp-sdc-vendor-license-core/src/main/java/org/openecomp/sdc/vendorlicense/licenseartifacts/impl/types/mixins/MixinEntitlementPoolEntityForVendorLicenseArtifact.java
openecomp-be/lib/openecomp-sdc-vendor-license-lib/openecomp-sdc-vendor-license-core/src/main/java/org/openecomp/sdc/vendorlicense/licenseartifacts/impl/types/mixins/MixinEntitlementPoolEntityForVnfArtifact.java
openecomp-be/lib/openecomp-sdc-vendor-license-lib/openecomp-sdc-vendor-license-core/src/main/java/org/openecomp/sdc/vendorlicense/licenseartifacts/impl/types/mixins/MixinFeatureGroupModel.java
openecomp-be/lib/openecomp-sdc-vendor-license-lib/openecomp-sdc-vendor-license-core/src/main/java/org/openecomp/sdc/vendorlicense/licenseartifacts/impl/types/mixins/MixinLicenseKeyGroupEntityForVendorLicenseArtifact.java
openecomp-be/lib/openecomp-sdc-vendor-license-lib/openecomp-sdc-vendor-license-core/src/main/java/org/openecomp/sdc/vendorlicense/licenseartifacts/impl/types/mixins/MixinLicenseKeyGroupEntityForVnfArtifact.java
openecomp-be/lib/openecomp-sdc-vendor-license-lib/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/VendorSoftwareProductConstants.java
openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/composition/CompositionEntityDataManager.java
openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/pom.xml
openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/VendorSoftwareProductErrorCodes.java
openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/ManualVspDataCollectionService.java [moved from openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/utils/ManualVspDataCollectionService.java with 71% similarity]
openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/composition/CompositionDataExtractorImpl.java
openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/composition/CompositionEntityDataManagerImpl.java
openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-sdc-versioning-lib/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-tosca-lib/pom.xml.versionsBackup [deleted file]
openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/datatypes/ToscaNodeType.java
openecomp-be/lib/pom.xml.versionsBackup [deleted file]
openecomp-be/tools/install/database/schemaTemplates/questionnaire/compute.ftl
openecomp-be/tools/migration/1702_to_1707_zusammen/src/main/java/org/openecomp/core/migration/convertors/EntitlementPoolConvertor.java
openecomp-be/tools/migration/cassandra2zusammen.sh
openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/Commands/ExportDataCommand.java
openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/Commands/exportdata/ElementHandler.java
openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/Commands/exportdata/ItemHandler.java
openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/Commands/exportdata/VersionHandler.java
openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/Commands/importdata/ElementImport.java
openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/Commands/importdata/ItemImport.java
openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/Commands/importdata/TreeWalker.java
openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/util/ZipUtils.java
openecomp-be/tools/zusammen-tools/src/main/resources/logback.xml
openecomp-ui/.gitignore
openecomp-ui/devConfig.defaults.json
openecomp-ui/package.json
openecomp-ui/proxy-server.js [deleted file]
openecomp-ui/resources/scss/_modules.scss
openecomp-ui/resources/scss/bootstrap-cust/_modals.scss
openecomp-ui/resources/scss/common/_utils.scss
openecomp-ui/resources/scss/components/_datepicker.scss
openecomp-ui/resources/scss/components/_dualListBox.scss
openecomp-ui/resources/scss/components/_notifications.scss
openecomp-ui/resources/scss/components/_selectActionTable.scss
openecomp-ui/resources/scss/components/_validationForm.scss
openecomp-ui/resources/scss/modules/_entitlementPools.scss
openecomp-ui/resources/scss/modules/_featureGroup.scss
openecomp-ui/resources/scss/modules/_licenseKeyGroup.scss
openecomp-ui/resources/scss/modules/_licenseModel.scss
openecomp-ui/resources/scss/modules/_licenseModelLimits.scss [new file with mode: 0644]
openecomp-ui/resources/scss/modules/_licenseModelOverview.scss
openecomp-ui/resources/scss/modules/onboardingCatalog/_catalogTile.scss
openecomp-ui/resources/scss/modules/onboardingCatalog/_vendorTile.scss
openecomp-ui/resources/scss/onboarding.scss
openecomp-ui/runLocalFE.cmd [deleted file]
openecomp-ui/runLocalFE.js [deleted file]
openecomp-ui/src/index.html
openecomp-ui/src/nfvo-components/datepicker/Datepicker.jsx
openecomp-ui/src/nfvo-components/input/validation/InputOptions.jsx
openecomp-ui/src/nfvo-components/input/validation/Tabs.jsx
openecomp-ui/src/nfvo-components/listEditor/ListEditorItemView.jsx
openecomp-ui/src/nfvo-components/panel/versionController/VersionControllerConstants.js
openecomp-ui/src/nfvo-components/table/SelectActionTable.jsx
openecomp-ui/src/nfvo-components/table/SelectActionTableRow.jsx
openecomp-ui/src/nfvo-utils/Validator.js
openecomp-ui/src/nfvo-utils/getValue.js [new file with mode: 0644]
openecomp-ui/src/sdc-app/common/reducers/PlainDataReducer.js
openecomp-ui/src/sdc-app/onboarding/OnboardingActionHelper.js
openecomp-ui/src/sdc-app/onboarding/OnboardingPunchOut.jsx
openecomp-ui/src/sdc-app/onboarding/licenseModel/LicenseModelConstants.js
openecomp-ui/src/sdc-app/onboarding/licenseModel/LicenseModelReducer.js
openecomp-ui/src/sdc-app/onboarding/licenseModel/LicenseModelValidations.js [new file with mode: 0644]
openecomp-ui/src/sdc-app/onboarding/licenseModel/creation/LicenseModelCreation.js
openecomp-ui/src/sdc-app/onboarding/licenseModel/entitlementPools/EntitlementPoolsActionHelper.js
openecomp-ui/src/sdc-app/onboarding/licenseModel/entitlementPools/EntitlementPoolsConstants.js
openecomp-ui/src/sdc-app/onboarding/licenseModel/entitlementPools/EntitlementPoolsEditor.js
openecomp-ui/src/sdc-app/onboarding/licenseModel/entitlementPools/EntitlementPoolsEditorReducer.js
openecomp-ui/src/sdc-app/onboarding/licenseModel/entitlementPools/EntitlementPoolsEditorView.jsx
openecomp-ui/src/sdc-app/onboarding/licenseModel/entitlementPools/EntitlementPoolsLimits.js [new file with mode: 0644]
openecomp-ui/src/sdc-app/onboarding/licenseModel/entitlementPools/EntitlementPoolsListEditor.js
openecomp-ui/src/sdc-app/onboarding/licenseModel/entitlementPools/EntitlementPoolsListEditorView.jsx
openecomp-ui/src/sdc-app/onboarding/licenseModel/featureGroups/FeatureGroupEditor.js
openecomp-ui/src/sdc-app/onboarding/licenseModel/featureGroups/FeatureGroupEditorView.jsx
openecomp-ui/src/sdc-app/onboarding/licenseModel/featureGroups/FeatureGroupListEditorView.jsx
openecomp-ui/src/sdc-app/onboarding/licenseModel/featureGroups/FeatureGroupsActionHelper.js
openecomp-ui/src/sdc-app/onboarding/licenseModel/featureGroups/FeatureGroupsEditorReducer.js
openecomp-ui/src/sdc-app/onboarding/licenseModel/licenseAgreement/LicenseAgreementConstants.js
openecomp-ui/src/sdc-app/onboarding/licenseModel/licenseAgreement/LicenseAgreementEditor.js
openecomp-ui/src/sdc-app/onboarding/licenseModel/licenseAgreement/LicenseAgreementEditorReducer.js
openecomp-ui/src/sdc-app/onboarding/licenseModel/licenseAgreement/LicenseAgreementEditorView.jsx
openecomp-ui/src/sdc-app/onboarding/licenseModel/licenseAgreement/LicenseAgreementListEditorView.jsx
openecomp-ui/src/sdc-app/onboarding/licenseModel/licenseKeyGroups/LicenseKeyGroupsActionHelper.js
openecomp-ui/src/sdc-app/onboarding/licenseModel/licenseKeyGroups/LicenseKeyGroupsConstants.js
openecomp-ui/src/sdc-app/onboarding/licenseModel/licenseKeyGroups/LicenseKeyGroupsEditor.js
openecomp-ui/src/sdc-app/onboarding/licenseModel/licenseKeyGroups/LicenseKeyGroupsEditorReducer.js
openecomp-ui/src/sdc-app/onboarding/licenseModel/licenseKeyGroups/LicenseKeyGroupsEditorView.jsx
openecomp-ui/src/sdc-app/onboarding/licenseModel/licenseKeyGroups/LicenseKeyGroupsLimits.js [new file with mode: 0644]
openecomp-ui/src/sdc-app/onboarding/licenseModel/licenseKeyGroups/LicenseKeyGroupsListEditor.js
openecomp-ui/src/sdc-app/onboarding/licenseModel/licenseKeyGroups/LicenseKeyGroupsListEditorView.jsx
openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditor.js [new file with mode: 0644]
openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditor.jsx [new file with mode: 0644]
openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditorActionHelper.js [moved from openecomp-ui/src/sdc-app/onboarding/softwareProduct/components/images/SoftwareProductComponentsImageNavigationReducer.js with 63% similarity]
openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditorConstants.js [new file with mode: 0644]
openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditorReducer.js [new file with mode: 0644]
openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/Limits.jsx [new file with mode: 0644]
openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitsServer.js [new file with mode: 0644]
openecomp-ui/src/sdc-app/onboarding/licenseModel/overview/LicenseModelOverviewConstants.js
openecomp-ui/src/sdc-app/onboarding/licenseModel/overview/LicenseModelOverviewView.jsx
openecomp-ui/src/sdc-app/onboarding/licenseModel/overview/VLMListView.jsx
openecomp-ui/src/sdc-app/onboarding/licenseModel/overview/listItems/EntitlementPool.jsx
openecomp-ui/src/sdc-app/onboarding/licenseModel/overview/listItems/FeatureGroup.jsx
openecomp-ui/src/sdc-app/onboarding/licenseModel/overview/listItems/LicenseAgreement.jsx
openecomp-ui/src/sdc-app/onboarding/licenseModel/overview/listItems/LicenseKeyGroup.jsx
openecomp-ui/src/sdc-app/onboarding/licenseModel/overview/listItems/listItemsComponents/IconCol.jsx
openecomp-ui/src/sdc-app/onboarding/licenseModel/overview/summary/ListButtons.jsx
openecomp-ui/src/sdc-app/onboarding/licenseModel/overview/summary/VendorDataView.js
openecomp-ui/src/sdc-app/onboarding/onboard/CatalogItemDetails.jsx
openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProduct.js
openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProductActionHelper.js
openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProductReducer.js
openecomp-ui/src/sdc-app/onboarding/softwareProduct/attachments/setup/HeatSetupActionHelper.js
openecomp-ui/src/sdc-app/onboarding/softwareProduct/components/SoftwareProductComponentsActionHelper.js
openecomp-ui/src/sdc-app/onboarding/softwareProduct/components/images/SoftwareProductComponentsImageList.js
openecomp-ui/src/sdc-app/onboarding/softwareProduct/components/images/SoftwareProductComponentsImageListView.jsx
openecomp-ui/src/sdc-app/onboarding/softwareProduct/components/monitoring/SoftwareProductComponentsMonitoringView.jsx
openecomp-ui/src/sdc-app/onboarding/softwareProduct/components/network/SoftwareProductComponentsNetworkListView.jsx
openecomp-ui/src/sdc-app/onboarding/softwareProduct/components/storage/SoftwareProductComponentStorage.js
openecomp-ui/src/sdc-app/onboarding/softwareProduct/components/storage/SoftwareProductComponentStorageView.jsx
openecomp-ui/src/sdc-app/onboarding/softwareProduct/creation/SoftwareProductCreation.js
openecomp-ui/src/sdc-app/onboarding/softwareProduct/dependencies/SoftwareProductDependenciesView.jsx
openecomp-ui/src/sdc-app/onboarding/softwareProduct/deployment/editor/SoftwareProductDeploymentEditor.js
openecomp-ui/src/sdc-app/onboarding/softwareProduct/details/SoftwareProductDetailsView.jsx
openecomp-ui/test-utils/factories/licenseModel/EntitlementPoolFactories.js
openecomp-ui/test-utils/factories/licenseModel/LimitFactories.js [new file with mode: 0644]
openecomp-ui/test/licenseModel/entitlementPools/test.js
openecomp-ui/test/licenseModel/licenseKeyGroups/test.js
sdc-os-chef/sdc-cassandra/chef-repo/cookbooks/cassandra-actions/attributes/default.rb [new file with mode: 0644]

index 01be598..fd5fb48 100644 (file)
     </parent>
 
     <properties>
-        <junit.version>4.12</junit.version>
-        <java.source>1.8</java.source>
-        <java.target>1.8</java.target>
-        <slf4j.version>1.7.21</slf4j.version>
         <aspectj.version>1.8.7</aspectj.version>
-        <servlet.version>2.5</servlet.version>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <commons.codec.version>1.10</commons.codec.version> <!-- orignal 1.6 updated to resolve
-               blackduck violation -->
-        <org.reflections.version>0.9.10</org.reflections.version><!-- orignal 0.9.9 updated to
-        resolve blackduck violation -->
 
     </properties>
 
index 4131191..f9b7cd3 100644 (file)
         <jetty.servlets.version>9.0.6.v20130930</jetty.servlets.version>
         <jersey.core.version>1.19.1</jersey.core.version>
         <jersey.multipart.version>1.18.1</jersey.multipart.version>
-        <junit.version>4.12</junit.version>
+        <junit.version>RELEASE</junit.version>
         <logback.version>1.1.2</logback.version>
         <mockito.all.version>1.10.19</mockito.all.version>
-        <openecomp.sdc.common.version>1.1.0-SNAPSHOT</openecomp.sdc.common.version>
         <org.codehaus.jackson.version>1.9.13</org.codehaus.jackson.version> <!-- orignal 1.9.2 -->
         <org.everit.json.schema.version>1.3.0</org.everit.json.schema.version> <!--new 1.4.1 orignal 1.3.0 updated to resolve blackduck violation -->
         <org.reflections.version>0.9.10</org.reflections.version> <!-- orignal 0.9.9 updated to resolve blackduck violation -->
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/action-library-rest/action-library-rest-services/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/action-library-rest/action-library-rest-services/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 47b9bdd..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>action-library-rest-services</artifactId>
-    <parent>
-        <groupId>org.openecomp.sdc.onboarding</groupId>
-        <artifactId>action-library-rest</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-
-    <properties>
-        <errorcode.dir>${project.build.directory}/generated-sources/error-codes</errorcode.dir>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>action-library-rest-types</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <!-- Spring -->
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-core</artifactId>
-            <version>${spring.framework.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-context</artifactId>
-            <version>${spring.framework.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-context-support</artifactId>
-            <version>${spring.framework.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-web</artifactId>
-            <version>${spring.framework.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-beans</artifactId>
-            <version>${spring.framework.version}</version>
-        </dependency>
-
-        <!-- CXF -->
-        <dependency>
-            <groupId>org.apache.cxf</groupId>
-            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
-            <version>${cxf.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.httpcomponents</groupId>
-            <artifactId>httpclient</artifactId>
-            <version>${http.client.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.httpcomponents</groupId>
-            <artifactId>httpcore</artifactId>
-            <version>${http.client.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>javax.ws.rs</groupId>
-            <artifactId>javax.ws.rs-api</artifactId>
-            <version>${ws.rs.version}</version>
-        </dependency>
-
-        <!-- Other Stuff-->
-        <!--dependency>
-            <groupId>cglib</groupId>
-            <artifactId>cglib-nodep</artifactId>
-            <version>${cglib.nodep.version}</version>
-            <scope>runtime</scope>
-        </dependency-->
-
-        <!-- Java Stuff -->
-        <dependency>
-            <groupId>javax.inject</groupId>
-            <artifactId>javax.inject</artifactId>
-            <version>${javax.inject.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-action-manager</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-action-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-logging-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <version>1.7.21</version>
-        </dependency>
-        <dependency>
-            <groupId>com.sun.jersey.contribs</groupId>
-            <artifactId>jersey-multipart</artifactId>
-            <version>1.18.1</version>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <configuration>
-                    <includes>
-                        <include>test/core/unittest/offline/**</include>
-                    </includes>
-                    <skipTests>true</skipTests>
-                </configuration>
-            </plugin>
-            <!-- Error codes generator plugin -->
-            <!--plugin>
-                <groupId>org.openecomp.nfv.tools</groupId>
-                <artifactId>error-codes-maven-plugin</artifactId>
-            </plugin-->
-        </plugins>
-    </build>
-
-
-
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/action-library-rest/action-library-rest-types/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/action-library-rest/action-library-rest-types/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 4749ce7..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>action-library-rest-types</artifactId>
-    <name>action-library-rest-types</name>
-
-    <parent>
-        <groupId>org.openecomp.sdc.onboarding</groupId>
-        <artifactId>action-library-rest</artifactId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../</relativePath>
-    </parent>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-common-rest</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-action-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <!--<dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-vendor-license-manager</artifactId>
-            <version>${project.version}</version>
-        </dependency>-->
-    </dependencies>
-
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/action-library-rest/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/action-library-rest/pom.xml.versionsBackup
deleted file mode 100644 (file)
index de6c4c6..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>org.openecomp.sdc.onboarding</groupId>
-    <artifactId>action-library-rest</artifactId>
-    <name>action-library-rest</name>
-    <version>1.0-SNAPSHOT</version>
-    <packaging>pom</packaging>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-rest-webapp</artifactId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../</relativePath>
-    </parent>
-    <modules>
-        <module>/action-library-rest-services</module>
-        <module>/action-library-rest-types</module>
-    </modules>
-</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/application-config-rest/application-config-rest-services/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/application-config-rest/application-config-rest-services/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 9c3472a..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>application-config-rest</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>application-config-rest-services</artifactId>
-    <version>1.0-SNAPSHOT</version>
-    <!--packaging>pom</packaging-->
-
-    <dependencies>
-
-        <dependency>
-            <groupId>io.swagger</groupId>
-            <artifactId>swagger-annotations</artifactId>
-            <version>1.5.3</version>
-        </dependency>
-        <dependency>
-            <groupId>javax.ws.rs</groupId>
-            <artifactId>javax.ws.rs-api</artifactId>
-            <version>${ws.rs.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-context</artifactId>
-            <version>${spring.framework.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>javax.inject</groupId>
-            <artifactId>javax.inject</artifactId>
-            <version>1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-application-config-manager</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-             <groupId>org.openecomp.sdc</groupId>
-            <artifactId>application-config-rest-types</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-common-rest</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <!-- CXF -->
-        <dependency>
-            <groupId>org.apache.cxf</groupId>
-            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
-            <version>${cxf.version}</version>
-        </dependency>
-    </dependencies>
-
-    
-</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/application-config-rest/application-config-rest-types/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/application-config-rest/application-config-rest-types/pom.xml.versionsBackup
deleted file mode 100644 (file)
index a9c8bba..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>application-config-rest</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <groupId>org.openecomp.sdc</groupId>
-    <artifactId>application-config-rest-types</artifactId>
-    <version>1.0-SNAPSHOT</version>
-
-    
-</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/application-config-rest/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/application-config-rest/pom.xml.versionsBackup
deleted file mode 100644 (file)
index fd2e251..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-rest-webapp</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <groupId>org.openecomp.sdc</groupId>
-    <artifactId>application-config-rest</artifactId>
-    <version>1.0-SNAPSHOT</version>
-    <packaging>pom</packaging>
-
-
-    <modules>
-        <module>application-config-rest-services</module>
-        <module>application-config-rest-types</module>
-    </modules>
-    
-</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 983518f..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>org.openecomp.sdc.onboarding</groupId>
-    <artifactId>onboarding-be</artifactId>
-    <name>onboarding-rest-war</name>
-    <version>1.0-SNAPSHOT</version>
-    <packaging>war</packaging>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-rest-webapp</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.sdc.onboarding</groupId>
-            <artifactId>vendor-license-rest-services</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc.onboarding</groupId>
-            <artifactId>vendor-software-products-rest-services</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc.onboarding</groupId>
-            <artifactId>validation-rest-services</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <!--dependency>
-            <groupId>org.openecomp.sdc.onboarding</groupId>
-            <artifactId>application-config-rest-services</artifactId>
-            <version>${project.version}</version>
-        </dependency-->
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>application-config-rest-services</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc.onboarding</groupId>
-            <artifactId>action-library-rest-services</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>${javax.servlet.version}</version>
-        </dependency>
-        <!-- JSON -->
-        <dependency>
-            <groupId>org.codehaus.jackson</groupId>
-            <artifactId>jackson-jaxrs</artifactId>
-            <version>${org.codehaus.jackson.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.codehaus.jackson</groupId>
-            <artifactId>jackson-core-asl</artifactId>
-            <version>${org.codehaus.jackson.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>javax.inject</groupId>
-            <artifactId>javax.inject</artifactId>
-            <version>1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-vendor-software-product-manager</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-servlets</artifactId>
-            <version>9.0.6.v20130930</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-application-config-manager</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.codehaus.groovy</groupId>
-            <artifactId>groovy</artifactId>
-            <version>${groovy.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>${logback.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-core</artifactId>
-            <version>${logback.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.codehaus.janino</groupId>
-            <artifactId>janino</artifactId>
-            <scope>compile</scope>
-        </dependency>
-        <!--dependency>
-            <groupId>org.codehaus.janino</groupId>
-            <artifactId>commons-compiler</artifactId>
-            <version>3.0.6</version>
-            <scope>compile</scope>
-        </dependency-->
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-core</artifactId>
-            <version>4.1.3.RELEASE</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-web</artifactId>
-            <version>4.1.3.RELEASE</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-aop</artifactId>
-            <version>4.1.3.RELEASE</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-webmvc</artifactId>
-            <version>4.1.3.RELEASE</version>
-        </dependency>
-        <dependency>
-            <groupId>org.aspectj</groupId>
-            <artifactId>aspectjweaver</artifactId>
-            <version>1.8.9</version>
-        </dependency>
-        <dependency>
-            <groupId>org.aspectj</groupId>
-            <artifactId>aspectjrt</artifactId>
-            <version>1.8.9</version>
-        </dependency>
-        <dependency>
-            <groupId>org.aspectj</groupId>
-            <artifactId>aspectjtools</artifactId>
-            <version>1.8.9</version>
-        </dependency>
-
-    </dependencies>
-
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-            </plugin>
-
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <configuration>
-                    <includes>
-                        <include>test/core/unittest/offline/**</include>
-                    </includes>
-                    <skipTests>true</skipTests>
-                    <systemProperties>
-                        <property>
-                            <name>buildNumber</name>
-                            <value>${buildNumber}</value>
-                        </property>
-                    </systemProperties>
-                </configuration>
-            </plugin>
-            <plugin>
-                <artifactId>maven-war-plugin</artifactId>
-                <version>2.1.1</version>
-                <configuration>
-                    <attachClasses>true</attachClasses>
-                    <webResources>
-                        <resource>
-                            <!-- this is relative to the pom.xml directory -->
-                            <directory>${basedir}/target/generated/swagger-ui</directory>
-                        </resource>
-                    </webResources>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>com.github.kongchen</groupId>
-                <artifactId>swagger-maven-plugin</artifactId>
-                <version>3.1.0</version>
-                <configuration>
-                    <apiSources>
-                        <apiSource>
-                            <springmvc>false</springmvc>
-                            <locations>org.openecomp.sdcrests</locations>
-                            <schemes>http</schemes>
-                            <basePath>/onboarding-api</basePath>
-                            <info>
-                                <title>Rest API</title>
-                                <version>v1.0, build #${buildNumber}</version>
-                                <description>Rest API Documentation</description>
-                                <termsOfService>
-                                    http://www.github.com/kongchen/swagger-maven-plugin
-                                </termsOfService>
-                            </info>
-                            <templatePath>${basedir}/templates/strapdown.html.hbs</templatePath>
-                            <outputPath>${basedir}/target/generated/api.html</outputPath>
-                            <swaggerDirectory>${basedir}/target/generated/swagger-ui
-                            </swaggerDirectory>
-                        </apiSource>
-                    </apiSources>
-                </configuration>
-                <executions>
-                    <execution>
-                        <phase>compile</phase>
-                        <goals>
-                            <goal>generate</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-
-        <!--finalName>onboarding-api</finalName-->
-    </build>
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/openecomp-sdc-common-rest/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/openecomp-sdc-common-rest/pom.xml.versionsBackup
deleted file mode 100644 (file)
index aaf3383..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <artifactId>openecomp-sdc-common-rest</artifactId>
-    <name>openecomp-sdc-common-rest</name>
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-rest-webapp</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-utilities-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-common-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.hibernate</groupId>
-            <artifactId>hibernate-validator</artifactId>
-            <version>${hibernate.validator.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>javax.ws.rs</groupId>
-            <artifactId>javax.ws.rs-api</artifactId>
-            <version>${ws.rs.version}</version>
-        </dependency>
-        <!-- Swagger -->
-        <dependency>
-            <groupId>io.swagger</groupId>
-            <artifactId>swagger-core</artifactId>
-            <version>${swagger.version}</version>
-            <scope>compile</scope>
-        </dependency>
-    </dependencies>
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/pom.xml.versionsBackup
deleted file mode 100644 (file)
index cd9b491..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-       <modelVersion>4.0.0</modelVersion>
-
-       <artifactId>openecomp-sdc-rest-webapp</artifactId>
-       <name>openecomp-sdc-rest-webapp</name>
-       <version>1.0-SNAPSHOT</version>
-       <packaging>pom</packaging>
-
-       <parent>
-               <groupId>org.openecomp.sdc</groupId>
-               <artifactId>openecomp-sdc-api</artifactId>
-               <version>1.0-SNAPSHOT</version>
-               <relativePath>../</relativePath>
-       </parent>
-
-       <modules>
-               <module>/openecomp-sdc-common-rest</module>
-               <module>/vendor-license-rest</module>
-               <module>/onboarding-rest-war</module>
-               <module>/vendor-software-products-rest</module>
-               <module>/sequence-rest</module>
-               <module>/validation-rest</module>
-               <module>/action-library-rest</module>
-               <module>/application-config-rest</module>
-       </modules>
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/sequence-rest/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/sequence-rest/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 313a50c..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>openecomp-sdc-rest-webapp</artifactId>
-        <groupId>org.openecomp.sdc</groupId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>sequence-rest</artifactId>
-
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/validation-rest/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/validation-rest/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 8bacd99..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>org.openecomp.sdc.onboarding</groupId>
-    <artifactId>validation-rest</artifactId>
-    <name>validation-rest</name>
-    <version>1.0-SNAPSHOT</version>
-    <packaging>pom</packaging>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-rest-webapp</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-    <modules>
-        <module>/validation-rest-services</module>
-        <module>/validation-rest-types</module>
-    </modules>
-</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/validation-rest/validation-rest-services/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/validation-rest/validation-rest-services/pom.xml.versionsBackup
deleted file mode 100644 (file)
index ffc4173..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>validation-rest-services</artifactId>
-    <parent>
-        <groupId>org.openecomp.sdc.onboarding</groupId>
-        <artifactId>validation-rest</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <dependencies>
-    <dependency>
-        <groupId>org.springframework</groupId>
-        <artifactId>spring-core</artifactId>
-        <version>${spring.framework.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>org.springframework</groupId>
-        <artifactId>spring-context</artifactId>
-        <version>${spring.framework.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>org.springframework</groupId>
-        <artifactId>spring-context-support</artifactId>
-        <version>${spring.framework.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>org.springframework</groupId>
-        <artifactId>spring-web</artifactId>
-        <version>${spring.framework.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>org.springframework</groupId>
-        <artifactId>spring-beans</artifactId>
-        <version>${spring.framework.version}</version>
-    </dependency>
-
-    <!-- CXF -->
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-frontend-jaxrs</artifactId>
-        <version>${cxf.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>org.apache.httpcomponents</groupId>
-        <artifactId>httpclient</artifactId>
-        <version>${http.client.version}</version>
-    </dependency>
-
-    <dependency>
-        <groupId>javax.ws.rs</groupId>
-        <artifactId>javax.ws.rs-api</artifactId>
-        <version>${ws.rs.version}</version>
-    </dependency>
-
-    <!-- Other Stuff-->
-    <!--dependency>
-        <groupId>cglib</groupId>
-        <artifactId>cglib-nodep</artifactId>
-        <version>${cglib.nodep.version}</version>
-        <scope>runtime</scope>
-    </dependency-->
-
-    <!-- Java Stuff -->
-    <dependency>
-        <groupId>javax.inject</groupId>
-        <artifactId>javax.inject</artifactId>
-        <version>${javax.inject.version}</version>
-        <scope>provided</scope>
-    </dependency>
-        <dependency>
-            <groupId>javax.ws.rs</groupId>
-            <artifactId>javax.ws.rs-api</artifactId>
-            <version>${ws.rs.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.sun.jersey</groupId>
-            <artifactId>jersey-core</artifactId>
-            <version>1.19.1</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>javax.ws.rs</groupId>
-                    <artifactId>jsr311-api</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>io.swagger</groupId>
-            <artifactId>swagger-annotations</artifactId>
-            <version>1.5.3</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc.onboarding</groupId>
-            <artifactId>validation-rest-types</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-annotations</artifactId>
-            <version>2.7.4</version>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.dataformat</groupId>
-            <artifactId>jackson-dataformat-xml</artifactId>
-            <version>2.7.4</version>
-        </dependency>
-        <dependency>
-            <groupId>org.codehaus.woodstox</groupId>
-            <artifactId>woodstox-core-asl</artifactId>
-            <version>4.4.1</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-vendor-software-product-manager</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.sun.jersey.contribs</groupId>
-            <artifactId>jersey-multipart</artifactId>
-            <version>1.18.1</version>
-            <scope>provided</scope>
-        </dependency>
-
-
-    </dependencies>
-
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <configuration>
-                    <includes>
-                        <include>test/core/unittest/offline/**</include>
-                    </includes>
-                    <skipTests>true</skipTests>
-                </configuration>
-            </plugin>
-            <!-- Error codes generator plugin -->
-            <!--plugin>
-                <groupId>org.openecomp.nfv.tools</groupId>
-                <artifactId>error-codes-maven-plugin</artifactId>
-            </plugin-->
-        </plugins>
-    </build>
-    
-</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/validation-rest/validation-rest-types/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/validation-rest/validation-rest-types/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 5cc8ee7..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>validation-rest-types</artifactId>
-    <name>validation-rest-types</name>
-
-    <parent>
-        <groupId>org.openecomp.sdc.onboarding</groupId>
-        <artifactId>validation-rest</artifactId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../</relativePath>
-    </parent>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-common-rest</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-validation-manager</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/pom.xml.versionsBackup
deleted file mode 100644 (file)
index ae9c306..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-       <modelVersion>4.0.0</modelVersion>
-
-       <groupId>org.openecomp.sdc.onboarding</groupId>
-       <artifactId>vendor-license-rest</artifactId>
-       <name>vendor-license-rest</name>
-       <version>1.0-SNAPSHOT</version>
-       <packaging>pom</packaging>
-
-       <parent>
-               <groupId>org.openecomp.sdc</groupId>
-               <artifactId>openecomp-sdc-rest-webapp</artifactId>
-               <version>1.0-SNAPSHOT</version>
-               <relativePath>../</relativePath>
-       </parent>
-
-       <modules>
-               <module>/vendor-license-rest-services</module>
-               <module>/vendor-license-rest-types</module>
-       </modules>
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 187135e..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-                xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-       <modelVersion>4.0.0</modelVersion>
-
-       <artifactId>vendor-license-rest-services</artifactId>
-       <name>vendor-license-rest-services</name>
-
-       <parent>
-               <groupId>org.openecomp.sdc.onboarding</groupId>
-               <artifactId>vendor-license-rest</artifactId>
-               <version>1.0-SNAPSHOT</version>
-               <relativePath>../</relativePath>
-       </parent>
-
-
-       <properties>
-               <errorcode.dir>${project.build.directory}/generated-sources/error-codes</errorcode.dir>
-       </properties>
-
-       <dependencies>
-               <dependency>
-                       <groupId>${project.groupId}</groupId>
-                       <artifactId>vendor-license-rest-types</artifactId>
-                       <version>${project.version}</version>
-               </dependency>
-               <dependency>
-                       <groupId>org.openecomp.sdc</groupId>
-                       <artifactId>openecomp-sdc-vendor-license-api</artifactId>
-                       <version>${project.version}</version>
-               </dependency>
-               <dependency>
-                       <groupId>org.openecomp.sdc</groupId>
-                       <artifactId>openecomp-sdc-vendor-license-manager</artifactId>
-                       <version>${project.version}</version>
-               </dependency>
-
-
-               <!-- Spring -->
-               <dependency>
-                       <groupId>org.springframework</groupId>
-                       <artifactId>spring-core</artifactId>
-                       <version>${spring.framework.version}</version>
-               </dependency>
-               <dependency>
-                       <groupId>org.springframework</groupId>
-                       <artifactId>spring-context</artifactId>
-                       <version>${spring.framework.version}</version>
-               </dependency>
-               <dependency>
-                       <groupId>org.springframework</groupId>
-                       <artifactId>spring-context-support</artifactId>
-                       <version>${spring.framework.version}</version>
-               </dependency>
-               <dependency>
-                       <groupId>org.springframework</groupId>
-                       <artifactId>spring-web</artifactId>
-                       <version>${spring.framework.version}</version>
-               </dependency>
-               <dependency>
-                       <groupId>org.springframework</groupId>
-                       <artifactId>spring-beans</artifactId>
-                       <version>${spring.framework.version}</version>
-               </dependency>
-
-               <!-- CXF -->
-               <dependency>
-                       <groupId>org.apache.cxf</groupId>
-                       <artifactId>cxf-rt-frontend-jaxrs</artifactId>
-                       <version>${cxf.version}</version>
-               </dependency>
-               <dependency>
-                       <groupId>org.apache.httpcomponents</groupId>
-                       <artifactId>httpclient</artifactId>
-                       <version>${http.client.version}</version>
-               </dependency>
-               <dependency>
-                       <groupId>org.apache.httpcomponents</groupId>
-                       <artifactId>httpcore</artifactId>
-                       <version>${http.client.version}</version>
-               </dependency>
-
-               <dependency>
-                       <groupId>javax.ws.rs</groupId>
-                       <artifactId>javax.ws.rs-api</artifactId>
-                       <version>${ws.rs.version}</version>
-               </dependency>
-
-               <!-- Other Stuff-->
-               <!--dependency>
-                       <groupId>cglib</groupId>
-                       <artifactId>cglib-nodep</artifactId>
-                       <version>${cglib.nodep.version}</version>
-                       <scope>runtime</scope>
-               </dependency-->
-
-               <!-- Java Stuff -->
-               <dependency>
-                       <groupId>javax.inject</groupId>
-                       <artifactId>javax.inject</artifactId>
-                       <version>${javax.inject.version}</version>
-                       <scope>provided</scope>
-               </dependency>
-               <dependency>
-                       <groupId>org.openecomp.sdc</groupId>
-                       <artifactId>openecomp-sdc-vendor-software-product-manager</artifactId>
-                       <version>1.0-SNAPSHOT</version>
-               </dependency>
-
-       </dependencies>
-
-
-       <build>
-               <plugins>
-                       <plugin>
-                               <groupId>org.apache.maven.plugins</groupId>
-                               <artifactId>maven-surefire-plugin</artifactId>
-                               <configuration>
-                                       <includes>
-                                               <include>test/core/unittest/offline/**</include>
-                                       </includes>
-                                       <skipTests>true</skipTests>
-                               </configuration>
-                       </plugin>
-                       <!-- Error codes generator plugin -->
-                       <!--plugin>
-                               <groupId>org.openecomp.nfv.tools</groupId>
-                               <artifactId>error-codes-maven-plugin</artifactId>
-                       </plugin-->
-               </plugins>
-       </build>
-
-
-
-
-</project>
\ No newline at end of file
index d35c06c..21293ab 100644 (file)
@@ -22,7 +22,6 @@ package org.openecomp.sdcrests.vendorlicense.rest.mapping;
 
 import org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity;
 import org.openecomp.sdcrests.mapping.MappingBase;
-import org.openecomp.sdcrests.vendorlicense.types.ChoiceOrOtherDto;
 import org.openecomp.sdcrests.vendorlicense.types.EntitlementPoolEntityDto;
 import org.openecomp.sdcrests.vendorlicense.types.MultiChoiceOrOtherDto;
 
@@ -39,14 +38,9 @@ public class MapEntitlementPoolEntityToEntitlementPoolEntityDto
 
     MapChoiceOrOtherToChoiceOrOtherDto choiceOrOtherMapper =
         new MapChoiceOrOtherToChoiceOrOtherDto();
-    target.setEntitlementMetric(
-        choiceOrOtherMapper.applyMapping(source.getEntitlementMetric(), ChoiceOrOtherDto.class));
-    target.setAggregationFunction(
-        choiceOrOtherMapper.applyMapping(source.getAggregationFunction(), ChoiceOrOtherDto.class));
     target.setOperationalScope(new MapMultiChoiceOrOtherToMultiChoiceOrOtherDto()
         .applyMapping(source.getOperationalScope(), MultiChoiceOrOtherDto.class));
-    target.setTime(choiceOrOtherMapper.applyMapping(source.getTime(), ChoiceOrOtherDto.class));
-    target.setManufacturerReferenceNumber(source.getManufacturerReferenceNumber());
+
     target.setReferencingFeatureGroups(source.getReferencingFeatureGroups());
 
     target.setStartDate(source.getStartDate());
index 5442e1a..9b215d6 100644 (file)
@@ -20,7 +20,6 @@
 
 package org.openecomp.sdcrests.vendorlicense.rest.mapping;
 
-import org.openecomp.sdc.vendorlicense.dao.types.ChoiceOrOther;
 import org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity;
 import org.openecomp.sdc.vendorlicense.dao.types.MultiChoiceOrOther;
 import org.openecomp.sdcrests.mapping.MappingBase;
@@ -35,17 +34,11 @@ public class MapEntitlementPoolRequestDtoToEntitlementPoolEntity
     target.setThresholdValue(source.getThresholdValue());
     target.setThresholdUnit(source.getThresholdUnits());
     target.setIncrements(source.getIncrements());
-
     MapChoiceOrOtherDtoToChoiceOrOther choiceOrOtherMapper =
         new MapChoiceOrOtherDtoToChoiceOrOther();
-    target.setEntitlementMetric(
-        choiceOrOtherMapper.applyMapping(source.getEntitlementMetric(), ChoiceOrOther.class));
-    target.setAggregationFunction(
-        choiceOrOtherMapper.applyMapping(source.getAggregationFunction(), ChoiceOrOther.class));
     target.setOperationalScope(new MapMultiChoiceOrOtherDtoToMultiChoiceOrOther()
         .applyMapping(source.getOperationalScope(), MultiChoiceOrOther.class));
-    target.setTime(choiceOrOtherMapper.applyMapping(source.getTime(), ChoiceOrOther.class));
-    target.setManufacturerReferenceNumber(source.getManufacturerReferenceNumber());
+
     target.setStartDate(source.getStartDate());
     target.setExpiryDate(source.getExpiryDate());
   }
index 3838471..66618e8 100644 (file)
@@ -36,5 +36,10 @@ public class MapLicenseKeyGroupEntityToLicenseKeyGroupEntityDto
     target.setOperationalScope(new MapMultiChoiceOrOtherToMultiChoiceOrOtherDto()
         .applyMapping(source.getOperationalScope(), MultiChoiceOrOtherDto.class));
     target.setReferencingFeatureGroups(source.getReferencingFeatureGroups());
+    target.setStartDate(source.getStartDate());
+    target.setExpiryDate(source.getExpiryDate());
+    target.setThresholdUnits(source.getThresholdUnits());
+    target.setThresholdValue(source.getThresholdValue());
+    target.setIncrements(source.getIncrements());
   }
 }
index aee27c8..4682a46 100644 (file)
@@ -34,5 +34,10 @@ public class MapLicenseKeyGroupRequestDtoToLicenseKeyGroupEntity
     target.setType(source.getType());
     target.setOperationalScope(new MapMultiChoiceOrOtherDtoToMultiChoiceOrOther()
         .applyMapping(source.getOperationalScope(), MultiChoiceOrOther.class));
+    target.setStartDate(source.getStartDate());
+    target.setExpiryDate(source.getExpiryDate());
+    target.setThresholdUnits(source.getThresholdUnits());
+    target.setThresholdValue(source.getThresholdValue());
+    target.setIncrements(source.getIncrements());
   }
 }
index e41942d..99ac3cd 100644 (file)
@@ -80,6 +80,7 @@ public class FeatureGroupsImpl implements FeatureGroups {
       fgDto.setLicenseKeyGroupsIds(fg.getLicenseKeyGroupIds());
       fgDto.setEntitlementPoolsIds(fg.getEntitlementPoolIds());
       fgDto.setReferencingLicenseAgreements(fg.getReferencingLicenseAgreements());
+      fgDto.setManufacturerReferenceNumber(fg.getManufacturerReferenceNumber());
       outputMapper.doMapping(fg, fgDto);
       results.add(fgDto);
     }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/pom.xml.versionsBackup
deleted file mode 100644 (file)
index d24c315..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-       <modelVersion>4.0.0</modelVersion>
-
-       <artifactId>vendor-license-rest-types</artifactId>
-       <name>vendor-license-rest-types</name>
-       <version>1.0-SNAPSHOT</version>
-
-       <parent>
-               <groupId>org.openecomp.sdc.onboarding</groupId>
-               <artifactId>vendor-license-rest</artifactId>
-               <version>1.0-SNAPSHOT</version>
-               <relativePath>../</relativePath>
-       </parent>
-
-       <dependencies>
-               <dependency>
-                       <groupId>org.openecomp.sdc</groupId>
-                       <artifactId>openecomp-sdc-common-rest</artifactId>
-                       <version>${project.version}</version>
-               </dependency>
-               <dependency>
-                       <groupId>org.openecomp.sdc</groupId>
-                       <artifactId>openecomp-sdc-vendor-license-manager</artifactId>
-                       <version>${project.version}</version>
-               </dependency>
-       </dependencies>
-
-</project>
\ No newline at end of file
index b49a138..79cf750 100644 (file)
@@ -33,7 +33,7 @@ import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
 
 @ApiModel(value = "EntitlementPoolRequest")
-//@JsonIgnoreProperties(value = {"manufacturerReferenceNumber"})
+@JsonIgnoreProperties({"manufacturerReferenceNumber", "time", "aggregationFunction", "entitlementMetric"})
 public class EntitlementPoolRequestDto {
 
   @NotNull
@@ -46,23 +46,11 @@ public class EntitlementPoolRequestDto {
   private Integer thresholdValue;
 
   private ThresholdUnit thresholdUnits;
-  @NotNull
-  @Valid
-  private ChoiceOrOtherDto<EntitlementMetric> entitlementMetric;
   @Size(max = 120)
   private String increments;
-  @NotNull
-  @Valid
-  private ChoiceOrOtherDto<AggregationFunction> aggregationFunction;
 
   @Valid
   private MultiChoiceOrOtherDto<OperationalScope> operationalScope;
-  @NotNull
-  @Valid
-  private ChoiceOrOtherDto<EntitlementTime> time;
-  @NotNull
-  @Size(max = 100)
-  private String manufacturerReferenceNumber;
 
   private String startDate;
   private String expiryDate;
@@ -99,14 +87,6 @@ public class EntitlementPoolRequestDto {
     this.thresholdUnits = thresholdUnits;
   }
 
-  public ChoiceOrOtherDto<EntitlementMetric> getEntitlementMetric() {
-    return entitlementMetric;
-  }
-
-  public void setEntitlementMetric(ChoiceOrOtherDto<EntitlementMetric> entitlementMetric) {
-    this.entitlementMetric = entitlementMetric;
-  }
-
   public String getIncrements() {
     return increments;
   }
@@ -115,14 +95,6 @@ public class EntitlementPoolRequestDto {
     this.increments = increments;
   }
 
-  public ChoiceOrOtherDto<AggregationFunction> getAggregationFunction() {
-    return aggregationFunction;
-  }
-
-  public void setAggregationFunction(ChoiceOrOtherDto<AggregationFunction> aggregationFunction) {
-    this.aggregationFunction = aggregationFunction;
-  }
-
   public MultiChoiceOrOtherDto<OperationalScope> getOperationalScope() {
     return operationalScope;
   }
@@ -131,22 +103,6 @@ public class EntitlementPoolRequestDto {
     this.operationalScope = operationalScope;
   }
 
-  public ChoiceOrOtherDto<EntitlementTime> getTime() {
-    return time;
-  }
-
-  public void setTime(ChoiceOrOtherDto<EntitlementTime> time) {
-    this.time = time;
-  }
-
-  public String getManufacturerReferenceNumber() {
-    return manufacturerReferenceNumber;
-  }
-
-  public void setManufacturerReferenceNumber(String manufacturerReferenceNumber) {
-    this.manufacturerReferenceNumber = manufacturerReferenceNumber;
-  }
-
   public String getStartDate() {
     return startDate;
   }
index a9072f5..fb56f85 100644 (file)
@@ -22,6 +22,7 @@ package org.openecomp.sdcrests.vendorlicense.types;
 
 import org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyType;
 import org.openecomp.sdc.vendorlicense.dao.types.OperationalScope;
+import org.openecomp.sdc.vendorlicense.dao.types.ThresholdUnit;
 
 import javax.validation.Valid;
 import javax.validation.constraints.NotNull;
@@ -39,6 +40,16 @@ public class LicenseKeyGroupRequestDto {
   @Valid
   private MultiChoiceOrOtherDto<OperationalScope> operationalScope;
 
+  private String startDate;
+  private String expiryDate;
+
+  private Integer thresholdValue;
+
+  private ThresholdUnit thresholdUnits;
+
+  @Size(max = 120)
+  private String increments;
+
   public String getName() {
     return name;
   }
@@ -70,4 +81,44 @@ public class LicenseKeyGroupRequestDto {
   public void setOperationalScope(MultiChoiceOrOtherDto<OperationalScope> operationalScope) {
     this.operationalScope = operationalScope;
   }
+
+  public String getStartDate() {
+    return startDate;
+  }
+
+  public void setStartDate(String startDate) {
+    this.startDate = startDate;
+  }
+
+  public String getExpiryDate() {
+    return expiryDate;
+  }
+
+  public void setExpiryDate(String expiryDate) {
+    this.expiryDate = expiryDate;
+  }
+
+  public Integer getThresholdValue() {
+    return thresholdValue;
+  }
+
+  public void setThresholdValue(Integer thresholdValue) {
+    this.thresholdValue = thresholdValue;
+  }
+
+  public ThresholdUnit getThresholdUnits() {
+    return thresholdUnits;
+  }
+
+  public void setThresholdUnits(ThresholdUnit thresholdUnits) {
+    this.thresholdUnits = thresholdUnits;
+  }
+
+  public String getIncrements() {
+    return increments;
+  }
+
+  public void setIncrements(String increments) {
+    this.increments = increments;
+  }
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 074c8d9..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>org.openecomp.sdc.onboarding</groupId>
-    <artifactId>vendor-software-products-rest</artifactId>
-    <name>vendor-software-products-rest</name>
-    <version>1.0-SNAPSHOT</version>
-    <packaging>pom</packaging>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-rest-webapp</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-    <modules>
-        <module>/vendor-software-products-rest-services</module>
-        <module>/vendor-software-products-rest-types</module>
-    </modules>
-</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/pom.xml.versionsBackup
deleted file mode 100644 (file)
index ba28146..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>vendor-software-products-rest-services</artifactId>
-    <parent>
-        <groupId>org.openecomp.sdc.onboarding</groupId>
-        <artifactId>vendor-software-products-rest</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <dependencies>
-    <dependency>
-        <groupId>org.springframework</groupId>
-        <artifactId>spring-core</artifactId>
-        <version>${spring.framework.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>org.springframework</groupId>
-        <artifactId>spring-context</artifactId>
-        <version>${spring.framework.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>org.springframework</groupId>
-        <artifactId>spring-context-support</artifactId>
-        <version>${spring.framework.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>org.springframework</groupId>
-        <artifactId>spring-web</artifactId>
-        <version>${spring.framework.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>org.springframework</groupId>
-        <artifactId>spring-beans</artifactId>
-        <version>${spring.framework.version}</version>
-    </dependency>
-
-    <!-- CXF -->
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-frontend-jaxrs</artifactId>
-        <version>${cxf.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>org.apache.httpcomponents</groupId>
-        <artifactId>httpclient</artifactId>
-        <version>${http.client.version}</version>
-    </dependency>
-
-    <dependency>
-        <groupId>javax.ws.rs</groupId>
-        <artifactId>javax.ws.rs-api</artifactId>
-        <version>${ws.rs.version}</version>
-    </dependency>
-
-    <!-- Other Stuff-->
-    <!--dependency>
-        <groupId>cglib</groupId>
-        <artifactId>cglib-nodep</artifactId>
-        <version>${cglib.nodep.version}</version>
-        <scope>runtime</scope>
-    </dependency-->
-
-    <!-- Java Stuff -->
-    <dependency>
-        <groupId>javax.inject</groupId>
-        <artifactId>javax.inject</artifactId>
-        <version>${javax.inject.version}</version>
-        <scope>provided</scope>
-    </dependency>
-        <dependency>
-            <groupId>javax.ws.rs</groupId>
-            <artifactId>javax.ws.rs-api</artifactId>
-            <version>${ws.rs.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.sun.jersey</groupId>
-            <artifactId>jersey-core</artifactId>
-            <version>1.19.1</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>javax.ws.rs</groupId>
-                    <artifactId>jsr311-api</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>io.swagger</groupId>
-            <artifactId>swagger-annotations</artifactId>
-            <version>1.5.3</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc.onboarding</groupId>
-            <artifactId>vendor-software-products-rest-types</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-annotations</artifactId>
-            <version>2.7.4</version>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.dataformat</groupId>
-            <artifactId>jackson-dataformat-xml</artifactId>
-            <version>2.7.4</version>
-        </dependency>
-        <dependency>
-            <groupId>org.codehaus.woodstox</groupId>
-            <artifactId>woodstox-core-asl</artifactId>
-            <version>4.4.1</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-vendor-software-product-manager</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.sun.jersey.contribs</groupId>
-            <artifactId>jersey-multipart</artifactId>
-            <version>1.18.1</version>
-            <scope>provided</scope>
-        </dependency>
-
-
-    </dependencies>
-
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <configuration>
-                    <includes>
-                        <include>test/core/unittest/offline/**</include>
-                    </includes>
-                    <skipTests>true</skipTests>
-                </configuration>
-            </plugin>
-            <!-- Error codes generator plugin -->
-            <!--plugin>
-                <groupId>org.openecomp.nfv.tools</groupId>
-                <artifactId>error-codes-maven-plugin</artifactId>
-            </plugin-->
-        </plugins>
-    </build>
-    
-</project>
\ No newline at end of file
index d5eb961..0793e94 100644 (file)
@@ -3,6 +3,8 @@ package org.openecomp.sdcrests.vsp.rest.services;
 import org.apache.commons.beanutils.BeanUtils;
 import org.openecomp.core.validation.errors.ErrorMessagesFormatBuilder;
 import org.openecomp.sdc.common.errors.Messages;
+import org.openecomp.sdc.datatypes.error.ErrorLevel;
+import org.openecomp.sdc.datatypes.error.ErrorMessage;
 import org.openecomp.sdc.logging.api.Logger;
 import org.openecomp.sdc.logging.api.LoggerFactory;
 import org.openecomp.sdc.logging.context.MdcUtil;
@@ -30,6 +32,9 @@ import javax.ws.rs.core.Response;
 import java.io.IOException;
 import java.io.InputStream;
 import java.lang.reflect.InvocationTargetException;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
 import java.util.Optional;
 
 @Named
@@ -82,9 +87,12 @@ public class OrchestrationTemplateCandidateImpl implements OrchestrationTemplate
     OrchestrationTemplateActionResponseDto responseDto =
         new OrchestrationTemplateActionResponseDto();
     BeanUtils.copyProperties(responseDto, response);
+
     return Response.ok(responseDto).build();
   }
 
+
+
   @Override
   public Response updateFilesDataStructure(
       String vspId, String versionId, FileDataStructureDto fileDataStructureDto, String user)
index 6dcb63d..9c642eb 100644 (file)
@@ -25,6 +25,7 @@ import org.openecomp.sdc.activityLog.ActivityLogManagerFactory;
 import org.openecomp.sdc.common.errors.CoreException;
 import org.openecomp.sdc.common.errors.ErrorCode;
 import org.openecomp.sdc.datatypes.error.ErrorLevel;
+import org.openecomp.sdc.datatypes.error.ErrorMessage;
 import org.openecomp.sdc.logging.api.Logger;
 import org.openecomp.sdc.logging.api.LoggerFactory;
 import org.openecomp.sdc.logging.context.MdcUtil;
@@ -75,6 +76,8 @@ import java.io.IOException;
 import java.util.Collection;
 import java.util.List;
 
+import static org.openecomp.sdc.logging.messages.AuditMessages.SUBMIT_VSP_ERROR;
+
 
 @Named
 @Service("vendorSoftwareProducts")
@@ -206,8 +209,8 @@ public class VendorSoftwareProductsImpl implements VendorSoftwareProducts {
     switch (request.getAction()) {
       case Checkout:
         MDC.put(LoggerConstants.SERVICE_NAME, LoggerServiceName.Checkout_VSP.toString());
-        logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.CHECK_OUT_VSP + vspId);
         vendorSoftwareProductManager.checkout(vspId, user);
+        logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.CHECK_OUT_VSP + vspId);
         break;
       case Undo_Checkout:
         MDC.put(LoggerConstants.SERVICE_NAME, LoggerServiceName.Undo_Checkout_VSP.toString());
@@ -215,18 +218,28 @@ public class VendorSoftwareProductsImpl implements VendorSoftwareProducts {
         break;
       case Checkin:
         MDC.put(LoggerConstants.SERVICE_NAME, LoggerServiceName.Checkin_VSP.toString());
-        logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.CHECK_IN_VSP + vspId);
         vendorSoftwareProductManager.checkin(vspId, user);
+        logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.CHECK_IN_VSP + vspId);
         break;
       case Submit:
         MDC.put(LoggerConstants.SERVICE_NAME, LoggerServiceName.Submit_VSP.toString());
-        logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.SUBMIT_VSP + vspId);
         ValidationResponse validationResponse = vendorSoftwareProductManager.submit(vspId, user);
         if (!validationResponse.isValid()) {
+          logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.SUBMIT_VSP_FAIL + vspId);
+          if (validationResponse.getVspErrors() != null) {
+            validationResponse.getVspErrors().forEach(errorCode -> logger.audit(AuditMessages
+                .AUDIT_MSG + String.format(SUBMIT_VSP_ERROR, errorCode.message(), vspId)));
+          }
+          if (validationResponse.getUploadDataErrors() != null) {
+            validationResponse.getUploadDataErrors().values().forEach(errorMessages
+                -> printAuditForErrors(errorMessages, vspId, SUBMIT_VSP_ERROR));
+          }
+
           return Response.status(Response.Status.EXPECTATION_FAILED).entity(
               new MapValidationResponseToDto()
                   .applyMapping(validationResponse, ValidationResponseDto.class)).build();
         }
+        logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.SUBMIT_VSP + vspId);
         break;
       case Create_Package:
         MDC.put(LoggerConstants.SERVICE_NAME, LoggerServiceName.Create_Package.toString());
@@ -371,4 +384,14 @@ public class VendorSoftwareProductsImpl implements VendorSoftwareProducts {
 
     return Response.ok(results).build();
   }
+
+  private void printAuditForErrors(List<ErrorMessage> errorList, String vspId, String auditType) {
+
+    errorList.forEach(errorMessage -> {
+      if (errorMessage.getLevel().equals(ErrorLevel.ERROR)) {
+        logger.audit(AuditMessages.AUDIT_MSG + String.format(auditType, errorMessage.getMessage(),
+            vspId));
+      }
+    });
+  }
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 7fb5fd7..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>vendor-software-products-rest-types</artifactId>
-    <name>vendor-software-products-rest-types</name>
-
-    <parent>
-        <groupId>org.openecomp.sdc.onboarding</groupId>
-        <artifactId>vendor-software-products-rest</artifactId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../</relativePath>
-    </parent>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-common-rest</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-vendor-software-product-manager</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-
-</project>
\ No newline at end of file
index 4b7889b..92ad0fd 100644 (file)
@@ -8,7 +8,6 @@ import javax.validation.constraints.Size;
 public class ComputeDetailsDto implements CompositionDataEntityDto {
   @NotBlank(message = "is mandatory and should not be empty")
   @Size(min = 0, max = 30, message = "length should not exceed 30 characters.")
-  @Pattern(regexp = "^[a-zA-Z 0-9._-]*$", message = "must match \"^[a-zA-Z 0-9._-]*$\"")
   private String name;
   @Size(min = 0, max = 300, message = "length should not exceed 300 characters.")
   private String description;
index 54ce63b..baf6707 100644 (file)
@@ -10,7 +10,6 @@ import javax.validation.constraints.Size;
 
 public class DeploymentFlavorRequestDto {
     @NotBlank(message = "is mandatory and should not be empty")
-    @Pattern(regexp = "^[a-zA-Z 0-9._-]*$", message = "must match \"^[a-zA-Z 0-9._-]*$\"")
     @Size(min = 0, max = 30,message = "length should not exceed 30 characters.")
     private String model;
     @Size(min = 0, max = 300,message = "length should not exceed 300 characters.")
diff --git a/openecomp-be/api/pom.xml.versionsBackup b/openecomp-be/api/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 4c41573..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-       <modelVersion>4.0.0</modelVersion>
-
-       <artifactId>openecomp-sdc-api</artifactId>
-       <name>openecomp-sdc-api</name>
-       <version>1.0-SNAPSHOT</version>
-       <packaging>pom</packaging>
-       <url>http://maven.apache.org</url>
-
-       <parent>
-               <groupId>org.openecomp.sdc</groupId>
-               <artifactId>openecomp-sdc</artifactId>
-               <version>1.0-SNAPSHOT</version>
-       </parent>
-
-       <modules>
-               <module>/openecomp-sdc-rest-webapp</module>
-       </modules>
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/pom.xml.versionsBackup b/openecomp-be/backend/openecomp-sdc-action-manager/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 21cfd19..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>openecomp-sdc-action-manager</artifactId>
-    <version>1.0-SNAPSHOT</version>
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-utilities-lib</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-validation-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-nosqldb-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <version>6.9.10</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>RELEASE</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.dataformat</groupId>
-            <artifactId>jackson-dataformat-xml</artifactId>
-            <version>2.7.4</version>
-        </dependency>
-        <dependency>
-            <groupId>org.codehaus.woodstox</groupId>
-            <artifactId>woodstox-core-asl</artifactId>
-            <version>4.4.1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-action-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-versioning-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-logging-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-logging-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>backend</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-application-config-manager/pom.xml.versionsBackup b/openecomp-be/backend/openecomp-sdc-application-config-manager/pom.xml.versionsBackup
deleted file mode 100644 (file)
index a9cc7a3..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>org.openecomp.sdc</groupId>
-    <artifactId>openecomp-sdc-application-config-manager</artifactId>
-    <version>1.0-SNAPSHOT</version>
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-config-lib</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <version>6.9.10</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-logging-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>backend</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    
-</project>
\ No newline at end of file
index ea105b1..359d940 100644 (file)
@@ -80,4 +80,4 @@
             </plugin>
         </plugins>
     </build>
-</project>
+</project>
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-validation-manager/pom.xml.versionsBackup b/openecomp-be/backend/openecomp-sdc-validation-manager/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 4d678ad..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>openecomp-sdc-validation-manager</artifactId>
-    <version>1.0-SNAPSHOT</version>
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-utilities-lib</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-heat-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <version>6.9.10</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>RELEASE</version>
-            <scope>test</scope>
-        </dependency>
-
-        <!--dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-translator-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency-->
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-translator-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.dataformat</groupId>
-            <artifactId>jackson-dataformat-xml</artifactId>
-            <version>2.7.4</version>
-        </dependency>
-        <dependency>
-            <groupId>org.codehaus.woodstox</groupId>
-            <artifactId>woodstox-core-asl</artifactId>
-            <version>4.4.1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-vendor-license-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-validation-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-common-lib</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>backend</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    
-</project>
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-license-manager/pom.xml.versionsBackup b/openecomp-be/backend/openecomp-sdc-vendor-license-manager/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 85b34a1..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-sdc-vendor-license-manager</name>
-    <artifactId>openecomp-sdc-vendor-license-manager</artifactId>
-
-    <parent>
-        <artifactId>backend</artifactId>
-        <groupId>org.openecomp.sdc</groupId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-vendor-license-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-all</artifactId>
-            <scope>test</scope>
-            <version>1.10.19</version>
-        </dependency>
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <scope>test</scope>
-            <version>6.8.5</version>
-            <exclusions>
-                <exclusion>
-                    <artifactId>snakeyaml</artifactId>
-                    <groupId>org.yaml</groupId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-            <version>4.11</version>
-        </dependency>
-        <dependency>
-            <groupId>javax.el</groupId>
-            <artifactId>javax.el-api</artifactId>
-            <version>${javax.el-api.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.glassfish.web</groupId>
-            <artifactId>javax.el</artifactId>
-            <version>2.2.4</version>
-        </dependency>
-        <dependency>
-            <groupId>org.codehaus.woodstox</groupId>
-            <artifactId>woodstox-core-asl</artifactId>
-            <version>4.4.1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-vendor-software-product-manager</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.dataformat</groupId>
-            <artifactId>jackson-dataformat-xml</artifactId>
-            <version>2.7.4</version>
-        </dependency>
-        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-            <version>${commons.io.version}</version>
-        </dependency>
-
-    </dependencies>
-</project>
\ No newline at end of file
index 622ff02..b570170 100644 (file)
@@ -365,9 +365,7 @@ public class VendorLicenseManagerImpl implements VendorLicenseManager {
                                                           String user) {
     mdcDataDebugMessage.debugEntryMessage("VLM id", vlmId);
     mdcDataDebugMessage.debugExitMessage("VLM id", vlmId);
-    return featureGroupDao.list(new FeatureGroupEntity(vlmId, VersioningUtil
-        .resolveVersion(version, getVersionInfo(vlmId, VersionableEntityAction.Read, user), user),
-        null));
+    return vendorLicenseFacade.listFeatureGroups(vlmId, version, user);
   }
 
   @Override
@@ -487,15 +485,6 @@ public class VendorLicenseManagerImpl implements VendorLicenseManager {
         .debugEntryMessage("VLM id", entitlementPool.getVendorLicenseModelId());
     mdcDataDebugMessage
         .debugExitMessage("VLM id", entitlementPool.getVendorLicenseModelId());
-    validateCreateDate(entitlementPool);
-    return vendorLicenseFacade.createEntitlementPool(entitlementPool, user);
-  }
-
-  private void validateCreateDate(EntitlementPoolEntity entitlementPool){
-    mdcDataDebugMessage.debugEntryMessage("Start date and end date", entitlementPool.getStartDate
-        ()+"   "+entitlementPool.getExpiryDate());
-
-    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy'T'HH:mm:ss'Z'");
 
     entitlementPool.setStartDate(entitlementPool.getStartDate() != null ? (entitlementPool
         .getStartDate().trim().length() != 0 ? entitlementPool.getStartDate()+"T00:00:00Z"
@@ -504,40 +493,49 @@ public class VendorLicenseManagerImpl implements VendorLicenseManager {
         .getExpiryDate().trim().length() != 0 ? entitlementPool.getExpiryDate()+"T23:59:59Z"
         : null) : null);
 
-    if(entitlementPool.getStartDate() != null && entitlementPool.getExpiryDate() != null) {
-      if (LocalDate.parse(entitlementPool.getStartDate(), formatter).atStartOfDay().isBefore
-          (LocalDate.now().atStartOfDay()) ||
-          LocalDate.parse(entitlementPool.getExpiryDate(), formatter).atStartOfDay()
-              .isEqual(LocalDate.now().atStartOfDay()) ||
-          LocalDate.parse(entitlementPool.getExpiryDate(), formatter)
-              .isBefore(LocalDate.parse(entitlementPool.getStartDate(), formatter))) {
+    validateCreateDate(entitlementPool.getStartDate(), entitlementPool.getExpiryDate(),
+        entitlementPool.getVendorLicenseModelId());
+    return vendorLicenseFacade.createEntitlementPool(entitlementPool, user);
+  }
+
+  private void validateCreateDate(String startDate, String expiryDate, String vendorLicenseModelId){
+    mdcDataDebugMessage.debugEntryMessage("Start date and end date", startDate
+        +"   "+expiryDate);
+
+    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy'T'HH:mm:ss'Z'");
+
+    if(startDate != null && expiryDate != null) {
+      if (LocalDate.parse(startDate, formatter).atStartOfDay().isBefore
+          (LocalDate.now().atStartOfDay()) || LocalDate.parse(expiryDate, formatter).atStartOfDay()
+              .isEqual(LocalDate.parse(startDate, formatter).atStartOfDay()) || LocalDate
+          .parse(expiryDate, formatter).isBefore(LocalDate.parse(startDate, formatter))) {
         MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
             LoggerTragetServiceName.VALIDATE_DATE_RANGE,ErrorLevel.ERROR.name(),
             LoggerErrorCode.DATA_ERROR.getErrorCode(), LoggerErrorDescription.INVALID_VALUE);
         throw new CoreException(
-            new InvalidDateErrorBuilder(entitlementPool.getVendorLicenseModelId())
+            new InvalidDateErrorBuilder(vendorLicenseModelId)
                 .build());
       }
     }
 
-    if(entitlementPool.getStartDate() != null && entitlementPool.getExpiryDate() == null) {
-      if (LocalDate.parse(entitlementPool.getStartDate(), formatter).atStartOfDay().isBefore
+    if(startDate != null && expiryDate == null) {
+      if (LocalDate.parse(startDate, formatter).atStartOfDay().isBefore
           (LocalDate.now().atStartOfDay())) {
         MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
             LoggerTragetServiceName.VALIDATE_DATE_RANGE,ErrorLevel.ERROR.name(),
             LoggerErrorCode.DATA_ERROR.getErrorCode(), LoggerErrorDescription.INVALID_VALUE);
         throw new CoreException(
-            new InvalidDateErrorBuilder(entitlementPool.getVendorLicenseModelId())
+            new InvalidDateErrorBuilder(vendorLicenseModelId)
                 .build());
       }
     }
 
-    if(entitlementPool.getStartDate() == null && entitlementPool.getExpiryDate() != null) {
+    if(startDate == null && expiryDate != null) {
       MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
           LoggerTragetServiceName.VALIDATE_DATE_RANGE,ErrorLevel.ERROR.name(),
           LoggerErrorCode.DATA_ERROR.getErrorCode(), LoggerErrorDescription.INVALID_VALUE);
       throw new CoreException(
-          new InvalidDateErrorBuilder(entitlementPool.getVendorLicenseModelId())
+          new InvalidDateErrorBuilder(vendorLicenseModelId)
               .build());
 
     }
@@ -545,39 +543,31 @@ public class VendorLicenseManagerImpl implements VendorLicenseManager {
     mdcDataDebugMessage.debugExitMessage(null,null);
   }
 
-  private void validateUpdateDate(EntitlementPoolEntity entitlementPool){
-    mdcDataDebugMessage.debugEntryMessage("Start date and end date", entitlementPool.getStartDate
-        ()+"   "+entitlementPool.getExpiryDate());
+  private void validateUpdateDate(String startDate, String expiryDate, String vendorLicenseModelId){
+    mdcDataDebugMessage.debugEntryMessage("Start date and end date", startDate
+        +"   "+ expiryDate);
 
     DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy'T'HH:mm:ss'Z'");
 
-    entitlementPool.setStartDate(entitlementPool.getStartDate() != null ? (entitlementPool
-        .getStartDate().trim().length() != 0 ? entitlementPool.getStartDate()+"T00:00:00Z"
-        : null) : null);
-    entitlementPool.setExpiryDate(entitlementPool.getExpiryDate() != null ? (entitlementPool
-        .getExpiryDate().trim().length() != 0 ? entitlementPool.getExpiryDate()+"T23:59:59Z"
-        : null) : null);
-
-    if(entitlementPool.getStartDate() != null && entitlementPool.getExpiryDate() != null) {
-      if (LocalDate.parse(entitlementPool.getExpiryDate(), formatter).atStartOfDay()
-          .isEqual(LocalDate.parse(entitlementPool.getStartDate(), formatter).atStartOfDay()) ||
-          LocalDate.parse(entitlementPool.getExpiryDate(), formatter)
-              .isBefore(LocalDate.parse(entitlementPool.getStartDate(), formatter))) {
+    if(startDate != null && expiryDate != null) {
+      if (LocalDate.parse(expiryDate, formatter).atStartOfDay()
+          .isEqual(LocalDate.parse(startDate, formatter).atStartOfDay()) ||
+          LocalDate.parse(expiryDate, formatter).isBefore(LocalDate.parse(startDate, formatter))) {
         MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
             LoggerTragetServiceName.VALIDATE_DATE_RANGE,ErrorLevel.ERROR.name(),
             LoggerErrorCode.DATA_ERROR.getErrorCode(), LoggerErrorDescription.INVALID_VALUE);
         throw new CoreException(
-            new InvalidDateErrorBuilder(entitlementPool.getVendorLicenseModelId())
+            new InvalidDateErrorBuilder(vendorLicenseModelId)
                 .build());
       }
     }
 
-    if(entitlementPool.getStartDate() == null && entitlementPool.getExpiryDate() != null) {
+    if(startDate == null && expiryDate != null) {
       MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
           LoggerTragetServiceName.VALIDATE_DATE_RANGE,ErrorLevel.ERROR.name(),
           LoggerErrorCode.DATA_ERROR.getErrorCode(), LoggerErrorDescription.INVALID_VALUE);
       throw new CoreException(
-          new InvalidDateErrorBuilder(entitlementPool.getVendorLicenseModelId())
+          new InvalidDateErrorBuilder(vendorLicenseModelId)
               .build());
 
     }
@@ -590,7 +580,15 @@ public class VendorLicenseManagerImpl implements VendorLicenseManager {
     mdcDataDebugMessage.debugEntryMessage("VLM id, EP id", entitlementPool
         .getVendorLicenseModelId(), entitlementPool.getId());
 
-    validateUpdateDate(entitlementPool);
+    entitlementPool.setStartDate(entitlementPool.getStartDate() != null ? (entitlementPool
+        .getStartDate().trim().length() != 0 ? entitlementPool.getStartDate()+"T00:00:00Z"
+        : null) : null);
+    entitlementPool.setExpiryDate(entitlementPool.getExpiryDate() != null ? (entitlementPool
+        .getExpiryDate().trim().length() != 0 ? entitlementPool.getExpiryDate()+"T23:59:59Z"
+        : null) : null);
+
+    validateUpdateDate(entitlementPool.getStartDate(), entitlementPool.getExpiryDate(),
+        entitlementPool.getVendorLicenseModelId());
     Version version = VersioningUtil.resolveVersion(entitlementPool.getVersion(),
         getVersionInfo(entitlementPool.getVendorLicenseModelId(), VersionableEntityAction.Write,
             user), user);
@@ -692,6 +690,16 @@ public class VendorLicenseManagerImpl implements VendorLicenseManager {
 
     mdcDataDebugMessage.debugExitMessage("VLM id", licenseKeyGroup
         .getVendorLicenseModelId());
+
+    licenseKeyGroup.setStartDate(licenseKeyGroup.getStartDate() != null ? (licenseKeyGroup
+        .getStartDate().trim().length() != 0 ? licenseKeyGroup.getStartDate()+"T00:00:00Z"
+        : null) : null);
+    licenseKeyGroup.setExpiryDate(licenseKeyGroup.getExpiryDate() != null ? (licenseKeyGroup
+        .getExpiryDate().trim().length() != 0 ? licenseKeyGroup.getExpiryDate()+"T23:59:59Z"
+        : null) : null);
+
+    validateCreateDate(licenseKeyGroup.getStartDate(), licenseKeyGroup.getExpiryDate(),
+        licenseKeyGroup.getVendorLicenseModelId());
     return vendorLicenseFacade.createLicenseKeyGroup(licenseKeyGroup, user);
   }
 
@@ -700,6 +708,16 @@ public class VendorLicenseManagerImpl implements VendorLicenseManager {
     mdcDataDebugMessage.debugEntryMessage("VLM id, LKG id", licenseKeyGroup
         .getVendorLicenseModelId(), licenseKeyGroup.getId());
 
+    licenseKeyGroup.setStartDate(licenseKeyGroup.getStartDate() != null ? (licenseKeyGroup
+        .getStartDate().trim().length() != 0 ? licenseKeyGroup.getStartDate()+"T00:00:00Z"
+        : null) : null);
+    licenseKeyGroup.setExpiryDate(licenseKeyGroup.getExpiryDate() != null ? (licenseKeyGroup
+        .getExpiryDate().trim().length() != 0 ? licenseKeyGroup.getExpiryDate()+"T23:59:59Z"
+        : null) : null);
+
+    validateUpdateDate(licenseKeyGroup.getStartDate(), licenseKeyGroup.getExpiryDate(),
+        licenseKeyGroup.getVendorLicenseModelId());
+
     Version version = VersioningUtil.resolveVersion(licenseKeyGroup.getVersion(),
         getVersionInfo(licenseKeyGroup.getVendorLicenseModelId(), VersionableEntityAction.Write,
             user), user);
index 9b079de..620c6fb 100644 (file)
@@ -89,15 +89,9 @@ public class EntitlementPoolTest {
         entitlementPool.setDescription(desc);
         entitlementPool.setThresholdValue(threshold);
         entitlementPool.setThresholdUnit(thresholdUnit);
-        entitlementPool
-                .setEntitlementMetric(new ChoiceOrOther<>(entitlementMetricChoice, entitlementMetricOther));
         entitlementPool.setIncrements(increments);
-        entitlementPool.setAggregationFunction(
-                new ChoiceOrOther<>(aggregationFunctionChoice, aggregationFunctionOther));
         entitlementPool.setOperationalScope(
                 new MultiChoiceOrOther<>(operationalScopeChoices, operationalScopeOther));
-        entitlementPool.setTime(new ChoiceOrOther<>(timeChoice, timeOther));
-        entitlementPool.setManufacturerReferenceNumber(sku);
         return entitlementPool;
     }
 
index 782d93a..04f7c79 100644 (file)
@@ -29,6 +29,7 @@ import org.openecomp.sdc.common.errors.CoreException;
 import org.openecomp.sdc.vendorlicense.dao.LicenseKeyGroupDao;
 import org.openecomp.sdc.vendorlicense.dao.LimitDao;
 import org.openecomp.sdc.vendorlicense.dao.types.*;
+import org.openecomp.sdc.vendorlicense.errors.VendorLicenseErrorCodes;
 import org.openecomp.sdc.vendorlicense.facade.VendorLicenseFacade;
 import org.openecomp.sdc.vendorlicense.impl.VendorLicenseManagerImpl;
 import org.openecomp.sdc.versioning.dao.types.Version;
@@ -41,6 +42,10 @@ import org.testng.annotations.Test;
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
 import java.util.ArrayList;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -54,6 +59,8 @@ public class LicenseKeyGroupTest {
     private  final String USER = "lkgTestUser";
     private  final String LKG_NAME = "LKG name";
     private  final String LT_NAME = "LT name";
+    private final String LKG1_NAME = "LKG1 name";
+    private final String USER1 = "user1";
 
     @Mock
     private VendorLicenseFacade vendorLicenseFacade;
@@ -186,8 +193,193 @@ public class LicenseKeyGroupTest {
         }
     }
 
+  @Test
+  public void createTest() {
+    Set<OperationalScope> opScopeChoices;
+    opScopeChoices = new HashSet<>();
+    opScopeChoices.add(OperationalScope.Core);
+    opScopeChoices.add(OperationalScope.CPU);
+    opScopeChoices.add(OperationalScope.Network_Wide);
+    LicenseKeyGroupEntity lkg =
+        createLicenseKeyGroup("vlm1Id", null, LKG1_NAME, "LKG1 dec",LicenseKeyType.Unique,
+            new MultiChoiceOrOther<>(opScopeChoices, null));
+    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
+    lkg.setStartDate(LocalDate.now().format(formatter));
+    lkg.setExpiryDate(LocalDate.now().plusDays(1L).format(formatter));
+
+    vendorLicenseManagerImpl.createLicenseKeyGroup(lkg, USER1);
+  }
+
+  @Test
+  public void createWithInvalidStartExpiryDateTest() {
+    try {
+
+      Set<OperationalScope> opScopeChoices;
+      opScopeChoices = new HashSet<>();
+      opScopeChoices.add(OperationalScope.Core);
+      opScopeChoices.add(OperationalScope.CPU);
+      opScopeChoices.add(OperationalScope.Network_Wide);
+      LicenseKeyGroupEntity lkg =
+          createLicenseKeyGroup("vlm1Id", null, LKG1_NAME, "LKG1 dec",LicenseKeyType.Unique,
+              new MultiChoiceOrOther<>(opScopeChoices, null));
+      DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
+      lkg.setStartDate(LocalDate.now().format(formatter));
+      lkg.setExpiryDate(LocalDate.now().minusDays(2L).format(formatter));
+      vendorLicenseManagerImpl.createLicenseKeyGroup(lkg, USER1);
+      Assert.fail();
+    } catch (CoreException exception) {
+      Assert.assertEquals(exception.code().id(), VendorLicenseErrorCodes.DATE_RANGE_INVALID);
+    }
+  }
+
+  @Test
+  public void createWithoutStartDateTest() {
+    try {
+
+      Set<OperationalScope> opScopeChoices;
+      opScopeChoices = new HashSet<>();
+      opScopeChoices.add(OperationalScope.Core);
+      opScopeChoices.add(OperationalScope.CPU);
+      opScopeChoices.add(OperationalScope.Network_Wide);
+      LicenseKeyGroupEntity lkg =
+          createLicenseKeyGroup("vlm1Id", null, LKG1_NAME, "LKG1 dec",LicenseKeyType.Unique,
+              new MultiChoiceOrOther<>(opScopeChoices, null));
+      DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
+      lkg.setExpiryDate(LocalDate.now().plusDays(2L).format(formatter));
+      vendorLicenseManagerImpl.createLicenseKeyGroup(lkg, USER1).getId();
+      Assert.fail();
+    } catch (CoreException exception) {
+      Assert.assertEquals(exception.code().id(), VendorLicenseErrorCodes.DATE_RANGE_INVALID);
+    }
+  }
+
+  @Test
+  public void createWithSameStartExpiryDateTest() {
+    try {
+
+      Set<OperationalScope> opScopeChoices;
+      opScopeChoices = new HashSet<>();
+      opScopeChoices.add(OperationalScope.Core);
+      opScopeChoices.add(OperationalScope.CPU);
+      opScopeChoices.add(OperationalScope.Network_Wide);
+      LicenseKeyGroupEntity lkg =
+          createLicenseKeyGroup("vlm1Id", null, LKG1_NAME, "LKG1 dec",LicenseKeyType.Unique,
+              new MultiChoiceOrOther<>(opScopeChoices, null));
+      DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
+      lkg.setStartDate(LocalDate.now().plusDays(2L).format(formatter));
+      lkg.setExpiryDate(LocalDate.now().plusDays(2L).format(formatter));
+      vendorLicenseManagerImpl.createLicenseKeyGroup(lkg, USER1).getId();
+      Assert.fail();
+    } catch (CoreException exception) {
+      Assert.assertEquals(exception.code().id(), VendorLicenseErrorCodes.DATE_RANGE_INVALID);
+    }
+  }
+
+  @Test
+  public void createUpdate() {
+    Set<OperationalScope> opScopeChoices;
+    opScopeChoices = new HashSet<>();
+    opScopeChoices.add(OperationalScope.Core);
+    opScopeChoices.add(OperationalScope.CPU);
+    opScopeChoices.add(OperationalScope.Network_Wide);
+    LicenseKeyGroupEntity lkg =
+        createLicenseKeyGroup("vlm1Id", null, LKG1_NAME, "LKG1 dec",LicenseKeyType.Unique,
+            new MultiChoiceOrOther<>(opScopeChoices, null));
+    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
+    lkg.setStartDate(LocalDate.now().minusDays(3L).format(formatter));
+    lkg.setExpiryDate(LocalDate.now().minusDays(2L).format(formatter));
+    VersionInfo info = new VersionInfo();
+    Version version = new Version();
+    info.getViewableVersions().add(version);
+    info.setActiveVersion(version);
+    doReturn(info).when(vendorLicenseFacade).getVersionInfo(anyObject(),anyObject(),anyObject());
+
+    vendorLicenseManagerImpl.updateLicenseKeyGroup(lkg, USER1);
+  }
+
+  @Test
+  public void updateWithInvalidStartExpiryDateTest() {
+    try {
+
+      Set<OperationalScope> opScopeChoices;
+      opScopeChoices = new HashSet<>();
+      opScopeChoices.add(OperationalScope.Core);
+      opScopeChoices.add(OperationalScope.CPU);
+      opScopeChoices.add(OperationalScope.Network_Wide);
+      LicenseKeyGroupEntity lkg =
+          createLicenseKeyGroup("vlm1Id", null, LKG1_NAME, "LKG1 dec",LicenseKeyType.Unique,
+              new MultiChoiceOrOther<>(opScopeChoices, null));
+      DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
+      lkg.setStartDate(LocalDate.now().format(formatter));
+      lkg.setExpiryDate(LocalDate.now().minusDays(2L).format(formatter));
+      vendorLicenseManagerImpl.updateLicenseKeyGroup(lkg, USER1);
+      Assert.fail();
+    } catch (CoreException exception) {
+      Assert.assertEquals(exception.code().id(), VendorLicenseErrorCodes.DATE_RANGE_INVALID);
+    }
+  }
+
+  @Test
+  public void updateWithoutStartDateTest() {
+    try {
+
+      Set<OperationalScope> opScopeChoices;
+      opScopeChoices = new HashSet<>();
+      opScopeChoices.add(OperationalScope.Core);
+      opScopeChoices.add(OperationalScope.CPU);
+      opScopeChoices.add(OperationalScope.Network_Wide);
+      LicenseKeyGroupEntity lkg =
+          createLicenseKeyGroup("vlm1Id", null, LKG1_NAME, "LKG1 dec",LicenseKeyType.Unique,
+              new MultiChoiceOrOther<>(opScopeChoices, null));
+      DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
+      lkg.setExpiryDate(LocalDate.now().plusDays(2L).format(formatter));
+      vendorLicenseManagerImpl.updateLicenseKeyGroup(lkg, USER1);
+      Assert.fail();
+    } catch (CoreException exception) {
+      Assert.assertEquals(exception.code().id(), VendorLicenseErrorCodes.DATE_RANGE_INVALID);
+    }
+  }
+
+  @Test
+  public void updateWithSameStartExpiryDateTest() {
+    try {
+
+      Set<OperationalScope> opScopeChoices;
+      opScopeChoices = new HashSet<>();
+      opScopeChoices.add(OperationalScope.Core);
+      opScopeChoices.add(OperationalScope.CPU);
+      opScopeChoices.add(OperationalScope.Network_Wide);
+      LicenseKeyGroupEntity lkg =
+          createLicenseKeyGroup("vlm1Id", null, LKG1_NAME, "LKG1 dec",LicenseKeyType.Unique,
+              new MultiChoiceOrOther<>(opScopeChoices, null));
+      DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
+      lkg.setStartDate(LocalDate.now().format(formatter));
+      lkg.setExpiryDate(LocalDate.now().format(formatter));
+      vendorLicenseManagerImpl.updateLicenseKeyGroup(lkg, USER1);
+      Assert.fail();
+    } catch (CoreException exception) {
+      Assert.assertEquals(exception.code().id(), VendorLicenseErrorCodes.DATE_RANGE_INVALID);
+    }
+  }
+
+
+  public static LicenseKeyGroupEntity createLicenseKeyGroup(String vlmId, Version version,
+                                                            String name, String desc,
+                                                            LicenseKeyType type,
+                                                            MultiChoiceOrOther<OperationalScope> operationalScope) {
+    LicenseKeyGroupEntity licenseKeyGroup = new LicenseKeyGroupEntity();
+    licenseKeyGroup.setVendorLicenseModelId(vlmId);
+    licenseKeyGroup.setVersion(version);
+    licenseKeyGroup.setName(name);
+    licenseKeyGroup.setDescription(desc);
+    licenseKeyGroup.setType(type);
+    licenseKeyGroup.setOperationalScope(operationalScope);
+    return licenseKeyGroup;
+  }
+
   /*public static final String LKG1_NAME = "LKG1 name";
   private static final Version VERSION01 = new Version(0, 1);
+  public static final String LKG1_NAME = "LKG1 name";
   private static final String USER1 = "user1";
   public static String vlm1Id;
   public static String vlm2Id;
@@ -211,7 +403,12 @@ public class LicenseKeyGroupTest {
     return licenseKeyGroup;
   }
 
-  @BeforeClass
+  @BeforeMethod
+  public void setUp() throws Exception {
+    MockitoAnnotations.initMocks(this);
+  }
+
+  /*@BeforeClass
   private void init() {
     licenseKeyGroupDao = LicenseKeyGroupDaoFactory.getInstance().createInterface();
     noSqlDb = NoSqlDbFactory.getInstance().createInterface();
index 58db488..40bbc77 100644 (file)
@@ -1,18 +1,27 @@
 package org.openecomp.sdc.vendorlicense;
 
+import org.junit.Assert;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.mockito.Spy;
 import org.openecomp.sdc.vendorlicense.dao.*;
+import org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity;
 import org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity;
 import org.openecomp.sdc.vendorlicense.facade.impl.VendorLicenseFacadeImpl;
+import org.openecomp.sdc.vendorlicense.impl.VendorLicenseManagerImpl;
 import org.openecomp.sdc.versioning.VersioningManager;
 import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.sdc.versioning.types.VersionInfo;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
 import static org.mockito.Matchers.anyObject;
@@ -21,12 +30,16 @@ import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 
 /**
- * Created by diveshm on 7/3/2017.
+ * This test just verifies Feature Group Get and List APIs.
  */
 public class VendorLicenseFacadeImplTest {
     //JUnit Test Cases using Mockito
     private static final Version VERSION01 = new Version(0, 1);
-    private final String FG1_NAME = "FG1 name";
+    public static final String EP1 = "ep1";
+    public static final String MRN = "mrn";
+    public static final String VLM_ID = "VLM_ID";
+    public static final String USER = "USER1";
+
 
     @Mock
     private VendorLicenseModelDao vendorLicenseModelDao;
@@ -50,78 +63,101 @@ public class VendorLicenseFacadeImplTest {
     @Spy
     private VendorLicenseFacadeImpl vendorLicenseFacadeImpl;
 
-    public FeatureGroupEntity createFeatureGroup(String vlmId, Version version, String id, String name, String desc,
-                                                 String partNumber, String manufacturerReferenceNumber, Set<String>
-                                                         licenseKeyGroupIds, Set<String> entitlementPoolIds, Set<String>
-                                                         referencingLicenseAgreements){
-        FeatureGroupEntity featureGroup = new FeatureGroupEntity(vlmId, version, id);
-        featureGroup.setVendorLicenseModelId(vlmId);
-        featureGroup.setVersion(version);
-        featureGroup.setId(id);
-        featureGroup.setName(name);
-        featureGroup.setDescription(desc);
-        featureGroup.setPartNumber(partNumber);
-        //featureGroup.setManufacturerReferenceNumber(manufacturerReferenceNumber);
-        featureGroup.setLicenseKeyGroupIds(licenseKeyGroupIds);
-        featureGroup.setEntitlementPoolIds(entitlementPoolIds);
-        featureGroup.setReferencingLicenseAgreements(referencingLicenseAgreements);
-
-        return featureGroup;
-    }
-
     @BeforeMethod
     public void setUp() throws Exception{
         MockitoAnnotations.initMocks(this);
     }
 
     @Test
-    public void testCreate(){
-        Set<String> licenseKeyGroupIds;
-        licenseKeyGroupIds = new HashSet<>();
-        licenseKeyGroupIds.add("lkg1");
+    public void testGetFeatureGroupWhenMRNNull () {
+        resetFieldModifiers();
+
+        FeatureGroupEntity featureGroup = createFeatureGroup();
+
+        VersionInfo info = new VersionInfo();
+        info.getViewableVersions().add(VERSION01);
+        info.setActiveVersion(VERSION01);
 
         Set<String> entitlementPoolIds;
         entitlementPoolIds = new HashSet<>();
-        entitlementPoolIds.add("ep1");
-
-        Set<String> referencingLicenseAgreements;
-        referencingLicenseAgreements = new HashSet<>();
-        referencingLicenseAgreements.add("la1");
+        entitlementPoolIds.add(EP1);
 
-        FeatureGroupEntity featureGroupEntity = createFeatureGroup("vlmId", VERSION01, "fgId", FG1_NAME, "fg1 desc",
-                "partNumber", "MRN", licenseKeyGroupIds, entitlementPoolIds,
-                referencingLicenseAgreements);
+        EntitlementPoolEntity ep = createEP();
 
-        doReturn(featureGroupEntity).when(featureGroupDao).get(anyObject());
+        featureGroup.setEntitlementPoolIds(entitlementPoolIds);
 
-        /*if(featureGroupEntity.getManufacturerReferenceNumber() != null)
-            featureGroupDao.create(featureGroupEntity);
-        verify(featureGroupDao).create(anyObject());*/
+        doReturn(info).when(vendorLicenseFacadeImpl).getVersionInfo(anyObject(),anyObject(),anyObject());
+        doReturn(featureGroup).when(featureGroupDao).get(featureGroup);
+        doReturn(ep).when(entitlementPoolDao).get(anyObject());
+        doReturn(MRN).when(entitlementPoolDao).getManufacturerReferenceNumber(anyObject());
+        FeatureGroupEntity retrieved = vendorLicenseFacadeImpl.getFeatureGroup(featureGroup, USER);
+        Assert.assertEquals(MRN, retrieved.getManufacturerReferenceNumber());
     }
 
     @Test
-    public void testCreateWithoutManufacturerReferenceNumber(){
-        Set<String> licenseKeyGroupIds;
-        licenseKeyGroupIds = new HashSet<>();
-        licenseKeyGroupIds.add("lkg1");
+    public void testListFeatureGroups () {
+        resetFieldModifiers();
 
-        Set<String> entitlementPoolIds;
-        entitlementPoolIds = new HashSet<>();
-        entitlementPoolIds.add("ep1");
+        FeatureGroupEntity featureGroup = createFeatureGroup();
 
-        Set<String> referencingLicenseAgreements;
-        referencingLicenseAgreements = new HashSet<>();
-        referencingLicenseAgreements.add("la1");
+        Collection<FeatureGroupEntity> featureGroups = new ArrayList<FeatureGroupEntity>();
+        featureGroups.add(featureGroup);
 
-        FeatureGroupEntity featureGroupEntity = createFeatureGroup("vlmId", VERSION01, "fgId", FG1_NAME, "fg1 desc",
-                "partNumber", null, licenseKeyGroupIds, entitlementPoolIds,
-                referencingLicenseAgreements);
-        doReturn(featureGroupEntity).when(featureGroupDao).get(anyObject());
+        VersionInfo info = new VersionInfo();
+        info.getViewableVersions().add(VERSION01);
+        info.setActiveVersion(VERSION01);
 
-        /*if(featureGroupEntity.getManufacturerReferenceNumber() != null)
-            featureGroupDao.create(featureGroupEntity);
+        EntitlementPoolEntity ep = createEP();
 
-        verify(featureGroupDao, never()).create(anyObject());*/
+        doReturn(info).when(vendorLicenseFacadeImpl).getVersionInfo(anyObject(),anyObject(),anyObject());
+        doReturn(featureGroup).when(featureGroupDao).get(featureGroup);
+        doReturn(ep).when(entitlementPoolDao).get(anyObject());
+        doReturn(MRN).when(entitlementPoolDao).getManufacturerReferenceNumber(anyObject());
+        Collection<FeatureGroupEntity> retrieved = vendorLicenseFacadeImpl.listFeatureGroups(VLM_ID,
+            VERSION01, USER);
+        retrieved.stream().forEach(fg -> Assert.assertEquals(MRN,fg.getManufacturerReferenceNumber()));
+    }
+
+    private void resetFieldModifiers() {
+        try {
+            Field fgField = VendorLicenseFacadeImpl.class.getDeclaredField("featureGroupDao");
+            fgField.setAccessible(true);
+            Field modifiersField = Field.class.getDeclaredField("modifiers");
+            modifiersField.setAccessible(true);
+            modifiersField.setInt(fgField, fgField.getModifiers() & ~Modifier.FINAL);
+            fgField.set(null, featureGroupDao);
+
+            Field epField = VendorLicenseFacadeImpl.class.getDeclaredField("entitlementPoolDao");
+            epField.setAccessible(true);
+            modifiersField = Field.class.getDeclaredField("modifiers");
+            modifiersField.setAccessible(true);
+            modifiersField.setInt(epField, epField.getModifiers() & ~Modifier.FINAL);
+            epField.set(null, entitlementPoolDao);
+        } catch(NoSuchFieldException | IllegalAccessException e)
+        {
+            org.testng.Assert.fail();
+        }
+    }
+
+    private FeatureGroupEntity createFeatureGroup() {
+        FeatureGroupEntity featureGroup = new FeatureGroupEntity(VLM_ID, VERSION01, USER);
+        featureGroup.setManufacturerReferenceNumber(null);
+        VersionInfo info = new VersionInfo();
+        info.getViewableVersions().add(VERSION01);
+        info.setActiveVersion(VERSION01);
+
+        Set<String> entitlementPoolIds;
+        entitlementPoolIds = new HashSet<>();
+        entitlementPoolIds.add(EP1);
+
+        featureGroup.setEntitlementPoolIds(entitlementPoolIds);
+        return featureGroup;
+    }
 
+    private EntitlementPoolEntity createEP() {
+        EntitlementPoolEntity ep = new EntitlementPoolEntity(VLM_ID,VERSION01, EP1);
+        ep.setManufacturerReferenceNumber(MRN);
+        return ep;
     }
+
 }
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/VSPPackage.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/VSPPackage.zip
deleted file mode 100644 (file)
index ca55484..0000000
Binary files a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/VSPPackage.zip and /dev/null differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/pom.xml.versionsBackup b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 839a192..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>openecomp-sdc-vendor-software-product-manager</artifactId>
-    <version>1.0-SNAPSHOT</version>
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-utilities-lib</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-nosqldb-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-vendor-software-product-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-heat-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-tosca-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <version>6.9.10</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>RELEASE</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-all</artifactId>
-            <version>1.10.19</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-translator-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.dataformat</groupId>
-            <artifactId>jackson-dataformat-xml</artifactId>
-            <version>2.7.4</version>
-        </dependency>
-        <dependency>
-            <groupId>org.codehaus.woodstox</groupId>
-            <artifactId>woodstox-core-asl</artifactId>
-            <version>4.4.1</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-vendor-license-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-enrichment-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-validation-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-validation-impl</artifactId>
-            <version>1.0-SNAPSHOT</version>
-            <scope>runtime</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-enrichment-impl</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-            <version>${commons.io.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-model-impl</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-validation-manager</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-logging-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-logging-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-healing-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-            <scope>runtime</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-healing-impl</artifactId>
-            <version>1.0-SNAPSHOT</version>
-            <scope>runtime</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-healing-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <version>2.19.1</version>
-                <configuration>
-                    <useSystemClassLoader>false</useSystemClassLoader>
-                    <redirectTestOutputToFile>true</redirectTestOutputToFile>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>backend</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/ComputeErrorBuilder.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/ComputeErrorBuilder.java
new file mode 100644 (file)
index 0000000..1c728bd
--- /dev/null
@@ -0,0 +1,25 @@
+package org.openecomp.sdc.vendorsoftwareproduct.errors;
+
+import org.openecomp.sdc.common.errors.ErrorCategory;
+import org.openecomp.sdc.common.errors.ErrorCode;
+
+/**
+ * The Compute error builder.
+ */
+public class ComputeErrorBuilder {
+    private static final String COMPUTE_NAME_FORMAT_MSG = "Field does not conform to predefined criteria"
+            + ": name : must match %s";
+
+    /**
+     * Gets image name format error builder.
+     *
+     * @return the image name format error builder
+     */
+    public static ErrorCode getComputeNameFormatErrorBuilder(String pattern) {
+        ErrorCode.ErrorCodeBuilder builder = new ErrorCode.ErrorCodeBuilder();
+        builder.withId(VendorSoftwareProductErrorCodes.COMPUTE_NAME_FORMAT_NOT_ALLOWED);
+        builder.withCategory(ErrorCategory.APPLICATION);
+        builder.withMessage(String.format(COMPUTE_NAME_FORMAT_MSG, pattern));
+        return builder.build();
+    }
+}
index 63d7165..97476a2 100644 (file)
@@ -17,6 +17,8 @@ public class DeploymentFlavorErrorBuilder {
         "Invalid Request,Same Vfc cannot be associated more than once.";
     private static final String DUPLICATE_DEPLOYMENT_FLAVOR_MODEL_NOT_ALLOWED_MSG =
         "Invalid request, Deployment Flavor with model %s already exists for Vsp with Id %s.";
+    private static final String DEPLOYMENT_FLAVOUR_NAME_FORMAT_MSG = "Field does not conform to predefined criteria"
+            + ": name : must match %s";
     private static final String INVALID_COMPUTE_FLAVOR_ID_MSG =
         "Invalid request, Compute Flavor with Id %s does not exist for VFC with Id %s.";
     private static final String INVALID_COMPONENT_COMPUTE_ASSOCIATION_ERROR_MSG="VSP cannot be " +
@@ -92,4 +94,12 @@ public class DeploymentFlavorErrorBuilder {
         builder.withMessage(String.format(FEATUREGROUP_REQUIRED_IN_DEPLOYMENT_FLAVOR_MSG));
         return builder.build();
     }
+
+    public static ErrorCode getDeploymentFlavorNameFormatErrorBuilder(String pattern){
+        ErrorCode.ErrorCodeBuilder builder = new ErrorCode.ErrorCodeBuilder();
+        builder.withId(VendorSoftwareProductErrorCodes.DEPLOYMENT_FLAVOR_NAME_FORMAT_NOT_ALLOWED);
+        builder.withCategory(ErrorCategory.APPLICATION);
+        builder.withMessage(String.format(DEPLOYMENT_FLAVOUR_NAME_FORMAT_MSG, pattern));
+        return builder.build();
+    }
 }
index 95bff60..24883b5 100644 (file)
@@ -1,13 +1,10 @@
 package org.openecomp.sdc.vendorsoftwareproduct.errors;
 
-import static org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes.DUPLICATE_IMAGE_NAME_NOT_ALLOWED;
-
-import static org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes.UPDATE_IMAGE_NOT_ALLOWED;
-import static org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes.VFC_IMAGE_INVALID_FORMAT;
-
 import org.openecomp.sdc.common.errors.ErrorCategory;
 import org.openecomp.sdc.common.errors.ErrorCode;
 
+import static org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes.*;
+
 /**
  * The Image error builder.
  */
@@ -15,7 +12,8 @@ public class ImageErrorBuilder {
 
   private static final String VFC_IMAGE_DUPLICATE_NAME_MSG = "Invalid request, Image with name %s"
       + " already exists for component with ID %s.";
-
+  private static final String VFC_IMAGE_NAME_FORMAT_MSG = "Field does not conform to predefined criteria"
+          + ": name : must match %s";
   private static final String IMAGE_INVALID_FORMAT_MSG = "The format value doesn't meet the "
       + "expected attribute value.";
 
@@ -28,11 +26,24 @@ public class ImageErrorBuilder {
    *
    * @return the duplicate image name error builder
    */
-  public static ErrorCode getDuplicateImageNameErrorBuilder(String imageName, String componenetId) {
+  public static ErrorCode getDuplicateImageNameErrorBuilder(String imageName, String componentId) {
     ErrorCode.ErrorCodeBuilder builder = new ErrorCode.ErrorCodeBuilder();
     builder.withId(DUPLICATE_IMAGE_NAME_NOT_ALLOWED);
     builder.withCategory(ErrorCategory.APPLICATION);
-    builder.withMessage(String.format(VFC_IMAGE_DUPLICATE_NAME_MSG, imageName, componenetId ));
+    builder.withMessage(String.format(VFC_IMAGE_DUPLICATE_NAME_MSG, imageName, componentId ));
+    return builder.build();
+  }
+
+  /**
+   * Gets image name format error builder.
+   *
+   * @return the image name format error builder
+   */
+  public static ErrorCode getImageNameFormatErrorBuilder(String pattern) {
+    ErrorCode.ErrorCodeBuilder builder = new ErrorCode.ErrorCodeBuilder();
+    builder.withId(IMAGE_NAME_FORMAT_NOT_ALLOWED);
+    builder.withCategory(ErrorCategory.APPLICATION);
+    builder.withMessage(String.format(VFC_IMAGE_NAME_FORMAT_MSG, pattern));
     return builder.build();
   }
 
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/NicErrorBuilder.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/NicErrorBuilder.java
new file mode 100644 (file)
index 0000000..fc8ecf2
--- /dev/null
@@ -0,0 +1,27 @@
+package org.openecomp.sdc.vendorsoftwareproduct.errors;
+
+import org.openecomp.sdc.common.errors.ErrorCategory;
+import org.openecomp.sdc.common.errors.ErrorCode;
+
+import static org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes.NIC_NAME_FORMAT_NOT_ALLOWED;
+
+/**
+ * The NIC error builder.
+ */
+public class NicErrorBuilder {
+    private static final String NIC_NAME_FORMAT_MSG = "Field does not conform to predefined criteria"
+            + ": name : must match %s";
+
+    /**
+     * Gets image name format error builder.
+     *
+     * @return the image name format error builder
+     */
+    public static ErrorCode getNicNameFormatErrorBuilder(String imageName, String pattern) {
+        ErrorCode.ErrorCodeBuilder builder = new ErrorCode.ErrorCodeBuilder();
+        builder.withId(NIC_NAME_FORMAT_NOT_ALLOWED);
+        builder.withCategory(ErrorCategory.APPLICATION);
+        builder.withMessage(String.format(NIC_NAME_FORMAT_MSG, pattern));
+        return builder.build();
+    }
+}
index a2d1d70..cd102eb 100644 (file)
@@ -12,15 +12,15 @@ import org.openecomp.sdc.logging.types.LoggerConstants;
 import org.openecomp.sdc.logging.types.LoggerErrorCode;
 import org.openecomp.sdc.logging.types.LoggerTragetServiceName;
 import org.openecomp.sdc.vendorsoftwareproduct.ComputeManager;
+import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentDao;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComputeDao;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.DeploymentFlavorDao;
-import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDao;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
-import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComputeEntity;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.DeploymentFlavorEntity;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
+import org.openecomp.sdc.vendorsoftwareproduct.errors.ComputeErrorBuilder;
 import org.openecomp.sdc.vendorsoftwareproduct.errors.DuplicateComputeInComponentErrorBuilder;
 import org.openecomp.sdc.vendorsoftwareproduct.errors.NotSupportedHeatOnboardMethodErrorBuilder;
 import org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes;
@@ -34,14 +34,11 @@ import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEnti
 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityValidationData;
 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComputeData;
 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.DeploymentFlavor;
-import org.openecomp.sdc.vendorsoftwareproduct.types.questionnaire.component.compute.Compute;
 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.ComputeCompositionSchemaInput;
 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateContext;
 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateInput;
-import org.openecomp.sdc.vendorsoftwareproduct.utils.VendorSoftwareProductUtils;
 import org.openecomp.sdc.versioning.VersioningUtil;
 import org.openecomp.sdc.versioning.dao.types.Version;
-import org.openecomp.sdc.versioning.types.VersionableEntityAction;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -92,9 +89,13 @@ public class ComputeManagerImpl implements ComputeManager {
           onboardingMethodUpdateErrorCode.message());
       throw new CoreException(onboardingMethodUpdateErrorCode);
     } else {
+
       //validateComponentId(compute.getVspId(),compute.getVersion(),compute.getComponentId());
-      validateCompute(compute);
-      createdCompute = createCompute(compute);
+        Collection<ComputeEntity> vfcComputeList = listCompute(compute.getVspId(),compute.getVersion
+                (),compute.getComponentId());
+
+        validateVfcCompute(compute, vfcComputeList, LoggerTragetServiceName.CREATE_COMPUTE);
+        createdCompute = createCompute(compute);
     }
 
     mdcDataDebugMessage
@@ -108,7 +109,7 @@ public class ComputeManagerImpl implements ComputeManager {
     return compositionEntityDataManager.createCompute(compute);
   }
 
-  private void validateCompute(ComputeEntity compute) {
+  /*private void validateCompute(ComputeEntity compute) {
     Collection<ComputeEntity> vfcComputeList = listCompute(compute.getVspId(),compute.getVersion
         (),compute.getComponentId());
 
@@ -123,7 +124,7 @@ public class ComputeManagerImpl implements ComputeManager {
       throw new CoreException(duplicateComputeInComponentErrorBuilder);
     }
 
-  }
+  }*/
 
   private void validateComputeUpdate(ComputeEntity compute) {
     Collection<ComputeEntity> vfcComputeList = listCompute(compute.getVspId(),compute.getVersion
@@ -347,7 +348,7 @@ public class ComputeManagerImpl implements ComputeManager {
     retrieved.setQuestionnaireData(null);
     vfcComputeList.remove(retrieved);
     if(vspInfoDao.isManual(compute.getVspId(), compute.getVersion()))
-      validateVfcCompute(compute, vfcComputeList);
+      validateVfcCompute(compute, vfcComputeList, LoggerTragetServiceName.UPDATE_COMPUTE);
 
     //Set format to default value in order to handle FTL validation when compute format is null
     /*if(compute.getComputeCompositionData().getFormat() == null)
@@ -384,22 +385,32 @@ public class ComputeManagerImpl implements ComputeManager {
     }
   }
 
-  private void validateVfcCompute(ComputeEntity compute, Collection<ComputeEntity> vfcComputeList) {
-    if (isComputeNameDuplicate(vfcComputeList,compute.getComputeCompositionData().getName(), compute.getId())) {
-      ErrorCode errorCode = DuplicateComputeInComponentErrorBuilder.getDuplicateComputeNameErrorBuilder(compute
+  private void validateVfcCompute(ComputeEntity compute, Collection<ComputeEntity> vfcComputeList, String event) {
+      if(!compute.getComputeCompositionData().getName().matches(VendorSoftwareProductConstants.NAME_PATTERN))
+      {
+          ErrorCode errorCode = ComputeErrorBuilder.getComputeNameFormatErrorBuilder(
+                  VendorSoftwareProductConstants.NAME_PATTERN);
+          MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
+                  event, ErrorLevel.ERROR.name(),
+                  errorCode.id(),errorCode.message());
+          throw new CoreException(errorCode);
+      }
+
+      if (isComputeNameDuplicate(vfcComputeList,compute.getComputeCompositionData().getName(), compute.getId())) {
+          ErrorCode errorCode = DuplicateComputeInComponentErrorBuilder.getDuplicateComputeNameErrorBuilder(compute
               .getComputeCompositionData().getName(), compute.getComponentId());
 
-      MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
-              LoggerTragetServiceName.CREATE_COMPONENT, ErrorLevel.ERROR.name(),
+          MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
+              event, ErrorLevel.ERROR.name(),
               errorCode.id(),errorCode.message());
 
-      throw new CoreException(errorCode);
-    }
+          throw new CoreException(errorCode);
+      }
   }
 
   private boolean isComputeNameDuplicate(Collection<ComputeEntity> computes, String name, String computeId) {
     for (ComputeEntity compute : computes) {
-      if (compute.getComputeCompositionData().getName().equals(name) && !compute.getId().equals(computeId)) {
+      if (compute.getComputeCompositionData().getName().equalsIgnoreCase(name) && !compute.getId().equals(computeId)) {
         return true;
       }
     }
index 7069d77..2e96445 100644 (file)
@@ -10,6 +10,7 @@ import org.openecomp.sdc.logging.types.LoggerConstants;
 import org.openecomp.sdc.logging.types.LoggerErrorCode;
 import org.openecomp.sdc.logging.types.LoggerTragetServiceName;
 import org.openecomp.sdc.vendorsoftwareproduct.DeploymentFlavorManager;
+import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentDao;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComputeDao;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.DeploymentFlavorDao;
@@ -23,17 +24,14 @@ import org.openecomp.sdc.vendorsoftwareproduct.errors.NotSupportedHeatOnboardMet
 import org.openecomp.sdc.vendorsoftwareproduct.services.composition.CompositionEntityDataManager;
 import org.openecomp.sdc.vendorsoftwareproduct.services.schemagenerator.SchemaGenerator;
 import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityResponse;
-import org.openecomp.sdc.vendorsoftwareproduct.types.VersionedVendorSoftwareProductInfo;
 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentComputeAssociation;
 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType;
 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityValidationData;
 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.DeploymentFlavor;
 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.DeploymentFlavorCompositionSchemaInput;
 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateContext;
-import org.openecomp.sdc.vendorsoftwareproduct.utils.VendorSoftwareProductUtils;
 import org.openecomp.sdc.versioning.VersioningUtil;
 import org.openecomp.sdc.versioning.dao.types.Version;
-import org.openecomp.sdc.versioning.types.VersionableEntityAction;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -112,6 +110,18 @@ public class DeploymentFlavorManagerImpl implements DeploymentFlavorManager {
 
   private void validateDeploymentFlavor(DeploymentFlavorEntity deploymentFlavorEntity, String
       user, Version activeVersion) {
+
+    if(!deploymentFlavorEntity.getDeploymentFlavorCompositionData().getModel().matches(VendorSoftwareProductConstants.NAME_PATTERN))
+    {
+      ErrorCode errorCode = DeploymentFlavorErrorBuilder.getDeploymentFlavorNameFormatErrorBuilder(
+              VendorSoftwareProductConstants.NAME_PATTERN);
+
+      MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
+              LoggerTragetServiceName.UPDATE_NIC, ErrorLevel.ERROR.name(),
+              errorCode.id(),errorCode.message());
+
+      throw new CoreException(errorCode);
+    }
     //Validation for unique model.
     Collection<DeploymentFlavorEntity> listDeploymentFlavors =
         listDeploymentFlavors(deploymentFlavorEntity.getVspId(),
@@ -357,6 +367,17 @@ public class DeploymentFlavorManagerImpl implements DeploymentFlavorManager {
           updateDeploymentFlavorErrorBuilder.message());
       throw new CoreException(updateDeploymentFlavorErrorBuilder);
     }
+    else {
+        if(!deploymentFlavorEntity.getDeploymentFlavorCompositionData().getModel().matches(VendorSoftwareProductConstants.NAME_PATTERN))
+        {
+            ErrorCode errorCode = DeploymentFlavorErrorBuilder.getDeploymentFlavorNameFormatErrorBuilder(
+                    VendorSoftwareProductConstants.NAME_PATTERN);
+            MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
+                    LoggerTragetServiceName.UPDATE_DEPLOYMENT_FLAVOR, ErrorLevel.ERROR.name(),
+                    errorCode.id(),errorCode.message());
+            throw new CoreException(errorCode);
+        }
+    }
     //deploymentFlavorEntity.setVersion(activeVersion);
     DeploymentFlavorEntity retrieved =
         getDeploymentFlavor(deploymentFlavorEntity.getVspId(), deploymentFlavorEntity.getVersion(),
index e180138..6a8f9e0 100644 (file)
@@ -12,9 +12,7 @@ import org.openecomp.sdc.logging.types.LoggerConstants;
 import org.openecomp.sdc.logging.types.LoggerErrorCode;
 import org.openecomp.sdc.logging.types.LoggerTragetServiceName;
 import org.openecomp.sdc.vendorsoftwareproduct.ImageManager;
-import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentDao;
-import org.openecomp.sdc.vendorsoftwareproduct.dao.ComputeDao;
-import org.openecomp.sdc.vendorsoftwareproduct.dao.DeploymentFlavorDao;
+import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.ImageDao;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
@@ -34,10 +32,8 @@ import org.openecomp.sdc.vendorsoftwareproduct.types.questionnaire.component.ima
 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.ImageCompositionSchemaInput;
 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateContext;
 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateInput;
-import org.openecomp.sdc.vendorsoftwareproduct.utils.VendorSoftwareProductUtils;
 import org.openecomp.sdc.versioning.VersioningUtil;
 import org.openecomp.sdc.versioning.dao.types.Version;
-import org.openecomp.sdc.versioning.types.VersionableEntityAction;
 
 import java.util.Collection;
 
@@ -66,7 +62,8 @@ public class ImageManagerImpl implements ImageManager {
         VersionableEntityAction.Write, user).getActiveVersion();
 
     imageEntity.setVersion(activeVersion);*/
-    if (!vspInfoDao.isManual(imageEntity.getVspId(), imageEntity.getVersion())) {
+    boolean isManual = vspInfoDao.isManual(imageEntity.getVspId(), imageEntity.getVersion());
+    if (!isManual) {
 
       ErrorCode errorCode = NotSupportedHeatOnboardMethodErrorBuilder
           .getAddImageNotSupportedHeatOnboardMethodErrorBuilder();
@@ -80,7 +77,7 @@ public class ImageManagerImpl implements ImageManager {
 
     Collection<ImageEntity> vfcImageList = listImages(imageEntity.getVspId() ,
         imageEntity.getVersion(), imageEntity.getComponentId());
-    validateVfcImage(imageEntity, vfcImageList);
+    validateVfcImage(isManual, imageEntity, vfcImageList, LoggerTragetServiceName.CREATE_IMAGE);
     compositionEntityDataManager.createImage(imageEntity);
     return imageEntity;
   }
@@ -219,11 +216,11 @@ public class ImageManagerImpl implements ImageManager {
     /*Version activeVersion =
         getVersionInfo(image.getVspId(), VersionableEntityAction.Write, user).getActiveVersion();
     image.setVersion(activeVersion);*/
-
+    boolean isManual = vspInfoDao.isManual(image.getVspId(), image.getVersion());
     ImageEntity retrieved = getImageEntity(image.getVspId(), image.getVersion(), image.getComponentId(),
         image.getId());
 
-    if(!vspInfoDao.isManual(image.getVspId(), image.getVersion())) {
+    if(!isManual) {
       final Image imageCompositionData = image.getImageCompositionData();
       final String fileName = imageCompositionData.getFileName();
       //final String format = imageCompositionData.getFormat();
@@ -239,7 +236,7 @@ public class ImageManagerImpl implements ImageManager {
     //Set to null so that retrieved object is equal to one in list and gets removed.
     retrieved.setQuestionnaireData(null);
     vfcImageList.remove(retrieved);
-    validateVfcImage(image, vfcImageList);
+    validateVfcImage(isManual, image, vfcImageList, LoggerTragetServiceName.UPDATE_IMAGE);
 
     //Set format to default value in order to handle FTL validation when image format is null
     /*if(image.getImageCompositionData().getFormat() == null)
@@ -325,13 +322,25 @@ public class ImageManagerImpl implements ImageManager {
     return false;
   }
 
-  private void validateVfcImage(ImageEntity image, Collection<ImageEntity> vfcImageList) {
+  private void validateVfcImage(boolean isManual, ImageEntity image, Collection<ImageEntity> vfcImageList, String event) {
+    if(isManual && !image.getImageCompositionData().getFileName().matches(VendorSoftwareProductConstants.NAME_PATTERN))
+    {
+      ErrorCode errorCode = ImageErrorBuilder.getImageNameFormatErrorBuilder(
+              VendorSoftwareProductConstants.NAME_PATTERN);
+
+      MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
+              event, ErrorLevel.ERROR.name(),
+              errorCode.id(),errorCode.message());
+
+      throw new CoreException(errorCode);
+    }
+
     if (isImageNameDuplicate(vfcImageList,image.getImageCompositionData().getFileName())) {
       ErrorCode errorCode = ImageErrorBuilder.getDuplicateImageNameErrorBuilder(image
           .getImageCompositionData().getFileName(), image.getComponentId());
 
       MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
-          LoggerTragetServiceName.CREATE_COMPONENT, ErrorLevel.ERROR.name(),
+              event, ErrorLevel.ERROR.name(),
           errorCode.id(),errorCode.message());
 
       throw new CoreException(errorCode);
@@ -354,6 +363,4 @@ public class ImageManagerImpl implements ImageManager {
         .generate(SchemaTemplateContext.questionnaire, CompositionEntityType.image,
             schemaInput);
   }
-
-
 }
index ef33812..06e5452 100644 (file)
@@ -2,7 +2,6 @@ package org.openecomp.sdc.vendorsoftwareproduct.impl;
 
 import org.apache.commons.collections4.MapUtils;
 import org.openecomp.sdc.datatypes.error.ErrorLevel;
-import org.openecomp.sdc.datatypes.error.ErrorLevel;
 import org.openecomp.sdc.generator.core.services.ManualVspToscaGenerationService;
 import org.openecomp.sdc.generator.datatypes.tosca.DeploymentFlavorModel;
 import org.openecomp.sdc.generator.datatypes.tosca.MultiFlavorVfcImage;
@@ -14,8 +13,8 @@ import org.openecomp.sdc.logging.types.LoggerErrorCode;
 import org.openecomp.sdc.logging.types.LoggerTragetServiceName;
 import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
 import org.openecomp.sdc.vendorsoftwareproduct.ManualVspToscaManager;
+import org.openecomp.sdc.vendorsoftwareproduct.services.ManualVspDataCollectionService;
 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic;
-import org.openecomp.sdc.vendorsoftwareproduct.utils.ManualVspDataCollectionService;
 import org.openecomp.sdc.versioning.dao.types.Version;
 
 import java.util.List;
@@ -25,12 +24,12 @@ import java.util.Optional;
 public class ManualVspToscaManagerImpl implements ManualVspToscaManager {
 
   private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
+  private ManualVspDataCollectionService
+      manualVspDataCollectionService = new ManualVspDataCollectionService();
 
   @Override
   public VspModelInfo gatherVspInformation(String vspId, Version version, String user) {
     mdcDataDebugMessage.debugEntryMessage(null, null);
-    ManualVspDataCollectionService
-        manualVspDataCollectionService = new ManualVspDataCollectionService();
     VspModelInfo vspModelInfo = new VspModelInfo();
     //Get Release Vendor Name
     Optional<String> releaseVendor;
@@ -40,7 +39,8 @@ public class ManualVspToscaManagerImpl implements ManualVspToscaManager {
       releaseVendor = Optional.empty();
       MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_API,
           LoggerTragetServiceName.COLLECT_MANUAL_VSP_TOSCA_DATA, ErrorLevel.INFO.name(),
-          LoggerErrorCode.DATA_ERROR.getErrorCode(), "Release Vendor not found");
+          LoggerErrorCode.DATA_ERROR.getErrorCode(), "Release Vendor not found : "
+              + ex.getMessage());
     }
     releaseVendor.ifPresent(vspModelInfo::setReleaseVendor);
 
@@ -51,7 +51,8 @@ public class ManualVspToscaManagerImpl implements ManualVspToscaManager {
     } catch (Exception ex) {
       MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_API,
           LoggerTragetServiceName.COLLECT_MANUAL_VSP_TOSCA_DATA, ErrorLevel.INFO.name(),
-          LoggerErrorCode.DATA_ERROR.getErrorCode(), "Unable to collect allowed flavors");
+          LoggerErrorCode.DATA_ERROR.getErrorCode(), "Unable to collect allowed flavors : "
+              + ex.getMessage());
       allowedFlavors = null;
     }
     if (MapUtils.isNotEmpty(allowedFlavors)) {
@@ -66,7 +67,8 @@ public class ManualVspToscaManagerImpl implements ManualVspToscaManager {
     } catch (Exception ex) {
       MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_API,
           LoggerTragetServiceName.COLLECT_MANUAL_VSP_TOSCA_DATA, ErrorLevel.INFO.name(),
-          LoggerErrorCode.DATA_ERROR.getErrorCode(), "Unable to collect vsp component images");
+          LoggerErrorCode.DATA_ERROR.getErrorCode(), "Unable to collect vsp component images : "
+              + ex.getMessage());
       vspComponentImages = null;
     }
     if (MapUtils.isNotEmpty(vspComponentImages)) {
@@ -80,7 +82,8 @@ public class ManualVspToscaManagerImpl implements ManualVspToscaManager {
     } catch (Exception ex) {
       MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_API,
           LoggerTragetServiceName.COLLECT_MANUAL_VSP_TOSCA_DATA, ErrorLevel.INFO.name(),
-          LoggerErrorCode.DATA_ERROR.getErrorCode(), "Unable to collect vsp components");
+          LoggerErrorCode.DATA_ERROR.getErrorCode(), "Unable to collect vsp components : "
+              + ex.getMessage());
       vspComponents = null;
     }
     if (MapUtils.isNotEmpty(vspComponents)) {
@@ -94,7 +97,8 @@ public class ManualVspToscaManagerImpl implements ManualVspToscaManager {
     } catch (Exception ex) {
       MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_API,
           LoggerTragetServiceName.COLLECT_MANUAL_VSP_TOSCA_DATA, ErrorLevel.INFO.name(),
-          LoggerErrorCode.DATA_ERROR.getErrorCode(), "Unable to collect vsp component nics");
+          LoggerErrorCode.DATA_ERROR.getErrorCode(), "Unable to collect vsp component nics : "
+              + ex.getMessage());
       vspComponentNics = null;
     }
     if (MapUtils.isNotEmpty(vspComponentNics)) {
index b196b3f..0304353 100644 (file)
@@ -31,18 +31,13 @@ import org.openecomp.sdc.logging.types.LoggerErrorCode;
 import org.openecomp.sdc.logging.types.LoggerTragetServiceName;
 import org.openecomp.sdc.vendorsoftwareproduct.NetworkManager;
 import org.openecomp.sdc.vendorsoftwareproduct.NicManager;
+import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.NicDao;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
-import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
-import org.openecomp.sdc.vendorsoftwareproduct.errors.CompositionEditNotAllowedErrorBuilder;
-import org.openecomp.sdc.vendorsoftwareproduct.errors.DeleteNicErrorBuilder;
-import org.openecomp.sdc.vendorsoftwareproduct.errors.DuplicateNicInComponentErrorBuilder;
-import org.openecomp.sdc.vendorsoftwareproduct.errors.NicInternalNetworkErrorBuilder;
-import org.openecomp.sdc.vendorsoftwareproduct.errors.NicNetworkIdNotAllowedExternalNetworkErrorBuilder;
-import org.openecomp.sdc.vendorsoftwareproduct.errors.NotSupportedHeatOnboardMethodErrorBuilder;
+import org.openecomp.sdc.vendorsoftwareproduct.errors.*;
 import org.openecomp.sdc.vendorsoftwareproduct.services.composition.CompositionEntityDataManager;
 import org.openecomp.sdc.vendorsoftwareproduct.services.schemagenerator.SchemaGenerator;
 import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityResponse;
@@ -55,7 +50,6 @@ import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic;
 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.NicCompositionSchemaInput;
 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateContext;
 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateInput;
-import org.openecomp.sdc.vendorsoftwareproduct.utils.VendorSoftwareProductUtils;
 import org.openecomp.sdc.versioning.VersioningUtil;
 import org.openecomp.sdc.versioning.dao.types.Version;
 
@@ -145,6 +139,19 @@ public class NicManagerImpl implements NicManager {
     String networkId = nic.getNicCompositionData().getNetworkId();
     NetworkType networkType = nic.getNicCompositionData().getNetworkType();
     String networkDescription = nic.getNicCompositionData().getNetworkDescription();
+
+    if(!nic.getNicCompositionData().getName().matches(VendorSoftwareProductConstants.NAME_PATTERN))
+    {
+      ErrorCode errorCode = NicErrorBuilder.getNicNameFormatErrorBuilder(nic
+              .getNicCompositionData().getName(), VendorSoftwareProductConstants.NAME_PATTERN);
+
+      MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
+              LoggerTragetServiceName.CREATE_NIC, ErrorLevel.ERROR.name(),
+              errorCode.id(),errorCode.message());
+
+      throw new CoreException(errorCode);
+    }
+
     listNics.forEach(nicEntity -> {
       Nic nicdata = nicEntity.getNicCompositionData();
       if (nic.getNicCompositionData().getName().equalsIgnoreCase(nicdata.getName())) {
@@ -265,6 +272,18 @@ public class NicManagerImpl implements NicManager {
     schemaInput.setManual(vspInfoDao.isManual(nic.getVspId(), nic.getVersion()));
     schemaInput.setNic(retrieved.getNicCompositionData());
 
+    if(schemaInput.isManual() && !nic.getNicCompositionData().getName().matches(VendorSoftwareProductConstants.NAME_PATTERN))
+    {
+      ErrorCode errorCode = NicErrorBuilder.getNicNameFormatErrorBuilder(nic
+              .getNicCompositionData().getName(), VendorSoftwareProductConstants.NAME_PATTERN);
+
+      MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
+              LoggerTragetServiceName.UPDATE_NIC, ErrorLevel.ERROR.name(),
+              errorCode.id(),errorCode.message());
+
+      throw new CoreException(errorCode);
+    }
+
     CompositionEntityValidationData validationData = compositionEntityDataManager
         .validateEntity(nic, SchemaTemplateContext.composition, schemaInput);
     if (CollectionUtils.isEmpty(validationData.getErrors())) {
index 959cf15..07e8480 100644 (file)
@@ -29,6 +29,7 @@ import org.openecomp.core.util.UniqueValueUtil;
 import org.openecomp.core.utilities.file.FileContentHandler;
 import org.openecomp.core.utilities.file.FileUtils;
 import org.openecomp.core.utilities.json.JsonUtil;
+import org.openecomp.core.validation.util.MessageContainerUtil;
 import org.openecomp.sdc.activityLog.ActivityLogManager;
 import org.openecomp.sdc.activitylog.dao.type.ActivityLogEntity;
 import org.openecomp.sdc.common.errors.CoreException;
@@ -47,6 +48,7 @@ import org.openecomp.sdc.logging.api.Logger;
 import org.openecomp.sdc.logging.api.LoggerFactory;
 import org.openecomp.sdc.logging.api.annotations.Metrics;
 import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
+import org.openecomp.sdc.logging.messages.AuditMessages;
 import org.openecomp.sdc.logging.types.LoggerServiceName;
 import org.openecomp.sdc.logging.types.LoggerTragetServiceName;
 import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
@@ -90,6 +92,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 
+import static org.openecomp.sdc.logging.messages.AuditMessages.HEAT_VALIDATION_ERROR;
 import static org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants.GENERAL_COMPONENT_ID;
 import static org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants.UniqueValues.PROCESS_NAME;
 
@@ -225,6 +228,7 @@ public class OrchestrationTemplateCandidateManagerImpl
       throw new CoreException(new OrchestrationTemplateNotFoundErrorBuilder(vspId).build());
     }
 
+    logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.HEAT_VALIDATION_STARTED + vspId);
     OrchestrationTemplateActionResponse response = new OrchestrationTemplateActionResponse();
     UploadFileResponse uploadFileResponse = new UploadFileResponse();
     OrchestrationTemplateCandidateData candidateDataEntity = candidate.get();
@@ -233,6 +237,8 @@ public class OrchestrationTemplateCandidateManagerImpl
     if (!fileContent.isPresent()) {
       response.addStructureErrors(uploadFileResponse.getErrors());
       mdcDataDebugMessage.debugExitMessage("VSP id", vspId);
+      response.getErrors().values().forEach(errorList -> printAuditForErrors(errorList,vspId,
+          HEAT_VALIDATION_ERROR));
       return response;
     }
 
@@ -246,6 +252,8 @@ public class OrchestrationTemplateCandidateManagerImpl
           Messages.FOUND_UNASSIGNED_FILES.getErrorMessage(), ErrorLevel.ERROR);
 
       mdcDataDebugMessage.debugExitMessage("VSP id", vspId);
+      response.getErrors().values().forEach(errorList -> printAuditForErrors(errorList,vspId,
+          HEAT_VALIDATION_ERROR));
       return response;
     }
 
@@ -258,6 +266,8 @@ public class OrchestrationTemplateCandidateManagerImpl
     Optional<ByteArrayInputStream> zipByteArrayInputStream = candidateService
         .fetchZipFileByteArrayInputStream(vspId, candidateDataEntity, manifest, uploadErrors);
     if (!zipByteArrayInputStream.isPresent()) {
+      response.getErrors().values().forEach(errorList -> printAuditForErrors(errorList,vspId,
+          HEAT_VALIDATION_ERROR));
       return response;
     }
 
@@ -275,8 +285,18 @@ public class OrchestrationTemplateCandidateManagerImpl
     deleteUploadDataAndContent(vspId, version);
     saveHotData(vspId, version, zipByteArrayInputStream.get(), fileContentMap, tree);
 
+    response.getErrors().values().forEach(errorList -> printAuditForErrors(errorList,vspId,
+        HEAT_VALIDATION_ERROR));
+    if ( MapUtils.isEmpty(MessageContainerUtil.getMessageByLevel(ErrorLevel.ERROR, response.getErrors
+        ()))) {
+      logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.HEAT_VALIDATION_COMPLETED + vspId);
+    }
+
+    logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.HEAT_TRANSLATION_STARTED + vspId);
+
     TranslatorOutput translatorOutput =
         HeatToToscaUtil.loadAndTranslateTemplateData(fileContentMap);
+
     ToscaServiceModel toscaServiceModel = translatorOutput.getToscaServiceModel();
     if (toscaServiceModel != null) {
       serviceModelDao.storeServiceModel(vspId, version, toscaServiceModel);
@@ -287,7 +307,10 @@ public class OrchestrationTemplateCandidateManagerImpl
               .getNonUnifiedToscaServiceModel()));
       retainComponentQuestionnaireData(vspId, version, componentsQuestionnaire,
           componentNicsQuestionnaire, componentMibList, processes, processArtifact);
+
+      logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.HEAT_TRANSLATION_COMPLETED + vspId);
     }
+
     uploadFileResponse.addStructureErrors(uploadErrors);
 
     ActivityLogEntity activityLogEntity =
@@ -299,7 +322,6 @@ public class OrchestrationTemplateCandidateManagerImpl
     return response;
   }
 
-
   @Override
   public Optional<FilesDataStructure> getFilesDataStructure(
       String vspId, Version version, String user) {
@@ -462,7 +484,7 @@ public class OrchestrationTemplateCandidateManagerImpl
           componentArtifactDao.listArtifacts(new
               ComponentMonitoringUploadEntity(vspId, activeVersion, componentEntity.getId(),
               null));
-      if(CollectionUtils.isNotEmpty(componentMib)){
+      if (CollectionUtils.isNotEmpty(componentMib)) {
         componentMibList.put(componentName,componentMib);
       }
 
@@ -614,4 +636,14 @@ public class OrchestrationTemplateCandidateManagerImpl
     return vspDetails;
   }
 
-}
+  private void printAuditForErrors(List<ErrorMessage> errorList, String vspId, String auditType) {
+
+    errorList.forEach(errorMessage -> {
+      if (errorMessage.getLevel().equals(ErrorLevel.ERROR)) {
+        logger.audit(AuditMessages.AUDIT_MSG + String.format(auditType, errorMessage.getMessage(),
+            vspId));
+      }
+    });
+  }
+
+ }
index 0b48c33..8924637 100644 (file)
@@ -48,6 +48,7 @@ import org.openecomp.sdc.logging.api.Logger;
 import org.openecomp.sdc.logging.api.LoggerFactory;
 import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
 import org.openecomp.sdc.logging.context.impl.MdcDataErrorMessage;
+import org.openecomp.sdc.logging.messages.AuditMessages;
 import org.openecomp.sdc.logging.types.LoggerConstants;
 import org.openecomp.sdc.logging.types.LoggerErrorCode;
 import org.openecomp.sdc.logging.types.LoggerServiceName;
@@ -594,6 +595,14 @@ public class VendorSoftwareProductManagerImpl implements VendorSoftwareProductMa
     enrichmentManager.setModel(serviceModel);
     Map<String, List<ErrorMessage>> enrichErrors = enrichmentManager.enrich();
 
+    if (MapUtils.isEmpty(MessageContainerUtil.getMessageByLevel(ErrorLevel.ERROR, enrichErrors))) {
+      logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.ENRICHMENT_COMPLETED
+          + vendorSoftwareProductId);
+    } else {
+      enrichErrors.values().forEach(errorList ->
+          auditIfContainsErrors(errorList,vendorSoftwareProductId,AuditMessages.ENRICHMENT_ERROR));
+    }
+
     enrichedServiceModelDao
         .storeServiceModel(vendorSoftwareProductId, version, enrichmentManager.getModel());
 
@@ -993,6 +1002,8 @@ public class VendorSoftwareProductManagerImpl implements VendorSoftwareProductMa
 
     packageInfoDao.create(packageInfo);
 
+    logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.CREATE_PACKAGE + vspId);
+
     mdcDataDebugMessage.debugExitMessage("VSP id", vspId);
     return packageInfo;
   }
@@ -1178,4 +1189,14 @@ public class VendorSoftwareProductManagerImpl implements VendorSoftwareProductMa
                                                    String user) {
     return vendorSoftwareProductDao.listComputesByVsp(vspId, version);
   }
+
+  private void auditIfContainsErrors(List<ErrorMessage> errorList, String vspId,String auditType) {
+
+    errorList.forEach(errorMessage -> {
+      if (errorMessage.getLevel().equals(ErrorLevel.ERROR)) {
+        logger.audit(AuditMessages.AUDIT_MSG + String.format(auditType, errorMessage.getMessage(),
+            vspId));
+      }
+    });
+  }
 }
index c8f473c..103762c 100644 (file)
@@ -140,11 +140,12 @@ public class ComputeManagerImplTest {
     }
 
     @Test
-    public void testCreateManualImageWithDuplicateName() {
+    public void testCreateManualComputeWithDuplicateName() {
         ComputeEntity expected = createCompute(VSP_ID, VERSION, COMPONENT_ID, COMPUTE1_ID);
         doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
 
         ComputeEntity expectedDiffName = createCompute(VSP_ID, VERSION, COMPONENT_ID, COMPUTE1_ID);
+        expectedDiffName.setId(COMPUTE1_ID + "Name");
         ComputeData computeData = expectedDiffName.getComputeCompositionData();
         computeData.setName(COMPUTE1_ID + "Name");
         expectedDiffName.setComputeCompositionData(computeData);
@@ -162,6 +163,28 @@ public class ComputeManagerImplTest {
         }
     }
 
+    @Test
+    public void testCreateManualComputeWithIncorrectNameFormat() {
+        ComputeEntity expected = createCompute(VSP_ID, VERSION, COMPONENT_ID, COMPUTE1_ID);
+        doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
+
+        ComputeEntity expectedDiffName = createCompute(VSP_ID, VERSION, COMPONENT_ID, COMPUTE1_ID);
+        ComputeData computeData = expectedDiffName.getComputeCompositionData();
+        computeData.setName(COMPUTE1_ID + "Name/*");
+        expectedDiffName.setComputeCompositionData(computeData);
+        List<ComputeEntity> vfcImageList = new ArrayList<ComputeEntity>();
+        vfcImageList.add(expectedDiffName);
+        doReturn(vfcImageList).when(computeDao).list(anyObject());
+
+        try {
+            computeManager.createCompute(expectedDiffName, USER);
+            Assert.fail();
+        }
+        catch (CoreException ex) {
+            Assert.assertEquals(VendorSoftwareProductErrorCodes.COMPUTE_NAME_FORMAT_NOT_ALLOWED,
+                    ex.code().id());
+        }
+    }
 
     @Test
     public void testUpdateNonExistingComputeId_negative() {
@@ -191,6 +214,33 @@ public class ComputeManagerImplTest {
         verify(computeDao).update(computeEntity);
     }
 
+    @Test
+    public void testUpdateComputeWithIncorrectNameFormat() {
+        doReturn(createCompute(VSP_ID, VERSION, COMPONENT_ID, COMPUTE1_ID))
+                .when(computeDao).get(anyObject());
+
+        doReturn(new CompositionEntityValidationData(CompositionEntityType.compute, COMPUTE1_ID))
+                .when(compositionEntityDataManagerMock)
+                .validateEntity(anyObject(), anyObject(), anyObject());
+
+        doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
+
+        ComputeEntity computeEntity = new ComputeEntity(VSP_ID, VERSION, COMPONENT_ID, COMPUTE1_ID);
+        ComputeData computeData = new ComputeData();
+        computeData.setName(COMPUTE1_ID + "name/*");
+        computeData.setDescription(COMPUTE1_ID + "desc updated");
+        computeEntity.setComputeCompositionData(computeData);
+
+        try {
+            computeManager.updateCompute(computeEntity, USER);
+            Assert.fail();
+        }
+        catch (CoreException ex) {
+            Assert.assertEquals(VendorSoftwareProductErrorCodes.COMPUTE_NAME_FORMAT_NOT_ALLOWED,
+                    ex.code().id());
+        }
+    }
+
     @Test
     public void testIllegalComputeUpdate() {
         doReturn(createCompute(VSP_ID, VERSION, COMPONENT_ID, COMPUTE1_ID))
@@ -207,7 +257,7 @@ public class ComputeManagerImplTest {
 
         ComputeEntity computeEntity = new ComputeEntity(VSP_ID, VERSION, COMPONENT_ID, COMPUTE1_ID);
         ComputeData computeData = new ComputeData();
-        computeData.setName(COMPUTE1_ID + " name updated");
+        computeData.setName(COMPUTE1_ID + "_name_updated");
         computeData.setDescription(COMPUTE1_ID + " desc updated");
         computeEntity.setComputeCompositionData(computeData);
 
index e082b25..598b97b 100644 (file)
@@ -22,8 +22,6 @@ import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
 import org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes;
 import org.openecomp.sdc.vendorsoftwareproduct.services.composition.CompositionEntityDataManager;
 import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityResponse;
-import org.openecomp.sdc.vendorsoftwareproduct.types.QuestionnaireResponse;
-import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Component;
 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentComputeAssociation;
 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType;
 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityValidationData;
@@ -99,7 +97,7 @@ public class DeplomentFlavorManagerImplTest {
 
     DeploymentFlavorEntity expectedDiffName = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
     DeploymentFlavor deploymentFlavor = expectedDiffName.getDeploymentFlavorCompositionData();
-    deploymentFlavor.setModel(DF1_ID + " Name");
+    deploymentFlavor.setModel(DF1_ID + "Name");
     expectedDiffName.setDeploymentFlavorCompositionData(deploymentFlavor);
     List<DeploymentFlavorEntity> list = new ArrayList<DeploymentFlavorEntity>();
     list.add(expectedDiffName);
@@ -115,6 +113,28 @@ public class DeplomentFlavorManagerImplTest {
     }
   }
 
+  @Test
+  public void testCreateManualDepFlavorWithIncorrectNameFormat() {
+    DeploymentFlavorEntity expected = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
+    doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
+
+    DeploymentFlavorEntity expectedDiffName = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
+    DeploymentFlavor deploymentFlavor = expectedDiffName.getDeploymentFlavorCompositionData();
+    deploymentFlavor.setModel(DF1_ID + "Name/*");
+    expectedDiffName.setDeploymentFlavorCompositionData(deploymentFlavor);
+    List<DeploymentFlavorEntity> list = new ArrayList<DeploymentFlavorEntity>();
+    list.add(expectedDiffName);
+    doReturn(list).when(deploymentFlavorDaoMock).list(anyObject());
+
+    try {
+      deploymentFlavorManager.createDeploymentFlavor(expectedDiffName, USER);
+      Assert.fail();
+    }
+    catch (CoreException ex) {
+      Assert.assertEquals(VendorSoftwareProductErrorCodes.DEPLOYMENT_FLAVOR_NAME_FORMAT_NOT_ALLOWED,
+              ex.code().id());
+    }
+  }
   @Test
   public void testCreateManualDepFlavorWithFGNotInVSP() {
     DeploymentFlavorEntity expected = createDeploymentFlavor(VSP_ID, VERSION, DF1_ID);
@@ -253,7 +273,7 @@ public class DeplomentFlavorManagerImplTest {
     Assert.assertEquals(deploymentFlavorEntities.size(), 2);
     for (DeploymentFlavorEntity deploymentFlavorEntity : deploymentFlavorEntities) {
       Assert.assertEquals(deploymentFlavorEntity.getDeploymentFlavorCompositionData().getModel()
-          , DF1_ID.equals(deploymentFlavorEntity.getId()) ? DF1_ID+" name" : DF2_ID+" name" );
+          , DF1_ID.equals(deploymentFlavorEntity.getId()) ? DF1_ID+"name" : DF2_ID+"name" );
     }
   }
 
@@ -286,7 +306,7 @@ public class DeplomentFlavorManagerImplTest {
 
     DeploymentFlavorEntity deploymentFlavorEntity = new DeploymentFlavorEntity(VSP_ID, VERSION, DF1_ID);
     DeploymentFlavor deploymentFlavor = new DeploymentFlavor();
-    deploymentFlavor.setModel(DF1_ID + " name");
+    deploymentFlavor.setModel(DF1_ID + "_name");
     deploymentFlavor.setDescription(DF1_ID + " desc updated");
     deploymentFlavorEntity.setDeploymentFlavorCompositionData(deploymentFlavor);
 
@@ -296,6 +316,36 @@ public class DeplomentFlavorManagerImplTest {
     verify(deploymentFlavorDaoMock).update(deploymentFlavorEntity);
   }
 
+    @Test
+    public void testManualUpdateDepFlavorIncorrectNameFormat() {
+        doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
+
+        doReturn(createDeploymentFlavor(VSP_ID, VERSION, DF1_ID))
+                .when(deploymentFlavorDaoMock).get(anyObject());
+
+        doReturn(new CompositionEntityValidationData(CompositionEntityType.image, DF1_ID))
+                .when(compositionEntityDataManagerMock)
+                .validateEntity(anyObject(), anyObject(), anyObject());
+
+        VspDetails vspDetails = new VspDetails(VSP_ID, VERSION);
+        doReturn(vspDetails).when(vspInfoDao).get(anyObject());
+
+        DeploymentFlavorEntity deploymentFlavorEntity = new DeploymentFlavorEntity(VSP_ID, VERSION, DF1_ID);
+        DeploymentFlavor deploymentFlavor = new DeploymentFlavor();
+        deploymentFlavor.setModel(DF1_ID + "_name/*");
+        deploymentFlavor.setDescription(DF1_ID + " desc updated");
+        deploymentFlavorEntity.setDeploymentFlavorCompositionData(deploymentFlavor);
+
+        try {
+            deploymentFlavorManager.updateDeploymentFlavor(deploymentFlavorEntity, USER);
+            Assert.fail();
+        }
+        catch (CoreException ex) {
+            Assert.assertEquals(VendorSoftwareProductErrorCodes.DEPLOYMENT_FLAVOR_NAME_FORMAT_NOT_ALLOWED,
+                    ex.code().id());
+        }
+    }
+
   @Test
   public void testGetNonExistingDepFlavorId_negative() {
     testGet_negative(VSP_ID, VERSION, "non existing image id", USER,
@@ -378,7 +428,7 @@ public class DeplomentFlavorManagerImplTest {
 
     DeploymentFlavorEntity deploymentFlavorEntity = new DeploymentFlavorEntity(vspId, version, deploymentFlavorId);
     DeploymentFlavor deploymentFlavor = new DeploymentFlavor();
-    deploymentFlavor.setModel(deploymentFlavorId + " name");
+    deploymentFlavor.setModel(deploymentFlavorId + "name");
     deploymentFlavor.setDescription(deploymentFlavorId + " desc");
 
     deploymentFlavorEntity.setDeploymentFlavorCompositionData(deploymentFlavor);
@@ -388,8 +438,12 @@ public class DeplomentFlavorManagerImplTest {
   private void testUpdate_negative(String vspId, Version version, String
       deploymentFlavorId, String user, String expectedErrorCode) {
     try {
+      DeploymentFlavorEntity deploymentFlavorEntity = new DeploymentFlavorEntity(vspId, version, deploymentFlavorId);
+      DeploymentFlavor deploymentFlavor = new DeploymentFlavor();
+      deploymentFlavor.setModel("Name");
+      deploymentFlavorEntity.setDeploymentFlavorCompositionData(deploymentFlavor);
       deploymentFlavorManager
-          .updateDeploymentFlavor(new DeploymentFlavorEntity(vspId, version, deploymentFlavorId), user);
+          .updateDeploymentFlavor(deploymentFlavorEntity, user);
       Assert.fail();
     } catch (CoreException exception) {
       Assert.assertEquals(exception.code().id(), expectedErrorCode);
index ec676e5..c29cb42 100644 (file)
@@ -84,7 +84,7 @@ public class ImageManagerImplTest {
     Assert.assertEquals(images.size(), 2);
     for (ImageEntity image : images) {
       Assert.assertEquals(image.getImageCompositionData().getFileName(),
-          IMAGE1_ID.equals(image.getId()) ? IMAGE1_ID+" name" : IMAGE2_ID+" name" );
+          IMAGE1_ID.equals(image.getId()) ? IMAGE1_ID+"_name" : IMAGE2_ID+"_name" );
     }
   }
 
@@ -104,6 +104,28 @@ public class ImageManagerImplTest {
     verify(compositionEntityDataManagerMock).createImage(expected);
   }
 
+  @Test
+  public void testCreateManualImageWithIncorrectNameFormat() {
+    ImageEntity expected = createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
+    doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
+
+    ImageEntity expectedDiffName = createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
+    Image image = expectedDiffName.getImageCompositionData();
+    image.setFileName(IMAGE1_ID + " Name*/");
+    expectedDiffName.setImageCompositionData(image);
+    List<ImageEntity> vfcImageList = new ArrayList<ImageEntity>();
+    vfcImageList.add(expectedDiffName);
+    doReturn(vfcImageList).when(imageDao).list(anyObject());
+    try {
+      imageManager.createImage(expectedDiffName, USER);
+      Assert.fail();
+    }
+    catch (CoreException ex) {
+      Assert.assertEquals(VendorSoftwareProductErrorCodes.IMAGE_NAME_FORMAT_NOT_ALLOWED,
+              ex.code().id());
+    }
+  }
+
   @Test
   public void testCreateManualImageWithDuplicateName() {
     ImageEntity expected = createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
@@ -111,7 +133,7 @@ public class ImageManagerImplTest {
 
     ImageEntity expectedDiffName = createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
     Image image = expectedDiffName.getImageCompositionData();
-    image.setFileName(IMAGE1_ID + " Name");
+    image.setFileName(IMAGE1_ID + "_Name");
     expectedDiffName.setImageCompositionData(image);
     List<ImageEntity> vfcImageList = new ArrayList<ImageEntity>();
     vfcImageList.add(expectedDiffName);
@@ -143,7 +165,7 @@ public class ImageManagerImplTest {
 
     ImageEntity imageEntity = new ImageEntity(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
     Image imageData = new Image();
-    imageData.setFileName(IMAGE1_ID + " name");
+    imageData.setFileName(IMAGE1_ID + "_name");
     imageData.setDescription(IMAGE1_ID + " desc updated");
     imageEntity.setImageCompositionData(imageData);
 
@@ -153,6 +175,33 @@ public class ImageManagerImplTest {
     verify(imageDao).update(imageEntity);
   }
 
+  @Test
+  public void testUpdateImageWithIncorrectNameFormat() {
+    doReturn(createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID))
+            .when(imageDao).get(anyObject());
+
+    doReturn(new CompositionEntityValidationData(CompositionEntityType.image, IMAGE1_ID))
+            .when(compositionEntityDataManagerMock)
+            .validateEntity(anyObject(), anyObject(), anyObject());
+
+    doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
+
+    ImageEntity imageEntity = new ImageEntity(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
+    Image imageData = new Image();
+    imageData.setFileName(IMAGE1_ID + "name/*");
+    imageData.setDescription(IMAGE1_ID + " desc updated");
+    imageEntity.setImageCompositionData(imageData);
+
+    try {
+      imageManager.updateImage(imageEntity, USER);
+      Assert.fail();
+    }
+    catch (CoreException ex) {
+      Assert.assertEquals(VendorSoftwareProductErrorCodes.IMAGE_NAME_FORMAT_NOT_ALLOWED,
+              ex.code().id());
+    }
+  }
+
   @Test
   public void testIllegalImageUpdate() {
     doReturn(createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID))
@@ -169,7 +218,7 @@ public class ImageManagerImplTest {
 
     ImageEntity imageEntity = new ImageEntity(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
     Image imageData = new Image();
-    imageData.setFileName(IMAGE1_ID + " name updated");
+    imageData.setFileName(IMAGE1_ID + "_name_updated");
     imageData.setDescription(IMAGE1_ID + " desc updated");
     imageEntity.setImageCompositionData(imageData);
 
@@ -345,7 +394,7 @@ public class ImageManagerImplTest {
   static ImageEntity createImage(String vspId, Version version, String compId, String imageId) {
     ImageEntity imageEntity = new ImageEntity(vspId, version, compId, imageId);
     Image imageData = new Image();
-    imageData.setFileName(imageId + " name");
+    imageData.setFileName(imageId + "_name");
     imageData.setDescription(imageId + " desc");
     imageEntity.setImageCompositionData(imageData);
     return imageEntity;
index 4bbbec1..8ea853c 100644 (file)
@@ -1,6 +1,9 @@
 package org.openecomp.sdc.vendorsoftwareproduct.impl;
 
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
 import static org.openecomp.sdc.generator.util.GeneratorConstants.ALLOWED_FLAVORS_PROPERTY;
+import static org.openecomp.sdc.generator.util.GeneratorConstants.IMAGES_PROPERTY;
 import static org.openecomp.sdc.generator.util.GeneratorConstants.PORT_NODE_TEMPLATE_ID_SUFFIX;
 import static org.openecomp.sdc.tosca.services.ToscaConstants.BINDING_REQUIREMENT_ID;
 import static org.openecomp.sdc.tosca.services.ToscaConstants.COUNT_PROPERTY_NAME;
@@ -10,6 +13,10 @@ import static org.openecomp.sdc.translator.services.heattotosca.Constants.GLOBAL
 
 import org.junit.Assert;
 import org.junit.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.Spy;
 import org.openecomp.sdc.generator.core.utils.GeneratorUtils;
 import org.openecomp.sdc.generator.datatypes.tosca.ComputeFlavor;
 import org.openecomp.sdc.generator.datatypes.tosca.DeploymentFlavorModel;
@@ -36,43 +43,112 @@ import org.openecomp.sdc.tosca.services.ToscaUtil;
 import org.openecomp.sdc.tosca.services.impl.ToscaAnalyzerServiceImpl;
 import org.openecomp.sdc.vendorsoftwareproduct.ManualVspToscaManager;
 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic;
+import org.openecomp.sdc.vendorsoftwareproduct.services.ManualVspDataCollectionService;
+import org.openecomp.sdc.versioning.dao.types.Version;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 
 public class ManualVspToscaManagerImplTest {
 
+  private static final String USER = "manualVspToscaTestUser";
+  private static final String INVALID_VSP_ID = "Invalid_Vsp_Id";
+  private static final String VSP_ID = "Vsp_Id_1";
+  private static final String VSP_VERSION = "1.0";
+
+  private static final String RELEASE_VENDOR = "Vendor-1";
   private static final String COMPONENT_ID = "Component_id";
   private static final String COMPONENT_NAME = "Component_name";
   private static final String SP_PART_NUMBER_1 = "Part_number_123";
   private static final String FEATURE_GROUP_ID_1 = "Feature_Group_id_1";
   private static final String MANUFACTURER_REF_1 = "Manufacturer_Ref_1";
-  private static final String VENDOR_MODEL_1 = "VLM_1";
+  private static final String VENDOR_MODEL_1 = "Deployment_Flavor_Model_1";
   private static final int NUM_CPUS_1 = 1;
-  private static final String DISK_SIZE_1 = "2GB";
-  private static final String MEM_SIZE_1 = "8GB";
+  private static final String DISK_SIZE_1 = "2 GB";
+  private static final String MEM_SIZE_1 = "8 GB";
 
   private static final String SP_PART_NUMBER_2 = "Part_number_345";
   private static final String FEATURE_GROUP_ID_2 = "Feature_Group_id_2";
   private static final String MANUFACTURER_REF_2 = "Manufacturer_Ref_2";
-  private static final String VENDOR_MODEL_2 = "VLM_2";
+  private static final String VENDOR_MODEL_2 = "Deployment_Flavor_Model_2";
   private static final int NUM_CPUS_2 = 4;
-  private static final String DISK_SIZE_2 = "3GB";
-  private static final String MEM_SIZE_2 = "2GB";
+  private static final String DISK_SIZE_2 = "3 GB";
+  private static final String MEM_SIZE_2 = "2 GB";
 
   private static final String IMAGE_VERSION_1 = "3.16.1";
   private static final String IMAGE_HASH_1 = "65edfgye3256hjutve";
   private static final String IMAGE_FILE_NAME_1 = "image-file-name1";
-  private static final String IMAGE_FILE_FORMAT_1 = "qcow2";
   private static final String IMAGE_VERSION_2 = "3.1.9";
   private static final String IMAGE_HASH_2 = "84rtedfe3256hjutaw";
   private static final String IMAGE_FILE_NAME_2 = "image-file-name1";
-  private static final String IMAGE_FILE_FORMAT_2 = "iso";
 
   private ManualVspToscaManager manualVspToscaManager = new ManualVspToscaManagerImpl();
 
+  @Spy
+  @InjectMocks
+  private ManualVspToscaManagerImpl manualVspToscaManagerMock;
+
+  @Mock
+  private ManualVspDataCollectionService manualVspDataCollectionServiceMock;
+
+  @Test
+  public void testGatherVspInformationInvalidVsp() {
+    MockitoAnnotations.initMocks(this);
+    VspModelInfo expectedVspData = new VspModelInfo();
+    doThrow(new RuntimeException())
+        .when(manualVspDataCollectionServiceMock)
+        .getReleaseVendor(INVALID_VSP_ID, Version.valueOf(VSP_VERSION), USER);
+    doThrow(new RuntimeException())
+        .when(manualVspDataCollectionServiceMock)
+        .getAllowedFlavors(INVALID_VSP_ID, Version.valueOf(VSP_VERSION), USER);
+    doThrow(new RuntimeException())
+        .when(manualVspDataCollectionServiceMock)
+        .getVspComponentImages(INVALID_VSP_ID, Version.valueOf(VSP_VERSION), USER);
+    doThrow(new RuntimeException())
+        .when(manualVspDataCollectionServiceMock)
+        .getVspComponents(INVALID_VSP_ID, Version.valueOf(VSP_VERSION), USER);
+    doThrow(new RuntimeException())
+        .when(manualVspDataCollectionServiceMock)
+        .getVspComponentNics(INVALID_VSP_ID, Version.valueOf(VSP_VERSION), USER);
+    VspModelInfo vspModelInfo = manualVspToscaManagerMock.gatherVspInformation(INVALID_VSP_ID,
+        Version.valueOf(VSP_VERSION), USER);
+    Assert.assertEquals(expectedVspData, vspModelInfo);
+  }
+
+
+  @Test
+  public void testGatherVspInformationValidVsp() {
+    MockitoAnnotations.initMocks(this);
+    Map<String, DeploymentFlavorModel> deploymentFlavorData = getDeploymentFlavorData();
+    Map<String, List<Nic>> componentNics = getComponentNics();
+    Map<String, String> componentData = getComponentData();
+    Map<String, List<MultiFlavorVfcImage>> vfcImageData = getVfcImageData();
+    doReturn(Optional.of(RELEASE_VENDOR)).when(manualVspDataCollectionServiceMock)
+        .getReleaseVendor(VSP_ID, Version.valueOf(VSP_VERSION), USER);
+    doReturn(deploymentFlavorData).when(manualVspDataCollectionServiceMock)
+        .getAllowedFlavors(VSP_ID, Version.valueOf(VSP_VERSION), USER);
+    doReturn(vfcImageData).when(manualVspDataCollectionServiceMock)
+        .getVspComponentImages(VSP_ID, Version.valueOf(VSP_VERSION), USER);
+    doReturn(componentData).when(manualVspDataCollectionServiceMock)
+        .getVspComponents(VSP_ID, Version.valueOf(VSP_VERSION), USER);
+    doReturn(componentNics).when(manualVspDataCollectionServiceMock)
+        .getVspComponentNics(VSP_ID, Version.valueOf(VSP_VERSION), USER);
+    VspModelInfo vspModelInfo = manualVspToscaManagerMock.gatherVspInformation(VSP_ID,
+        Version.valueOf(VSP_VERSION), USER);
+
+    VspModelInfo expectedVspData = new VspModelInfo();
+    expectedVspData.setReleaseVendor(RELEASE_VENDOR);
+    expectedVspData.setComponents(getComponentData());
+    expectedVspData.setMultiFlavorVfcImages(getVfcImageData());
+    expectedVspData.setAllowedFlavors(getDeploymentFlavorData());
+    expectedVspData.setNics(getComponentNics());
+
+    Assert.assertEquals(expectedVspData, vspModelInfo);
+  }
+
   @Test
   public void testGenerateToscaInvalidVspId() {
     VspModelInfo emptyVspCollectedData = new VspModelInfo();
@@ -87,7 +163,7 @@ public class ManualVspToscaManagerImplTest {
   @Test
   public void testGenerateToscaNoComponent() {
     VspModelInfo vspCollectedData = new VspModelInfo();
-    vspCollectedData.setReleaseVendor("Vendor-1");
+    vspCollectedData.setReleaseVendor(RELEASE_VENDOR);
     vspCollectedData.setComponents(null);
     vspCollectedData.setMultiFlavorVfcImages(null);
     vspCollectedData.setAllowedFlavors(getDeploymentFlavorData());
@@ -111,7 +187,6 @@ public class ManualVspToscaManagerImplTest {
         manualVspToscaManager.generateToscaModel(vspCollectedData);
     Assert.assertNotNull(toscaServiceModel);
     Assert.assertNotNull(toscaServiceModel.getServiceTemplates());
-    //Service model should contain only the packed global types
     Assert.assertEquals(22, toscaServiceModel.getServiceTemplates().size());
     Map<String, ServiceTemplate> serviceTemplates = toscaServiceModel.getServiceTemplates();
     String entryDefinitionServiceTemplate = toscaServiceModel.getEntryDefinitionServiceTemplate();
@@ -131,7 +206,6 @@ public class ManualVspToscaManagerImplTest {
         manualVspToscaManager.generateToscaModel(vspCollectedData);
     Assert.assertNotNull(toscaServiceModel);
     Assert.assertNotNull(toscaServiceModel.getServiceTemplates());
-    //Service model should contain only the packed global types
     Assert.assertEquals(22, toscaServiceModel.getServiceTemplates().size());
     Map<String, ServiceTemplate> serviceTemplates = toscaServiceModel.getServiceTemplates();
     String entryDefinitionServiceTemplate = toscaServiceModel.getEntryDefinitionServiceTemplate();
@@ -139,8 +213,8 @@ public class ManualVspToscaManagerImplTest {
     Assert.assertNotNull(mainServiceTemplate);
     String componentName = vspCollectedData.getComponents().get(COMPONENT_ID);
     Assert.assertNull(mainServiceTemplate.getTopology_template().getNode_templates()
-        .get(componentName + GeneratorConstants.VFC_NODE_TEMPLATE_ID_SUFFIX)
-        .getProperties());
+        .get(componentName + GeneratorConstants.VNF_NODE_TEMPLATE_ID_SUFFIX)
+        .getProperties().get(IMAGES_PROPERTY));
   }
 
   @Test
@@ -154,7 +228,6 @@ public class ManualVspToscaManagerImplTest {
         manualVspToscaManager.generateToscaModel(vspCollectedData);
     Assert.assertNotNull(toscaServiceModel);
     Assert.assertNotNull(toscaServiceModel.getServiceTemplates());
-    //Service model should contain only the packed global types
     Assert.assertEquals(22, toscaServiceModel.getServiceTemplates().size());
     Map<String, ServiceTemplate> serviceTemplates = toscaServiceModel.getServiceTemplates();
     String componentName = vspCollectedData.getComponents().get(COMPONENT_ID);
@@ -171,7 +244,7 @@ public class ManualVspToscaManagerImplTest {
   @Test
   public void testGenerateToscaNoManufacturerRefNumAndFeatureGroup() {
     VspModelInfo vspCollectedData = new VspModelInfo();
-    vspCollectedData.setReleaseVendor("Vendor-1");
+    vspCollectedData.setReleaseVendor(RELEASE_VENDOR);
     vspCollectedData.setComponents(getComponentData());
     vspCollectedData.setMultiFlavorVfcImages(getVfcImageData());
     Map<String, DeploymentFlavorModel> deploymentFlavorData = getDeploymentFlavorData();
@@ -184,7 +257,6 @@ public class ManualVspToscaManagerImplTest {
         manualVspToscaManager.generateToscaModel(vspCollectedData);
     Assert.assertNotNull(toscaServiceModel);
     Assert.assertNotNull(toscaServiceModel.getServiceTemplates());
-    //Service model should contain only the packed global types
     Assert.assertEquals(22, toscaServiceModel.getServiceTemplates().size());
     Map<String, ServiceTemplate> serviceTemplates = toscaServiceModel.getServiceTemplates();
     String entryDefinitionServiceTemplate = toscaServiceModel.getEntryDefinitionServiceTemplate();
@@ -204,7 +276,7 @@ public class ManualVspToscaManagerImplTest {
   @Test
   public void testGenerateToscaNoDeploymentFlavor() {
     VspModelInfo vspCollectedData = new VspModelInfo();
-    vspCollectedData.setReleaseVendor("Vendor-1");
+    vspCollectedData.setReleaseVendor(RELEASE_VENDOR);
     vspCollectedData.setComponents(getComponentData());
     vspCollectedData.setMultiFlavorVfcImages(getVfcImageData());
     vspCollectedData.setAllowedFlavors(null);
@@ -213,7 +285,6 @@ public class ManualVspToscaManagerImplTest {
         manualVspToscaManager.generateToscaModel(vspCollectedData);
     Assert.assertNotNull(toscaServiceModel);
     Assert.assertNotNull(toscaServiceModel.getServiceTemplates());
-    //Service model should contain only the packed global types
     Assert.assertEquals(22, toscaServiceModel.getServiceTemplates().size());
     Map<String, ServiceTemplate> serviceTemplates = toscaServiceModel.getServiceTemplates();
     String entryDefinitionServiceTemplate = toscaServiceModel.getEntryDefinitionServiceTemplate();
@@ -228,7 +299,7 @@ public class ManualVspToscaManagerImplTest {
   @Test
   public void testGenerateToscaCompleteData() {
     VspModelInfo vspCollectedData = new VspModelInfo();
-    vspCollectedData.setReleaseVendor("Vendor-1");
+    vspCollectedData.setReleaseVendor(RELEASE_VENDOR);
     vspCollectedData.setComponents(getComponentData());
     vspCollectedData.setMultiFlavorVfcImages(getVfcImageData());
     vspCollectedData.setAllowedFlavors(getDeploymentFlavorData());
@@ -237,31 +308,23 @@ public class ManualVspToscaManagerImplTest {
         manualVspToscaManager.generateToscaModel(vspCollectedData);
     Assert.assertNotNull(toscaServiceModel);
     Assert.assertNotNull(toscaServiceModel.getServiceTemplates());
-    //Service model should contain only the packed global types
     Assert.assertEquals(22, toscaServiceModel.getServiceTemplates().size());
     Map<String, ServiceTemplate> serviceTemplates = toscaServiceModel.getServiceTemplates();
     String entryDefinitionServiceTemplate = toscaServiceModel.getEntryDefinitionServiceTemplate();
     ServiceTemplate mainServiceTemplate = serviceTemplates.get(entryDefinitionServiceTemplate);
     Assert.assertNotNull(mainServiceTemplate);
     String componentName = vspCollectedData.getComponents().get(COMPONENT_ID);
-
-    Assert.assertNotNull(mainServiceTemplate.getTopology_template().getNode_templates()
-        .get(componentName + GeneratorConstants.VFC_NODE_TEMPLATE_ID_SUFFIX));
     Assert.assertNotNull(mainServiceTemplate.getTopology_template().getNode_templates()
         .get(componentName + GeneratorConstants.VNF_NODE_TEMPLATE_ID_SUFFIX));
     //Validate vnf configuration node template
     validateVnfConfigurationNodeTemplate(mainServiceTemplate, componentName);
-    //Validate vfc node template
-    validateVfcNodeTemplateinMainServiceTemplate(mainServiceTemplate, componentName);
     //Validate vnf node template
     validateVnfNodeTemplate(mainServiceTemplate, componentName);
-
     //Validate substitution service template
     ServiceTemplate substitutionServiceTemplate = toscaServiceModel.getServiceTemplates()
         .get(componentName + GeneratorConstants.TOSCA_SERVICE_TEMPLATE_FILE_NAME_SUFFIX);
     List<Nic> nics = vspCollectedData.getNics().get(COMPONENT_ID);
     validateSubstitutionServiceTemplate(substitutionServiceTemplate, nics, componentName);
-
     //Validate global substitution service template
     ServiceTemplate globalSubstitutionServiceTemplate = toscaServiceModel.getServiceTemplates()
         .get(ToscaUtil.getServiceTemplateFileName(GLOBAL_SUBSTITUTION_TYPES_TEMPLATE_NAME));
@@ -284,24 +347,18 @@ public class ManualVspToscaManagerImplTest {
     Assert.assertEquals(deploymentFlavorData, allowedFlavors);
   }
 
-  private void validateVfcNodeTemplateinMainServiceTemplate(ServiceTemplate mainServiceTemplate,
-                                                            String componentName) {
-    NodeTemplate vfcNodeTemplate =
-        mainServiceTemplate.getTopology_template().getNode_templates()
-            .get(componentName + GeneratorConstants.VFC_NODE_TEMPLATE_ID_SUFFIX);
-    Assert.assertNotNull(vfcNodeTemplate);
-    Assert.assertEquals(ToscaNodeType.MULTIFLAVOR_VFC_NODE_TYPE, vfcNodeTemplate.getType());
+  private void validateImagePropertyData(NodeTemplate vnfNodeTemplate, String componentName) {
     Map<String, MultiFlavorVfcImage> vfcImages = (Map<String, MultiFlavorVfcImage>)
-        vfcNodeTemplate.getProperties().get(GeneratorConstants.IMAGES_PROPERTY);
+        vnfNodeTemplate.getProperties().get(GeneratorConstants.IMAGES_PROPERTY);
     Assert.assertNotNull(vfcImages);
     Assert.assertEquals(2, vfcImages.size());
     MultiFlavorVfcImage image1 = vfcImages.get(IMAGE_VERSION_1);
     MultiFlavorVfcImage expectedImage1 = getImageData(IMAGE_VERSION_1, IMAGE_HASH_1,
-        IMAGE_FILE_NAME_1, "md5", IMAGE_FILE_FORMAT_1);
+        IMAGE_FILE_NAME_1, "md5");
     Assert.assertEquals(expectedImage1, image1);
     MultiFlavorVfcImage image2 = vfcImages.get(IMAGE_VERSION_2);
     MultiFlavorVfcImage expectedImage2 = getImageData(IMAGE_VERSION_2, IMAGE_HASH_2,
-        IMAGE_FILE_NAME_2, "md5", IMAGE_FILE_FORMAT_2);
+        IMAGE_FILE_NAME_2, "md5");
     Assert.assertEquals(expectedImage2, image2);
   }
 
@@ -311,12 +368,11 @@ public class ManualVspToscaManagerImplTest {
         mainServiceTemplate.getTopology_template().getNode_templates()
             .get(componentName + GeneratorConstants.VNF_NODE_TEMPLATE_ID_SUFFIX);
     Assert.assertNotNull(vnfNodeTemplate);
-    Assert.assertEquals(ToscaNodeType.MULTIDEPLOYMENTFLAVOR_NODE_TYPE + "." + componentName,
-        vnfNodeTemplate.getType());
+    Assert.assertEquals(ToscaNodeType.MULTIDEPLOYMENTFLAVOR_NODE_TYPE, vnfNodeTemplate.getType());
     Assert.assertNotNull(vnfNodeTemplate.getDirectives());
     Assert.assertEquals(true, vnfNodeTemplate.getDirectives().contains(ToscaConstants
         .NODE_TEMPLATE_DIRECTIVE_SUBSTITUTABLE));
-
+    validateImagePropertyData(vnfNodeTemplate, componentName);
     Map<String, Object> serviceTemplateFilterProperty = (Map<String, Object>) vnfNodeTemplate
         .getProperties().get(SERVICE_TEMPLATE_FILTER_PROPERTY_NAME);
     Assert.assertNotNull(serviceTemplateFilterProperty);
@@ -372,8 +428,8 @@ public class ManualVspToscaManagerImplTest {
   private void validateSubstitutionMappings(SubstitutionMapping substitutionMappings,
                                             List<Nic> nics,
                                             String componentName) {
-    Assert.assertEquals(ToscaNodeType.MULTIDEPLOYMENTFLAVOR_NODE_TYPE + "." + componentName,
-        substitutionMappings.getNode_type());
+    Assert.assertEquals(ToscaNodeType.MULTIDEPLOYMENTFLAVOR_NODE_TYPE, substitutionMappings
+        .getNode_type());
     Map<String, List<String>> capabilities = substitutionMappings.getCapabilities();
     validateSubstitutionCapabilities(capabilities, componentName);
     Map<String, List<String>> requirements = substitutionMappings.getRequirements();
@@ -420,7 +476,7 @@ public class ManualVspToscaManagerImplTest {
     Map<String, NodeType> nodeTypes = globalSubstitutionServiceTemplate.getNode_types();
     Assert.assertEquals(1, nodeTypes.size());
     NodeType deploymentFlavorNodeType =
-        nodeTypes.get(ToscaNodeType.MULTIDEPLOYMENTFLAVOR_NODE_TYPE + "." + componentName);
+        nodeTypes.get(ToscaNodeType.MULTIDEPLOYMENTFLAVOR_NODE_TYPE);
     Assert.assertNotNull(deploymentFlavorNodeType);
     Map<String, PropertyDefinition> properties = deploymentFlavorNodeType.getProperties();
     Assert.assertNotNull(properties);
@@ -475,9 +531,9 @@ public class ManualVspToscaManagerImplTest {
     Map<String, List<MultiFlavorVfcImage>> imageData = new HashMap<>();
     List<MultiFlavorVfcImage> images = new ArrayList<>(2);
     MultiFlavorVfcImage image1 = getImageData(IMAGE_VERSION_1, IMAGE_HASH_1, IMAGE_FILE_NAME_1,
-        "md5", IMAGE_FILE_FORMAT_1);
+        "md5");
     MultiFlavorVfcImage image2 = getImageData(IMAGE_VERSION_2, IMAGE_HASH_2, IMAGE_FILE_NAME_2,
-        "md5", IMAGE_FILE_FORMAT_2);
+        "md5");
     images.add(image1);
     images.add(image2);
     imageData.put(COMPONENT_ID, images);
@@ -522,10 +578,10 @@ public class ManualVspToscaManagerImplTest {
     return computeFlavor;
   }
 
-  private VendorInfo getVendorInfo(String manufacturerRefNumber, String vlmId) {
+  private VendorInfo getVendorInfo(String manufacturerRefNumber, String deploymentFlavorModel) {
     VendorInfo vendorInfo = new VendorInfo();
     vendorInfo.setManufacturer_reference_number(manufacturerRefNumber);
-    vendorInfo.setVendor_model(vlmId);
+    vendorInfo.setVendor_model(deploymentFlavorModel);
     return vendorInfo;
   }
 
@@ -535,13 +591,13 @@ public class ManualVspToscaManagerImplTest {
     return licenseFlavor;
   }
 
-  private MultiFlavorVfcImage getImageData(String imageVersion, String fileHash, String fileName,
-                                           String fileHashType, String fileFormat) {
+  private MultiFlavorVfcImage getImageData(String imageVersion, String fileHash,
+                                           String fileName, String fileHashType) {
     MultiFlavorVfcImage image = new MultiFlavorVfcImage();
     image.setSoftware_version(imageVersion);
     image.setFile_hash(fileHash);
     image.setFile_hash_type(fileHashType);
-    image.setFile_name(fileName+"-"+IMAGE_VERSION_2+"."+fileFormat);
+    image.setFile_name(fileName);
     return image;
   }
 
index b2cfba7..fe275e9 100644 (file)
@@ -109,6 +109,31 @@ public class NicManagerImplTest {
     Assert.assertNotNull(created);
   }
 
+  @Test
+  public void testCreateWithIncorrectNicNameFormat() {
+    NicEntity nicEntity = createNic(VSP_ID, VERSION, COMPONENT_ID, NIC1_ID, NETWORK1_ID);
+    Nic nic = nicEntity.getNicCompositionData();
+    nic.setNetworkType(NetworkType.Internal);
+    nicEntity.setNicCompositionData(nic);
+    doReturn(true).when(vspInfoDao).isManual(anyObject(),anyObject());
+    Collection<NicEntity> nicEntities = new ArrayList<>();
+
+    NicEntity nicEntityDiffName = createNic(VSP_ID, VERSION, COMPONENT_ID, NIC1_ID, NETWORK1_ID);
+    Nic newNameNic = nicEntityDiffName.getNicCompositionData();
+    newNameNic.setName(NIC1_ID + "_Name/*");
+    nicEntityDiffName.setNicCompositionData(newNameNic);
+    nicEntities.add(nicEntityDiffName);
+    doReturn(nicEntities).when(nicDao).list(anyObject());
+    doReturn(nicEntity).when(compositionEntityDataManagerMock).createNic(anyObject());
+
+    try {
+      NicEntity created = nicManager.createNic(nicEntity,USER);
+    }  catch (CoreException exception) {
+            Assert.assertEquals(VendorSoftwareProductErrorCodes.NIC_NAME_FORMAT_NOT_ALLOWED,
+              exception.code().id());
+    }
+  }
+
   @Test
   public void testCreateWithDupNicName() {
     NicEntity nicEntity = createNic(VSP_ID, VERSION, COMPONENT_ID, NIC1_ID, NETWORK1_ID);
@@ -120,7 +145,7 @@ public class NicManagerImplTest {
 
     NicEntity nicEntityDiffName = createNic(VSP_ID, VERSION, COMPONENT_ID, NIC1_ID, NETWORK1_ID);
     Nic newNameNic = nicEntityDiffName.getNicCompositionData();
-    newNameNic.setName(NIC1_ID + " Name");
+    newNameNic.setName(NIC1_ID + "_Name");
     nicEntityDiffName.setNicCompositionData(newNameNic);
     nicEntities.add(nicEntityDiffName);
     doReturn(nicEntities).when(nicDao).list(anyObject());
@@ -282,7 +307,7 @@ public class NicManagerImplTest {
 
     NicEntity nicEntity = new NicEntity(VSP_ID, VERSION, COMPONENT_ID, NIC1_ID);
     Nic nicData = new Nic();
-    nicData.setName(NIC1_ID + " name updated");
+    nicData.setName(NIC1_ID + "_name_updated");
     nicData.setDescription(NIC1_ID + " desc updated");
     nicData.setNetworkId(NETWORK1_ID);
     nicEntity.setNicCompositionData(nicData);
@@ -294,6 +319,36 @@ public class NicManagerImplTest {
     verify(nicDao, never()).update(nicEntity);
   }
 
+  @Test
+  public void testUpdateIncorrectNameFormat() {
+    doReturn(createNic(VSP_ID, VERSION, COMPONENT_ID, NIC1_ID, NETWORK1_ID))
+            .when(nicDao).get(anyObject());
+
+    CompositionEntityValidationData toBeReturned =
+            new CompositionEntityValidationData(CompositionEntityType.nic, NIC1_ID);
+    toBeReturned.setErrors(Arrays.asList("error1", "error2"));
+    doReturn(toBeReturned)
+            .when(compositionEntityDataManagerMock)
+            .validateEntity(anyObject(), anyObject(), anyObject());
+    doReturn(true).when(vspInfoDao).isManual(anyObject(), anyObject());
+
+    NicEntity nicEntity = new NicEntity(VSP_ID, VERSION, COMPONENT_ID, NIC1_ID);
+    Nic nicData = new Nic();
+    nicData.setName(NIC1_ID + "_name_updated/*");
+    nicData.setDescription(NIC1_ID + " desc updated");
+    nicData.setNetworkId(NETWORK1_ID);
+    nicEntity.setNicCompositionData(nicData);
+
+    try {
+      nicManager.updateNic(nicEntity, USER);
+      Assert.fail();
+    }
+    catch (CoreException ex) {
+      Assert.assertEquals(VendorSoftwareProductErrorCodes.NIC_NAME_FORMAT_NOT_ALLOWED,
+              ex.code().id());
+    }
+  }
+
 
   @Test
   public void testGetNonExistingNicId_negative() {
@@ -426,7 +481,7 @@ public class NicManagerImplTest {
                              String networkId) {
     NicEntity nicEntity = new NicEntity(vspId, version, compId, nicId);
     Nic nicData = new Nic();
-    nicData.setName(nicId + " name");
+    nicData.setName(nicId + "_name");
     nicData.setDescription(nicId + " desc");
     nicData.setNetworkId(networkId);
     nicEntity.setNicCompositionData(nicData);
diff --git a/openecomp-be/backend/pom.xml.versionsBackup b/openecomp-be/backend/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 15ac71b..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <artifactId>openecomp-sdc</artifactId>
-        <groupId>org.openecomp.sdc</groupId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <groupId>org.openecomp.sdc</groupId>
-    <artifactId>backend</artifactId>
-    <packaging>pom</packaging>
-
-    <modules>
-        <module>openecomp-sdc-vendor-license-manager</module>
-        <module>openecomp-sdc-vendor-software-product-manager</module>
-        <module>openecomp-sdc-validation-manager</module>
-        <module>openecomp-sdc-action-manager</module>
-        <module>openecomp-sdc-application-config-manager</module>
-    </modules>
-
-    
-</project>
diff --git a/openecomp-be/configuration/pom.xml.versionsBackup b/openecomp-be/configuration/pom.xml.versionsBackup
deleted file mode 100644 (file)
index a627e11..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-       <modelVersion>4.0.0</modelVersion>
-
-       <artifactId>openecomp-sdc-configuration</artifactId>
-       <name>openecomp-sdc-configuration</name>
-       <version>1.0-SNAPSHOT</version>
-       <packaging>pom</packaging>
-
-
-       <parent>
-               <groupId>org.openecomp.sdc</groupId>
-               <artifactId>openecomp-sdc</artifactId>
-               <version>1.0-SNAPSHOT</version>
-       </parent>
-
-</project>
\ No newline at end of file
index 0ebbf06..747ba4a 100644 (file)
             <artifactId>logback-classic</artifactId>
             <version>${logback.version}</version>
         </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc.core</groupId>
-            <artifactId>openecomp-utilities-lib</artifactId>
-            <version>1.1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-            <version>2.5</version>
-        </dependency>
         <dependency>
             <groupId>commons-io</groupId>
             <artifactId>commons-io</artifactId>
diff --git a/openecomp-be/lib/openecomp-common-lib/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-common-lib/pom.xml.versionsBackup
deleted file mode 100644 (file)
index e2333b5..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>org.openecomp.core</groupId>
-    <name>openecomp-common-lib</name>
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-utilities-lib</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-datatypes-lib</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>javax.ws.rs</groupId>
-            <artifactId>javax.ws.rs-api</artifactId>
-            <version>2.0-m10</version>
-        </dependency>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>${logback.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-utilities-lib</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-
-    <artifactId>openecomp-common-lib</artifactId>
-
-    <parent>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <groupId>org.openecomp.sdc</groupId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-core-lib/openecomp-config-lib/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-core-lib/openecomp-config-lib/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 7d6cd8f..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-nosqldb-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <version>6.9.10</version>
-            <scope>test</scope>
-        </dependency>
-        <!--dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-vendor-software-product-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-            <scope>test</scope>
-        </dependency-->
-    </dependencies>
-
-    <parent>
-        <groupId>org.openecomp.core</groupId>
-        <artifactId>openecomp-core-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>openecomp-config-lib</artifactId>
-    <version>1.0-SNAPSHOT</version>
-
-    
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-core-lib/openecomp-facade-lib/openecomp-facade-api/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-core-lib/openecomp-facade-lib/openecomp-facade-api/pom.xml.versionsBackup
deleted file mode 100644 (file)
index be88b27..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-facade-api</name>
-    <artifactId>openecomp-facade-api</artifactId>
-    <groupId>org.openecomp.core</groupId>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../../..</relativePath>
-    </parent>
-
-    <dependencies>
-
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-utilities-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-common-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-utilities-lib</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-core-lib/openecomp-facade-lib/openecomp-facade-core/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-core-lib/openecomp-facade-lib/openecomp-facade-core/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 72ce7fa..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>openecomp-facade-core</artifactId>
-    <name>openecomp-facade-core</name>
-    <groupId>org.openecomp.core</groupId>
-    <parent>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <groupId>org.openecomp.sdc</groupId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../../..</relativePath>
-    </parent>
-
-
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-utilities-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-common-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-facade-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-facade-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-
-
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-core-lib/openecomp-facade-lib/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-core-lib/openecomp-facade-lib/pom.xml.versionsBackup
deleted file mode 100644 (file)
index c4d0d1f..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-facade-lib</name>
-    <artifactId>openecomp-facade-lib</artifactId>
-
-    <packaging>pom</packaging>
-    <parent>
-        <artifactId>openecomp-core-lib</artifactId>
-        <groupId>org.openecomp.core</groupId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <modules>
-        <module>openecomp-facade-api</module>
-        <module>openecomp-facade-core</module>
-    </modules>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-facade-api</artifactId>
-            <version>${project.version}</version>
-            <scope>compile</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-facade-core</artifactId>
-            <version>${project.version}</version>
-            <scope>runtime</scope>
-        </dependency>
-    </dependencies>
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-core-lib/openecomp-nosqldb-lib/openecomp-nosqldb-api/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-core-lib/openecomp-nosqldb-lib/openecomp-nosqldb-api/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 288274d..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-nosqldb-api</name>
-    <artifactId>openecomp-nosqldb-api</artifactId>
-    <groupId>org.openecomp.core</groupId>
-
-    <parent>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <groupId>org.openecomp.sdc</groupId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../../..</relativePath>
-    </parent>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-facade-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>com.datastax.cassandra</groupId>
-            <artifactId>cassandra-driver-core</artifactId>
-            <version>${datasatx.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.datastax.cassandra</groupId>
-            <artifactId>cassandra-driver-mapping</artifactId>
-            <version>${datasatx.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-facade-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-logging-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-core-lib/openecomp-nosqldb-lib/openecomp-nosqldb-core/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-core-lib/openecomp-nosqldb-lib/openecomp-nosqldb-core/pom.xml.versionsBackup
deleted file mode 100644 (file)
index fa859a0..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-nosqldb-core</name>
-    <artifactId>openecomp-nosqldb-core</artifactId>
-    <groupId>org.openecomp.core</groupId>
-    <parent>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <groupId>org.openecomp.sdc</groupId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../../..</relativePath>
-    </parent>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-nosqldb-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-all</artifactId>
-            <scope>test</scope>
-            <version>1.10.19</version>
-        </dependency>
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <scope>test</scope>
-            <version>6.8.5</version>
-            <exclusions>
-                <exclusion>
-                    <artifactId>snakeyaml</artifactId>
-                    <groupId>org.yaml</groupId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-            <version>4.11</version>
-        </dependency>
-    </dependencies>
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-core-lib/openecomp-nosqldb-lib/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-core-lib/openecomp-nosqldb-lib/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 3a4bfd4..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-nosqldb-lib</name>
-    <artifactId>openecomp-nosqldb-lib</artifactId>
-    <groupId>org.openecomp.core</groupId>
-    <packaging>pom</packaging>
-    <parent>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <groupId>org.openecomp.sdc</groupId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../..</relativePath>
-    </parent>
-
-    <modules>
-        <module>openecomp-nosqldb-api</module>
-        <module>openecomp-nosqldb-core</module>
-    </modules>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-nosqldb-api</artifactId>
-            <version>${project.version}</version>
-            <scope>compile</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-nosqldb-core</artifactId>
-            <version>${project.version}</version>
-            <scope>runtime</scope>
-        </dependency>
-    </dependencies>
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 1e448f5..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-utilities-lib</name>
-    <artifactId>openecomp-utilities-lib</artifactId>
-
-
-    <parent>
-        <artifactId>openecomp-core-lib</artifactId>
-        <groupId>org.openecomp.core</groupId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-
-
-    <dependencies>
-        <dependency>
-            <groupId>org.yaml</groupId>
-            <artifactId>snakeyaml</artifactId>
-            <version>1.17</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-lang3</artifactId>
-            <version>3.4</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-collections4</artifactId>
-            <version>4.1</version>
-        </dependency>
-        <dependency>
-            <groupId>com.google.code.gson</groupId>
-            <artifactId>gson</artifactId>
-            <version>2.3.1</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-codec</groupId>
-            <artifactId>commons-codec</artifactId>
-            <version>${commons.codec.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-            <version>4.11</version>
-        </dependency>
-        <dependency>
-            <groupId>org.codehaus.jackson</groupId>
-            <artifactId>jackson-mapper-asl</artifactId>
-            <version>1.9.13</version>
-        </dependency>
-        <dependency>
-            <groupId>org.everit.json</groupId>
-            <artifactId>org.everit.json.schema</artifactId>
-            <version>1.3.0</version>
-        </dependency>
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <scope>test</scope>
-            <version>6.8.5</version>
-            <exclusions>
-                <exclusion>
-                    <artifactId>snakeyaml</artifactId>
-                    <groupId>org.yaml</groupId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-logging-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>com.google.code.gson</groupId>
-            <artifactId>gson</artifactId>
-            <version>2.3.1</version>
-        </dependency>
-    </dependencies>
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-core-lib/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-core-lib/pom.xml.versionsBackup
deleted file mode 100644 (file)
index d02ce28..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>org.openecomp.core</groupId>
-    <name>openecomp-core-lib</name>
-    <artifactId>openecomp-core-lib</artifactId>
-
-    <packaging>pom</packaging>
-    <parent>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <groupId>org.openecomp.sdc</groupId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <modules>
-        <module>/openecomp-facade-lib</module>
-        <module>/openecomp-nosqldb-lib</module>
-        <module>/openecomp-utilities-lib</module>
-        <module>/openecomp-config-lib</module>
-    </modules>
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-api/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-api/pom.xml.versionsBackup
deleted file mode 100644 (file)
index c9d100d..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-facade-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-facade-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-validation-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-healing-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <groupId>org.openecomp.sdc</groupId>
-    <artifactId>openecomp-sdc-healing-api</artifactId>
-    <version>1.0-SNAPSHOT</version>
-
-    
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-core/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-core/pom.xml.versionsBackup
deleted file mode 100644 (file)
index c48c325..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-healing-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-validation-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-vendor-software-product-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-healing-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <groupId>org.openecomp.sdc</groupId>
-    <artifactId>openecomp-sdc-healing-core</artifactId>
-    <version>1.0-SNAPSHOT</version>
-
-    
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/pom.xml.versionsBackup
deleted file mode 100644 (file)
index c5f9363..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-healing-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-vendor-software-product-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-vendor-software-product-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-            <scope>runtime</scope>
-        </dependency>
-    </dependencies>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-healing-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <groupId>org.openecomp.sdc</groupId>
-    <artifactId>openecomp-sdc-healing-impl</artifactId>
-    <version>1.0-SNAPSHOT</version>
-
-    
-</project>
\ No newline at end of file
index c759d21..2e63a8d 100644 (file)
@@ -1,5 +1,6 @@
 package org.openecomp.sdc.healing.healers;
 
+import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
 import org.openecomp.sdc.common.utils.SdcCommon;
@@ -7,9 +8,15 @@ import org.openecomp.sdc.healing.interfaces.Healer;
 import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentDao;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentDaoFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.ComputeDao;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.ComputeDaoFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.ImageDao;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.ImageDaoFactory;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDao;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDaoFactory;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComputeEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ImageEntity;
 import org.openecomp.sdc.versioning.dao.types.Version;
 
 import java.util.Collection;
@@ -17,13 +24,31 @@ import java.util.Map;
 
 
 public class ComponentQuestionnaireHealer implements Healer {
-  /*private static final VendorSoftwareProductDao vendorSoftwareProductDao =
-      VendorSoftwareProductDaoFactory.getInstance().createInterface();*/
 
   private static final ComponentDao componentDao =
       ComponentDaoFactory.getInstance().createInterface();
+  private static final ComputeDao computeDao =
+      ComputeDaoFactory.getInstance().createInterface();
+  private static final ImageDao imageDao =
+      ImageDaoFactory.getInstance().createInterface();
+
   private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
 
+  public static final String GENERAL = "general";
+  public static final String IMAGE = "image";
+  public static final String FORMAT = "format";
+  public static final String CPU_OVER_SUBSCRIPTION_RATIO = "CpuOverSubscriptionRatio";
+  public static final String MEMORY_RAM = "MemoryRAM";
+  public static final String VM_SIZING = "vmSizing";
+  public static final String COMPUTE = "compute";
+  public static final String NUM_OF_VMS = "numOfVMs";
+  public static final String DISK = "disk";
+  public static final String IO_OP_PER_SEC = "IOOperationsPerSec";
+
+  public static final String COMPUTE_CPU_OVER_SUBSCRIPTION_RATIO = "cpuOverSubscriptionRatio";
+  public static final String COMPUTE_MEMORY_RAM = "memoryRAM";
+  public static final String COMPUTE_IO_OP_PER_SEC = "ioOperationsPerSec";
+
   public ComponentQuestionnaireHealer(){
 
   }
@@ -36,43 +61,133 @@ public class ComponentQuestionnaireHealer implements Healer {
     Collection<ComponentEntity> componentEntities =
         componentDao.list(new ComponentEntity(vspId, version, null));
     componentEntities.forEach(componentEntity -> {
-      /*String questionnaire=vendorSoftwareProductDao.getComponent(vspId, version, componentEntity
-          .getId()).getQuestionnaireData();*/
       String questionnaire = componentDao.getQuestionnaireData(vspId, version, componentEntity
           .getId()).getQuestionnaireData();
+
       if (questionnaire != null) {
-      JsonParser jsonParser = new JsonParser();
-      JsonObject  json = (JsonObject) jsonParser.parse(questionnaire);
-        if (json.getAsJsonObject("compute") != null && json.getAsJsonObject("compute")
-            .getAsJsonObject("vmSizing") != null) {
-          json.getAsJsonObject("compute").remove("vmSizing");
-        }
+        JsonParser jsonParser = new JsonParser();
+        JsonObject  json = (JsonObject) jsonParser.parse(questionnaire);
 
-        if (json.getAsJsonObject("compute") != null && json.getAsJsonObject("compute")
-            .getAsJsonObject("numOfVMs") != null ) {
-          if (json.getAsJsonObject("compute").getAsJsonObject("numOfVMs").
-              get("CpuOverSubscriptionRatio") != null ) {
-            json.getAsJsonObject("compute").getAsJsonObject("numOfVMs").remove
-                ("CpuOverSubscriptionRatio");
-          }
-          if (json.getAsJsonObject("compute").getAsJsonObject("numOfVMs").
-              get("MemoryRAM") != null ) {
-            json.getAsJsonObject("compute").getAsJsonObject("numOfVMs").remove("MemoryRAM");
-          }
-        }
+        Collection<ComputeEntity> computeEntities = computeDao.list(new ComputeEntity(vspId,
+            version, componentEntity.getId(), null));
+        computeEntities.stream().forEach(
+            computeEntity -> {
+              populateComputeQuestionnaire(json, computeEntity);
+            }
+        );
 
-        if (json.getAsJsonObject("general") != null && json.getAsJsonObject("general")
-            .getAsJsonObject("image") != null && json.getAsJsonObject("general").getAsJsonObject
-            ("image").get("format") != null) {
-          json.getAsJsonObject("general").getAsJsonObject("image").remove("format");
-        }
-      String questionnaireData = json.toString();
-        /*vendorSoftwareProductDao.updateComponentQuestionnaire(vspId, version, componentEntity
-            .getId(),questionnaireData);*/
+        Collection<ImageEntity> imageEntities = imageDao.list(new ImageEntity(vspId,
+            version, componentEntity.getId(), null));
+        imageEntities.stream().forEach(
+            imageEntity -> {
+              populateImageQuestionnaire(json, imageEntity);
+            }
+        );
+
+        processDiskAttribute(json, "bootDiskSizePerVM");
+        processDiskAttribute(json, "ephemeralDiskSizePerVM");
+
+        String questionnaireData = json.toString();
         componentDao.updateQuestionnaireData(vspId, version, componentEntity.getId(),
             questionnaireData);
       }
     });
     return componentEntities;
   }
+
+  /**
+   * Move Disk Atributes from genral/image/  to genral/disk in component questionnaire itself
+   * @param json
+   * @param diskAttrName
+   * @param diskJsonObject
+   * @return
+   */
+  private void processDiskAttribute(JsonObject json, String diskAttrName) {
+    boolean isBootDisksizePerVM = isDiskAttributePresent(json, diskAttrName);
+    if (isBootDisksizePerVM) {
+      JsonObject diskJsonObject = json.getAsJsonObject(GENERAL).getAsJsonObject(DISK);
+      if (diskJsonObject == null) {
+        diskJsonObject = new JsonObject();
+      }
+
+      diskJsonObject.addProperty(diskAttrName, json.getAsJsonObject(GENERAL).getAsJsonObject(IMAGE)
+          .get(diskAttrName).getAsNumber());
+
+      json.getAsJsonObject(GENERAL).add(DISK, diskJsonObject);
+      json.getAsJsonObject(GENERAL).getAsJsonObject(IMAGE).remove(diskAttrName);
+    }
+  }
+
+  private boolean isDiskAttributePresent(JsonObject json, String diskAttrName) {
+    return json.getAsJsonObject(GENERAL) != null &&
+        json.getAsJsonObject(GENERAL).getAsJsonObject(IMAGE) != null &&
+        json.getAsJsonObject(GENERAL).getAsJsonObject (IMAGE).get(diskAttrName)
+            != null;
+  }
+
+  /**
+   * Move the required attributes from component to Image Questionnaire
+   * @param json
+   * @param imageEntity
+   */
+  private void populateImageQuestionnaire(JsonObject json, ImageEntity imageEntity) {
+    JsonObject general = getJsonObject(json, GENERAL);
+    boolean isImageFormat = general != null && json
+        .getAsJsonObject(GENERAL)
+        .getAsJsonObject(IMAGE) != null && json.getAsJsonObject(GENERAL).getAsJsonObject
+        (IMAGE).get(FORMAT) != null;
+    if (isImageFormat) {
+      JsonObject image = getJsonObject(general, IMAGE);
+      JsonElement jsonElement = image.get(FORMAT);
+      JsonObject jsonObject = new JsonObject();
+      jsonObject.add(FORMAT, jsonElement);
+      imageDao.updateQuestionnaireData(imageEntity.getVspId(), imageEntity.getVersion(), imageEntity
+          .getComponentId(),imageEntity.getId(), jsonObject.toString());
+      image.remove(FORMAT);
+    }
+  }
+
+  /**
+   * Move the required attributes from component to Compute Questionnaire
+   * @param json
+   * @param computeEntity
+   */
+  private void populateComputeQuestionnaire(JsonObject json, ComputeEntity computeEntity) {
+    JsonObject compute = getJsonObject(json, COMPUTE);
+    JsonObject vmSizing = getJsonObject(compute, VM_SIZING);
+    if (compute != null && vmSizing != null) {
+      JsonElement ioOperationsPerSec = vmSizing.get(IO_OP_PER_SEC);
+      if (ioOperationsPerSec != null) {
+        vmSizing.addProperty(COMPUTE_IO_OP_PER_SEC, ioOperationsPerSec.getAsNumber());
+        vmSizing.remove(IO_OP_PER_SEC);
+      }
+
+      JsonObject numberOfVms = getJsonObject(compute, NUM_OF_VMS);
+      if (numberOfVms != null ) {
+        JsonElement cpuRatio =  numberOfVms.get(CPU_OVER_SUBSCRIPTION_RATIO);
+        if (cpuRatio != null ) {
+          vmSizing.addProperty(COMPUTE_CPU_OVER_SUBSCRIPTION_RATIO, cpuRatio.getAsString());
+          numberOfVms.remove(CPU_OVER_SUBSCRIPTION_RATIO);
+        }
+        JsonElement memoryRam =  numberOfVms.get(MEMORY_RAM);
+        if (memoryRam != null ) {
+          vmSizing.addProperty(COMPUTE_MEMORY_RAM, memoryRam.getAsString());
+          numberOfVms.remove(MEMORY_RAM);
+        }
+      }
+
+      JsonObject computeQuestionnaireJsonObject = new JsonObject();
+      computeQuestionnaireJsonObject.add(VM_SIZING, vmSizing);
+      String computeQuestionnaire = computeQuestionnaireJsonObject != null ?
+          computeQuestionnaireJsonObject.toString() : null;
+      computeDao.updateQuestionnaireData(computeEntity.getVspId(), computeEntity.getVersion(),
+          computeEntity.getComponentId(), computeEntity.getId(), computeQuestionnaire);
+      compute.remove(VM_SIZING);
+
+    }
+  }
+
+  private JsonObject getJsonObject(JsonObject json, String name) {
+    return json.getAsJsonObject(name);
+  }
 }
index 6fdf144..bdb7bc3 100644 (file)
@@ -174,8 +174,8 @@ public class CompositionDataHealer implements Healer {
 
     Collection<ComputeEntity> computeEntities = computeDao.listByVsp(vspId, version);
     Collection<ImageEntity> imageEntities = imageDao.listByVsp(vspId, version);
-    Collection<DeploymentFlavorEntity> deploymentFlavorEntities = deloymentFlavorDao.list(new
-        DeploymentFlavorEntity(vspId, version, null));
+    //Collection<DeploymentFlavorEntity> deploymentFlavorEntities = deloymentFlavorDao.list(new
+        //DeploymentFlavorEntity(vspId, version, null));
 
     if (CollectionUtils.isEmpty(computeEntities) && CollectionUtils.isEmpty(imageEntities)) {
       for (Component component : compositionData.getComponents()) {
@@ -195,9 +195,9 @@ public class CompositionDataHealer implements Healer {
 
     }
 
-    if (CollectionUtils.isEmpty(deploymentFlavorEntities)) {
+    /*if (CollectionUtils.isEmpty(deploymentFlavorEntities)) {
       compositionEntityDataManager.saveDeploymentFlavors(vspId,version,compositionData);
-    }
+    }*/
   }
 
   private CompositionData healCompositionData(String vspId, Version version,
index 5eb15bf..6a82d8f 100644 (file)
@@ -21,6 +21,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 
 /**
@@ -44,6 +45,11 @@ public class VlmVersionHealer implements Healer {
 
     VspDetails vspDetails = vspInfoDao.get(new VspDetails(vspId, version));
     VersionedVendorLicenseModel vendorLicenseModel;
+    
+    if(!Objects.isNull(vspDetails.getVlmVersion())) {
+      return Optional.empty();
+    }
+
 
     try{
       vendorLicenseModel =
@@ -61,6 +67,7 @@ public class VlmVersionHealer implements Healer {
         new ArrayList<>(
             licenseAgreementDao.list(new LicenseAgreementEntity(vlmId, vlmVersion, null)));
 
+
     vspDetails.setVlmVersion(vlmVersion);
     vspDetails.setLicenseAgreement(laList.get(0).getId());
     vspDetails.setFeatureGroups(new ArrayList<>(laList.get(0).getFeatureGroupIds()));
diff --git a/openecomp-be/lib/openecomp-healing-lib/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-healing-lib/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 02ba7f1..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <groupId>org.openecomp.sdc</groupId>
-    <artifactId>openecomp-healing-lib</artifactId>
-    <version>1.0-SNAPSHOT</version>
-    <packaging>pom</packaging>
-
-    <modules>
-        <module>openecomp-sdc-healing-api</module>
-        <module>openecomp-sdc-healing-core</module>
-        <module>openecomp-sdc-healing-impl</module>
-    </modules>
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-heat-lib/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-heat-lib/pom.xml.versionsBackup
deleted file mode 100644 (file)
index f434a8e..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>org.openecomp.core</groupId>
-    <name>openecomp-heat-lib</name>
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-utilities-lib</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-datatypes-lib</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-common-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>${logback.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>RELEASE</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-validation-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-
-    <artifactId>openecomp-heat-lib</artifactId>
-
-    <parent>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <groupId>org.openecomp.sdc</groupId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/pom.xml.versionsBackup
deleted file mode 100644 (file)
index a2786b2..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <dependencies>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.aspectj</groupId>
-            <artifactId>aspectjrt</artifactId>
-            <version>1.8.9</version>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-        </dependency>
-    </dependencies>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-logging-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-
-    <artifactId>openecomp-sdc-logging-api</artifactId>
-    <name>openecomp-sdc-logging-api</name>
-    <version>1.0-SNAPSHOT</version>
-
-    <!--dependencies>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-core</artifactId>
-            <version>4.1.3.RELEASE</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-context</artifactId>
-            <version>4.1.3.RELEASE</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-beans</artifactId>
-            <version>4.1.3.RELEASE</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-beans</artifactId>
-            <version>4.1.3.RELEASE</version>
-        </dependency>
-    </dependencies-->
-
-    
-</project>
\ No newline at end of file
index f23a2c5..de39cff 100644 (file)
@@ -16,14 +16,24 @@ public class AuditMessages {
   public static final String CHECK_IN_VSP = "Check in VSP. VSP Id: ";
   public static final String CHECK_OUT_VSP = "Check out VSP. VSP Id: ";
   public static final String SUBMIT_VSP = "Submit VSP. VSP Id: ";
+  public static final String SUBMIT_VSP_FAIL = "Submit VSP failed!. VSP Id: ";
+  public static final String SUBMIT_VSP_ERROR = "Submit VSP error: %s. VSP Id: %s";
 
   public static final String UPLOAD_HEAT = "Upload HEAT. VSP Id: ";
   public static final String UPLOAD_PROCESS_ARTIFACT = "Upload Process Artifact. VSP Id: ";
-  public static final String UPLOAD_MONITORING_FILE = "Upload Monitoring File of type %s " +
-      "" + ". VSP Id: %s, component id: %s";
-//    public static final String UPLOAD_ARTIFACT_MIB_TRAP = "Upload Artifact SNMP TRAP. VSP Id: ";
+  public static final String UPLOAD_MONITORING_FILE = "Upload Monitoring File of type %s "
+      +  ". VSP Id: %s, component id: %s";
 
   public static final String IMPORT_SUCCESS = "VSP import to VF success. VSP Id: ";
   public static final String IMPORT_FAIL = "VSP import to VF fail. VSP Id: ";
 
+  public static final String HEAT_VALIDATION_STARTED = "HEAT validation started. VSP Id: ";
+  public static final String HEAT_VALIDATION_COMPLETED = "HEAT validation completed. VSP Id: ";
+  public static final String HEAT_VALIDATION_ERROR = "HEAT validation error: %s. VSP Id: %s";
+  public static final String HEAT_TRANSLATION_STARTED = "HEAT translation started. VSP Id: ";
+  public static final String HEAT_TRANSLATION_COMPLETED = "HEAT translation completed. VSP Id: ";
+  public static final String ENRICHMENT_ERROR = "Enrichment error: %s. VSP Id: %s";
+  public static final String ENRICHMENT_COMPLETED = "Enrichment completed. VSP Id: ";
+  public static final String CREATE_PACKAGE = "Created package. VSP Id: ";
+
 }
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 374de71..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <dependencies>
-        <!--dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-common-lib</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency-->
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-logging-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-context</artifactId>
-            <version>4.1.3.RELEASE</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-webmvc</artifactId>
-            <version>4.1.3.RELEASE</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>${logback.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.5</version>
-        </dependency>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>1.1.7</version>
-        </dependency>
-
-    </dependencies>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-logging-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <groupId>org.openecomp.sdc</groupId>
-    <artifactId>openecomp-sdc-logging-core</artifactId>
-    <name>openecomp-sdc-logging-core</name>
-    <version>1.0-SNAPSHOT</version>
-
-    
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-logging-lib/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-logging-lib/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 7765713..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <groupId>org.openecomp.sdc</groupId>
-    <name>openecomp-logging-lib</name>
-    <artifactId>openecomp-logging-lib</artifactId>
-    <packaging>pom</packaging>
-
-    <modules>
-        <module>/openecomp-sdc-logging-api</module>
-        <module>/openecomp-sdc-logging-core</module>
-    </modules>
-
-    
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-migration-lib/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-migration-lib/pom.xml.versionsBackup
deleted file mode 100644 (file)
index bca0cd3..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <properties>
-
-        <groovy.version>2.4.7</groovy.version>
-        <janino.version>2.7.7</janino.version>
-
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-vendor-software-product-manager</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.codehaus.groovy</groupId>
-            <artifactId>groovy</artifactId>
-            <version>${groovy.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.openecomp.sdc.common</groupId>
-            <artifactId>openecomp-configuration-management-core</artifactId>
-            <version>1707.0.0-SNAPSHOT</version>
-            <scope>runtime</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.slf4j</groupId>
-                    <artifactId>slf4j-log4j12</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-
-        <dependency>
-            <groupId>org.codehaus.janino</groupId>
-            <artifactId>janino</artifactId>
-            <version>${janino.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.codehaus.janino</groupId>
-            <artifactId>commons-compiler</artifactId>
-            <version>3.0.6</version>
-        </dependency>
-
-    </dependencies>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-
-    <artifactId>openecomp-migration-lib</artifactId>
-    <name>openecomp-migration-lib</name>
-    <version>1.0-SNAPSHOT</version>
-
-    <build>
-        <plugins>
-
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-dependency-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>copy-dependencies</id>
-                        <phase>install</phase>
-                        <goals>
-                            <goal>copy-dependencies</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
-                            <overWriteReleases>false</overWriteReleases>
-                            <overWriteSnapshots>false</overWriteSnapshots>
-                            <overWriteIfNewer>true</overWriteIfNewer>
-                            <!--includeScope>runtime</includeScope-->
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <phase>package</phase>
-                    </execution>
-                </executions>
-                <configuration>
-                    <archive>
-                        <manifest>
-                            <addClasspath>true</addClasspath>
-                            <classpathPrefix>lib/</classpathPrefix>
-                            <mainClass>org.openecomp.sdc.migration.ToscaNamespaceMigration</mainClass>
-                        </manifest>
-                        <manifestEntries>
-                            <Class-Path>lib/</Class-Path>
-                        </manifestEntries>
-                    </archive>
-                </configuration>
-            </plugin>
-
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>ant-test</id>
-                        <phase>package</phase>
-                        <configuration>
-                            <tasks>
-                                <fixcrlf srcdir="../../tools/migration/" eol="unix"
-                                         includes="1702_to_1707.sh"/>
-                            </tasks>
-                        </configuration>
-                        <goals>
-                            <goal>run</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <artifactId>maven-assembly-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>Generate assembly</id>
-                        <phase>install</phase>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <descriptors>
-                        <descriptor>${basedir}/src/main/assembly/migration-lib-assembly.xml</descriptor>
-                    </descriptors>
-                    <finalName>openecomp-migration-lib</finalName>
-                </configuration>
-            </plugin>
-
-        </plugins>
-    </build>
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-action-lib/openecomp-sdc-action-api/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-action-lib/openecomp-sdc-action-api/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 5da2094..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-action-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <groupId>org.openecomp.sdc</groupId>
-    <artifactId>openecomp-sdc-action-api</artifactId>
-    <version>1.0-SNAPSHOT</version>
-
-
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-core-lib</artifactId>
-            <type>pom</type>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-facade-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-nosqldb-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-versioning-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-annotations</artifactId>
-            <version>2.7.4</version>
-        </dependency>
-    </dependencies>
-
-</project>
\ No newline at end of file
index ee5e883..86ae751 100644 (file)
@@ -41,7 +41,7 @@ public interface ActionDao extends VersionableDao, BaseDao<ActionEntity> {
 
   public Action getActionsByActionUuId(String uniqueId) throws ActionException;
 
-  public List<OpenEcompComponent> getOpenEcompComponents() throws ActionException;
+  public List<OpenEcompComponent> getEcompComponents() throws ActionException;
 
   public List<Action> getActionsByActionInvariantUuId(String actionInvariantUuId)
       throws ActionException;
diff --git a/openecomp-be/lib/openecomp-sdc-action-lib/openecomp-sdc-action-core/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-action-lib/openecomp-sdc-action-core/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 274bdb0..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>org.openecomp.sdc</groupId>
-    <artifactId>openecomp-sdc-action-core</artifactId>
-    <version>1.0-SNAPSHOT</version>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-action-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-action-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-versioning-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-action-lib/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-action-lib/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 447437f..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>org.openecomp.sdc</groupId>
-    <artifactId>openecomp-sdc-action-lib</artifactId>
-    <packaging>pom</packaging>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-
-    <modules>
-        <module>openecomp-sdc-action-api</module>
-        <module>openecomp-sdc-action-core</module>
-    </modules>
-
-    
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-datatypes-lib/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-datatypes-lib/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 9e29da0..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-sdc-datatypes-lib</name>
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-collections4</artifactId>
-            <version>4.1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.codehaus.jackson</groupId>
-            <artifactId>jackson-mapper-asl</artifactId>
-            <version>1.9.13</version>
-        </dependency>
-        <dependency>
-            <groupId>io.swagger</groupId>
-            <artifactId>swagger-annotations</artifactId>
-            <version>1.5.3</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
-            <version>2.5</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc.common</groupId>
-            <artifactId>openecomp-configuration-management-api</artifactId>
-            <version>1707.0.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-    <artifactId>openecomp-sdc-datatypes-lib</artifactId>
-    <parent>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <groupId>org.openecomp.sdc</groupId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-enrichment-lib/openecomp-sdc-enrichment-api/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-enrichment-lib/openecomp-sdc-enrichment-api/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 493e425..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-sdc-enrichment-api</name>
-    <artifactId>openecomp-sdc-enrichment-api</artifactId>
-
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../..</relativePath>
-    </parent>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-facade-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>io.swagger</groupId>
-            <artifactId>swagger-annotations</artifactId>
-            <version>1.5.3</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-datatypes-lib</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>${logback.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-versioning-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-enrichment-lib/openecomp-sdc-enrichment-core/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-enrichment-lib/openecomp-sdc-enrichment-core/pom.xml.versionsBackup
deleted file mode 100644 (file)
index d8f63f1..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-sdc-enrichment-core</name>
-    <artifactId>openecomp-sdc-enrichment-core</artifactId>
-
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../..</relativePath>
-    </parent>
-
-    <dependencies>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>${logback.version}</version>
-
-        </dependency>
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <scope>test</scope>
-            <version>6.8.5</version>
-            <exclusions>
-                <exclusion>
-                    <artifactId>snakeyaml</artifactId>
-                    <groupId>org.yaml</groupId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>RELEASE</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-utilities-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-enrichment-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-enrichment-impl</artifactId>
-            <version>${project.version}</version>
-            <!--scope>runtime</scope-->
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-datatypes-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-all</artifactId>
-            <scope>test</scope>
-            <version>1.10.19</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-model-impl</artifactId>
-            <version>1.0-SNAPSHOT</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-tosca-lib</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <version>2.19.1</version>
-                <configuration>
-                    <useSystemClassLoader>false</useSystemClassLoader>
-                    <redirectTestOutputToFile>true</redirectTestOutputToFile>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-enrichment-lib/openecomp-sdc-enrichment-impl/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-enrichment-lib/openecomp-sdc-enrichment-impl/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 65e84d8..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-sdc-enrichment-impl</name>
-    <artifactId>openecomp-sdc-enrichment-impl</artifactId>
-
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../..</relativePath>
-    </parent>
-
-    <dependencies>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>${logback.version}</version>
-
-        </dependency>
-
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <scope>test</scope>
-            <version>6.8.5</version>
-            <exclusions>
-                <exclusion>
-                    <artifactId>snakeyaml</artifactId>
-                    <groupId>org.yaml</groupId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>RELEASE</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-utilities-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-enrichment-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-model-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-common-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-vendor-software-product-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-all</artifactId>
-            <scope>test</scope>
-            <version>1.10.19</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-heat-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-tosca-lib</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-translator-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-config-lib</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-vendor-software-product-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <scope>runtime</scope>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-vendor-software-product-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <scope>test</scope>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-model-impl</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-
-    </dependencies>
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <version>2.19.1</version>
-                <configuration>
-                    <useSystemClassLoader>false</useSystemClassLoader>
-                                       <redirectTestOutputToFile>true</redirectTestOutputToFile>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-enrichment-lib/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-enrichment-lib/pom.xml.versionsBackup
deleted file mode 100644 (file)
index b6e0173..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-sdc-enrichment-lib</name>
-    <artifactId>openecomp-sdc-enrichment-lib</artifactId>
-
-    <packaging>pom</packaging>
-    <parent>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <groupId>org.openecomp.sdc</groupId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <modules>
-        <module>openecomp-sdc-enrichment-api</module>
-        <module>openecomp-sdc-enrichment-core</module>
-        <module>openecomp-sdc-enrichment-impl</module>
-    </modules>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-enrichment-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-enrichment-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-vendor-software-product-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <!--dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-validation-impl</artifactId>
-            <version>${project.version}</version>
-        </dependency-->
-    </dependencies>
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-api/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-api/pom.xml.versionsBackup
deleted file mode 100644 (file)
index eba0f20..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-sdc-model-api</name>
-    <artifactId>openecomp-sdc-model-api</artifactId>
-
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../..</relativePath>
-    </parent>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-facade-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-validation-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-versioning-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>io.swagger</groupId>
-            <artifactId>swagger-annotations</artifactId>
-            <version>1.5.3</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-heat-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-tosca-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-    </dependencies>
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-core/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-core/pom.xml.versionsBackup
deleted file mode 100644 (file)
index d624371..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-sdc-model-core</name>
-    <artifactId>openecomp-sdc-model-core</artifactId>
-
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../..</relativePath>
-    </parent>
-
-    <dependencies>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>${logback.version}</version>
-
-        </dependency>
-
-
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-utilities-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-model-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-versioning-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-datatypes-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-all</artifactId>
-            <scope>test</scope>
-            <version>1.10.19</version>
-        </dependency>
-
-
-    </dependencies>
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-impl/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-impl/pom.xml.versionsBackup
deleted file mode 100644 (file)
index b8db689..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-sdc-model-impl</name>
-    <artifactId>openecomp-sdc-model-impl</artifactId>
-
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../..</relativePath>
-    </parent>
-
-    <dependencies>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>${logback.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-utilities-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-model-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-datatypes-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-all</artifactId>
-            <scope>test</scope>
-            <version>1.10.19</version>
-        </dependency>
-
-
-    </dependencies>
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-model-lib/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-model-lib/pom.xml.versionsBackup
deleted file mode 100644 (file)
index d49cbd7..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-sdc-model-lib</name>
-    <artifactId>openecomp-sdc-model-lib</artifactId>
-
-    <packaging>pom</packaging>
-    <parent>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <groupId>org.openecomp.sdc</groupId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <modules>
-        <module>openecomp-sdc-model-api</module>
-        <module>openecomp-sdc-model-core</module>
-        <module>openecomp-sdc-model-impl</module>
-    </modules>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-model-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-model-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-model-impl</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <!--dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-common-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency-->
-    </dependencies>
-</project>
\ No newline at end of file
index 1fb1030..025db1c 100644 (file)
@@ -55,4 +55,79 @@ public class VspModelInfo {
   public void setNics(Map<String, List<Nic>> nics) {
     this.nics = nics;
   }
+
+  @Override
+  public int hashCode() {
+    int result = releaseVendor != null ? releaseVendor.hashCode() : 0;
+    result = 31 * result + (components != null ? components.hashCode() : 0);
+    result = 31 * result + (allowedFlavors != null ? allowedFlavors.hashCode() : 0);
+    result = 31 * result + (multiFlavorVfcImages != null ? multiFlavorVfcImages.hashCode() : 0);
+    result = 31 * result + (nics != null ? nics.hashCode() : 0);
+    return result;
+  }
+
+  @Override
+  public String toString() {
+    return "VspModelInfo{"
+       + "releaseVendor='" + releaseVendor + '\''
+       + ", components=" + components
+       + ", allowedFlavors=" + allowedFlavors
+       + ", multiFlavorVfcImages=" + multiFlavorVfcImages
+       + ", nics=" + nics
+       + '}';
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (this == obj) {
+      return true;
+    }
+    if (getClass() != obj.getClass()) {
+      return false;
+    }
+    VspModelInfo other = (VspModelInfo) obj;
+    if (this.releaseVendor == null) {
+      if (other.releaseVendor != null) {
+        return false;
+      }
+    } else if (!releaseVendor.equals(other.releaseVendor)) {
+      return false;
+    }
+    if (this.components == null) {
+      if (other.components != null) {
+        return false;
+      }
+    } else if (!components.equals(other.components)) {
+      return false;
+    }
+    if (this.allowedFlavors == null) {
+      if (other.allowedFlavors != null) {
+        return false;
+      }
+    } else if (!allowedFlavors.equals(other.allowedFlavors)) {
+      return false;
+    }
+    if (this.multiFlavorVfcImages == null) {
+      if (other.multiFlavorVfcImages != null) {
+        return false;
+      }
+    } else if (!multiFlavorVfcImages.equals(other.multiFlavorVfcImages)) {
+      return false;
+    }
+    if (this.multiFlavorVfcImages == null) {
+      if (other.multiFlavorVfcImages != null) {
+        return false;
+      }
+    } else if (!multiFlavorVfcImages.equals(other.multiFlavorVfcImages)) {
+      return false;
+    }
+    if (this.nics == null) {
+      if (other.nics != null) {
+        return false;
+      }
+    } else if (!nics.equals(other.nics)) {
+      return false;
+    }
+    return true;
+  }
 }
index b24a85d..5464627 100644 (file)
@@ -5,9 +5,10 @@ public class GeneratorConstants {
   public static final String IMAGES_PROPERTY = "images";
   public static final String RELEASE_VENDOR = "releaseVendor";
   public static final String VNF_CONFIG_NODE_TEMPLATE_ID_SUFFIX = "_VNF_Configuration";
-  public static final String VFC_NODE_TEMPLATE_ID_SUFFIX = "_VFC";
   public static final String VNF_NODE_TEMPLATE_ID_SUFFIX = "_VNF";
-  public static final String PORT_NODE_TEMPLATE_ID_SUFFIX = "_wan_port";
+  public static final String PORT_TYPE_INTERNAL_NODE_TEMPLATE_SUFFIX = "_lan";
+  public static final String PORT_TYPE_EXTERNAL_NODE_TEMPLATE_SUFFIX = "_wan";
+  public static final String PORT_NODE_TEMPLATE_ID_SUFFIX = "_port";
 
   public static final String TOSCA_SERVICE_TEMPLATE_FILE_NAME_SUFFIX = "ServiceTemplate.yaml";
 
index 6d488c0..6ec7bfc 100644 (file)
@@ -9,9 +9,10 @@ import static org.openecomp.sdc.generator.util.GeneratorConstants.MEM_SIZE_PROP_
 import static org.openecomp.sdc.generator.util.GeneratorConstants.NUM_CPUS;
 import static org.openecomp.sdc.generator.util.GeneratorConstants.NUM_CPUS_PROP_DESC_PREFIX;
 import static org.openecomp.sdc.generator.util.GeneratorConstants.PORT_NODE_TEMPLATE_ID_SUFFIX;
+import static org.openecomp.sdc.generator.util.GeneratorConstants.PORT_TYPE_EXTERNAL_NODE_TEMPLATE_SUFFIX;
+import static org.openecomp.sdc.generator.util.GeneratorConstants.PORT_TYPE_INTERNAL_NODE_TEMPLATE_SUFFIX;
 import static org.openecomp.sdc.generator.util.GeneratorConstants.RELEASE_VENDOR;
 import static org.openecomp.sdc.generator.util.GeneratorConstants.TOSCA_SERVICE_TEMPLATE_FILE_NAME_SUFFIX;
-import static org.openecomp.sdc.generator.util.GeneratorConstants.VFC_NODE_TEMPLATE_ID_SUFFIX;
 import static org.openecomp.sdc.generator.util.GeneratorConstants.VNF_CONFIG_NODE_TEMPLATE_ID_SUFFIX;
 import static org.openecomp.sdc.generator.util.GeneratorConstants.VNF_NODE_TEMPLATE_ID_SUFFIX;
 
@@ -36,6 +37,7 @@ import org.openecomp.sdc.tosca.services.ToscaUtil;
 import org.openecomp.sdc.tosca.services.impl.ToscaAnalyzerServiceImpl;
 import org.openecomp.sdc.translator.services.heattotosca.Constants;
 import org.openecomp.sdc.translator.services.heattotosca.globaltypes.GlobalTypesGenerator;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.NetworkType;
 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic;
 
 import java.util.ArrayList;
@@ -118,8 +120,7 @@ public class ManualVspToscaGenerationService {
       // May be need to revisited for supporting multiple components
       String componentId = components.entrySet().iterator().next().getKey();
       createVnfConfigurationNodeTemplate(mainServiceTemplate, vspModelInfo);
-      createComponentNodeTemplate(mainServiceTemplate, vspModelInfo, componentId);
-      createVnfNodeTemplate(mainServiceTemplate, vspModelInfo);
+      createVnfNodeTemplate(mainServiceTemplate, vspModelInfo, componentId);
     }
     return mainServiceTemplate;
   }
@@ -141,42 +142,16 @@ public class ManualVspToscaGenerationService {
     }
   }
 
-  private void createComponentNodeTemplate(ServiceTemplate mainServiceTemplate,
-                                                  VspModelInfo vspModelInfo,
-                                                  String componentId) {
-    Optional<String> componentName = getComponentNameFromVspModel(vspModelInfo);
-    if (componentName.isPresent()) {
-      NodeTemplate vfcNodeTemplate = new NodeTemplate();
-      vfcNodeTemplate.setType(ToscaNodeType.MULTIFLAVOR_VFC_NODE_TYPE);
-      Map<String, Object> properties = new LinkedHashMap<>();
-      if (MapUtils.isNotEmpty(vspModelInfo.getMultiFlavorVfcImages())) {
-        List<MultiFlavorVfcImage> componentImages =
-            vspModelInfo.getMultiFlavorVfcImages().get(componentId);
-        Map<String, MultiFlavorVfcImage> vfcImages = new HashMap<>();
-        for (MultiFlavorVfcImage image : componentImages) {
-          vfcImages.put(image.getSoftware_version(), image);
-        }
-        properties.put(IMAGES_PROPERTY, vfcImages);
-        vfcNodeTemplate.setProperties(properties);
-      }
-      String nodeTemplateId = componentName.get() + VFC_NODE_TEMPLATE_ID_SUFFIX;
-      DataModelUtil.addNodeTemplate(mainServiceTemplate, nodeTemplateId,
-          vfcNodeTemplate);
-    }
-  }
-
   private void createVnfNodeTemplate(ServiceTemplate mainServiceTemplate,
-                                      VspModelInfo vspModelInfo) {
+                                     VspModelInfo vspModelInfo, String componentId) {
     Optional<String> componentName = getComponentNameFromVspModel(vspModelInfo);
     if (componentName.isPresent()) {
       NodeTemplate vnfNodeTemplate = new NodeTemplate();
-      String vnfNodeTemplateType =
-          ToscaNodeType.MULTIDEPLOYMENTFLAVOR_NODE_TYPE + "." + componentName.get();
-      vnfNodeTemplate.setType(vnfNodeTemplateType);
+      vnfNodeTemplate.setType(ToscaNodeType.MULTIDEPLOYMENTFLAVOR_NODE_TYPE);
       List<String> directiveList = new ArrayList<>();
       directiveList.add(ToscaConstants.NODE_TEMPLATE_DIRECTIVE_SUBSTITUTABLE);
       vnfNodeTemplate.setDirectives(directiveList);
-      vnfNodeTemplate.setProperties(new LinkedHashMap<>());
+      vnfNodeTemplate.setProperties(getVnfNodeTemplateProperties(vspModelInfo, componentId));
       DataModelUtil
           .addSubstitutionFilteringProperty(getSubstitutionServiceTemplateFileName(componentName
                   .get()), vnfNodeTemplate, 1);
@@ -186,10 +161,28 @@ public class ManualVspToscaGenerationService {
       String nodeTemplateId = componentName.get() + VNF_NODE_TEMPLATE_ID_SUFFIX;
       DataModelUtil.addNodeTemplate(mainServiceTemplate, nodeTemplateId,
           vnfNodeTemplate);
-      abstractSubstitutionIdTypes.put(componentName.get(), vnfNodeTemplateType);
+      abstractSubstitutionIdTypes.put(componentName.get(), ToscaNodeType
+          .MULTIDEPLOYMENTFLAVOR_NODE_TYPE);
     }
   }
 
+  private Map<String, Object> getVnfNodeTemplateProperties(VspModelInfo vspModelInfo,
+                                                           String componentId) {
+    Map<String, Object> properties = new LinkedHashMap<>();
+    if (MapUtils.isNotEmpty(vspModelInfo.getMultiFlavorVfcImages())) {
+      List<MultiFlavorVfcImage> componentImages =
+          vspModelInfo.getMultiFlavorVfcImages().get(componentId);
+      if (Objects.nonNull(componentImages)) {
+        Map<String, MultiFlavorVfcImage> vfcImages = new HashMap<>();
+        componentImages.stream()
+            .forEach(multiFlavorVfcImage ->
+                vfcImages.put(multiFlavorVfcImage.getSoftware_version(), multiFlavorVfcImage));
+        properties.put(IMAGES_PROPERTY, vfcImages);
+      }
+    }
+    return properties;
+  }
+
   private String getSubstitutionServiceTemplateFileName(String componentName) {
     return componentName + TOSCA_SERVICE_TEMPLATE_FILE_NAME_SUFFIX;
   }
@@ -276,7 +269,7 @@ public class ManualVspToscaGenerationService {
             nicNodeTemplate.setType(ToscaNodeType.NETWORK_PORT);
             DataModelUtil.addBindingReqFromPortToCompute(componentNodeTemplateId, nicNodeTemplate);
             DataModelUtil.addNodeTemplate(substitutionServiceTemplate,
-                getNicNodeTemplateId(nic.getName()), nicNodeTemplate);
+                getNicNodeTemplateId(nic.getName(), nic.getNetworkType()), nicNodeTemplate);
           }
         }
       }
@@ -288,9 +281,14 @@ public class ManualVspToscaGenerationService {
     return componentName;
   }
 
-  private String getNicNodeTemplateId(String nicName) {
+  private String getNicNodeTemplateId(String nicName, NetworkType nicNetworkType) {
     StringBuilder builder = new StringBuilder();
     builder.append(nicName);
+    if (nicNetworkType == NetworkType.External) {
+      builder.append(PORT_TYPE_EXTERNAL_NODE_TEMPLATE_SUFFIX);
+    } else if (nicNetworkType == NetworkType.Internal) {
+      builder.append(PORT_TYPE_INTERNAL_NODE_TEMPLATE_SUFFIX);
+    }
     builder.append(PORT_NODE_TEMPLATE_ID_SUFFIX);
     return builder.toString();
   }
@@ -337,7 +335,6 @@ public class ManualVspToscaGenerationService {
         createGlobalSubstitutionNodeType(substitutionServiceTemplate, componentName);
     DataModelUtil.addNodeType(globalSubstitutionServiceTemplate, substitutionNodeTypeId,
         substitutionNodeType);
-
     Map<String, Map<String, List<String>>> substitutionMapping =
         GeneratorUtils.getSubstitutionNodeTypeExposedConnectionPoints(substitutionNodeType,
             substitutionServiceTemplate, toscaServiceModel);
@@ -379,7 +376,7 @@ public class ManualVspToscaGenerationService {
                                                 String componentName) {
     NodeType substitutionNodeType = new ToscaAnalyzerServiceImpl()
         .createInitSubstitutionNodeType(substitutionServiceTemplate,
-            ToscaNodeType.VFC_ABSTRACT_SUBSTITUTE);
+            ToscaNodeType.MULTIFLAVOR_VFC_NODE_TYPE);
     substitutionNodeType.setProperties(
         getManualVspSubstitutionNodeTypeProperties(substitutionNodeType, componentName));
     return substitutionNodeType;
index c13997b..59b06ba 100644 (file)
@@ -163,8 +163,8 @@ public class GeneratorUtils {
     } catch (Exception ex) {
       MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_API,
           LoggerTragetServiceName.GENERATE_MANUAL_VSP_TOSCA, ErrorLevel.INFO.name(),
-          LoggerErrorCode.DATA_ERROR.getErrorCode(), "Error occured in get node type exposed "
-              + "points");
+          LoggerErrorCode.DATA_ERROR.getErrorCode(),
+          "Error occured in get node type exposed points : " + ex.getMessage());
       return null;
     }
     return substitutionMapping;
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/att-sdc-translator-impl/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-translator-lib/att-sdc-translator-impl/pom.xml.versionsBackup
deleted file mode 100644 (file)
index e44d37f..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>att-sdc-translator-impl</name>
-    <artifactId>att-sdc-translator-impl</artifactId>
-
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../..</relativePath>
-    </parent>
-
-    <dependencies>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>1.1.2</version>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>RELEASE</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-translator-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-heat-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-tosca-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-
-        <!-- need to be changed to sdk -->
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-translator-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <!--dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-translator-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency-->
-    </dependencies>
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <version>2.19.1</version>
-                <configuration>
-                    <useSystemClassLoader>false</useSystemClassLoader>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-api/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-api/pom.xml.versionsBackup
deleted file mode 100644 (file)
index d46dd3f..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-sdc-translator-api</name>
-    <artifactId>openecomp-sdc-translator-api</artifactId>
-
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../..</relativePath>
-    </parent>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-facade-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-validation-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-validation-core</artifactId>
-            <version>${project.version}</version>
-            <scope>runtime</scope>
-        </dependency>
-        <dependency>
-            <groupId>io.swagger</groupId>
-            <artifactId>swagger-annotations</artifactId>
-            <version>1.5.3</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-heat-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-tosca-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc.common</groupId>
-            <artifactId>openecomp-configuration-management-core</artifactId>
-            <version>1707.0.0-SNAPSHOT</version>
-            <scope>runtime</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.slf4j</groupId>
-                    <artifactId>slf4j-log4j12</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc.common</groupId>
-            <artifactId>openecomp-configuration-management-api</artifactId>
-            <version>1707.0.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/pom.xml.versionsBackup
deleted file mode 100644 (file)
index aea451e..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-sdc-translator-core</name>
-    <artifactId>openecomp-sdc-translator-core</artifactId>
-
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../..</relativePath>
-    </parent>
-
-    <dependencies>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>${logback.version}</version>
-
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>RELEASE</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-utilities-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-translator-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-datatypes-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-validation-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>att-sdc-validation-impl</artifactId>
-            <version>1.0-SNAPSHOT</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-heat-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <version>2.19.1</version>
-                <configuration>
-                    <useSystemClassLoader>false</useSystemClassLoader>
-                    <redirectTestOutputToFile>true</redirectTestOutputToFile>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-impl/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-impl/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 95c4530..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-sdc-translator-impl</name>
-    <artifactId>openecomp-sdc-translator-impl</artifactId>
-
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../..</relativePath>
-    </parent>
-
-    <dependencies>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>1.1.2</version>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>RELEASE</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-translator-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-heat-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-tosca-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-
-        <!-- need to be changed to sdk -->
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-translator-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <version>2.19.1</version>
-                <configuration>
-                    <useSystemClassLoader>false</useSystemClassLoader>
-                    <systemPropertyVariables>
-                        <config.location>${project.basedir}/configuration</config.location>
-                    </systemPropertyVariables>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-sdk/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-sdk/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 2cb266a..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-sdc-translator-sdk</name>
-    <artifactId>openecomp-sdc-translator-sdk</artifactId>
-
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../..</relativePath>
-    </parent>
-
-    <dependencies>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>1.1.2</version>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>RELEASE</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-translator-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-heat-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-tosca-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-translator-lib/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 9d7224a..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-sdc-translator-lib</name>
-    <artifactId>openecomp-sdc-translator-lib</artifactId>
-
-    <packaging>pom</packaging>
-    <parent>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <groupId>org.openecomp.sdc</groupId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <modules>
-        <module>openecomp-sdc-translator-api</module>
-        <module>openecomp-sdc-translator-sdk</module>
-        <module>openecomp-sdc-translator-core</module>
-        <module>openecomp-sdc-translator-impl</module>
-        <module>att-sdc-translator-impl</module>
-    </modules>
-
-    <dependencies>
-    </dependencies>
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/att-sdc-validation-impl/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-validation-lib/att-sdc-validation-impl/pom.xml.versionsBackup
deleted file mode 100644 (file)
index b53f415..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>att-sdc-validation-impl</name>
-    <artifactId>att-sdc-validation-impl</artifactId>
-
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../..</relativePath>
-    </parent>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-facade-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-datatypes-lib</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>${logback.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-logging-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-logging-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-validation-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-validation-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-validation-impl</artifactId>
-            <version>1.0-SNAPSHOT</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-heat-lib</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <version>6.9.10</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-validation-sdk</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <version>2.19.1</version>
-                <configuration>
-                    <useSystemClassLoader>false</useSystemClassLoader>
-                    <redirectTestOutputToFile>true</redirectTestOutputToFile>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-api/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-api/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 5850819..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-sdc-validation-api</name>
-    <artifactId>openecomp-sdc-validation-api</artifactId>
-
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../..</relativePath>
-    </parent>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-facade-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>io.swagger</groupId>
-            <artifactId>swagger-annotations</artifactId>
-            <version>1.5.3</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-datatypes-lib</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>${logback.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-logging-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-logging-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-core/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-core/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 8731097..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-sdc-validation-core</name>
-    <artifactId>openecomp-sdc-validation-core</artifactId>
-
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../..</relativePath>
-    </parent>
-
-    <dependencies>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>${logback.version}</version>
-
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-logging-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <scope>test</scope>
-            <version>6.8.5</version>
-            <exclusions>
-                <exclusion>
-                    <artifactId>snakeyaml</artifactId>
-                    <groupId>org.yaml</groupId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>RELEASE</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-utilities-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-validation-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-validation-sdk</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-datatypes-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-all</artifactId>
-            <scope>test</scope>
-            <version>1.10.19</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc.common</groupId>
-            <artifactId>openecomp-configuration-management-core</artifactId>
-            <version>1707.0.0-SNAPSHOT</version>
-            <scope>runtime</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.slf4j</groupId>
-                    <artifactId>slf4j-log4j12</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-heat-lib</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <version>6.9.10</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <version>2.19.1</version>
-                <configuration>
-                    <useSystemClassLoader>false</useSystemClassLoader>
-                    <redirectTestOutputToFile>true</redirectTestOutputToFile>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/pom.xml.versionsBackup
deleted file mode 100644 (file)
index e2927eb..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-sdc-validation-impl</name>
-    <artifactId>openecomp-sdc-validation-impl</artifactId>
-
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../..</relativePath>
-    </parent>
-
-    <dependencies>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>${logback.version}</version>
-
-        </dependency>
-
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <scope>test</scope>
-            <version>6.8.5</version>
-            <exclusions>
-                <exclusion>
-                    <artifactId>snakeyaml</artifactId>
-                    <groupId>org.yaml</groupId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-logging-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-logging-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>RELEASE</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-utilities-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-validation-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-common-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-all</artifactId>
-            <scope>test</scope>
-            <version>1.10.19</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-heat-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-logging-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <!--dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-validation-sdk</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency-->
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-            <version>2.5</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-validation-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-
-
-</project>
\ No newline at end of file
index a0c25d4..6016ba0 100644 (file)
@@ -230,9 +230,9 @@ public class NovaServerNamingConventionGuideLineValidator implements ResourceVal
     }
     if (network.contains("_net_id")) {
       return network.substring(0, network.indexOf("_net_id"));
-    } else if (network.contains("net_name")) {
+    } else if (network.contains("_net_name")) {
       return network.substring(0, network.indexOf("_net_name"));
-    } else if (network.contains("net_fqdn")) {
+    } else if (network.contains("_net_fqdn")) {
       return network.substring(0, network.indexOf("_net_fqdn"));
     }
     return null;
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-sdk/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-sdk/pom.xml.versionsBackup
deleted file mode 100644 (file)
index d179ae0..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>openecomp-sdc-validation-sdk</artifactId>
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-logging-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <version>6.9.10</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-validation-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-heat-lib</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-            <version>2.5</version>
-        </dependency>
-    </dependencies>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../..</relativePath>
-    </parent>
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-validation-lib/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 3188265..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-sdc-validation-lib</name>
-    <artifactId>openecomp-sdc-validation-lib</artifactId>
-
-    <packaging>pom</packaging>
-    <parent>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <groupId>org.openecomp.sdc</groupId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <modules>
-        <module>openecomp-sdc-validation-api</module>
-        <module>openecomp-sdc-validation-core</module>
-        <module>openecomp-sdc-validation-impl</module>
-        <module>openecomp-sdc-validation-sdk</module>
-        <module>att-sdc-validation-impl</module>
-    </modules>
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-vendor-license-lib/openecomp-sdc-vendor-license-api/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-vendor-license-lib/openecomp-sdc-vendor-license-api/pom.xml.versionsBackup
deleted file mode 100644 (file)
index fc22abc..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-sdc-vendor-license-api</name>
-    <artifactId>openecomp-sdc-vendor-license-api</artifactId>
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../..</relativePath>
-    </parent>
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-facade-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-versioning-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-nosqldb-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>javax.el</groupId>
-            <artifactId>javax.el-api</artifactId>
-            <version>${javax.el-api.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.glassfish.web</groupId>
-            <artifactId>javax.el</artifactId>
-            <version>2.2.4</version>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-annotations</artifactId>
-            <version>2.7.4</version>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.dataformat</groupId>
-            <artifactId>jackson-dataformat-xml</artifactId>
-            <version>2.7.4</version>
-        </dependency>
-        <dependency>
-            <groupId>org.codehaus.woodstox</groupId>
-            <artifactId>woodstox-core-asl</artifactId>
-            <version>4.4.1</version>
-        </dependency>
-    </dependencies>
-</project>
\ No newline at end of file
index ce22593..dce2939 100644 (file)
@@ -26,12 +26,10 @@ import com.datastax.driver.mapping.annotations.Enumerated;
 import com.datastax.driver.mapping.annotations.Frozen;
 import com.datastax.driver.mapping.annotations.PartitionKey;
 import com.datastax.driver.mapping.annotations.Table;
-import org.openecomp.sdc.vendorlicense.dao.types.xml.AggregationFunctionForXml;
-import org.openecomp.sdc.vendorlicense.dao.types.xml.EntitlementMetricForXml;
-import org.openecomp.sdc.vendorlicense.dao.types.xml.EntitlementTimeForXml;
-import org.openecomp.sdc.vendorlicense.dao.types.xml.ThresholdForXml;
-import org.openecomp.sdc.vendorlicense.dao.types.xml.LimitXml;
 import org.openecomp.sdc.vendorlicense.dao.types.xml.LimitForXml;
+import org.openecomp.sdc.vendorlicense.dao.types.xml.LimitXml;
+import org.openecomp.sdc.vendorlicense.dao.types.xml.OperationalScopeForXml;
+import org.openecomp.sdc.vendorlicense.dao.types.xml.ThresholdForXml;
 import org.openecomp.sdc.versioning.dao.types.Version;
 import org.openecomp.sdc.versioning.dao.types.VersionableEntity;
 
@@ -65,25 +63,12 @@ public class EntitlementPoolEntity implements VersionableEntity {
   @Enumerated
   private ThresholdUnit thresholdUnit;
 
-  @Column(name = "entitlement_metric")
-  @Frozen
-  private ChoiceOrOther<EntitlementMetric> entitlementMetric;
   private String increments;
 
-  @Column(name = "aggregation_func")
-  @Frozen
-  private ChoiceOrOther<AggregationFunction> aggregationFunction;
-
   @Column(name = "operational_scope")
   @Frozen
   private MultiChoiceOrOther<OperationalScope> operationalScope;
 
-  @Frozen
-  private ChoiceOrOther<EntitlementTime> time;
-
-  @Column(name = "manufacturer_ref_num")
-  private String manufacturerReferenceNumber;
-
   @Column(name = "ref_fg_ids")
   private Set<String> referencingFeatureGroups = new HashSet<>();
 
@@ -96,6 +81,9 @@ public class EntitlementPoolEntity implements VersionableEntity {
 
   private Collection<LimitEntity> limits;
 
+  //Defined and used only for License Artifcat XMLs
+  private String manufacturerReferenceNumber;
+
   public EntitlementPoolEntity() {
   }
 
@@ -200,15 +188,6 @@ public class EntitlementPoolEntity implements VersionableEntity {
     this.thresholdUnit = thresholdUnits;
   }
 
-  public ChoiceOrOther<EntitlementMetric> getEntitlementMetric() {
-    return entitlementMetric;
-  }
-
-  public void setEntitlementMetric(ChoiceOrOther<EntitlementMetric> entitlementMetric) {
-    entitlementMetric.resolveEnum(EntitlementMetric.class);
-    this.entitlementMetric = entitlementMetric;
-  }
-
   public String getIncrements() {
     return increments;
   }
@@ -217,15 +196,6 @@ public class EntitlementPoolEntity implements VersionableEntity {
     this.increments = increments;
   }
 
-  public ChoiceOrOther<AggregationFunction> getAggregationFunction() {
-    return aggregationFunction;
-  }
-
-  public void setAggregationFunction(ChoiceOrOther<AggregationFunction> aggregationFunction) {
-    aggregationFunction.resolveEnum(AggregationFunction.class);
-    this.aggregationFunction = aggregationFunction;
-  }
-
   public MultiChoiceOrOther<OperationalScope> getOperationalScope() {
     return operationalScope;
   }
@@ -237,23 +207,6 @@ public class EntitlementPoolEntity implements VersionableEntity {
     this.operationalScope = operationalScope;
   }
 
-  public ChoiceOrOther<EntitlementTime> getTime() {
-    return time;
-  }
-
-  public void setTime(ChoiceOrOther<EntitlementTime> time) {
-    time.resolveEnum(EntitlementTime.class);
-    this.time = time;
-  }
-
-  public String getManufacturerReferenceNumber() {
-    return manufacturerReferenceNumber;
-  }
-
-  public void setManufacturerReferenceNumber(String manufacturerReferenceNumber) {
-    this.manufacturerReferenceNumber = manufacturerReferenceNumber;
-  }
-
   /**
    * Gets threshold for artifact.
    *
@@ -274,35 +227,6 @@ public class EntitlementPoolEntity implements VersionableEntity {
     return version.toString();
   }
 
-  /**
-   * Gets entitlement metric for artifact.
-   *
-   * @return the entitlement metric for artifact
-   */
-  public EntitlementMetricForXml getEntitlementMetricForArtifact() {
-    EntitlementMetricForXml metric = new EntitlementMetricForXml();
-    if (entitlementMetric != null) {
-      metric.setValue(entitlementMetric.getResult());
-    } else {
-      metric.setValue(null);
-    }
-    return metric;
-  }
-
-  /**
-   * Gets time for artifact.
-   *
-   * @return the time for artifact
-   */
-  public EntitlementTimeForXml getTimeForArtifact() {
-    EntitlementTimeForXml timeForXml = new EntitlementTimeForXml();
-    if (time != null) {
-      timeForXml.setValue(time.getResult());
-    }
-
-    return timeForXml;
-  }
-
   public String getStartDate() {
     return startDate;
   }
@@ -334,7 +258,7 @@ public class EntitlementPoolEntity implements VersionableEntity {
         if(obj.getType().equals(LimitType.ServiceProvider)){
           LimitXml xmlObj = new LimitXml();
           xmlObj.setDescription(obj.getDescription());
-          xmlObj.setMetric(obj.getMetric().toString());
+          xmlObj.setMetric(obj.getMetric()!=null?obj.getMetric().name():null);
           xmlObj.setValues(obj.getValue()!=null?Integer.toString(obj.getValue()):null);
           xmlObj.setUnit(obj.getUnit()!=null?Integer.toString(obj.getUnit()):null);
           xmlObj.setAggregationFunction(obj.getAggregationFunction()!=null?obj.getAggregationFunction().name():null);
@@ -357,7 +281,7 @@ public class EntitlementPoolEntity implements VersionableEntity {
         if(obj.getType().equals(LimitType.Vendor)){
           LimitXml xmlObj = new LimitXml();
           xmlObj.setDescription(obj.getDescription());
-          xmlObj.setMetric(obj.getMetric().toString());
+          xmlObj.setMetric(obj.getMetric()!=null?obj.getMetric().name():null);
           xmlObj.setValues(obj.getValue()!=null?Integer.toString(obj.getValue()):null);
           xmlObj.setUnit(obj.getUnit()!=null?Integer.toString(obj.getUnit()):null);
           xmlObj.setAggregationFunction(obj.getAggregationFunction()!=null?obj.getAggregationFunction().name():null);
@@ -378,8 +302,7 @@ public class EntitlementPoolEntity implements VersionableEntity {
   public int hashCode() {
     return Objects
         .hash(vendorLicenseModelId, version, id, name, description, thresholdValue, thresholdUnit,
-            entitlementMetric, increments, aggregationFunction, operationalScope, time,
-            manufacturerReferenceNumber, referencingFeatureGroups, startDate, expiryDate);
+            increments, operationalScope, referencingFeatureGroups, startDate, expiryDate);
   }
 
   @Override
@@ -397,12 +320,8 @@ public class EntitlementPoolEntity implements VersionableEntity {
         && Objects.equals(name, that.name)
         && Objects.equals(description, that.description)
         && Objects.equals(thresholdUnit, that.thresholdUnit)
-        && Objects.equals(entitlementMetric, that.entitlementMetric)
         && Objects.equals(increments, that.increments)
-        && Objects.equals(aggregationFunction, that.aggregationFunction)
         && Objects.equals(operationalScope, that.operationalScope)
-        && Objects.equals(time, that.time)
-        && Objects.equals(manufacturerReferenceNumber, that.manufacturerReferenceNumber)
         && Objects.equals(referencingFeatureGroups, that.referencingFeatureGroups)
         && Objects.equals(startDate, that.startDate)
         && Objects.equals(expiryDate, that.expiryDate);
@@ -418,12 +337,8 @@ public class EntitlementPoolEntity implements VersionableEntity {
         + ", description='" + description + '\''
         + ", thresholdValue=" + thresholdValue
         + ", thresholdUnit='" + thresholdUnit + '\''
-        + ", entitlementMetric=" + entitlementMetric
         + ", increments='" + increments + '\''
-        + ", aggregationFunction=" + aggregationFunction
         + ", operationalScope=" + operationalScope
-        + ", time=" + time
-        + ", manufacturerReferenceNumber='" + manufacturerReferenceNumber + '\''
         + ", referencingFeatureGroups=" + referencingFeatureGroups
         + ", version_uuid=" + versionUuId
         + ", startDate=" + startDate
@@ -431,31 +346,27 @@ public class EntitlementPoolEntity implements VersionableEntity {
         + '}';
   }
 
-  /**
-   * Gets aggregation function for artifact.
-   *
-   * @return the aggregation function for artifact
-   */
-  public AggregationFunctionForXml getAggregationFunctionForArtifact() {
-    AggregationFunctionForXml aggregationFunctionForXml = new AggregationFunctionForXml();
-    if (entitlementMetric != null) {
-      aggregationFunctionForXml.setValue(aggregationFunction.getResult());
-    } else {
-      aggregationFunctionForXml.setValue(null);
-    }
-    return aggregationFunctionForXml;
-  }
-
   /**
    * Gets operational scope for artifact.
    *
    * @return the operational scope for artifact
    */
-  public Set<String> getOperationalScopeForArtifact() {
+  public OperationalScopeForXml getOperationalScopeForArtifact() {
+    OperationalScopeForXml obj = new OperationalScopeForXml();
     if (operationalScope != null) {
-      return operationalScope.getResults();
-    } else {
-      return null;
+      if(operationalScope.getResults().size() > 0) {
+        obj.setValue(operationalScope.getResults());
+      }
     }
+    return obj;
+  }
+
+  //Defined and used only for License Artifcat XMLs
+  public void setManufacturerReferenceNumber(String manufacturerReferenceNumber) {
+    this.manufacturerReferenceNumber = manufacturerReferenceNumber;
+  }
+
+  public String getManufacturerReferenceNumber() {
+    return manufacturerReferenceNumber;
   }
 }
index 654093d..d5efd59 100644 (file)
@@ -29,6 +29,8 @@ import com.datastax.driver.mapping.annotations.Table;
 import org.openecomp.sdc.vendorlicense.dao.types.xml.LicenseKeyTypeForXml;
 import org.openecomp.sdc.vendorlicense.dao.types.xml.LimitXml;
 import org.openecomp.sdc.vendorlicense.dao.types.xml.LimitForXml;
+import org.openecomp.sdc.vendorlicense.dao.types.xml.OperationalScopeForXml;
+import org.openecomp.sdc.vendorlicense.dao.types.xml.ThresholdForXml;
 import org.openecomp.sdc.versioning.dao.types.Version;
 import org.openecomp.sdc.versioning.dao.types.VersionableEntity;
 
@@ -61,8 +63,17 @@ public class LicenseKeyGroupEntity implements VersionableEntity {
   private Set<String> referencingFeatureGroups = new HashSet<>();
   @Column(name = "version_uuid")
   private String versionUuId;
+  private Integer thresholdValue;
+  private ThresholdUnit thresholdUnits;
+  private String increments;
 
   private Collection<LimitEntity> limits;
+  private String startDate;
+  private String expiryDate;
+
+  //Defined and used only for License Artifcat XMLs
+  private String manufacturerReferenceNumber;
+
 
   public LicenseKeyGroupEntity() {
   }
@@ -167,6 +178,37 @@ public class LicenseKeyGroupEntity implements VersionableEntity {
     this.referencingFeatureGroups = referencingFeatureGroups;
   }
 
+  public Integer getThresholdValue() {
+    return thresholdValue;
+  }
+
+  public void setThresholdValue(Integer thresholdValue) {
+    this.thresholdValue = thresholdValue;
+  }
+
+  public ThresholdUnit getThresholdUnits() {
+    return thresholdUnits;
+  }
+
+  public void setThresholdUnits(ThresholdUnit thresholdUnit) {
+    this.thresholdUnits = thresholdUnit;
+  }
+
+  public String getIncrements() {
+    return increments;
+  }
+
+  public void setIncrements(String increments) {
+    this.increments = increments;
+  }
+
+  public ThresholdForXml getThresholdForArtifact() {
+    ThresholdForXml threshold = new ThresholdForXml();
+    threshold.setUnit(getThresholdUnits() == null ? null : getThresholdUnits().name());
+    threshold.setValue(getThresholdValue());
+    return threshold;
+  }
+
   public Collection<LimitEntity> getLimits() {
     return limits;
   }
@@ -221,11 +263,28 @@ public class LicenseKeyGroupEntity implements VersionableEntity {
     return null;
   }
 
+  public String getStartDate() {
+    return startDate;
+  }
+
+  public void setStartDate(String startDate) {
+    this.startDate = startDate;
+  }
+
+  public String getExpiryDate() {
+    return expiryDate;
+  }
+
+  public void setExpiryDate(String expiryDate) {
+    this.expiryDate = expiryDate;
+  }
+
   @Override
   public int hashCode() {
     return Objects
         .hash(vendorLicenseModelId, version, id, name, description, type, operationalScope,
-            referencingFeatureGroups);
+            referencingFeatureGroups, startDate, expiryDate,
+            thresholdValue, thresholdUnits, increments);
   }
 
   @Override
@@ -243,7 +302,12 @@ public class LicenseKeyGroupEntity implements VersionableEntity {
         && Objects.equals(description, that.description)
         && type == that.type
         && Objects.equals(operationalScope, that.operationalScope)
-        && Objects.equals(referencingFeatureGroups, that.referencingFeatureGroups);
+        && Objects.equals(referencingFeatureGroups, that.referencingFeatureGroups)
+        && Objects.equals(startDate, that.startDate)
+        && Objects.equals(expiryDate, that.expiryDate)
+        && Objects.equals(thresholdValue, that.thresholdValue)
+        && Objects.equals(thresholdUnits, that.thresholdUnits)
+        && Objects.equals(increments, that.increments);
   }
 
   @Override
@@ -257,6 +321,11 @@ public class LicenseKeyGroupEntity implements VersionableEntity {
         + ", operationalScope=" + operationalScope
         + ", referencingFeatureGroups=" + referencingFeatureGroups
         + ", versionUuId='" + versionUuId + '\''
+        + ", startDate=" + startDate
+        + ", expiryDate=" + expiryDate
+        + ", thresholdValue='" + thresholdValue + '\''
+        + ", thresholdUnits='" + thresholdUnits + '\''
+        + ", increments='" + increments + '\''
         + '}';
   }
 
@@ -265,12 +334,14 @@ public class LicenseKeyGroupEntity implements VersionableEntity {
    *
    * @return the operational scope for artifact
    */
-  public Set<String> getOperationalScopeForArtifact() {
+  public OperationalScopeForXml getOperationalScopeForArtifact() {
+    OperationalScopeForXml obj = new OperationalScopeForXml();
     if (operationalScope != null) {
-      return operationalScope.getResults();
-    } else {
-      return null;
+      if(operationalScope.getResults().size() > 0) {
+        obj.setValue(operationalScope.getResults());
+      }
     }
+    return obj;
   }
 
   /**
@@ -295,4 +366,13 @@ public class LicenseKeyGroupEntity implements VersionableEntity {
     }
     return typeXml;
   }
+
+  //Defined and used only for License Artifcat XMLs
+  public String getManufacturerReferenceNumber() {
+    return manufacturerReferenceNumber;
+  }
+
+  public void setManufacturerReferenceNumber(String manufacturerReferenceNumber) {
+    this.manufacturerReferenceNumber = manufacturerReferenceNumber;
+  }
 }
diff --git a/openecomp-be/lib/openecomp-sdc-vendor-license-lib/openecomp-sdc-vendor-license-api/src/main/java/org/openecomp/sdc/vendorlicense/dao/types/xml/OperationalScopeForXml.java b/openecomp-be/lib/openecomp-sdc-vendor-license-lib/openecomp-sdc-vendor-license-api/src/main/java/org/openecomp/sdc/vendorlicense/dao/types/xml/OperationalScopeForXml.java
new file mode 100644 (file)
index 0000000..f51a412
--- /dev/null
@@ -0,0 +1,38 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. 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.vendorlicense.dao.types.xml;
+
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
+
+import java.util.Set;
+
+public class OperationalScopeForXml {
+  Set<String> value;
+
+  @JacksonXmlElementWrapper(localName = "value", useWrapping = false)
+  public Set<String> getValue() {
+    return value;
+  }
+
+  public void setValue(Set<String> value) {
+    this.value = value;
+  }
+}
index 9ab7c0c..3d27de3 100644 (file)
@@ -76,6 +76,9 @@ public interface VendorLicenseFacade {
   LicenseAgreementEntity createLicenseAgreement(LicenseAgreementEntity licenseAgreement,
                                                 String user);
 
+  Collection<FeatureGroupEntity> listFeatureGroups(String vlmId, Version version,
+                                                         String user);
+
   FeatureGroupEntity createFeatureGroup(FeatureGroupEntity featureGroup, String user);
 
 
diff --git a/openecomp-be/lib/openecomp-sdc-vendor-license-lib/openecomp-sdc-vendor-license-core/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-vendor-license-lib/openecomp-sdc-vendor-license-core/pom.xml.versionsBackup
deleted file mode 100644 (file)
index b1141fc..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-sdc-vendor-license-core</name>
-    <artifactId>openecomp-sdc-vendor-license-core</artifactId>
-
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../..</relativePath>
-    </parent>
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-vendor-license-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-all</artifactId>
-            <scope>test</scope>
-            <version>1.10.19</version>
-        </dependency>
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <scope>test</scope>
-            <version>6.8.5</version>
-            <exclusions>
-                <exclusion>
-                    <artifactId>snakeyaml</artifactId>
-                    <groupId>org.yaml</groupId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-            <version>4.11</version>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.dataformat</groupId>
-            <artifactId>jackson-dataformat-xml</artifactId>
-            <version>2.7.4</version>
-        </dependency>
-    </dependencies>
-
-</project>
\ No newline at end of file
index 4cccb67..b880c67 100644 (file)
@@ -11,11 +11,7 @@ import com.amdocs.zusammen.datatypes.item.Info;
 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
 import org.openecomp.core.zusammen.api.ZusammenUtil;
 import org.openecomp.sdc.vendorlicense.dao.EntitlementPoolDao;
-import org.openecomp.sdc.vendorlicense.dao.types.AggregationFunction;
-import org.openecomp.sdc.vendorlicense.dao.types.ChoiceOrOther;
-import org.openecomp.sdc.vendorlicense.dao.types.EntitlementMetric;
 import org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity;
-import org.openecomp.sdc.vendorlicense.dao.types.EntitlementTime;
 import org.openecomp.sdc.vendorlicense.dao.types.MultiChoiceOrOther;
 import org.openecomp.sdc.vendorlicense.dao.types.OperationalScope;
 import org.openecomp.sdc.vendorlicense.dao.types.ThresholdUnit;
@@ -214,15 +210,11 @@ public class EntitlementPoolZusammenDaoImpl implements EntitlementPoolDao {
     Info info = new Info();
     info.setName(entitlementPool.getName());
     info.setDescription(entitlementPool.getDescription());
+    info.addProperty("version_uuid", entitlementPool.getVersionUuId());
     info.addProperty("thresholdValue", entitlementPool.getThresholdValue());
     info.addProperty("threshold_unit", entitlementPool.getThresholdUnit());
-    info.addProperty("entitlement_metric", entitlementPool.getEntitlementMetric());
     info.addProperty("increments", entitlementPool.getIncrements());
-    info.addProperty("aggregation_func", entitlementPool.getAggregationFunction());
     info.addProperty("operational_scope", entitlementPool.getOperationalScope());
-    info.addProperty("EntitlementTime", entitlementPool.getTime());
-    info.addProperty("manufacturerReferenceNumber",
-        entitlementPool.getManufacturerReferenceNumber());
     info.addProperty("startDate", entitlementPool.getStartDate());
     info.addProperty("expiryDate", entitlementPool.getExpiryDate());
     entitlementPoolElement.setInfo(info);
@@ -243,6 +235,7 @@ public class EntitlementPoolZusammenDaoImpl implements EntitlementPoolDao {
         new EntitlementPoolEntity(vlmId, version, elementInfo.getId().getValue());
     entitlmentPool.setName(elementInfo.getInfo().getName());
     entitlmentPool.setDescription(elementInfo.getInfo().getDescription());
+    entitlmentPool.setVersionUuId(elementInfo.getInfo().getProperty("version_uuid"));
     entitlmentPool
         .setThresholdValue(elementInfo.getInfo().getProperty("thresholdValue") != null
                 ? VlmZusammenUtil.toInteger(elementInfo.getInfo().getProperty("thresholdValue")) : null);
@@ -250,17 +243,9 @@ public class EntitlementPoolZusammenDaoImpl implements EntitlementPoolDao {
     Object threshold_unit = elementInfo.getInfo().getProperty("threshold_unit");
     entitlmentPool.setThresholdUnit( threshold_unit != null ?
         ThresholdUnit.valueOf(elementInfo.getInfo().getProperty("threshold_unit")) : null);
-    entitlmentPool.setEntitlementMetric(
-        getEntitlementMetricCoiceOrOther(elementInfo.getInfo().getProperty("entitlement_metric")));
     entitlmentPool.setIncrements(elementInfo.getInfo().getProperty("increments"));
-    entitlmentPool.setAggregationFunction(
-        getAggregationFuncCoiceOrOther(elementInfo.getInfo().getProperty("aggregation_func")));
     entitlmentPool.setOperationalScope(getOperationalScopeMultiChoiceOrOther(
         elementInfo.getInfo().getProperty("operational_scope")));
-    entitlmentPool.setTime(
-        getEntitlementTimeCoiceOrOther(elementInfo.getInfo().getProperty("EntitlementTime")));
-    entitlmentPool.setManufacturerReferenceNumber(
-        elementInfo.getInfo().getProperty("manufacturerReferenceNumber"));
     entitlmentPool.setStartDate(elementInfo.getInfo().getProperty("startDate"));
     entitlmentPool.setExpiryDate(elementInfo.getInfo().getProperty("expiryDate"));
 
@@ -272,23 +257,6 @@ public class EntitlementPoolZusammenDaoImpl implements EntitlementPoolDao {
     return entitlmentPool;
   }
 
-  private ChoiceOrOther<AggregationFunction> getAggregationFuncCoiceOrOther(
-      Map aggregationFunction) {
-    return new ChoiceOrOther<>
-        (AggregationFunction.valueOf((String) aggregationFunction.get("choice")),
-            (String) aggregationFunction.get("other"));
-  }
-
-  private ChoiceOrOther<EntitlementMetric> getEntitlementMetricCoiceOrOther(Map entitlementMetric) {
-    return new ChoiceOrOther<>(EntitlementMetric.valueOf((String) entitlementMetric.get("choice")
-    ), (String) entitlementMetric.get("other"));
-  }
-
-  private ChoiceOrOther<EntitlementTime> getEntitlementTimeCoiceOrOther(Map entitlementTime) {
-    return new ChoiceOrOther<>(EntitlementTime.valueOf((String) entitlementTime.get("choice")),
-        (String) entitlementTime.get("other"));
-  }
-
   private MultiChoiceOrOther<OperationalScope> getOperationalScopeMultiChoiceOrOther
       (Map<String, Object>
            operationalScope) {
index 95dfd79..976db94 100644 (file)
@@ -15,6 +15,7 @@ import org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyGroupEntity;
 import org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyType;
 import org.openecomp.sdc.vendorlicense.dao.types.MultiChoiceOrOther;
 import org.openecomp.sdc.vendorlicense.dao.types.OperationalScope;
+import org.openecomp.sdc.vendorlicense.dao.types.ThresholdUnit;
 import org.openecomp.sdc.versioning.dao.types.Version;
 
 import java.util.ArrayList;
@@ -212,8 +213,15 @@ public class LicenseKeyGroupZusammenDaoImpl implements LicenseKeyGroupDao {
     Info info = new Info();
     info.setName(licenseKeyGroup.getName());
     info.setDescription(licenseKeyGroup.getDescription());
+    info.addProperty("version_uuid", licenseKeyGroup.getVersionUuId());
     info.addProperty("LicenseKeyType", licenseKeyGroup.getType());
+    info.addProperty("version_uuid", licenseKeyGroup.getVersionUuId());
     info.addProperty("operational_scope", licenseKeyGroup.getOperationalScope());
+    info.addProperty("startDate", licenseKeyGroup.getStartDate());
+    info.addProperty("expiryDate", licenseKeyGroup.getExpiryDate());
+    info.addProperty("thresholdValue", licenseKeyGroup.getThresholdValue());
+    info.addProperty("thresholdUnits", licenseKeyGroup.getThresholdUnits());
+    info.addProperty("increments", licenseKeyGroup.getIncrements());
     lkgElement.setInfo(info);
 
    if (licenseKeyGroup.getReferencingFeatureGroups() != null
@@ -233,11 +241,23 @@ public class LicenseKeyGroupZusammenDaoImpl implements LicenseKeyGroupDao {
         new LicenseKeyGroupEntity(vlmId, version, elementInfo.getId().getValue());
     licenseKeyGroup.setName(elementInfo.getInfo().getName());
     licenseKeyGroup.setDescription(elementInfo.getInfo().getDescription());
-
+    licenseKeyGroup.setVersionUuId(elementInfo.getInfo().getProperty("version_uuid"));
     licenseKeyGroup
         .setType(LicenseKeyType.valueOf(elementInfo.getInfo().getProperty("LicenseKeyType")));
+    licenseKeyGroup.setVersionUuId(elementInfo.getInfo().getProperty("version_uuid"));
     licenseKeyGroup.setOperationalScope(getOperationalScopeMultiChoiceOrOther(
         elementInfo.getInfo().getProperty("operational_scope")));
+    licenseKeyGroup.setStartDate(elementInfo.getInfo().getProperty("startDate"));
+    licenseKeyGroup.setExpiryDate(elementInfo.getInfo().getProperty("expiryDate"));
+    if (elementInfo.getInfo().getProperty("thresholdUnits") != null ){
+      licenseKeyGroup.setThresholdUnits(ThresholdUnit.valueOf(elementInfo
+          .getInfo().getProperty("thresholdUnits")));
+    }
+    if (elementInfo.getInfo().getProperty("thresholdValue") != null ){
+      licenseKeyGroup.setThresholdValue(toInteger(elementInfo.getInfo().getProperty
+          ("thresholdValue")));
+    }
+    licenseKeyGroup.setIncrements(elementInfo.getInfo().getProperty("increments"));
 
     if (elementInfo.getRelations() != null && elementInfo.getRelations().size() > 0) {
       licenseKeyGroup
@@ -259,4 +279,15 @@ public class LicenseKeyGroupZusammenDaoImpl implements LicenseKeyGroupDao {
   }
   return null;
   }
+
+  private Integer toInteger(Object val) {
+    if (val instanceof Double) {
+      return ((Double) val).intValue();
+    } else if (val instanceof String) {
+      return new Integer((String) val);
+    } else if (val instanceof Integer) {
+      return (Integer) val;
+    }
+    throw new RuntimeException("invalid value for integer:" + val.getClass());
+  }
 }
index 857ee7f..5f9dd10 100644 (file)
@@ -25,6 +25,7 @@ import static org.openecomp.sdc.vendorlicense.errors.UncompletedVendorLicenseMod
 import static org.openecomp.sdc.vendorlicense.errors.UncompletedVendorLicenseModelErrorType.SUBMIT_UNCOMPLETED_VLM_MSG_LA_MISSING_FG;
 import static org.openecomp.sdc.vendorlicense.errors.UncompletedVendorLicenseModelErrorType.SUBMIT_UNCOMPLETED_VLM_MSG_MISSING_LA;
 
+import org.apache.commons.collections4.CollectionUtils;
 import org.openecomp.core.util.UniqueValueUtil;
 import org.openecomp.core.utilities.CommonMethods;
 import org.openecomp.sdc.common.errors.CoreException;
@@ -70,10 +71,7 @@ import org.openecomp.sdc.versioning.errors.VersionableSubEntityNotFoundErrorBuil
 import org.openecomp.sdc.versioning.types.VersionInfo;
 import org.openecomp.sdc.versioning.types.VersionableEntityAction;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
+import java.util.*;
 
 public class VendorLicenseFacadeImpl implements VendorLicenseFacade {
 
@@ -128,8 +126,6 @@ public class VendorLicenseFacadeImpl implements VendorLicenseFacade {
         getVersionInfo(featureGroup.getVendorLicenseModelId(), VersionableEntityAction.Read,
             user), user);
     featureGroup.setVersion(version);
-
-
     return getFeatureGroup(featureGroup);
   }
 
@@ -137,19 +133,9 @@ public class VendorLicenseFacadeImpl implements VendorLicenseFacade {
     FeatureGroupEntity retrieved = featureGroupDao.get(featureGroup);
     VersioningUtil
         .validateEntityExistence(retrieved, featureGroup, VendorLicenseModelEntity.ENTITY_TYPE);
-    if(retrieved.getManufacturerReferenceNumber() == null){
-      Object[] entitlementPoolIdsList = retrieved.getEntitlementPoolIds().toArray();
-      if(entitlementPoolIdsList != null && entitlementPoolIdsList.length > 0){
-        String entitlementPoolId = entitlementPoolIdsList[0].toString();
-        EntitlementPoolEntity entitlementPoolEntity = new EntitlementPoolEntity(retrieved.getVendorLicenseModelId(),
-                retrieved.getVersion(), entitlementPoolId);
-        entitlementPoolEntity = entitlementPoolDao.get(entitlementPoolEntity);
-        retrieved.setManufacturerReferenceNumber(entitlementPoolDao.getManufacturerReferenceNumber(
-                entitlementPoolEntity));
-        featureGroupDao.update(retrieved);
-      }
+    if (retrieved.getManufacturerReferenceNumber() == null) {
+      updateManufacturerNumberInFeatureGroup(retrieved);
     }
-
     return retrieved;
   }
 
@@ -399,6 +385,20 @@ public class VendorLicenseFacadeImpl implements VendorLicenseFacade {
     return featureGroup;
   }
 
+  @Override
+  public Collection<FeatureGroupEntity> listFeatureGroups(String vlmId, Version version,
+                                                                String user) {
+    Collection<FeatureGroupEntity> featureGroupEntities =
+        featureGroupDao.list(new FeatureGroupEntity(vlmId, VersioningUtil
+            .resolveVersion(version, getVersionInfo(vlmId, VersionableEntityAction.Read, user),
+                user), null));
+    featureGroupEntities.stream()
+        .filter(fgEntity -> Objects.isNull(fgEntity.getManufacturerReferenceNumber()))
+        .forEach(fgEntity -> updateManufacturerNumberInFeatureGroup(fgEntity));
+    return featureGroupEntities;
+  }
+
+
   @Override
   public Collection<ErrorCode> validateLicensingData(String vlmId, Version version,
                                                      String licenseAgreementId,
@@ -503,41 +503,49 @@ public class VendorLicenseFacadeImpl implements VendorLicenseFacade {
     return retrieved;
   }
 
-  private void validateCompletedVendorLicenseModel(String vendorLicenseModelId, String user) {
-    Version version = VersioningUtil.resolveVersion(null,
-        getVersionInfo(vendorLicenseModelId, VersionableEntityAction.Read, user), user);
-    Collection<LicenseAgreementEntity> licenseAgreements = licenseAgreementDao
-        .list(new LicenseAgreementEntity(vendorLicenseModelId, version, null));
-
-    if (licenseAgreements == null || licenseAgreements.isEmpty()) {
-      MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
-          LoggerTragetServiceName.SUBMIT_ENTITY, ErrorLevel.ERROR.name(),
-          LoggerErrorCode.DATA_ERROR.getErrorCode(), LoggerErrorDescription.SUBMIT_ENTITY);
-      throw new CoreException(
-              new SubmitUncompletedLicenseModelErrorBuilder(SUBMIT_UNCOMPLETED_VLM_MSG_MISSING_LA).build());
-    }
-
-    for (LicenseAgreementEntity licenseAgreement : licenseAgreements) {
-        if (licenseAgreement.getFeatureGroupIds() == null || licenseAgreement.getFeatureGroupIds().isEmpty()) {
-        MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
-            LoggerTragetServiceName.SUBMIT_ENTITY, ErrorLevel.ERROR.name(),
-            LoggerErrorCode.DATA_ERROR.getErrorCode(), LoggerErrorDescription.SUBMIT_ENTITY);
-        throw new CoreException(
-                new SubmitUncompletedLicenseModelErrorBuilder(SUBMIT_UNCOMPLETED_VLM_MSG_LA_MISSING_FG).build());
+  private void updateManufacturerNumberInFeatureGroup(FeatureGroupEntity featureGroupEntity) {
+    if (CollectionUtils.isNotEmpty(featureGroupEntity.getEntitlementPoolIds())) {
+      Object[] entitlementPoolIdsList = featureGroupEntity.getEntitlementPoolIds().toArray();
+      if (entitlementPoolIdsList != null && entitlementPoolIdsList.length > 0) {
+        String entitlementPoolId = entitlementPoolIdsList[0].toString();
+        EntitlementPoolEntity entitlementPoolEntity =
+            new EntitlementPoolEntity(featureGroupEntity.getVendorLicenseModelId(),
+                featureGroupEntity.getVersion(), entitlementPoolId);
+        entitlementPoolEntity = entitlementPoolDao.get(entitlementPoolEntity);
+        featureGroupEntity.setManufacturerReferenceNumber(
+            entitlementPoolDao.getManufacturerReferenceNumber(entitlementPoolEntity));
+        featureGroupDao.update(featureGroupEntity);
       }
     }
-
-    Collection<FeatureGroupEntity> featureGroupEntities =
-        featureGroupDao.list(new FeatureGroupEntity(vendorLicenseModelId, version, null));
-    for (FeatureGroupEntity featureGroupEntity : featureGroupEntities) {
-        if (featureGroupEntity.getEntitlementPoolIds() == null || featureGroupEntity.getEntitlementPoolIds().isEmpty()) {
-        MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
-            LoggerTragetServiceName.SUBMIT_ENTITY, ErrorLevel.ERROR.name(),
-            LoggerErrorCode.DATA_ERROR.getErrorCode(), LoggerErrorDescription.SUBMIT_ENTITY);
-        throw new CoreException(
-                new SubmitUncompletedLicenseModelErrorBuilder(SUBMIT_UNCOMPLETED_VLM_MSG_FG_MISSING_EP).build());
+  }
+  private void validateCompletedVendorLicenseModel(String vendorLicenseModelId, String user) {
+      Version version = VersioningUtil.resolveVersion(null,
+              getVersionInfo(vendorLicenseModelId, VersionableEntityAction.Read, user), user);
+      Collection<LicenseAgreementEntity> licenseAgreements = licenseAgreementDao
+              .list(new LicenseAgreementEntity(vendorLicenseModelId, version, null));
+
+      if (CollectionUtils.isNotEmpty(licenseAgreements)) {
+          licenseAgreements.forEach(licenseAgreement -> {
+              if (CollectionUtils.isEmpty(licenseAgreement.getFeatureGroupIds())) {
+                  MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
+                          LoggerTragetServiceName.SUBMIT_ENTITY, ErrorLevel.ERROR.name(),
+                          LoggerErrorCode.DATA_ERROR.getErrorCode(), LoggerErrorDescription.SUBMIT_ENTITY);
+                  throw new CoreException(
+                          new SubmitUncompletedLicenseModelErrorBuilder(SUBMIT_UNCOMPLETED_VLM_MSG_LA_MISSING_FG).build());
+              }
+          });
+
+          Collection<FeatureGroupEntity> featureGroupEntities = featureGroupDao.list(
+                  new FeatureGroupEntity(vendorLicenseModelId, version, null));
+          featureGroupEntities.forEach(featureGroupEntity -> {
+              if(CollectionUtils.isEmpty(featureGroupEntity.getEntitlementPoolIds())) {
+                  MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
+                          LoggerTragetServiceName.SUBMIT_ENTITY, ErrorLevel.ERROR.name(),
+                          LoggerErrorCode.DATA_ERROR.getErrorCode(), LoggerErrorDescription.SUBMIT_ENTITY);
+                  throw new CoreException(
+                          new SubmitUncompletedLicenseModelErrorBuilder(SUBMIT_UNCOMPLETED_VLM_MSG_FG_MISSING_EP).build());
+              }
+          });
       }
-    }
-
   }
 }
index d91a510..7d2cdc5 100644 (file)
@@ -20,6 +20,7 @@
 
 package org.openecomp.sdc.vendorlicense.licenseartifacts.impl;
 
+import org.apache.commons.collections.CollectionUtils;
 import org.openecomp.core.utilities.file.FileContentHandler;
 import org.openecomp.sdc.common.utils.CommonUtil;
 import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
@@ -41,6 +42,7 @@ import org.openecomp.sdc.versioning.dao.types.Version;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -74,11 +76,15 @@ public class VendorLicenseArtifactsServiceImpl implements VendorLicenseArtifacts
         for(EntitlementPoolEntity entitlementPoolEntity : entitlementPoolEntities){
           entitlementPoolEntity.setLimits(vendorLicenseFacade.listLimits(vlmId, vlmVersion,
               entitlementPoolEntity.getId(), user));
+          entitlementPoolEntity.setManufacturerReferenceNumber(featureGroupModel.
+              getEntityManufacturerReferenceNumber());
         }
         Set<LicenseKeyGroupEntity> licenseKeyGroupEntities = featureGroupModel.getLicenseKeyGroups();
         for(LicenseKeyGroupEntity licenseKeyGroupEntity : licenseKeyGroupEntities){
           licenseKeyGroupEntity.setLimits(vendorLicenseFacade.listLimits(vlmId, vlmVersion,
               licenseKeyGroupEntity.getId(), user));
+          licenseKeyGroupEntity.setManufacturerReferenceNumber(featureGroupModel.
+              getEntityManufacturerReferenceNumber());
         }
 
         featureGroupModel.setEntitlementPools(entitlementPoolEntities.stream().map(
@@ -109,18 +115,29 @@ public class VendorLicenseArtifactsServiceImpl implements VendorLicenseArtifacts
     for (Version finalVersion : finalVersions) {
       Collection<EntitlementPoolEntity> coll = vendorLicenseFacade.listEntitlementPools(vlmId,
           finalVersion, user);
-      for(EntitlementPoolEntity entitlementPoolEntity : coll){
+      coll.stream().forEach( entitlementPoolEntity -> {
         entitlementPoolEntity.setLimits(vendorLicenseFacade.listLimits(vlmId, finalVersion,
             entitlementPoolEntity.getId(), user));
-      }
+        Optional<String> manufacturerReferenceNumber = getFeatureGroupManufactureRefNumber
+            (entitlementPoolEntity.getReferencingFeatureGroups(), vlmId, finalVersion, user);
+        manufacturerReferenceNumber.ifPresent(mrn -> entitlementPoolEntity
+            .setManufacturerReferenceNumber(mrn));
+      });
+
       entitlementPoolEntities.addAll(coll);
 
       Collection<LicenseKeyGroupEntity> coll2 = vendorLicenseFacade.listLicenseKeyGroups(vlmId,
           finalVersion, user);
-      for(LicenseKeyGroupEntity licenseKeyGroupEntity : coll2){
+
+      coll2.stream().forEach( licenseKeyGroupEntity -> {
         licenseKeyGroupEntity.setLimits(vendorLicenseFacade.listLimits(vlmId, finalVersion,
             licenseKeyGroupEntity.getId(), user));
-      }
+        Optional<String> manufacturerReferenceNumber = getFeatureGroupManufactureRefNumber
+            (licenseKeyGroupEntity.getReferencingFeatureGroups(), vlmId, finalVersion, user);
+        manufacturerReferenceNumber.ifPresent(mrn -> licenseKeyGroupEntity
+            .setManufacturerReferenceNumber(mrn));
+      });
+
       licenseKeyGroupEntities.addAll(coll2);
     }
 
@@ -138,6 +155,23 @@ public class VendorLicenseArtifactsServiceImpl implements VendorLicenseArtifacts
     return vendorLicenseArtifact.toXml().getBytes();
   }
 
+  private static Optional<String> getFeatureGroupManufactureRefNumber(Set<String> featureGroupIds,
+         String vlmId, Version finalVersion, String user) {
+    String manufactureReferenceNumber = null;
+    if (CollectionUtils.isNotEmpty(featureGroupIds)) {
+      Object[] featureGroupIdsList = featureGroupIds.toArray();
+      if (featureGroupIdsList != null && featureGroupIdsList.length > 0) {
+        FeatureGroupEntity featureGroup =
+            vendorLicenseFacade.getFeatureGroup(new FeatureGroupEntity(vlmId, finalVersion,
+                featureGroupIdsList[0].toString()), user);
+        manufactureReferenceNumber = featureGroup != null ? featureGroup
+            .getManufacturerReferenceNumber() : null;
+      }
+    }
+    return manufactureReferenceNumber != null ? Optional.of(manufactureReferenceNumber) :
+        Optional.empty();
+  }
+
 
   /**
    * Create License Artifacts.
index 936f4da..dc0db0d 100644 (file)
@@ -35,6 +35,7 @@ import org.openecomp.sdc.vendorlicense.dao.types.AggregationFunction;
 import org.openecomp.sdc.vendorlicense.dao.types.xml.AggregationFunctionForXml;
 import org.openecomp.sdc.vendorlicense.dao.types.xml.EntitlementMetricForXml;
 import org.openecomp.sdc.vendorlicense.dao.types.xml.EntitlementTimeForXml;
+import org.openecomp.sdc.vendorlicense.dao.types.xml.OperationalScopeForXml;
 import org.openecomp.sdc.vendorlicense.dao.types.xml.ThresholdForXml;
 import org.openecomp.sdc.vendorlicense.dao.types.xml.LimitForXml;
 
@@ -64,10 +65,10 @@ public abstract class MixinEntitlementPoolEntityForVendorLicenseArtifact {
   @JsonProperty(value = "version")
   abstract String getVersionForArtifact();
 
-  @JsonInclude(JsonInclude.Include.NON_NULL)
+  @JsonProperty(value = "start-date")
   abstract String getStartDate();
 
-  @JsonInclude(JsonInclude.Include.NON_NULL)
+  @JsonProperty(value = "expiry-date")
   abstract String getExpiryDate();
 
   @JsonIgnore
@@ -93,9 +94,8 @@ public abstract class MixinEntitlementPoolEntityForVendorLicenseArtifact {
   @JsonIgnore
   abstract String getEntityType();
 
-  @JacksonXmlProperty(localName = "value")
-  @JacksonXmlElementWrapper(localName = "operational-scope")
-  abstract String getOperationalScopeForArtifact();
+  @JsonProperty(value = "operational-scope")
+  abstract OperationalScopeForXml getOperationalScopeForArtifact();
 
   @JsonIgnore
   abstract ChoiceOrOther<OperationalScope> getOperationalScope();
index 1a29d5b..8a2d17d 100644 (file)
@@ -34,6 +34,7 @@ import org.openecomp.sdc.vendorlicense.dao.types.OperationalScope;
 import org.openecomp.sdc.vendorlicense.dao.types.xml.AggregationFunctionForXml;
 import org.openecomp.sdc.vendorlicense.dao.types.xml.EntitlementMetricForXml;
 import org.openecomp.sdc.vendorlicense.dao.types.xml.EntitlementTimeForXml;
+import org.openecomp.sdc.vendorlicense.dao.types.xml.OperationalScopeForXml;
 import org.openecomp.sdc.vendorlicense.dao.types.xml.ThresholdForXml;
 import org.openecomp.sdc.vendorlicense.dao.types.xml.LimitForXml;
 
@@ -74,10 +75,10 @@ public abstract class MixinEntitlementPoolEntityForVnfArtifact {
   @JsonIgnore
   abstract float getThresholdValue();
 
-  @JsonInclude(JsonInclude.Include.NON_NULL)
+  @JsonProperty(value = "start-date")
   abstract String getStartDate();
 
-  @JsonInclude(JsonInclude.Include.NON_NULL)
+  @JsonProperty(value = "expiry-date")
   abstract String getExpiryDate();
 
   @JsonIgnore
@@ -92,9 +93,8 @@ public abstract class MixinEntitlementPoolEntityForVnfArtifact {
   @JsonIgnore
   abstract String getEntityType();
 
-  @JacksonXmlProperty(isAttribute = false, localName = "value")
-  @JacksonXmlElementWrapper(localName = "operational-scope")
-  abstract String getOperationalScopeForArtifact();
+  @JsonProperty(value = "operational-scope")
+  abstract OperationalScopeForXml getOperationalScopeForArtifact();
 
   @JsonIgnore
   abstract ChoiceOrOther<OperationalScope> getOperationalScope();
index 75beee4..b8c45ba 100644 (file)
@@ -41,9 +41,6 @@ public abstract class MixinFeatureGroupModel {
   @JacksonXmlProperty(isAttribute = false, localName = "part-number")
   abstract String getEntityPartNumber();
 
-  @JacksonXmlProperty(isAttribute = false, localName = "manufacturer-reference-number")
-  abstract String getManufacturerReferenceNumber();
-
   @JacksonXmlProperty(isAttribute = false, localName = "feature-group-uuid")
   abstract String getEntityId();
 
@@ -60,5 +57,8 @@ public abstract class MixinFeatureGroupModel {
   @JsonIgnore
   abstract String getEntityType();
 
+  @JsonIgnore
+  abstract String getEntityManufacturerReferenceNumber();
+
 
 }
index 6238988..78bf531 100644 (file)
@@ -21,6 +21,7 @@
 package org.openecomp.sdc.vendorlicense.licenseartifacts.impl.types.mixins;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
 import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
@@ -28,6 +29,8 @@ import org.openecomp.sdc.vendorlicense.dao.types.ChoiceOrOther;
 import org.openecomp.sdc.vendorlicense.dao.types.LimitEntity;
 import org.openecomp.sdc.vendorlicense.dao.types.OperationalScope;
 import org.openecomp.sdc.vendorlicense.dao.types.xml.LicenseKeyTypeForXml;
+import org.openecomp.sdc.vendorlicense.dao.types.xml.OperationalScopeForXml;
+import org.openecomp.sdc.vendorlicense.dao.types.xml.ThresholdForXml;
 import org.openecomp.sdc.vendorlicense.dao.types.xml.LimitForXml;
 
 import java.util.Collection;
@@ -60,9 +63,8 @@ public abstract class MixinLicenseKeyGroupEntityForVendorLicenseArtifact {
   @JsonIgnore
   abstract ChoiceOrOther<OperationalScope> getOperationalScope();
 
-  @JacksonXmlProperty(isAttribute = false, localName = "value")
-  @JacksonXmlElementWrapper(localName = "operational-scope")
-  abstract String getOperationalScopeForArtifact();
+  @JsonProperty(value = "operational-scope")
+  abstract OperationalScopeForXml getOperationalScopeForArtifact();
 
 
   @JsonIgnore
@@ -80,4 +82,19 @@ public abstract class MixinLicenseKeyGroupEntityForVendorLicenseArtifact {
   @JsonIgnore
   abstract Collection<LimitEntity> getLimits();
 
+  @JsonProperty(value = "start-date")
+  abstract String getStartDate();
+
+  @JsonProperty(value = "expiry-date")
+  abstract String getExpiryDate();
+
+  @JsonProperty(value = "threshold-value")
+  abstract ThresholdForXml getThresholdForArtifact();
+
+  @JsonIgnore
+  abstract String getThresholdUnits();
+
+  @JsonIgnore
+  abstract float getThresholdValue();
+
 }
index 80ae054..b25b93f 100644 (file)
@@ -21,6 +21,7 @@
 package org.openecomp.sdc.vendorlicense.licenseartifacts.impl.types.mixins;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
 import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
@@ -29,6 +30,8 @@ import org.openecomp.sdc.vendorlicense.dao.types.LimitEntity;
 import org.openecomp.sdc.vendorlicense.dao.types.OperationalScope;
 import org.openecomp.sdc.vendorlicense.dao.types.xml.LicenseKeyTypeForXml;
 import org.openecomp.sdc.vendorlicense.dao.types.xml.LimitForXml;
+import org.openecomp.sdc.vendorlicense.dao.types.xml.OperationalScopeForXml;
+import org.openecomp.sdc.vendorlicense.dao.types.xml.ThresholdForXml;
 
 import java.util.Collection;
 import java.util.Set;
@@ -37,6 +40,9 @@ public abstract class MixinLicenseKeyGroupEntityForVnfArtifact {
   @JsonIgnore
   abstract String getId();
 
+  @JsonProperty(value = "manufacturer-reference-number")
+  abstract String getManufacturerReferenceNumber();
+
   @JsonIgnore
   abstract Set<String> getReferencingFeatureGroups();
 
@@ -63,9 +69,8 @@ public abstract class MixinLicenseKeyGroupEntityForVnfArtifact {
   @JsonIgnore
   abstract ChoiceOrOther<OperationalScope> getOperationalScope();
 
-  @JacksonXmlProperty(isAttribute = false, localName = "value")
-  @JacksonXmlElementWrapper(localName = "operational-scope")
-  abstract String getOperationalScopeForArtifact();
+  @JsonProperty(value = "operational-scope")
+  abstract OperationalScopeForXml getOperationalScopeForArtifact();
 
 
   @JsonIgnore
@@ -74,6 +79,8 @@ public abstract class MixinLicenseKeyGroupEntityForVnfArtifact {
   @JsonIgnore
   abstract String getVersionableId();
 
+  @JsonProperty(value = "threshold-value")
+  abstract ThresholdForXml getThresholdForArtifact();
   @JsonProperty(value = "sp-limits")
   abstract LimitForXml getSPLimits();
 
@@ -83,4 +90,15 @@ public abstract class MixinLicenseKeyGroupEntityForVnfArtifact {
   @JsonIgnore
   abstract Collection<LimitEntity> getLimits();
 
+  @JsonProperty(value = "start-date")
+  abstract String getStartDate();
+
+  @JsonProperty(value = "expiry-date")
+  abstract String getExpiryDate();
+
+  @JsonIgnore
+  abstract String getThresholdUnits();
+
+  @JsonIgnore
+  abstract float getThresholdValue();
 }
diff --git a/openecomp-be/lib/openecomp-sdc-vendor-license-lib/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-vendor-license-lib/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 0b6ebb6..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-sdc-vendor-license-lib</name>
-    <artifactId>openecomp-sdc-vendor-license-lib</artifactId>
-
-    <packaging>pom</packaging>
-    <parent>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <groupId>org.openecomp.sdc</groupId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <modules>
-        <module>openecomp-sdc-vendor-license-api</module>
-        <module>openecomp-sdc-vendor-license-core</module>
-    </modules>
-
-    <dependencies>
-
-    </dependencies>
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 67f6a45..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-vendor-software-product-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>openecomp-sdc-vendor-software-product-api</artifactId>
-    <version>1.0-SNAPSHOT</version>
-
-
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-core-lib</artifactId>
-            <type>pom</type>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-facade-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-nosqldb-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-versioning-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-translator-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-enrichment-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-model-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.freemarker</groupId>
-            <artifactId>freemarker</artifactId>
-            <version>2.3.25-incubating</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-config-lib</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-
-
-</project>
\ No newline at end of file
index 42dd008..8010c40 100644 (file)
@@ -29,7 +29,7 @@ public final class VendorSoftwareProductConstants {
   public static final String INFORMATION_ARTIFACT_NAME = "VSP_%s_Information.txt";
     public static final String UNSUPPORTED_OPERATION_ERROR =
             "An error has occurred: Unsupported operation for 1707 release.";
-
+  public static final String NAME_PATTERN = "^[a-zA-Z0-9_]*$";
 
   public final class UniqueValues {
     public static final String VENDOR_SOFTWARE_PRODUCT_NAME = "Vendor Software Product name";
index 343f4ae..afee456 100644 (file)
             <artifactId>openecomp-tosca-datatype</artifactId>
             <version>${openecomp.sdc.common.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-tosca-generator-api</artifactId>
+            <version>1.1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-vendor-license-api</artifactId>
+            <version>1.1.0-SNAPSHOT</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 634e087..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>openecomp-sdc-vendor-software-product-core</artifactId>
-    <version>1.0-SNAPSHOT</version>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-vendor-software-product-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-vendor-software-product-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-nosqldb-api</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.freemarker</groupId>
-            <artifactId>freemarker</artifactId>
-            <version>2.3.23</version>
-        </dependency>
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <version>${testng.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-config-lib</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-model-impl</artifactId>
-            <version>1.0-SNAPSHOT</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.xmlgraphics</groupId>
-            <artifactId>fop</artifactId>
-            <version>2.1</version>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.dataformat</groupId>
-            <artifactId>jackson-dataformat-xml</artifactId>
-            <version>2.7.4</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-            <version>2.5</version>
-        </dependency>
-        <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-all</artifactId>
-            <version>1.10.19</version>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>4.12</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc.common</groupId>
-            <artifactId>openecomp-configuration-management-core</artifactId>
-            <version>1707.0.0-SNAPSHOT</version>
-            <scope>runtime</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.slf4j</groupId>
-                    <artifactId>slf4j-log4j12</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc.common</groupId>
-            <artifactId>openecomp-configuration-management-api</artifactId>
-            <version>1707.0.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <version>2.19.1</version>
-                <configuration>
-                    <useSystemClassLoader>false</useSystemClassLoader>
-                    <redirectTestOutputToFile>true</redirectTestOutputToFile>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
\ No newline at end of file
index 5284b9a..d87059e 100644 (file)
@@ -64,6 +64,7 @@ public class VendorSoftwareProductErrorCodes {
       "VSP_ONBOARD_METHOD_UPDATE_NOT_ALLOWED";
 
   public static final String DUPLICATE_NIC_NAME_NOT_ALLOWED = "DUPLICATE_NIC_NAME_NOT_ALLOWED";
+  public static final String NIC_NAME_FORMAT_NOT_ALLOWED = "NIC_NAME_FORMAT_NOT_ALLOWED";
 
   public static final String NULL_NETWORKID_NOT_ALLOWED = "NULL_NETWORKID_NOT_ALLOWED";
 
@@ -102,6 +103,7 @@ public class VendorSoftwareProductErrorCodes {
       ADD_IMAGE_NOT_ALLOWED_IN_HEAT_ONBOARDING = "ADD_IMAGE_NOT_ALLOWED_IN_HEAT_ONBOARDING";
 
   public static final String DUPLICATE_IMAGE_NAME_NOT_ALLOWED = "DUPLICATE_IMAGE_NAME_NOT_ALLOWED";
+  public static final String IMAGE_NAME_FORMAT_NOT_ALLOWED = "IMAGE_NAME_FORMAT_NOT_ALLOWED";
   public static final String VFC_IMAGE_INVALID_FORMAT = "VFC_IMAGE_INVALID_FORMAT";
   public static final String FEATURE_GROUP_NOT_EXIST_FOR_VSP = "FEATURE_GROUP_NOT_EXIST_FOR_VSP";
 
@@ -115,8 +117,11 @@ public class VendorSoftwareProductErrorCodes {
       = "SAME_VFC_ASSOCIATION_MORE_THAN_ONCE_NOT_ALLOWED";
   public static final String DUPLICATE_DEPLOYMENT_FLAVOR_MODEL_NOT_ALLOWED
       = "DUPLICATE_DEPLOYMENT_FLAVOR_MODEL_NOT_ALLOWED";
+  public static final String DEPLOYMENT_FLAVOR_NAME_FORMAT_NOT_ALLOWED =
+          "DEPLOYMENT_FLAVOR_NAME_FORMAT_NOT_ALLOWED";
   public static final String INVALID_COMPUTE_FLAVOR_ID = "INVALID_COMPUTE_FLAVOR_ID";
   public static final String DUPLICATE_COMPUTE_NAME_NOT_ALLOWED = "DUPLICATE_COMPUTE_NAME_NOT_ALLOWED";
+  public static final String COMPUTE_NAME_FORMAT_NOT_ALLOWED = "COMPUTE_NAME_FORMAT_NOT_ALLOWED";
 
   public static final String DELETE_IMAGE_NOT_ALLOWED = "DELETE_IMAGE_NOT_ALLOWED";
   public static final String UPDATE_IMAGE_NOT_ALLOWED = "UPDATE_IMAGE_NOT_ALLOWED";
@@ -1,35 +1,40 @@
-package org.openecomp.sdc.vendorsoftwareproduct.utils;
+package org.openecomp.sdc.vendorsoftwareproduct.services;
 
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.openecomp.core.utilities.json.JsonUtil;
+import org.openecomp.sdc.datatypes.error.ErrorLevel;
 import org.openecomp.sdc.generator.datatypes.tosca.ComputeFlavor;
 import org.openecomp.sdc.generator.datatypes.tosca.DeploymentFlavorModel;
 import org.openecomp.sdc.generator.datatypes.tosca.LicenseFlavor;
 import org.openecomp.sdc.generator.datatypes.tosca.MultiFlavorVfcImage;
 import org.openecomp.sdc.generator.datatypes.tosca.VendorInfo;
+import org.openecomp.sdc.logging.context.impl.MdcDataErrorMessage;
+import org.openecomp.sdc.logging.types.LoggerConstants;
+import org.openecomp.sdc.logging.types.LoggerErrorCode;
+import org.openecomp.sdc.logging.types.LoggerTragetServiceName;
 import org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity;
 import org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupModel;
 import org.openecomp.sdc.vendorlicense.facade.VendorLicenseFacade;
 import org.openecomp.sdc.vendorlicense.facade.VendorLicenseFacadeFactory;
-import org.openecomp.sdc.vendorsoftwareproduct.ComponentManager;
-import org.openecomp.sdc.vendorsoftwareproduct.ComponentManagerFactory;
-import org.openecomp.sdc.vendorsoftwareproduct.ComputeManager;
-import org.openecomp.sdc.vendorsoftwareproduct.ComputeManagerFactory;
-import org.openecomp.sdc.vendorsoftwareproduct.DeploymentFlavorManager;
-import org.openecomp.sdc.vendorsoftwareproduct.DeploymentFlavorManagerFactory;
-import org.openecomp.sdc.vendorsoftwareproduct.ImageManager;
-import org.openecomp.sdc.vendorsoftwareproduct.ImageManagerFactory;
-import org.openecomp.sdc.vendorsoftwareproduct.NicManager;
-import org.openecomp.sdc.vendorsoftwareproduct.NicManagerFactory;
-import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductManager;
-import org.openecomp.sdc.vendorsoftwareproduct.VspManagerFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentDao;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentDaoFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.ComputeDao;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.ComputeDaoFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.ImageDao;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.ImageDaoFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.NicDao;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.NicDaoFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDao;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDaoFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDaoFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComputeEntity;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.DeploymentFlavorEntity;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ImageEntity;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
-import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityResponse;
-import org.openecomp.sdc.vendorsoftwareproduct.types.QuestionnaireResponse;
 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentComputeAssociation;
 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentData;
 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.DeploymentFlavor;
@@ -50,18 +55,19 @@ import java.util.Optional;
 
 public class ManualVspDataCollectionService {
 
-  private static final DeploymentFlavorManager deploymentFlavorManager =
-      DeploymentFlavorManagerFactory.getInstance().createInterface();
-  private static final ComputeManager computeManager =
-      ComputeManagerFactory.getInstance().createInterface();
-  private static final ImageManager imageManager =
-      ImageManagerFactory.getInstance().createInterface();
-  private static final ComponentManager componentManager =
-      ComponentManagerFactory.getInstance().createInterface();
-  private static final VendorSoftwareProductManager vendorSoftwareProductManager =
-      VspManagerFactory.getInstance().createInterface();
-  private static final NicManager nicManager =
-      NicManagerFactory.getInstance().createInterface();
+  private static final VendorSoftwareProductDao vendorSoftwareProductDao =
+      VendorSoftwareProductDaoFactory.getInstance().createInterface();
+  private static final VendorSoftwareProductInfoDao vendorSoftwareProductInfoDao =
+      VendorSoftwareProductInfoDaoFactory.getInstance().createInterface();
+  private static final ComputeDao computeDao =
+      ComputeDaoFactory.getInstance().createInterface();
+  private static final ImageDao imageDao =
+      ImageDaoFactory.getInstance().createInterface();
+  private static final ComponentDao componentDao =
+      ComponentDaoFactory.getInstance().createInterface();
+
+  private static final NicDao nicDao =
+      NicDaoFactory.getInstance().createInterface();
   private static final VendorLicenseFacade vendorLicenseFacade =
       VendorLicenseFacadeFactory.getInstance().createInterface();
 
@@ -76,7 +82,7 @@ public class ManualVspDataCollectionService {
    */
   public Optional<String> getReleaseVendor(String vspId, Version version, String user) {
     String vendorName = null;
-    VspDetails vspDetails = vendorSoftwareProductManager.getVsp(vspId, version, user);
+    VspDetails vspDetails = vendorSoftwareProductInfoDao.get(new VspDetails(vspId, version));
     if (Objects.nonNull(vspDetails)) {
       vendorName = vspDetails.getVendorName();
     }
@@ -95,13 +101,13 @@ public class ManualVspDataCollectionService {
                                                               String user) {
     Map<String, DeploymentFlavorModel> allowedFlavors = new HashMap<>();
     Collection<DeploymentFlavorEntity> deploymentFlavorEntities =
-        deploymentFlavorManager.listDeploymentFlavors(vspId, version, user);
+        vendorSoftwareProductDao.listDeploymentFlavors(vspId, version);
     if (CollectionUtils.isNotEmpty(deploymentFlavorEntities)) {
       for (DeploymentFlavorEntity deploymentFlavorEntity : deploymentFlavorEntities) {
         DeploymentFlavor deploymentFlavorCompositionData =
             deploymentFlavorEntity.getDeploymentFlavorCompositionData();
 
-        VspDetails vspDetails = vendorSoftwareProductManager.getVsp(vspId, version, user);
+        VspDetails vspDetails = vendorSoftwareProductInfoDao.get(new VspDetails(vspId, version));
         String vspVlmId;
         Version vlmVersion;
         if (Objects.nonNull(vspDetails)) {
@@ -123,8 +129,9 @@ public class ManualVspDataCollectionService {
                 user);
             partNumber.ifPresent(deploymentFlavorModel::setSp_part_number);
             //Gather and set Vendor Info
-            Optional<VendorInfo> vendorInfo = getVendorInfo(vspVlmId, vlmVersion, featureGroupId,
-                user);
+            String vendorModel = deploymentFlavorCompositionData.getModel();
+            Optional<VendorInfo> vendorInfo = getVendorInfo(vspVlmId, vendorModel, vlmVersion,
+                featureGroupId, user);
             vendorInfo.ifPresent(deploymentFlavorModel::setVendor_info);
             //Gather and set Compute info
             List<ComponentComputeAssociation> componentComputeAssociations =
@@ -161,7 +168,7 @@ public class ManualVspDataCollectionService {
                                                                       String user) {
     Map<String, List<MultiFlavorVfcImage>> vspComponentImages = new HashMap<>();
     Collection<DeploymentFlavorEntity> deploymentFlavorEntities =
-        deploymentFlavorManager.listDeploymentFlavors(vspId, version, user);
+        vendorSoftwareProductDao.listDeploymentFlavors(vspId, version);
     for (DeploymentFlavorEntity deploymentFlavorEntity : deploymentFlavorEntities) {
       DeploymentFlavor deploymentFlavorCompositionData =
           deploymentFlavorEntity.getDeploymentFlavorCompositionData();
@@ -194,7 +201,7 @@ public class ManualVspDataCollectionService {
   public Map<String, String> getVspComponents(String vspId, Version version, String user) {
     Map<String, String> componentIdNameMap = new HashMap<>();
     Collection<DeploymentFlavorEntity> deploymentFlavorEntities =
-        deploymentFlavorManager.listDeploymentFlavors(vspId, version, user);
+        vendorSoftwareProductDao.listDeploymentFlavors(vspId, version);
     for (DeploymentFlavorEntity deploymentFlavorEntity : deploymentFlavorEntities) {
       DeploymentFlavor deploymentFlavorCompositionData =
           deploymentFlavorEntity.getDeploymentFlavorCompositionData();
@@ -224,7 +231,7 @@ public class ManualVspDataCollectionService {
   public Map<String, List<Nic>> getVspComponentNics(String vspId, Version version, String user) {
     Map<String, List<Nic>> vspComponentNics = new HashMap<>();
     Collection<DeploymentFlavorEntity> deploymentFlavorEntities =
-        deploymentFlavorManager.listDeploymentFlavors(vspId, version, user);
+        vendorSoftwareProductDao.listDeploymentFlavors(vspId, version);
     if (CollectionUtils.isNotEmpty(deploymentFlavorEntities)) {
       for (DeploymentFlavorEntity deploymentFlavorEntity : deploymentFlavorEntities) {
         DeploymentFlavor deploymentFlavorCompositionData =
@@ -251,15 +258,14 @@ public class ManualVspDataCollectionService {
   private List<Nic> getComponentNics(String vspId, Version version, String componentId,
                                      String user) {
     List<Nic> componentNics = new ArrayList<>();
-    Collection<NicEntity> nics = nicManager.listNics(vspId, version, componentId,  user);
+    Collection<NicEntity> nics = nicDao.list(new NicEntity(vspId, version, componentId, null));
     if (Objects.nonNull(nics)) {
-      for (NicEntity nicEntity : nics) {
-        String nicId = nicEntity.getId();
-        CompositionEntityResponse<Nic> nicCompositionEntityResponse =
-            nicManager.getNic(vspId, version, componentId, nicId, user);
-        if (Objects.nonNull(nicCompositionEntityResponse)
-            && Objects.nonNull(nicCompositionEntityResponse.getData())) {
-          componentNics.add(nicCompositionEntityResponse.getData());
+      for (NicEntity nic : nics) {
+        String nicId = nic.getId();
+        NicEntity nicEntity = nicDao.get(new NicEntity(vspId, version, componentId, nicId));
+        if (Objects.nonNull(nicEntity)
+            && Objects.nonNull(nicEntity.getCompositionData())) {
+          componentNics.add(nicEntity.getNicCompositionData());
         }
       }
     }
@@ -281,7 +287,7 @@ public class ManualVspDataCollectionService {
     return Optional.empty();
   }
 
-  private Optional<VendorInfo> getVendorInfo(String vlmId, Version version,
+  private Optional<VendorInfo> getVendorInfo(String vlmId, String vendorModel, Version version,
                                              String featureGroupId, String user) {
     VendorInfo vendorInfo = null;
     FeatureGroupModel featureGroup = getFeatureGroup(vlmId, version, featureGroupId, user);
@@ -289,7 +295,7 @@ public class ManualVspDataCollectionService {
       //Process Feature group to get Manufacturer ref no.
       String manufacturerReferenceNumber = featureGroup.getEntityManufacturerReferenceNumber();
       vendorInfo = new VendorInfo();
-      vendorInfo.setVendor_model(vlmId);
+      vendorInfo.setVendor_model(vendorModel);
       if (Objects.nonNull(manufacturerReferenceNumber)) {
         vendorInfo.setManufacturer_reference_number(manufacturerReferenceNumber);
       }
@@ -301,21 +307,29 @@ public class ManualVspDataCollectionService {
                                                    String componentId, String computeFlavorId,
                                                    String user) {
     ComputeFlavor computeFlavor = null;
-    QuestionnaireResponse computeQuestionnaire;
+    ComputeEntity computeQuestionnaire = null;
     try {
-      computeQuestionnaire = computeManager.getComputeQuestionnaire(vspId, version, componentId,
-          computeFlavorId, user);
+      computeQuestionnaire = computeDao.getQuestionnaireData(vspId, version, componentId,
+          computeFlavorId);
     } catch (Exception ex) {
       computeQuestionnaire = null;
+      MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_API,
+          LoggerTragetServiceName.COLLECT_MANUAL_VSP_TOSCA_DATA, ErrorLevel.INFO.name(),
+          LoggerErrorCode.DATA_ERROR.getErrorCode(), "Failed to get compute questionnaire : "
+              + ex.getMessage());
     }
     if (Objects.nonNull(computeQuestionnaire)) {
-      String computeQuestionnaireData = computeQuestionnaire.getData();
+      String computeQuestionnaireData = computeQuestionnaire.getQuestionnaireData();
       if (Objects.nonNull(computeQuestionnaireData)) {
         Compute compute;
         try {
           compute = JsonUtil.json2Object(computeQuestionnaireData, Compute.class);
         } catch (Exception ex) {
           compute = null;
+          MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_API,
+              LoggerTragetServiceName.COLLECT_MANUAL_VSP_TOSCA_DATA, ErrorLevel.INFO.name(),
+              LoggerErrorCode.DATA_ERROR.getErrorCode(), "Unable to parse compute questionnaire : "
+                  + ex.getMessage());
         }
         if (Objects.nonNull(compute.getVmSizing())) {
           computeFlavor = new ComputeFlavor();
@@ -323,10 +337,10 @@ public class ManualVspDataCollectionService {
             computeFlavor.setNum_cpus(compute.getVmSizing().getNumOfCPUs());
           }
           if (Objects.nonNull(compute.getVmSizing().getFileSystemSizeGB())) {
-            computeFlavor.setDisk_size(compute.getVmSizing().getFileSystemSizeGB() + "GB");
+            computeFlavor.setDisk_size(compute.getVmSizing().getFileSystemSizeGB() + " GB");
           }
           if (Objects.nonNull(compute.getVmSizing().getMemoryRAM())) {
-            computeFlavor.setMem_size(compute.getVmSizing().getMemoryRAM() + "GB");
+            computeFlavor.setMem_size(compute.getVmSizing().getMemoryRAM());
           }
         }
       }
@@ -345,74 +359,63 @@ public class ManualVspDataCollectionService {
 
   private Optional<String> getComponentName(String vspId, Version version, String componentId,
                                             String user) {
-    CompositionEntityResponse<ComponentData> component =
-        componentManager.getComponent(vspId, version, componentId, user);
-    if (Objects.nonNull(component.getData())) {
-      return Optional.ofNullable(component.getData().getDisplayName());
+
+    ComponentEntity componentEntity =
+        componentDao.get(new ComponentEntity(vspId, version, componentId));
+    if (Objects.nonNull(componentEntity)
+        && Objects.nonNull(componentEntity.getComponentCompositionData())) {
+      ComponentData componentCompositionData = componentEntity.getComponentCompositionData();
+      return Optional.ofNullable(componentCompositionData.getDisplayName());
     }
     return Optional.empty();
   }
 
   private List<MultiFlavorVfcImage> getComponentImages(String vspId, Version version,
                                                        String componentId, String user) {
-    List<MultiFlavorVfcImage> componentImages = new ArrayList<>();
+    List<MultiFlavorVfcImage> multiFlavorVfcImages = new ArrayList<>();
     MultiFlavorVfcImage multiFlavorVfcImage = null;
-    Collection<ImageEntity> imageEntities =
-        imageManager.listImages(vspId, version, componentId, user);
-    if (Objects.nonNull(imageEntities)) {
-      for (ImageEntity imageEntity : imageEntities) {
-        String imageId = imageEntity.getId();
-        QuestionnaireResponse imageQuestionnaire =
-            imageManager.getImageQuestionnaire(vspId, version, componentId, imageId, user);
-        CompositionEntityResponse<Image> imageCompositionData =
-            imageManager.getImage(vspId, version, componentId, imageId, user);
-        if (Objects.nonNull(imageQuestionnaire)
-            && Objects.nonNull(imageQuestionnaire.getData())
+    Collection<ImageEntity> componentImages =
+        vendorSoftwareProductDao.listImages(vspId, version, componentId);
+    if (Objects.nonNull(componentImages)) {
+      for (ImageEntity componentImage : componentImages) {
+        String imageId = componentImage.getId();
+        ImageEntity imageEntity = vendorSoftwareProductDao.getImage(vspId, version, componentId,
+            imageId);
+        ImageEntity imageQuestionnaireDataEntity = imageDao.getQuestionnaireData(vspId, version,
+            componentId, imageId);
+        Image imageCompositionData = imageEntity.getImageCompositionData();
+        if (Objects.nonNull(imageEntity)
+            && Objects.nonNull(imageQuestionnaireDataEntity)
             && Objects.nonNull(imageCompositionData)) {
           ImageDetails imageDetails;
           try {
-            imageDetails = JsonUtil.json2Object(imageQuestionnaire.getData(),
-                ImageDetails.class);
+            imageDetails = JsonUtil.json2Object(imageQuestionnaireDataEntity
+                .getQuestionnaireData(), ImageDetails.class);
           } catch (Exception ex) {
             imageDetails = null;
+            MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_API,
+                LoggerTragetServiceName.COLLECT_MANUAL_VSP_TOSCA_DATA, ErrorLevel.INFO.name(),
+                LoggerErrorCode.DATA_ERROR.getErrorCode(), "Unable to parse image questionnaire : "
+                    + ex.getMessage());
           }
           if (Objects.nonNull(imageDetails)
               && Objects.nonNull(imageDetails.getVersion())) {
             //Image version is used as a key for the image block
             //So excluding the population if questionnaire data is absent or invalid
             multiFlavorVfcImage = new MultiFlavorVfcImage();
-            Image image = imageCompositionData.getData();
-            Optional<String> toscaImageFileName = getToscaImageFileName(image, imageDetails);
-            toscaImageFileName.ifPresent(multiFlavorVfcImage::setFile_name);
             multiFlavorVfcImage.setSoftware_version(imageDetails.getVersion());
+            if (Objects.nonNull(imageCompositionData.getFileName())) {
+              multiFlavorVfcImage.setFile_name(imageCompositionData.getFileName());
+            }
             if (Objects.nonNull(imageDetails.getMd5())) {
               multiFlavorVfcImage.setFile_hash(imageDetails.getMd5());
             }
             multiFlavorVfcImage.setFile_hash_type("md5");
-            componentImages.add(multiFlavorVfcImage);
+            multiFlavorVfcImages.add(multiFlavorVfcImage);
           }
         }
       }
     }
-    return componentImages;
-  }
-
-  private Optional<String> getToscaImageFileName(Image image, ImageDetails imageDetails) {
-    String toscaImageFileName = null;
-    StringBuilder builder = new StringBuilder();
-    if (Objects.nonNull(image.getFileName())) {
-      builder.append(image.getFileName());
-      builder.append("-");
-      builder.append(imageDetails.getVersion());
-      if (Objects.nonNull(imageDetails.getFormat())) {
-        builder.append(".");
-        builder.append(imageDetails.getFormat());
-      }
-    }
-    toscaImageFileName = builder.toString();
-    if (toscaImageFileName.isEmpty()) {
-      return Optional.empty();
-    }
-    return Optional.ofNullable(toscaImageFileName);
+    return multiFlavorVfcImages;
   }
 }
index 6b55ffc..a16fea1 100644 (file)
@@ -338,7 +338,7 @@ public class CompositionDataExtractorImpl implements CompositionDataExtractor {
         if (obj instanceof String) {
           images.add((String) obj);
         } else {
-          HashMap<String,String> objMap = new ObjectMapper().convertValue(obj,HashMap.class);
+          Map<String,String> objMap = new ObjectMapper().convertValue(obj,Map.class);
           images.add(getInputs(toscaServiceModel,objMap.get("get_input")));
         }
       }
@@ -364,7 +364,7 @@ public class CompositionDataExtractorImpl implements CompositionDataExtractor {
         if (obj instanceof String) {
           computes.add((String) obj);
         } else {
-          HashMap<String, String> objMap = new ObjectMapper().convertValue(obj, HashMap.class);
+          Map<String, String> objMap = new ObjectMapper().convertValue(obj, Map.class);
           computes.add(getInputs(toscaServiceModel, objMap.get("get_input")));
         }
       }
@@ -387,7 +387,13 @@ public class CompositionDataExtractorImpl implements CompositionDataExtractor {
       for (Map.Entry<String, ParameterDefinition> inputEntry : serviceTemplate
           .getTopology_template().getInputs().entrySet()) {
         if (inputEntry.getKey().equals(inputValue)) {
-          return (String)inputEntry.getValue().get_default();
+          String value;
+          try {
+            value= (String) inputEntry.getValue().get_default();
+          } catch (Exception e) {
+            value = inputEntry.getValue().get_default().toString();
+          }
+        return value;
         }
       }
     }
index 71f5fa1..7d5d57d 100644 (file)
@@ -224,7 +224,6 @@ public class CompositionEntityDataManagerImpl implements CompositionEntityDataMa
 
     Map<String, String> networkIdByName = saveNetworks(vspId, version, compositionData);
     saveComponents(vspId, version, compositionData, networkIdByName);
-    saveDeploymentFlavors(vspId, version, compositionData);
 
     mdcDataDebugMessage.debugExitMessage(null);
   }
@@ -688,38 +687,4 @@ public class CompositionEntityDataManagerImpl implements CompositionEntityDataMa
     }
   }
 
-  public void saveDeploymentFlavors(String vspId, Version version,
-                                    CompositionData compositionData) {
-
-    mdcDataDebugMessage.debugEntryMessage(null, null);
-
-    if (CollectionUtils.isNotEmpty(compositionData.getComponents())) {
-      DeploymentFlavorEntity deploymentFlavorEntity = new DeploymentFlavorEntity(vspId, version,
-          null);
-      DeploymentFlavor deploymentFlavor = new DeploymentFlavor();
-      VspDetails vendorSoftwareProductInfo =
-          vspInfoDao.get(new VspDetails(vspId, version));
-      if (vendorSoftwareProductInfo.getName() != null) {
-        deploymentFlavor.setModel(vendorSoftwareProductInfo.getName());
-        List<ComponentComputeAssociation> componentComputeAssociationList = new ArrayList<>();
-        Collection<ComputeEntity> computes= vendorSoftwareProductDao.listComputesByVsp(vspId,
-            version);
-        for (ComputeEntity compute : computes) {
-          ComponentComputeAssociation componentComputeAssociation = new
-              ComponentComputeAssociation();
-          if (compute.getComponentId() != null && compute.getId() != null){
-            componentComputeAssociation.setComponentId(compute.getComponentId());
-            componentComputeAssociation.setComputeFlavorId(compute.getId());
-            componentComputeAssociationList.add(componentComputeAssociation);
-          }
-        }
-        deploymentFlavor.setComponentComputeAssociations(componentComputeAssociationList);
-      }
-      deploymentFlavorEntity.setDeploymentFlavorCompositionData(deploymentFlavor);
-      createDeploymentFlavor(deploymentFlavorEntity);
-    }
-
-    mdcDataDebugMessage.debugExitMessage(null, null);
-  }
-
 }
diff --git a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/pom.xml.versionsBackup
deleted file mode 100644 (file)
index a1ee8d3..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <artifactId>openecomp-sdc-vendor-software-product-lib</artifactId>
-    <packaging>pom</packaging>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-
-    <modules>
-        <module>openecomp-sdc-vendor-software-product-api</module>
-        <module>openecomp-sdc-vendor-software-product-core</module>
-    </modules>
-
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 3c9a34a..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-sdc-versioning-api</name>
-    <artifactId>openecomp-sdc-versioning-api</artifactId>
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../..</relativePath>
-    </parent>
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-facade-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-facade-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-nosqldb-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.hibernate</groupId>
-            <artifactId>hibernate-validator</artifactId>
-            <version>${hibernate.validator.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>javax.el</groupId>
-            <artifactId>javax.el-api</artifactId>
-            <version>${javax.el-api.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.glassfish.web</groupId>
-            <artifactId>javax.el</artifactId>
-            <version>2.2.4</version>
-        </dependency>
-        <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-all</artifactId>
-            <scope>test</scope>
-            <version>1.10.19</version>
-        </dependency>
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <scope>test</scope>
-            <version>6.8.5</version>
-            <exclusions>
-                <exclusion>
-                    <artifactId>snakeyaml</artifactId>
-                    <groupId>org.yaml</groupId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-            <version>4.11</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-logging-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/pom.xml.versionsBackup
deleted file mode 100644 (file)
index ce41a59..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-sdc-versioning-core</name>
-    <artifactId>openecomp-sdc-versioning-core</artifactId>
-
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <version>1.0-SNAPSHOT</version>
-        <relativePath>../..</relativePath>
-    </parent>
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-versioning-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-all</artifactId>
-            <scope>test</scope>
-            <version>1.10.19</version>
-        </dependency>
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <scope>test</scope>
-            <version>6.8.5</version>
-            <exclusions>
-                <exclusion>
-                    <artifactId>snakeyaml</artifactId>
-                    <groupId>org.yaml</groupId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-            <version>4.11</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-logging-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-versioning-lib/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-sdc-versioning-lib/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 7804ebf..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-sdc-versioning-lib</name>
-    <artifactId>openecomp-sdc-versioning-lib</artifactId>
-
-    <packaging>pom</packaging>
-    <parent>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <groupId>org.openecomp.sdc</groupId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <modules>
-        <module>openecomp-sdc-versioning-api</module>
-        <module>openecomp-sdc-versioning-core</module>
-    </modules>
-
-    <dependencies>
-
-    </dependencies>
-</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-tosca-lib/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-tosca-lib/pom.xml.versionsBackup
deleted file mode 100644 (file)
index be3c350..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>org.openecomp.core</groupId>
-    <name>openecomp-tosca-lib</name>
-    <dependencies>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-utilities-lib</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-datatypes-lib</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.core</groupId>
-            <artifactId>openecomp-common-lib</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>${logback.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>RELEASE</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc</groupId>
-            <artifactId>openecomp-sdc-logging-core</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc.common</groupId>
-            <artifactId>openecomp-configuration-management-core</artifactId>
-            <version>1707.0.0-SNAPSHOT</version>
-            <scope>runtime</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.slf4j</groupId>
-                    <artifactId>slf4j-log4j12</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc.common</groupId>
-            <artifactId>openecomp-configuration-management-api</artifactId>
-            <version>1707.0.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.openecomp.sdc.common</groupId>
-            <artifactId>openecomp-tosca-datatype</artifactId>
-            <version>1707.0.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <version>2.19.1</version>
-                <configuration>
-                    <useSystemClassLoader>false</useSystemClassLoader>
-                    <redirectTestOutputToFile>true</redirectTestOutputToFile>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-
-    <artifactId>openecomp-tosca-lib</artifactId>
-
-    <parent>
-        <artifactId>openecomp-sdc-lib</artifactId>
-        <groupId>org.openecomp.sdc</groupId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-
-</project>
\ No newline at end of file
index b5b3e17..745f77f 100644 (file)
@@ -87,6 +87,6 @@ public class ToscaNodeType {
   public static String VNF_CONFIG_NODE_TYPE = ABSTRACT_NODE_TYPE_PREFIX + "VnfConfiguration";
   public static String MULTIFLAVOR_VFC_NODE_TYPE = ABSTRACT_NODE_TYPE_PREFIX + "MultiFlavorVFC";
   public static String MULTIDEPLOYMENTFLAVOR_NODE_TYPE = ABSTRACT_NODE_TYPE_PREFIX
-      + "MultiDeploymentFlavor";
+      + "MultiDeploymentFlavor.CVFC";
 }
 
diff --git a/openecomp-be/lib/pom.xml.versionsBackup b/openecomp-be/lib/pom.xml.versionsBackup
deleted file mode 100644 (file)
index 1859446..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <name>openecomp-sdc-lib</name>
-    <artifactId>openecomp-sdc-lib</artifactId>
-
-    <packaging>pom</packaging>
-    <parent>
-        <artifactId>openecomp-sdc</artifactId>
-        <groupId>org.openecomp.sdc</groupId>
-        <version>1.0-SNAPSHOT</version>
-    </parent>
-
-    <modules>
-        <module>openecomp-core-lib</module>
-        <module>openecomp-common-lib</module>
-        <module>openecomp-sdc-versioning-lib</module>
-        <module>openecomp-sdc-vendor-license-lib</module>
-        <module>openecomp-sdc-vendor-software-product-lib</module>
-        <module>openecomp-sdc-translator-lib</module>
-        <module>openecomp-sdc-model-lib</module>
-        <module>openecomp-sdc-validation-lib</module>
-        <module>openecomp-sdc-datatypes-lib</module>
-        <module>openecomp-heat-lib</module>
-        <module>openecomp-tosca-lib</module>
-        <module>openecomp-sdc-action-lib</module>
-        <module>openecomp-sdc-enrichment-lib</module>
-        <module>openecomp-logging-lib</module>
-        <module>openecomp-healing-lib</module>
-        <module>openecomp-migration-lib</module>
-    </modules>
-</project>
\ No newline at end of file
index 3dc85cf..748f4da 100644 (file)
         "memoryRAM": {
           "type": "string",
           "enum": [
-            "1",
-            "2",
-            "4",
-            "8"
+            "1 GB",
+            "2 GB",
+            "4 GB",
+            "8 GB"
           ],
-          "default": "1"
+          "default": "1 GB"
         }
       },
       "additionalProperties": false
index c8037ce..86faf15 100644 (file)
@@ -77,13 +77,10 @@ public class EntitlementPoolConvertor {
     info.setDescription(entitlementPool.getDescription());
     info.addProperty("thresholdValue", entitlementPool.getThresholdValue());
     info.addProperty("threshold_unit", entitlementPool.getThresholdUnit());
-    info.addProperty("entitlement_metric", entitlementPool.getEntitlementMetric());
+    //info.addProperty("entitlement_metric", entitlementPool.getEntitlementMetric());
     info.addProperty("increments", entitlementPool.getIncrements());
-    info.addProperty("aggregation_func", entitlementPool.getAggregationFunction());
     info.addProperty("operational_scope", entitlementPool.getOperationalScope());
-    info.addProperty("EntitlementTime", entitlementPool.getTime());
-    info.addProperty("manufacturerReferenceNumber",
-        entitlementPool.getManufacturerReferenceNumber());
+
     return info;
   }
 
index 6ef90ad..99853b8 100644 (file)
@@ -9,7 +9,6 @@
 
 
 # change exist package and service templates in db
-java -Dlog.home=/apps/jetty/base/be/logs -Dconfiguration.yaml=/apps/jetty/base/be/config/catalog-be/configuration.yaml  -jar openecomp-zusammen-migration-1.0-SNAPSHOT.jar org.openecomp.core.migration.MigrationMain
-
-STATUS="${?}"
-echo "${STATUS}"
+## Code removed but script is kept for future hook use ##
+##STATUS="${?}"
+##echo "${STATUS}"
index b92ba52..685f70d 100644 (file)
@@ -18,6 +18,10 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
 import static java.nio.file.Files.createDirectories;
 public class ExportDataCommand {
@@ -25,6 +29,8 @@ public class ExportDataCommand {
 
     public static void exportData(SessionContext context, String filterItem) {
         try {
+            Set<String> filteredItem = new HashSet<>();
+            filteredItem.add(filterItem);
             ImportProperties.initParams();
             CassandraConnectionInitializer.setCassandraConnectionPropertiesToSystem();
             Path rootDir = Paths.get(ImportProperties.ROOT_DIRECTORY);
@@ -32,10 +38,10 @@ public class ExportDataCommand {
             if (filterItem != null) {
                 filterItem = filterItem.replaceAll("\\r", "");
             }
-            new ItemHandler().createItemsData(context, filterItem);
-            new VersionHandler().loadVersions(filterItem);
-            new ElementHandler().loadElements(filterItem);
-            zipPath(rootDir,filterItem);
+            new ItemHandler().createItemsData(context, filteredItem);
+            new VersionHandler().loadVersions(filteredItem);
+            new ElementHandler().loadElements(filteredItem);
+            zipPath(rootDir,filteredItem);
             FileUtils.forceDelete(rootDir.toFile());
         } catch (Exception ex) {
             logger.error(ex.getMessage(), ex);
@@ -43,12 +49,14 @@ public class ExportDataCommand {
         }
 
     }
-    private static void zipPath(Path rootDir,String filterItem ) throws Exception{
+    private static void zipPath(Path rootDir,Set<String> filterItem ) throws Exception{
         LocalDateTime date = LocalDateTime.now();
         DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
         String dateStr = date.format(formatter);
         String zipFile = System.getProperty("user.home")+ File.separatorChar+"onboarding_import"+ dateStr + ".zip";
         ZipUtils.createZip(zipFile, rootDir,filterItem);
+        logger.info("Exported file :" + zipFile);
+        System.out.println("Exported file :" + zipFile);
     }
 
 
index ebce90f..49eaaea 100644 (file)
@@ -10,6 +10,7 @@ import java.nio.ByteBuffer;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.Objects;
+import java.util.Set;
 
 import static java.io.File.separator;
 import static java.nio.file.Files.*;
@@ -22,15 +23,16 @@ public class ElementHandler {
     public ElementHandler() {
     }
 
-    public void loadElements(String filteredItem) {
+    public void loadElements(Set<String> filteredItem) {
         ElementCassandraLoader elementCassandraLoader = new ElementCassandraLoader();
-        elementCassandraLoader.list().forEach(elementEntity ->  handleElementEntity(elementEntity,filteredItem));
+          elementCassandraLoader.list().forEach(elementEntity ->  handleElementEntity(elementEntity,filteredItem));
     }
 
-    private void handleElementEntity(ElementEntity elementEntity, String filteredItem) {
+    private void handleElementEntity(ElementEntity elementEntity, Set<String> filteredItem) {
         try {
             String itemId = elementEntity.getItemId();
-            if (filteredItem != null && !itemId.contains(filteredItem)){
+
+            if (!filteredItem.isEmpty() && !filteredItem.contains(itemId)){
                 return;
             }
             String versionId = elementEntity.getVersionId();
@@ -42,11 +44,18 @@ public class ElementHandler {
             if (!isNull(namespace)){
                 namespacePath =  namespace.replace(ELEMENT_NAMESPACE_SPLITTER,separator)+separator;
             }
-            Path elementDirectoryPath = Paths.get( ROOT_DIRECTORY + separator + itemId
-                    + separator + versionId + separator + space + separator + namespacePath+ separator + elementId);
+            Path elementDirectoryPath;
+            if (!isNull(namespace)){
+                elementDirectoryPath = Paths.get( ROOT_DIRECTORY + separator + itemId
+                        + separator + versionId + separator + space + separator + namespacePath+ separator + elementId);
+            } else {
+                elementDirectoryPath = Paths.get( ROOT_DIRECTORY + separator + itemId
+                        + separator + versionId + separator + space + separator + elementId);
+              }
+
             if (notExists(elementDirectoryPath)) {
-                createDirectories(elementDirectoryPath);
-            }
+                 Path created = createDirectories(elementDirectoryPath);
+             }
 
             String info = elementEntity.getInfo();
             if (!isNull(info)) {
index 9eea182..710b731 100644 (file)
@@ -1,9 +1,11 @@
 package org.openecomp.core.tools.Commands.exportdata;
 
+import com.amdocs.zusammen.datatypes.Id;
 import com.amdocs.zusammen.datatypes.SessionContext;
 import com.amdocs.zusammen.datatypes.item.Item;
 import com.amdocs.zusammen.plugin.statestore.cassandra.dao.ItemDao;
 import com.amdocs.zusammen.plugin.statestore.cassandra.dao.ItemDaoFactory;
+import com.google.common.base.Strings;
 import org.openecomp.core.tools.Commands.ExportDataCommand;
 import org.openecomp.core.utilities.json.JsonUtil;
 import org.openecomp.sdc.logging.api.Logger;
@@ -13,11 +15,14 @@ import java.io.IOException;
 import java.net.URISyntaxException;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
+import java.util.Set;
 
-import static java.nio.file.Files.*;
 import static java.io.File.separator;
-import static org.openecomp.core.tools.Commands.exportdata.ImportProperties.*;
+import static java.nio.file.Files.*;
+import static org.openecomp.core.tools.Commands.exportdata.ImportProperties.JSON_POSTFIX;
 
 public class ItemHandler {
     private static final Logger logger = LoggerFactory.getLogger(ExportDataCommand.class);
@@ -27,21 +32,42 @@ public class ItemHandler {
         ImportProperties.initParams();
     }
 
-    public void createItemsData(SessionContext context, String filteredItem) throws URISyntaxException, IOException {
+    public void createItemsData(SessionContext context, Set<String> filteredItem) throws URISyntaxException, IOException {
+        final List<Item> items = new ArrayList<>();
+        if (filteredItem.isEmpty()) {
+            items.addAll(getItemDao(context).list(context));
+        } else {
+            Optional<Item> item = addItem(context, filteredItem.iterator().next(), items);
+            item.ifPresent(foundedItem -> {
+                Object vendorId =  foundedItem.getInfo().getProperty("vendorId");
+                if (vendorId != null) {
+                    String vendorIdStr = vendorId.toString();
+                    addItem(context, vendorIdStr, items);
+                    filteredItem.add(vendorIdStr);
+                }
+            });
+        }
+
+        items.parallelStream().forEach(item -> createItemDirectoryAndFiles(item, filteredItem));
+
+    }
+
 
-        List<Item> items = getItemDao(context).list(context);
-        items.parallelStream().forEach(item -> createItemDirectoryAndFiles(item,filteredItem));
 
+    private Optional<Item> addItem(SessionContext context, String filteredItem, List<Item> items) {
+        Optional<Item> item = getItemDao(context).get(context, new Id(filteredItem));
+        item.ifPresent(itemData -> items.add(itemData));
+        return item;
     }
 
-    private final void createItemDirectoryAndFiles(Item item,String filteredItem) {
+    private final void createItemDirectoryAndFiles(Item item, Set<String> filteredItem) {
         try {
             String itemId = item.getId().getValue();
-            if (filteredItem != null && !itemId.contains(filteredItem)){
+            if (!filteredItem.isEmpty() && !filteredItem.contains(itemId)) {
                 return;
             }
-            Path itemPath = Paths.get( ImportProperties.ROOT_DIRECTORY + separator + itemId);
-            Path itemFilePath = Paths.get( ImportProperties.ROOT_DIRECTORY + separator +
+            Path itemPath = Paths.get(ImportProperties.ROOT_DIRECTORY + separator + itemId);
+            Path itemFilePath = Paths.get(ImportProperties.ROOT_DIRECTORY + separator +
                     itemId + separator + itemId + JSON_POSTFIX);
             if (notExists(itemPath)) {
                 createDirectories(itemPath);
index b8d8295..e8e703b 100644 (file)
@@ -17,6 +17,7 @@ import static org.openecomp.core.tools.Commands.exportdata.ImportProperties.ROOT
 
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.Set;
 
 public class VersionHandler {
     private static final Logger logger = LoggerFactory.getLogger(ExportDataCommand.class);
@@ -24,17 +25,17 @@ public class VersionHandler {
     public VersionHandler() {
     }
 
-    public void loadVersions(String filteredItem) {
+    public void loadVersions(Set<String> filteredItem) {
         VersionCassandraLoader versionCassandraLoader = new VersionCassandraLoader();
         versionCassandraLoader.list().forEach(versionEntity -> handleVersionEntity(versionEntity,filteredItem));
         VersionInfoCassandraLoader versionInfoCassandraLoader = new VersionInfoCassandraLoader();
         versionInfoCassandraLoader.list().forEach(versionInfoEntity ->  handleVersionInfo(versionInfoEntity,filteredItem));
     }
 
-    private void handleVersionEntity(VersionEntity versionEntity, String filteredItem) {
+    private void handleVersionEntity(VersionEntity versionEntity, Set<String> filteredItem) {
         try {
             String itemId = versionEntity.getItemId();
-            if (filteredItem != null && !itemId.contains(filteredItem)){
+            if (!filteredItem.isEmpty()  && !filteredItem.contains(itemId)){
                 return;
             }
             String versionId = versionEntity.getVersionId();
@@ -55,7 +56,7 @@ public class VersionHandler {
 
     }
 
-    private void handleVersionInfo(VersionInfoEntity versionInfoEntity, String filteredItem) {
+    private void handleVersionInfo(VersionInfoEntity versionInfoEntity, Set<String> filteredItem) {
         try {
             String itemId = versionInfoEntity.getEntityId();
             Path itemDirectory = Paths.get( ROOT_DIRECTORY + separator + itemId);
index 7ba8309..d51458a 100644 (file)
@@ -1,5 +1,6 @@
 package org.openecomp.core.tools.Commands.importdata;
 
+import com.amdocs.zusammen.datatypes.Id;
 import com.amdocs.zusammen.datatypes.SessionContext;
 import org.openecomp.core.tools.store.ElementCassandraLoader;
 import org.openecomp.core.tools.store.ElementNamespaceHandler;
@@ -15,21 +16,26 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.Arrays;
+import java.util.HashSet;
 import java.util.Set;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 import static java.io.File.separator;
 import static org.openecomp.core.tools.Commands.exportdata.ImportProperties.*;
 
 public class ElementImport {
     private static final Logger logger = LoggerFactory.getLogger(ElementImport.class);
+    public static final String ROOT_ITEM = Id.ZERO.getValue();
+
     private ElementCassandraLoader elementCassandraLoader = new ElementCassandraLoader();
     private ElementNamespaceHandler cassandraElementRepository = new ElementNamespaceHandler();
     private VersionCassandraLoader versionCassandraLoader = new VersionCassandraLoader();
 
-    public void loadPath(SessionContext sessionContext, Path elementDir, String elementId, String[] pathObjects) {
+    public void loadPath(SessionContext sessionContext, Path elementDir, String elementId, String[]
+            pathObjects) {
         try {
+            if (!Files.isDirectory(elementDir)){
+                return;
+            }
             // load info file
             ElementEntity elementEntity = new ElementEntity();
             Path infoFilePath = Paths.get(elementDir.toString() + separator + ELEMENT_INFO_PREFIX
@@ -38,7 +44,6 @@ public class ElementImport {
                 String info = new String(Files.readAllBytes(infoFilePath));
                 elementEntity.setInfo(info);
             }
-
             // load relation file
             Path realtionsFilePath = Paths.get(elementDir.toString() + separator
                     + ELEMENT_RELATION_PREFIX + elementId + JSON_POSTFIX);
@@ -58,7 +63,7 @@ public class ElementImport {
 
             //load visualization
             Path visualFilePath = Paths.get(elementDir.toString() + separator
-                    + ELEMENT_VISUALIZATION_PREFIX + elementId );
+                    + ELEMENT_VISUALIZATION_PREFIX + elementId);
             if (Files.exists(visualFilePath)) {
                 byte[] bytes = Files.readAllBytes(visualFilePath);
                 ByteBuffer visualization = ByteBuffer.wrap(bytes);
@@ -67,45 +72,60 @@ public class ElementImport {
 
             //load searchable
             Path searchableFilePath = Paths.get(elementDir.toString() + separator
-                    + ELEMENT_SEARCHABLE_PREFIX + elementId );
+                    + ELEMENT_SEARCHABLE_PREFIX + elementId);
             if (Files.exists(searchableFilePath)) {
                 byte[] bytes = Files.readAllBytes(searchableFilePath);
                 ByteBuffer searchable = ByteBuffer.wrap(bytes);
                 elementEntity.setSearchableData(searchable);
             }
-
+            String element_Id = pathObjects[pathObjects.length - 1];
             elementEntity.setSpace(pathObjects[2]);
             elementEntity.setItemId(pathObjects[0]);
             elementEntity.setVersionId(pathObjects[1]);
-            elementEntity.setElement_id(pathObjects[pathObjects.length - 1]);
+            elementEntity.setElement_id(element_Id);
             elementEntity.setNamespace(getNameSpace(pathObjects));
             elementEntity.setParentId(getParentId(pathObjects));
-            elementEntity.setSubElementIds(getAllSubElementsIds(elementDir));
+            elementEntity.setSubElementIds(getAllSubElementsIds(elementDir, element_Id));
             elementCassandraLoader.createEntity(elementEntity);
             cassandraElementRepository.createElementNamespace(elementEntity);
             versionCassandraLoader.insertElementToVersion(elementEntity);
         } catch (Exception ex) {
             logger.error(ex.getMessage(), ex);
+            ex.printStackTrace();
         }
     }
 
     private String getParentId(String[] pathObjects) {
-        if (pathObjects.length <= 4) {
+
+        if (pathObjects[pathObjects.length - 1].equals(ROOT_ITEM)) {
             return null;
         }
+        if (pathObjects.length == 4) {
+            return ROOT_ITEM;
+        }
         return pathObjects[pathObjects.length - 2];
     }
 
-    private Set<String> getAllSubElementsIds(Path root) throws IOException {
-        try (Stream<Path> walk = Files.walk(root)) {
-           return  walk.filter(path -> Files.isDirectory(path))
-                   .map(path -> path.toFile().getName() ).collect(Collectors.toSet());
+    private Set<String> getAllSubElementsIds(Path root, String elementId) throws IOException {
+        if (elementId.equals(ROOT_ITEM)) {
+            root = root.getParent();
+        }
+        File file = root.toFile();
+        Set<String> retVal = new HashSet<>();
+        File[] files = file.listFiles();
+        for (File f : files){
+            if (f.isDirectory()){
+                retVal.add(f.getName());
+            }
         }
+        retVal.remove(ROOT_ITEM);
+        return retVal;
+
     }
 
     private String getNameSpace(String[] pathObjects) {
         if (pathObjects.length <= 4) {
-            return null;
+            return "";
         }
         if (pathObjects.length == 5) {
             return pathObjects[3];
index c704274..9ec5d63 100644 (file)
@@ -31,8 +31,11 @@ public class ItemImport {
             Item item = JsonUtil.json2Object(itemJson, Item.class);
             ItemDao itemDao = getItemDao(sessionContext);
             itemDao.create(sessionContext, item.getId(), item.getInfo(), item.getCreationTime());
+            logger.info("Item Created :"+item.getInfo().getName()+" , "+item.getId());
+            System.out.println("Item Created :"+item.getInfo().getName()+" , "+item.getId());
         } catch (Exception ex) {
             logger.error(ex.getMessage(), ex);
+            ex.printStackTrace();
         }
     }
 
index 020b2f3..15f8b02 100644 (file)
@@ -4,10 +4,14 @@ import com.amdocs.zusammen.datatypes.SessionContext;
 import org.openecomp.sdc.logging.api.Logger;
 import org.openecomp.sdc.logging.api.LoggerFactory;
 
+import javax.validation.constraints.Min;
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 import java.util.stream.Stream;
 
 public class TreeWalker {
@@ -21,7 +25,10 @@ public class TreeWalker {
     }
 
     private static final void handlePath(SessionContext sessionContext, Path path, Path root,String filterItem) {
-        String logicalPath = path.toString().replace(root.toString()+File.separator, "");
+        String logicalPath = path.toString().replace(root.toString(), "");
+        if (logicalPath.startsWith(File.separator)){
+            logicalPath = logicalPath.substring(1);
+        }
         String[] splitted = logicalPath.split(File.separator);
         if(filterItem != null && splitted.length > 0 && !splitted[0].contains(filterItem)){
             return;
@@ -42,7 +49,7 @@ public class TreeWalker {
                 break;
             default:
                 //handle elements
-                new ElementImport().loadPath(sessionContext,path,splitted[splitted.length -1],splitted);
+                 new ElementImport().loadPath(sessionContext,path,splitted[splitted.length -1],splitted);
                 break;
         }
 
index 6447f85..2f6693d 100644 (file)
@@ -10,12 +10,14 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.Objects;
 import java.util.Scanner;
+import java.util.Set;
+import java.util.stream.Collectors;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 import java.util.zip.ZipOutputStream;
 
 public class ZipUtils {
-    public static void createZip(String zipFileName, Path dir, String filterItem) throws Exception {
+    public static void createZip(String zipFileName, Path dir, Set<String> filterItem) throws Exception {
         File dirObj = dir.toFile();
         try (
                 FileOutputStream fileOutputStream = new FileOutputStream(zipFileName);
@@ -24,29 +26,34 @@ public class ZipUtils {
         }
     }
 
-    public static final String cleanStr(String inFilterStr) {
-        if (Objects.isNull(inFilterStr)) {
-            return inFilterStr;
-        }
-        Scanner scan = new Scanner(inFilterStr);
-        while (scan.hasNextLine()) {
-            inFilterStr = scan.nextLine().replaceAll("[^a-zA-Z0-9]", "");
-        }
-        return inFilterStr;
+    public static final Set<String> cleanStr(Set<String> inFilterStrs) {
+        return inFilterStrs.stream().map(inFilterStr -> {
+                    if (Objects.isNull(inFilterStr)) {
+                        return inFilterStr;
+                    }
+                    Scanner scan = new Scanner(inFilterStr);
+                    while (scan.hasNextLine()) {
+                        inFilterStr = scan.nextLine().replaceAll("[^a-zA-Z0-9]", "");
+                    }
+                    return inFilterStr;
+                }
+        ).collect(Collectors.toSet());
     }
 
-    static void addDir(File dirObj, ZipOutputStream out, String root, String filterItem) throws IOException {
+    static void addDir(File dirObj, ZipOutputStream out, String root, Set<String> filterItem) throws IOException {
         File[] files = dirObj.listFiles();
         filterItem = cleanStr(filterItem);
 
         for (int i = 0; i < files.length; i++) {
             if (files[i].isDirectory()) {
                 addDir(files[i], out, root, filterItem);
+                String filePath = files[i].getAbsolutePath().replace(root + File.separator, "") + "/";
+                out.putNextEntry(new ZipEntry(filePath));
                 continue;
             }
             try (FileInputStream in = new FileInputStream((files[i].getAbsolutePath()))) {
                 String filePath = files[i].getAbsolutePath().replace(root + File.separator, "");
-                if (filterItem == null || filePath.contains(filterItem)) {
+                if (filterItem.isEmpty() || filterItem.stream().anyMatch(s -> filePath.contains(s))) {
                     out.putNextEntry(new ZipEntry(filePath));
                     try {
                         ByteStreams.copy(in, out);
@@ -74,9 +81,16 @@ public class ZipUtils {
             while (ze != null) {
                 String fileName = ze.getName();
                 File newFile = new File(outputFolder.toString() + File.separator + fileName);
-                new File(newFile.getParent()).mkdirs();
-                try (FileOutputStream fos = new FileOutputStream(newFile)) {
-                    ByteStreams.copy(zis, fos);
+                if (ze.isDirectory()) {
+                    Path path = newFile.toPath();
+                    if (!Files.exists(path)) {
+                        Files.createDirectories(path);
+                    }
+                } else {
+                    new File(newFile.getParent()).mkdirs();
+                    try (FileOutputStream fos = new FileOutputStream(newFile)) {
+                        ByteStreams.copy(zis, fos);
+                    }
                 }
                 ze = zis.getNextEntry();
             }
index b1c1335..a13dc82 100644 (file)
-<?xml version="1.0" encoding="UTF-8"?>
-<configuration scan="true" scanPeriod="5 seconds">
+<configuration>
 
-    <property scope="system" name="ECOMP-component-name" value="ASDC" />
-    <property scope="system" name="ECOMP-subcomponent-name" value="ASDC-BE" />
-    <property file="${config.home}/catalog-be/configuration.yaml" />
-    <property scope="context" name="enable-all-log" value="false" />
-
-    <!--statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />
-    <include resource="asdc_debug_logback.xml"/-->
-
-    <!-- value used by pattern field list (| - is inter-field separator, || - unavailable or not applicable field value) (m - mandatory, o- optional)-->
-    <!--timestamp(m)| requestID(m)| serviceInstanceID(o)| threadID(m)| physicalServerName(o)| serviceName(m)| userID(m)| logLevel(m)| severity(o)| serverIpAddress(m)| serverName(m)| clientIpAddress(o)| className(m)| timer(o)| detailedMessage(o)-->
-    <property name="default-log-pattern"
-              value="%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{uuid}|%X{serviceInstanceID}|%thread||${ECOMP-subcomponent-name}|%X{userId}|%level|%X{alarmSeverity}|%X{localAddr}|${beFqdn}|%X{remoteAddr}|%logger{35}|%X{timer}|ActivityType=&lt;%M&gt;, Desc=&lt;%msg&gt;%n" />
-
-    <property name="asdc-debug-log-pattern" value="%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestId}|%msg %n"/>
-
-    <!-- All log -->
-    <if condition='property("enable-all-log").equalsIgnoreCase("true")'>
-        <then>
-            <appender name="ALL_ROLLING"
-                      class="ch.qos.logback.core.rolling.RollingFileAppender">
-                <file>${log.home}/${ECOMP-component-name}/${ECOMP-subcomponent-name}/all.log
-                </file>
-
-                <rollingPolicy
-                        class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
-                    <fileNamePattern>${log.home}/${ECOMP-component-name}/${ECOMP-subcomponent-name}/all.log.%i
-                    </fileNamePattern>
-                    <minIndex>1</minIndex>
-                    <maxIndex>10</maxIndex>
-                </rollingPolicy>
-
-                <triggeringPolicy
-                        class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
-                    <maxFileSize>20MB</maxFileSize>
-                </triggeringPolicy>
-                <encoder>
-                    <pattern>${default-log-pattern}</pattern>
-                </encoder>
-            </appender>
-
-            <appender name="ASYNC_ALL" class="ch.qos.logback.classic.AsyncAppender">
-                <appender-ref ref="ALL_ROLLING" />
-            </appender>
-        </then>
-    </if>
-
-    <!-- Error log -->
-    <appender name="ERROR_ROLLING"
-              class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${log.home}/${ECOMP-component-name}/${ECOMP-subcomponent-name}/Error.log
-        </file>
-
-        <!-- Audit messages filter - deny audit messages -->
-        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
-            <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
-                <marker>AUDIT_MARKER</marker>
-            </evaluator>
-            <onMismatch>NEUTRAL</onMismatch>
-            <onMatch>DENY</onMatch>
-        </filter>
-
-        <!-- Transaction messages filter - deny Transaction messages -->
-        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
-            <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
-                <marker>TRANSACTION_MARKER</marker>
-            </evaluator>
-            <onMismatch>NEUTRAL</onMismatch>
-            <onMatch>DENY</onMatch>
-        </filter>
-
-        <!-- deny all events with a level below INFO, that is TRACE and DEBUG -->
-        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-            <level>INFO</level>
-        </filter>
-
-        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
-            <fileNamePattern>${log.home}/${ECOMP-component-name}/${ECOMP-subcomponent-name}/Error.log.%i
-            </fileNamePattern>
-            <minIndex>1</minIndex>
-            <maxIndex>10</maxIndex>
-        </rollingPolicy>
-
-        <triggeringPolicy
-                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
-            <maxFileSize>20MB</maxFileSize>
-        </triggeringPolicy>
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <!-- encoders are assigned the type
+             ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
         <encoder>
-            <pattern>${default-log-pattern}</pattern>
+            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
         </encoder>
     </appender>
 
-    <!-- Debug log -->
-    <appender name="DEBUG_ROLLING"
-              class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${log.home}/${ECOMP-component-name}/${ECOMP-subcomponent-name}/debug.log
-        </file>
-
-        <!-- No need to deny audit messages - they are INFO only, will be denied
-            anyway -->
-        <!-- Transaction messages filter - deny Transaction messages, there are
-            some DEBUG level messages among them -->
-        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
-            <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
-                <marker>TRANSACTION_MARKER</marker>
-            </evaluator>
-            <onMismatch>NEUTRAL</onMismatch>
-            <onMatch>DENY</onMatch>
-        </filter>
 
-        <!-- accept DEBUG and TRACE level -->
-        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
-            <evaluator class="ch.qos.logback.classic.boolex.GEventEvaluator">
-                <expression>
-                    e.level.toInt() &lt;= DEBUG.toInt()
-                </expression>
-            </evaluator>
-            <OnMismatch>DENY</OnMismatch>
-            <OnMatch>NEUTRAL</OnMatch>
-        </filter>
-
-        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
-            <fileNamePattern>${log.home}/${ECOMP-component-name}/${ECOMP-subcomponent-name}/debug.log.%i
-            </fileNamePattern>
-            <minIndex>1</minIndex>
-            <maxIndex>10</maxIndex>
-        </rollingPolicy>
-
-        <triggeringPolicy
-                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
-            <maxFileSize>20MB</maxFileSize>
-        </triggeringPolicy>
-        <encoder>
-            <pattern>${default-log-pattern}</pattern>
-        </encoder>
-    </appender>
-
-    <!-- Debug log -->
-    <appender name="MIGRATION_DEBUG_ROLLING"
-              class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${log.home}/${ECOMP-component-name}/${ECOMP-subcomponent-name}/cassandra2zusammen_migration_debug.log
-        </file>
-
-        <!-- No need to deny audit messages - they are INFO only, will be denied
-            anyway -->
-        <!-- Transaction messages filter - deny Transaction messages, there are
-            some DEBUG level messages among them -->
-        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
-            <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
-                <marker>TRANSACTION_MARKER</marker>
-            </evaluator>
-            <onMismatch>NEUTRAL</onMismatch>
-            <onMatch>DENY</onMatch>
-        </filter>
-
-        <!-- accept DEBUG and TRACE level -->
-        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
-            <evaluator class="ch.qos.logback.classic.boolex.GEventEvaluator">
-                <expression>
-                    e.level.toInt() &lt;= DEBUG.toInt()
-                </expression>
-            </evaluator>
-            <OnMismatch>DENY</OnMismatch>
-            <OnMatch>NEUTRAL</OnMatch>
-        </filter>
-
-        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
-            <fileNamePattern>${log.home}/${ECOMP-component-name}/${ECOMP-subcomponent-name}/debug_by_package.log.%i
-            </fileNamePattern>
-            <minIndex>1</minIndex>
-            <maxIndex>10</maxIndex>
-        </rollingPolicy>
-
-        <triggeringPolicy
-                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
-            <maxFileSize>20MB</maxFileSize>
-        </triggeringPolicy>
-        <encoder>
-            <pattern>${asdc-debug-log-pattern}</pattern>
-        </encoder>
-    </appender>
 
-    <!-- Audit log -->
-    <appender name="AUDIT_ROLLING"
-              class="ch.qos.logback.core.rolling.RollingFileAppender">
-
-        <file>${log.home}/${ECOMP-component-name}/${ECOMP-subcomponent-name}/audit.log
-        </file>
-
-        <!-- Audit messages filter - accept audit messages -->
-        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
-            <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
-                <marker>AUDIT_MARKER</marker>
-            </evaluator>
-            <onMismatch>DENY</onMismatch>
-            <onMatch>ACCEPT</onMatch>
-        </filter>
-
-        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
-            <fileNamePattern>${log.home}/${ECOMP-component-name}/${ECOMP-subcomponent-name}/audit.log.%i
-            </fileNamePattern>
-            <minIndex>1</minIndex>
-            <maxIndex>10</maxIndex>
-        </rollingPolicy>
-
-        <triggeringPolicy
-                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
-            <maxFileSize>20MB</maxFileSize>
-        </triggeringPolicy>
-        <encoder>
-            <pattern>${default-log-pattern}</pattern>
-        </encoder>
-    </appender>
-
-    <!-- SdncTransaction log -->
-    <appender name="TRANSACTION_ROLLING"
-              class="ch.qos.logback.core.rolling.RollingFileAppender">
-
-        <file>${log.home}/${ECOMP-component-name}/${ECOMP-subcomponent-name}/transaction.log
-        </file>
-
-        <!-- Transaction messages filter - accept audit messages -->
-        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
-            <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
-                <marker>TRANSACTION_MARKER</marker>
-            </evaluator>
-            <onMismatch>DENY</onMismatch>
-            <onMatch>ACCEPT</onMatch>
-        </filter>
-
-        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
-            <fileNamePattern>${log.home}/${ECOMP-component-name}/${ECOMP-subcomponent-name}/transaction.log.%i
-            </fileNamePattern>
-            <minIndex>1</minIndex>
-            <maxIndex>10</maxIndex>
-        </rollingPolicy>
-
-        <triggeringPolicy
-                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
-            <maxFileSize>20MB</maxFileSize>
-        </triggeringPolicy>
-        <encoder>
-            <pattern>${default-log-pattern}</pattern>
-        </encoder>
-    </appender>
-
-    <!-- Asynchronicity Configurations -->
-    <appender name="ASYNC_DEBUG" class="ch.qos.logback.classic.AsyncAppender">
-        <appender-ref ref="DEBUG_ROLLING" />
-    </appender>
-
-    <appender name="ASYNC_TRANSACTION" class="ch.qos.logback.classic.AsyncAppender">
-        <appender-ref ref="TRANSACTION_ROLLING" />
-    </appender>
-
-    <appender name="ASYNC_ERROR" class="ch.qos.logback.classic.AsyncAppender">
-        <appender-ref ref="ERROR_ROLLING" />
-    </appender>
-
-
-    <root level="INFO">
-        <appender-ref ref="ASYNC_ERROR" />
-        <appender-ref ref="ASYNC_DEBUG" />
-        <appender-ref ref="AUDIT_ROLLING" />
-        <appender-ref ref="ASYNC_TRANSACTION" />
-        <if condition='property("enable-all-log").equalsIgnoreCase("true")'>
-            <then>
-                <appender-ref ref="ALL_ROLLING" />
-            </then>
-        </if>
+    <root level="warn">
+        <appender-ref ref="STDOUT"/>
     </root>
 
-    <logger name="org.openecomp.sdc" level="INFO" />
-
-    <logger name="org.openecomp.core" level="DEBUG" additivity="false">
-        <appender-ref ref="MIGRATION_DEBUG_ROLLING" />
-    </logger>
-</configuration>
-
-
+</configuration>
\ No newline at end of file
index 2a11210..13e532c 100644 (file)
@@ -6,6 +6,9 @@ debug.log
 dist
 node_modules
 devConfig.json
+proxy-server.js
+runLocalFE.cmd
+runLocalFE.js
 .npmrc
 test/coverage
 npm-debug.log
index 46f0d18..99380b1 100644 (file)
@@ -1,6 +1,6 @@
 {
   "port": 9000,
-  "proxyATTTarget": null,
+  "proxyCatalogTarget": null,
   "proxyTarget": null,
   "bundles": {
     "bundle": ["sdc-app/sdc.app.jsx"],
index 0e1e66b..ef44bfb 100644 (file)
@@ -8,8 +8,8 @@
     "start": "gulp dev && webpack-dev-server --progress",
     "build": "gulp build",
     "css-usage": "gulp css-usage",
-    "static-keys-bundle" : "gulp static-keys-bundle",
-    "check-keys-against-bundles" : "gulp static-keys-bundle-with-report",
+    "static-keys-bundle": "gulp static-keys-bundle",
+    "check-keys-against-bundles": "gulp static-keys-bundle-with-report",
     "test": "jest",
     "test-failedTestReport": "jest --json | node test-utils/failedTestReport.js",
     "test-dev": "jest --watch",
     "storyshots": "jest storyshots.test.js",
     "build-storybook": "build-storybook -c .storybook -o .storybook-dist && gulp copy-storybook-fonts && gulp copy-storybook-resources-prod"
   },
-  "dependencies": {
+  "dependencies": {    
     "classnames": "^2.2.5",
     "core-js": "^2.4.0",
+    "d3": "^3.5.16",
     "dox-sequence-diagram-ui": "file:../dox-sequence-diagram-ui",
     "intl": "^1.0.1",
     "intl-format-cache": "^2.0.5",
@@ -39,7 +40,7 @@
     "react-sortable": "^1.2.0",
     "redux": "^3.3.1",
     "restful-js": "^0.7.0",
-    "sdc-ui": "^1.5.12",
+    "sdc-ui": "1.6.0",
     "uuid-js": "^0.7.5",
     "validator": "^4.3.0"
   },
diff --git a/openecomp-ui/proxy-server.js b/openecomp-ui/proxy-server.js
deleted file mode 100644 (file)
index 4733d38..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-'use strict';
-
-const proxy = require('http-proxy-middleware');
-
-let localDevConfig = {};
-try {
-       localDevConfig = require('./devConfig');
-} catch (e) {}
-const devConfig = Object.assign({}, require('./devConfig.defaults'), localDevConfig);
-let devPort = process.env.PORT || devConfig.port;
-
-let jsonConfig = {
-       "appContextPath" : "/onboarding"
-};
-
-try {
-       jsonConfig = require('./src/sdc-app/config/config.json');
-} catch (e) {
-       console.log('could not load config. using deault value instead');
-}
-
-module.exports = function (server) {
-       let proxyConfigDefaults = {
-               changeOrigin: true,
-               secure: false,
-               onProxyRes: (proxyRes, req, res) => {
-                       let setCookie = proxyRes.headers['set-cookie'];
-                       if (setCookie) {
-                               setCookie[0] = setCookie[0].replace(/\bSecure\b(; )?/, '');
-                       }
-                       if (proxyRes.statusCode === 302 && proxyRes.headers.location.indexOf('login') > -1) {
-                               proxyRes.headers.location = `http://localhost:${devPort}/sdc1#/onboardVendor`;
-                               res.setHeader('Set-Cookie', [
-                                       'HTTP_CSP_EMAIL=csantana@sdc.com',
-                                       'HTTP_CSP_FIRSTNAME=Carlos',
-                                       'HTTP_CSP_LASTNAME=Santana',
-                                       'HTTP_CSP_WSTYPE=Intranet',
-                                       'HTTP_IV_REMOTE_ADDRESS=0.0.0.0',
-                                       'HTTP_IV_USER=cs0008',
-                                       'USER_ID=cs0008'
-                               ]);
-                       }
-               }
-       };
-
-       let middlewares = [
-               (req, res, next) => {
-                       if (req.url.indexOf('/proxy-designer1') > -1) {
-                               req.url = req.url.replace('/proxy-designer1', '');
-                       }
-
-                       if (req.url.indexOf(jsonConfig.appContextPath + '/resources') > -1) {
-                               req.url = req.url.replace(jsonConfig.appContextPath, '');
-                       }
-
-                       let match = req.url.match(/^(.*)_en.js$/);
-                       let newUrl = match && match[1] + '.js';
-                       if (newUrl) {
-                               console.log(`REWRITING URL: ${req.url} -> ${newUrl}`);
-                               req.url = newUrl;
-                       }
-                       next();
-               }
-       ];
-
-       // standalon back-end (proxyTarget) has higher priority, so it should be first
-       if (devConfig.proxyTarget) {
-               middlewares.push(
-                       proxy(['/api', '/onboarding-api', '/sdc1/feProxy/onboarding-api'], Object.assign({}, proxyConfigDefaults, {
-                               target: devConfig.proxyTarget,
-                               pathRewrite: {
-                                       '/sdc1/feProxy/onboarding-api': '/onboarding-api'
-                               }
-                       }))
-               );
-       }
-
-       // ATT environment (proxyATTTarget) has lower priority, so it should be second
-       if (devConfig.proxyATTTarget) {
-               middlewares.push(
-                       proxy(['/sdc1', '/onboarding-api', '/scripts', '/styles'], Object.assign({}, proxyConfigDefaults, {
-                               target: devConfig.proxyATTTarget,
-                               pathRewrite: {
-                                       // Workaround for some weird proxy issue
-                                       '/sdc1/feProxy/onboarding-api': '/sdc1/feProxy/onboarding-api',
-                                       '/onboarding-api': '/sdc1/feProxy/onboarding-api'
-                               }
-                       }))
-               );
-       }
-       server.use(middlewares);
-};
index 317f908..405e91a 100644 (file)
@@ -1,4 +1,5 @@
 @import "modules/licenseModelOverview";
+@import "modules/licenseModelLimits";
 @import "modules/licenseAgreement";
 @import "modules/featureGroup";
 @import "modules/entitlementPools";
index 9301f1e..ad6b4f8 100644 (file)
@@ -1,6 +1,7 @@
 .modal-content {
   .modal-header {
     border-top: 3px solid $blue;
+               padding-left: 50px;
     .modal-title {
       @extend .heading-2;
     }
index dce623e..54f8b97 100644 (file)
@@ -219,14 +219,10 @@ $browserPrefixes: webkit moz o ms;
   width: $size;
   height: $size;
   background: $bgcolor;
-  border: 3px solid $bgcolor;
-  &:after {
-    content: $content;
-    position: relative;
-    left: 9px;
-    top: 9px;
-    @extend .circle-icon-text;
-  }
+       border: 3px solid $bgcolor;
+       display: flex;
+       align-items: center;
+       justify-content: center;
 }
 
 /**/
@@ -306,3 +302,12 @@ $browserPrefixes: webkit moz o ms;
 @mixin border-shadow($xShadow: 0.545px, $yShadow: 0.839px, $blur: 4px, $spread: 0, $color: $light-gray, $opacity: 0.2) {
   @include box-shadow($xShadow $yShadow $blur $spread rgba($color, $opacity));
 }
+
+/* percent-plus-value */
+// @mixin
+//     Calculate length property (e.g. width, margin) by adding a value (e.g. in pixels)
+//     to a percentage of container height/width
+@mixin percent-plus-value($property, $value, $percent: 100%) {
+  $string: 'calc(' + $percent + ' + ' + $value + ')';
+  #{$property}: unquote($string);
+}
index 593bb09..d51a1b6 100644 (file)
@@ -1,5 +1,6 @@
 .customized-date-picker {
        margin-bottom: 24px;
+       display: flex;
        .date-picker-label {
                &.required {
                        &:before {
                color: $dark-gray;
                margin-bottom: 8px;
        }
+       .react-datepicker__input-container {
+               flex: 1;
+               cursor: pointer;
+       }
        .datepicker-custom-input {
                display: flex;
                justify-content: space-between;
-               width: 243px;
+               align-items: center;
                height: 30px;
                border-radius: 2px;
                color: $dark-gray;
                border: 1px solid $light-gray;
-               padding: 6px 12px;
+               padding: 6px 8px 6px 12px;
+               .clear-input {
+                               margin-left: auto;
+                               margin-right: 8px;
+                               .svg-icon {
+                                       fill: transparent;
+                                       height: 8px;
+                                       width: 8px;
+                               }
+                       }
                &:hover {
                        border-color: $gray;
                        .clear-input {
-                               &:before {
-                                       cursor: pointer;
-                                       content: 'x';
+                               .svg-icon {
+                                       fill: initial;
                                }
                        }
                }
                .datepicker-text {
                        cursor: pointer;
-                       width: 170px;
                        @extend .body-1;
                        &.placeholder {
                                color: $light-gray;
                .calendar-input {
                        fill: $light-gray;
                }
+               .svg-icon-wrapper.calendar {
+                       .svg-icon {
+                               fill: $dark-gray;
+                               width: 17px;
+                               height: 17px;
+                       }
+               }
        }
-
-
-
 }
 
index 4a1a940..4353ab3 100644 (file)
@@ -7,8 +7,7 @@
        }
 
   .dual-search-multi-select-section {
-    $multi-select-box-width: 398px;
-    width: $multi-select-box-width;
+    flex: 1;
     .dual-text-box-search-title, .dual-list-box-multi-select-text {
       @extend .body-1;
       color: $dark-gray;
index 7165e57..5b10dee 100644 (file)
   }
 
   &.danger {
+    .modal-content .modal-header {
+      border-top: 3px solid $red;
+    }
+       }
+       
+       &.negative {
     .modal-content .modal-header {
       border-top: 3px solid $red;
     }
index 4e42b6c..79a5432 100644 (file)
                                fill: $green;
                          }
                        }
+                       .svg-icon-wrapper.hideDelete {
+                               .svg-icon {
+                                       fill: $white;
+                               }
+                       }
                        .select-action-table-row {
                                display: flex;
                                flex: 1;
@@ -80,6 +85,7 @@
                                &.has-error {
                                        border-color: $red;
                                }
+
                                .select-action-table-cell {
                                        flex: 1;
                                        border-right: 1px solid;
                                                border-bottom: 1px solid $blue;
                                                overflow: auto;
                                                .Select-menu {
-                                                       display: inline-block;
                                                        .Select-option {
-                                                               width: 100%;
-                                                               display: inline-block;
+                                                               overflow: hidden;
+                                                               text-overflow: ellipsis;
                                                                border-bottom: 1px solid $light-gray;
                                                                &:hover {
                                                                        background-color: $blue;
index 46269ad..e4aac32 100644 (file)
@@ -7,12 +7,10 @@ form {
     .validation-radio-wrapper {
       position: relative;
     }
-    .nav-tabs {
+    .sdc-tabs {
       position: relative;
-      .invalid-tab:not(.active) {
-        a {
+      .invalid-tab:not(.sdc-tab-active) {
           color: $red;
-        }
       }
     }
     .validation-error-message {
index 0e0a72a..ad0bb77 100644 (file)
@@ -1,6 +1,5 @@
 
-.entitlement-pools-list-editor {
-
+.entitlement-pools-list-editor {  
   .list-editor-view-list {
     .list-editor-item-view {
       min-height: 110px;
@@ -8,13 +7,9 @@
     }
     .list-editor-item-view-field {
 
-      .entitlement-pools-count, .entitlement-parameters, .contract-number, .type{
+      .entitlement-pools-count, .contract-number, .type{
         color: $purple;
       }
-      .entitlement-parameters {
-        @include ellipsis;
-        margin-bottom: 2px;
-      }
       .entitlement-pools-count {
         @extend .heading-1;
         margin-top: -10px;
 }
 
 .entitlement-pools-modal {
-  .validation-form-content {
-    padding: 50px;
-  }
   .modal-body {
     padding: 0;
   }
+       .sdc-tab-content {
+               margin: 0;
+       }
   .entitlement-pools-form {
-    .tab-content {
-      padding: 50px;
-    }
                .threshold-section {
                        display: flex;
                        justify-content: space-between;
                        .validation-input-wrapper {
                                flex: 0 0 46%;
                        }
+    }
+    .date-section {
+                       display: flex;
+                       justify-content: space-between;
+                       .validation-input-wrapper {
+                               flex: 0 0 46%;
+                       }
+               }
+               .validation-form-content {
+                       padding: 20px 50px;
                }
   }
   .validation-buttons {
index 8c45d8e..9d395f9 100644 (file)
       margin-top: 55px;
       color: $dark-gray;
     }
+               .validation-form-content {
+                       padding: 0;
+               }
+
+               .nav.nav-tabs {
+                       padding-left: 50px;
+               }
+               
     .tab-content {
       padding: 50px;
       .field-section {
index 5de757b..d072849 100644 (file)
     }
   }
 }
-
-.license-key-groups-modal {
-  .modal-body {
-    padding: 0;
-  }
-  .license-key-groups-form {
-    .validation-form-content {
-      padding: 50px;
-      .field-section {
-        @extend .body-2-semibold;
-        margin-bottom: 23px;
-        width: 400px;
-        color: $black;
-      }
-    }
-    .validation-buttons {
-      padding: 20px 50px;
-    }
-  }
-}
index 3d65be6..fab091f 100644 (file)
@@ -1,20 +1,53 @@
-.license-model-type-modal {
+.license-model-modal {
   .modal-body {
     padding: 0;
   }
-  .validation-form-content {
-    padding: 50px;
-    .field-section {
-      @extend .body-2-semibold;
-      margin-bottom: 23px;
-      width: 400px;
-      color: $black;
+       .modal-header {
+               border-bottom: none;
+               padding-bottom: 30px;
+       }
+  .modal-body {
+    padding: 0;
+  }
+       .sdc-tabs-list {
+               padding-left: 50px;
+               border-bottom: 1px solid $tlv-light-gray;
+               display: flex;
+               align-items: baseline;
+       }
+       .sdc-tab-content {
+               margin-top: 0;
+       }
+       .add-limit-button {
+               margin-left: auto;
+               margin-right: 50px;
+               padding-right: 0;
+               text-align: end;
+       }
+       .license-model-form {
+    .validation-form-content {
+      padding: 20px 50px;
+               }
+    .validation-buttons {
+      padding: 20px 50px;
     }
-    textarea {
-      height: 107px;
+               &.license-agreement-form, &.feature-group-form {
+                       .validation-form-content {
+                               padding: 0;
+                       }
+                       .sdc-tab-content {
+                               padding: 20px 50px;
+                       }
+               }
+       }
+       .license-model-modal-buttons {
+               padding: 21px 50px;
+    display: flex;
+    justify-content: flex-end;
+               background-color: $tlv-gray;
+               margin-top: 2px;
+    .sdc-button {
+      margin-left: 20px;
     }
-  }
-  .validation-buttons {
-    padding: 20px 50px;
-  }
+       }
 }
diff --git a/openecomp-ui/resources/scss/modules/_licenseModelLimits.scss b/openecomp-ui/resources/scss/modules/_licenseModelLimits.scss
new file mode 100644 (file)
index 0000000..32fd128
--- /dev/null
@@ -0,0 +1,121 @@
+.license-model-limits-view {
+       max-height: 490px;
+       overflow: auto;
+
+       .limit-editor-title {
+               padding: 10px 50px;
+               background-color: $blue;
+               color: $white;
+
+       }
+       .list-editor-view-add-title {
+               margin-right: 20px;
+       }
+
+       .no-limits-text {
+               padding-left: 50px;
+       }
+
+       .list-editor-view {
+               .list-editor-view-header {
+                       border-bottom: none;
+                       padding-top: 30px;
+                       padding-bottom: 0;
+               }
+
+               .list-editor-view-list-scroller {
+                       margin-top: 0;
+                       margin-bottom: 30px;
+               }
+               .list-editor-view-list {
+                       width: 100%;
+                       .list-editor-item-view {
+                               min-height: 50px;
+                               height: 50px;
+                               background-color: $tlv-light-gray;
+                               border-color: transparent;
+                               margin: 1px 0;
+                               .list-editor-item-view-content {
+                                       padding-left: 0;
+                               }
+                               .svg-icon-wrapper.trashO {
+                                       margin-bottom: 0;
+                                       margin-right: 50px;
+                                       .svg-icon {
+                                               fill: $gray;
+                                               height: 16px;
+                                               width: 16px;
+                                               &:hover {
+                                                               fill: $dark-gray;
+                                                       }
+                                       }
+                               }
+                               &.selectable {
+                                       &:hover {
+                                               background-color: darken($tlv-light-gray, 4%);
+                                               cursor: pointer;
+                                       }
+                               }
+                               &:hover {
+                                       border-color: transparent;
+                                       cursor: default;
+                               }
+                               .list-editor-item-view-content {
+                                       .list-editor-item-view-field {
+                                               display: flex;
+                               align-items: center;
+                                               white-space: nowrap;
+                                               
+                                               &.limit-name {
+                                                       .text.name {
+                                                               @extend .body-1-semibold;
+                                                               color: $blue;
+                                                               text-transform: uppercase;
+                                                               padding: 0px 10px;
+                                                       }
+                                                       
+                                                       border-right: 1px solid $light-gray;
+                                                       margin-right: 22px;
+                                                       flex: 0.4;
+                                                       display: flex;
+                                                       justify-content: center;
+                                               }
+
+                                               &.limit-description {
+                                                       max-width: 300px;
+                                                       margin-right: 22px;
+                                               }
+
+                                               &.limit-metric-details {
+                                                       max-width: 300px;
+                                               }
+
+                                               .text.description, .text.name {
+                                                       overflow: hidden;
+                                                       text-overflow: ellipsis;
+                                                       white-space: nowrap;
+                                               }
+                                       }
+
+                               }                       
+                       }
+               }
+       }
+       .limit-editor{
+               .limit-editor-form {
+                       .limit-editor-form-grid-section {
+                               padding-bottom: 0;
+                       }
+                       .validation-form-content {
+                               padding: 21px 45px;
+                       }
+                       .limit-editor-buttons {                 
+                               display: flex;
+                               justify-content: flex-end;
+                               .sdc-button {
+                               margin-left: 20px;
+                               }
+                       }
+               }
+       }
+}
\ No newline at end of file
index 5c74e82..1c133a1 100644 (file)
@@ -1,3 +1,21 @@
+$list-indentation: 20px;
+$arrow-margin: 30px;
+$icon-margin: 30px;
+$arrow-element-width: 30px;
+$list-item-padding: 15px;
+
+@mixin overview-tile-shadow() {
+       @include box-shadow(0.5px 0.8px 4px 0 rgba(24, 24, 25, 0.05));
+}
+
+// @mixin vlm-list-item-inset($color) {
+//     @include box-shadow(inset 6px 0 0 0 $color);
+// }
+
+$la-color: $dark-blue;
+$fg-color: $blue;
+$lkg-ep-color: $light-blue;
+
 .license-model-overview {
   .overview-top-section {
     .overview-title{
       .vendor-data-view {
         @extend .flex-column;
         background-color: $tlv-gray;
-        padding: 20px 30px;
+        padding: 13px 30px;
         border: 1px solid $tlv-light-gray;
-        @include border-shadow();
+        @include overview-tile-shadow();
         .vendor-title {
           margin-top:5px;
         }
         .vendor-name {
           @extend .heading-4-semibold;
           text-transform: none;
-          padding-bottom: 15px;
+          padding-bottom: 10px;
           border-bottom: 1px solid $tlv-light-gray;
         }
-        .vendor-description {
+        .vendor-description, .vendor-description-readonly {
           @extend .flex;
           @extend .body-1;
           justify-content: space-between;
-          margin-top: 10px;
           overflow: hidden;
+                                       position: relative;
+                                       flex: initial;
+        }
+
+        &:not(.read-only) .vendor-description {
           border: 1px solid transparent;
-          position: relative;
-          left: -6px;
-          width: 101%;
+          padding: 2px 0 2px 6px;
+          margin-top: 10px;
 
+          $hover-padding-right: 16px;
+          @include percent-plus-value($property: width, $percent: 100%, $value: -$hover-padding-right); // compensate for padding added on hover
           &:hover {
-            border: 1px solid $tlv-light-gray;
-            background-position: 99% 12%;
-            background-size: 15px;
-            padding-right: 20px;
+            padding-right: $hover-padding-right;
+            width: 100%;
+            border: 1px solid $light-gray;
+            cursor: pointer;
+
+            background-position: calc(100% - 4px) 4px;
+            background-size: 14px;
             background-image: url($pencil-icon);
             background-repeat: no-repeat;
-            cursor: pointer;
-          }
-          &.read-only {
-            border: none;
+            background-color: white;
+
+            .description-data:after {
+              background: white;
+            }
           }
-                                       .description-data {
-                                               @include multiline-ellipsis($lineCount: 3, $bgColor: $tlv-gray);
-                                       }
         }
 
         .vendor-description-readonly {
-          @extend .flex;
-          @extend .body-1;
-          justify-content: space-between;
-          margin-top: 10px;
-          overflow: hidden;
-          border: none;
-          height: 49px;
-          margin-bottom: 15px;
-          padding: 6px;
-          position: relative;
-          left:-6px;
+          margin-top: 16px;
         }
 
+                               .description-data {
+                                       @include multiline-ellipsis($lineCount: 3, $bgColor: $tlv-gray);
+                                       flex: initial;
+                               }
+
         .vendor-description-edit {
           @extend .flex;
           flex-direction: column;
           width: 101%;
           textarea {
             padding-left: 6px;
+            resize: vertical;
           }
           .buttons-row {
             @extend .flex;
         margin-left: 20px;
         justify-content: space-between;
         border: 1px solid $tlv-light-gray;
-        @include border-shadow();
+        @include overview-tile-shadow();
         background-color: $tlv-gray;
         .summary-count-item {
           @extend .flex;
-          @extend .heading-5-semibold;
-          padding-top: 5px;
+                                       @extend .heading-5-semibold;
+                                       align-items: center;
           padding-left: 45px;
           padding-right: 45px;
           border-bottom: 1px solid $tlv-light-gray;
       }
     }
   }
-  .vlm-list-tab-panel
-  {
-    @extend .flex;
+  .vlm-list-tab-panel {
+               
+               @extend .flex;
+               margin-bottom: 7px;
     .section-title {
       flex: 1;
     }
       }
       .vlm-list-view {
         .vlm-list {
-          .vlm-list-item {
-            @include border-shadow();
-            .list-item-icon-col {
-              display: flex;
-              flex-direction: column;
-              justify-content: center;
-              margin-left: 5px;
-            }
-            &.vlm-list-item-la {
-              margin-left: 0;
-              .list-item-icon-col {
-                padding-left: 22px;
+          .vlm-list-item.orphan-list-item {
+                                               @include overview-tile-shadow();
+                                               margin-left: 0;
+                                               
+                                               .vlm-list-item-title {
 
-              }
-              .la-icon {
-                background-color: $gray;
-                border-color: $gray;
-              }
-              .list-item-section {
-                &:first-child {
-                  background-color: gray;
-                }
-              }
-            }
-            &.vlm-list-item-fg {
-              cursor: default;
-              margin-left: 0;
-              border-left: 10px solid $gray;
-              .list-item-arrow-col {
-                margin-left: 0px;
-              }
-              .list-item-icon-col {
-                padding-left: 22px;
-              }
-              .fg-icon {
-                background-color: $gray;
-                border-color: $gray;
-              }
-            }
-            &.vlm-list-item-ep {
-              margin-left: 0;
-              border-left: 10px solid $gray;
-              .list-item-icon-col {
-                padding-left: 22px;
-              }
-              .ep-icon {
-                background-color: $gray;
-                border-color: $gray;
-              }
-              .list-item-section {
-                &:first-child {
-                  display: flex;
-                  color: $white;
-                  min-width: 34px;
-                }
-              }
-            }
-            &.vlm-list-item-lkg {
-              margin-left: 0;
-              border-left: 10px solid $gray;
-              .list-item-icon-col {
-                padding-left: 22px;
-              }
-              .lkg-icon {
-                background-color: $gray;
-                border-color: $gray;
-              }
-              .list-item-section {
-                &:first-child {
-                  display: flex;
-                  color: $white;
-                  min-width: 34px;
-                }
-              }
-            }
+                                                       .item-name {
+                                                               color: $dark-gray;
+                                                       }
+                                               }
+                                               .list-item-icon-col {
+                                                       .overview-list-icon {
+                                                               background-color: $gray;
+                                                               border-color: $gray;
+                                                       }
+                                               }
+                                               .list-item-section {
+                                                       &:first-child {
+                                                               display: flex;
+                                                               color: $white;
+                                                               min-width: $arrow-element-width;
+                                                       }
+                                                       &.list-item-icon-col {
+                                                               margin-left: 65px;
+                                                               margin-right: 65px - $list-item-padding;
+                                                       }
+                                               }
           }
         }
       }
           @extend .flex;
           border: 1px solid $tlv-light-gray;
           margin-bottom: 0px;
-          cursor: pointer;
-          .list-item-icon-col {
-            display: flex;
-            flex-direction: column;
-            justify-content: center;
-
-          }
+          .clickable {
+                                               cursor: pointer;
+                                       }
+          
           .list-item-section {
-            padding: 10px;
+                                               .count-value {
+                                                       @extend .body-3;
+                                               }
+                                               &.list-item-icon-col {
+                                                       display: flex;
+                                                       flex-direction: column;
+                                                       justify-content: center;
+                                                       align-items: center;
+                                                       padding: 0;
+                                                       margin-right: 40px - $list-item-padding;
+                                                       margin-left: $icon-margin;
+                                                       .overview-list-icon {
+                                                               @extend .body-2;
+                                                       }
+                                               }
+                                               padding: 15px;
+                                               &.list-item-arrow-col {
+                                                       padding: 0;
+                                               }
             .children-count {
               @extend .body-1;
-              line-height: 20px;
               color: $gray;
               padding-left: 5px;
               .count-value {
               }
             }
             .additional-data {
-              padding-left: 50px;
+                                                       padding-left: 60px;
+                                                       display: flex;
+                                                       flex-direction: column;
+                                                       justify-content: space-between;
+                                                       *:last-child {
+                                                               margin-top: 20px;
+                                                       }
+                                                       *:only-child {
+                                                               margin-top: 0;
+                                                       }
               .additional-data-name {
-                @extend .body-1-semibold;
+                @extend .body-2-semibold;
               }
             }
             .additional-data-col-border {
             }
           }
           .list-item-additional-data-col {
-            @extend .body-1;
+            @extend .body-2;
             @extend .flex;
-            align-items: center;
-            flex: 0.8;
+            align-items: stretch;
+                                               flex: 0.8;
+                                               margin-left: 30px;
+                                               padding-top: 17px;
+                                               padding-bottom: 11px;
           }
           .arrow-icon {
-            align-self: center;
+                                               align-self: center;
+                                               
           }
           .vlm-item-info {
             flex: 1;
           }
           .vlm-list-item-title {
-            @extend .flex;
+                                               @extend .flex;
+                                               align-items: baseline;
             .item-name {
               @extend .heading-5-semibold;
               flex: 0 1 auto;
-              margin-bottom: 4px;
+                                                       margin-bottom: 4px;
+                                                       text-transform: uppercase;
             }
           }
           .vlm-list-item-description {
             @extend .body-1;
-            overflow: hidden;
+                                               @include multiline-ellipsis($lineCount: 3, $bgColor: $tlv-gray);
             max-height: 38px;
           }
           &.vlm-list-item-la {
             margin-top: 10px;
-            border-left: 10px solid $dark-blue;
             .la-icon {
-              @include create-circle($circle-icon-size,$dark-blue,'LA');
+              @include create-circle($circle-icon-size,$la-color,'LA');
               color: $white;
-            }
+                                               }
+                                               .vlm-list-item-title {
+                                                       .item-name {
+                                                               color: $la-color;
+                                                       }
+                                               }
             .list-item-section {
 
               &:first-child {
                 display: flex;
-                color: $dark-blue;
-                min-width: 34px;
+                color: $la-color;
+                min-width: $arrow-element-width;
               }
             }
             .list-item-arrow-col {
               flex: 0.01;
-              margin-left: 14px;
-            }
-            .list-item-icon-col {
-              padding-left: 14px;
-              padding-right: 30px;
-              align-items: center;
+                                                       margin-left: $arrow-margin;
+                                                       justify-content: center;
             }
-
           }
           &.vlm-list-item-fg {
-            border-left: 10px solid $blue;
-            margin-left: 20px;
-            margin-top: 10px;
+            margin-left: $list-indentation;
+                                               margin-top: 10px;
+                                               .fg-pipeline-separator {
+                                                       color: $dark-gray;
+                                                       padding: 0 5px;
+                                               }
+                                               .list-item-icon-col {
+                                                       margin-left: 29px;
+                                               }
             .fg-icon {
-              @include create-circle($circle-icon-size,$blue,'FG');
+              @include create-circle($circle-icon-size,$fg-color,'FG');
               color: $white;
-            }
+                                               }
+                                               
+                                               .vlm-list-item-title {
+                                                       .item-name {
+                                                               color: $fg-color;
+                                                       }
+                                               }
             .list-item-section {
               &:first-child {
                 display: flex;
-                color: $blue;
-                min-width: 34px;
+                color: $fg-color;
+                min-width: $arrow-element-width;
 
               }
             }
             .list-item-arrow-col {
               flex: 0.01;
-              margin-left: 26px;
-            }
-            .list-item-icon-col {
-              padding-left: 22px;
-              padding-right: 30px;
-              align-items: center;
+                                                       margin-left: $arrow-margin - $list-indentation;
+                                                       padding-left: $list-indentation;
             }
           }
           &.vlm-list-item-ep {
-            margin-left: 40px;
+            margin-left: $list-indentation * 2;
             margin-top: 10px;
-            border-left: 10px solid $light-blue;
             cursor: default;
             .ep-icon {
-              @include create-circle($circle-icon-size,$light-blue,'EP');
+              @include create-circle($circle-icon-size,$lkg-ep-color,'EP');
               color: $white;
-            }
-            .list-item-icon-col {
-              padding-left: 72px;
-              padding-right: 30px;
-              align-items: center;
-            }
+                                               }
+                                               .vlm-list-item-title {
+                                                       .item-name {
+                                                               color: $lkg-ep-color;
+                                                       }
+                                               }
             .list-item-section {
               &:first-child {
                 display: none;
-              }
-            }
-            .list-item-additional-data-col {
-              margin-right: 20px;
+                                                       }
+                                                       &.list-item-icon-col {
+                                                               margin-left: 52px;
+                                                       }
             }
+                                               
           }
           &.vlm-list-item-lkg {
             margin-top: 10px;
-            margin-left: 40px;
-            border-left: 10px solid $light-blue;
+            margin-left: $list-indentation * 2;
             cursor: default;
             .lkg-icon {
-              @include create-circle($circle-icon-size,$light-blue,'KG');
+              @include create-circle($circle-icon-size,$lkg-ep-color,'KG');
               color: $white;
-            }
-            .list-item-icon-col {
-              padding-left: 72px;
-              padding-right: 30px;
-              align-items: center;
-            }
+                                               }
+                                               .vlm-list-item-title {
+                                                       .item-name {
+                                                               color: $lkg-ep-color;
+                                                       }
+                                               }
             .list-item-section {
               &:first-child {
                 display: none;
-              }
+                                                       }
+                                                       &.list-item-icon-col {
+                                                               margin-left: 52px;
+                                                       }
 
             }
-            .list-item-additional-data-col {
-              margin-right: 20px;
-            }
           }
         }
 
index 07f86ab..87a852f 100644 (file)
@@ -48,6 +48,9 @@
                align-self: baseline;
                color: $gray;
                line-height: 10px;
+               &:first-letter {
+      text-transform: capitalize;
+    }
                @include ellipsis(auto, inline-block, 178px);
          }
 
          @extend .heading-5-semibold;
          color: $black;
          @include ellipsis(auto, inline-block, 175px);
-         line-height: inherit;
+               line-height: inherit;
+               &:first-letter {
+                       text-transform: capitalize;
+               }
        }
   }
   .catalog-tile-icon {
index 5972bb2..d490fd6 100644 (file)
   .catalog-tile-top {
        .catalog-tile-item-name {
          margin-top: 21px;
-         line-height: inherit;
+               line-height: inherit;
+               &:first-letter {
+      text-transform: capitalize;
+    }  
        }
        .catalog-tile-vsp-count {
          @extend .body-3-semibold;
index d7d4586..b49a7cb 100644 (file)
 div[data-reactroot].customized-date-picker-calendar {
   @import "common/variables";
   @import "common/typography";
-  border-radius: 2px;
   border-color: $light-gray;
   margin-top: -8px;
+       color: $black;
   .react-datepicker__triangle {
       margin-top: 0px;
   }
   .react-datepicker__navigation--previous {
-      border: none;      
-      width: 15px;
-      height: 15px; 
+      border: none;
+      width: 12px;
+      height: 12px;
       margin-top: 2px;
-      content: url(../images/angle-left.svg);               
+      content: url(../images/angle-left.svg);
   }
   .react-datepicker__navigation--next {
-      border: none;      
-      width: 15px;
-      height: 15px;
-      margin-top: 2px;      
-      content: url(../images/angle-right.svg);      
+      border: none;
+      width: 12px;
+      height: 12px;
+      margin-top: 2px;
+      content: url(../images/angle-right.svg);
   }
-  .react-datepicker__month-container {    
+  .react-datepicker__month-container {
                .react-datepicker__header {
                        background-color: $background-gray;
       border-bottom: none;
       .react-datepicker__current-month {
-        @extend .heading-5;
+        @extend .body-1-semibold;
         background-color: $background-gray;
-        margin-bottom: 10px;         
+        margin-bottom: 10px;
       }
       .react-datepicker__day-names {
-        @extend .heading-5;
+        @extend .body-1;
         background-color: $white;
       }
                }
-    .react-datepicker__day--selected {
-      @extend .heading-5;
-      border-radius: 20px;
+    .react-datepicker__day--selected, .react-datepicker__day--keyboard-selected {
+      @extend .body-1;
       background-color: $blue;
-      &:hover {
-        background-color: $dark-blue;
-      }
+                       color: $white;
     }
     .react-datepicker__day {
-      @extend .heading-5;
-      &:hover {
-        border-radius: 20px;
-      }
+                       border-radius: 0px;
+                       margin: 0;
+                       flex: 1;
+      @extend .body-1;
+    }
+
+               .react-datepicker__day--in-range, .react-datepicker__day--in-selecting-range {
+                       background-color: $tlv-hover;
+                       color: $black;
+                       &.react-datepicker__day--selected, &.react-datepicker__day--keyboard-selected, &.react-datepicker__day--range-start, &.react-datepicker__day--range-end  {
+                               background-color: $blue;
+                               color: $white;
+                       }
+                       &.react-datepicker__day--selecting-range-start, &.react-datepicker__day--selecting-range-end {
+                               background-color: lighten($blue, 40%);
+                               color: $black;
+                       }
+                       &.react-datepicker__day--selecting-range-start.react-datepicker__day--range-start,
+                       &.react-datepicker__day--selecting-range-end.react-datepicker__day--range-end,
+                       &.react-datepicker__day--selecting-range-start.react-datepicker__day--keyboard-selected {
+                               background-color: $blue;
+                               color: $white;
+                       }
+               }
+
+               .react-datepicker__week {
+                       display: flex;
     }
        }
 }
@@ -69,7 +89,7 @@ div[data-reactroot].tooltip {
   @import "common/typography";
 
   &.in {
-       opacity: 1;
+       opacity: 1;
   }
   &.validation-error-message {
     &.bottom {
@@ -94,28 +114,33 @@ div[data-reactroot].tooltip {
     }
   }
   &.bottom {
-       .tooltip-arrow {
-         border-bottom-color: $dark-gray !important;
-       }
+    .tooltip-arrow {
+      border-bottom-color: $dark-gray !important;
+    }
   }
   &.top {
-       .tooltip-arrow {
-         border-top-color: $dark-gray !important;
-       }
+    .tooltip-arrow {
+      border-top-color: $dark-gray !important;
+    }
   }
   .tooltip-inner {
-       max-width: 100%;
-       background-color: $dark-gray;
+    @extend .body-1;
+    max-width: 100%;
+    background-color: $dark-gray;
+    padding: 6px 9px;
+    &:first-letter {
+      text-transform: capitalize;
+    }
   }
 
   // activity log tooltip
   &.activity-log-message-tooltip {
-       @include base-font-regular;
-       font-size: $body-font-2;
-       .message-block {
-         text-align: left;
-         padding: 3px 12px;
-       }
+         @include base-font-regular;
+    font-size: $body-font-2;
+    .message-block {
+      text-align: left;
+      padding: 3px 12px;
+    }
   }
   //dependency table error tooltip
   &.select-action-table-error-tooltip{
@@ -136,4 +161,11 @@ div[data-reactroot].tooltip {
       font-size: $body-font-2;
     }
   }
+
+  // for read-only mode, vendor description in VLM overview
+  &.vendor-description-tooltip {
+    .tooltip-inner {
+      max-width: 600px;
+    }
+  }
 }
diff --git a/openecomp-ui/runLocalFE.cmd b/openecomp-ui/runLocalFE.cmd
deleted file mode 100644 (file)
index ee718f2..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-@REM /*!
-@REM  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
-@REM  *
-@REM  * Licensed under the Apache License, Version 2.0 (the "License");
-@REM  * you may not use this file except in compliance with the License.
-@REM  * You may obtain a copy of the License at
-@REM  *
-@REM  * http://www.apache.org/licenses/LICENSE-2.0
-@REM  *
-@REM  * Unless required by applicable law or agreed to in writing, software
-@REM  * distributed under the License is distributed on an "AS IS" BASIS,
-@REM  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
-@REM  * or implied. See the License for the specific language governing
-@REM  * permissions and limitations under the License.
-@REM  */
-
-@echo off
-
-SETLOCAL
-
-set uiDir=%cd%
-set currentDir=%cd%
-if not ("%1" == "") set uiDir=%1
-
-echo check npm version:
-call npm -version
-if errorlevel 1 (
-    echo install node with npm from https://nodejs.org/en/download/
-       goto done
-)
-echo npm is installed
-echo one more check...
-call npm list prompt
-if errorlevel 1 (
-    npm install prompt
-)
-echo ready to run
-call node runLocalFE.js
diff --git a/openecomp-ui/runLocalFE.js b/openecomp-ui/runLocalFE.js
deleted file mode 100644 (file)
index 1205aa4..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/*!
- * Copyright (C) 2017 AT&T Intellectual Property. 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.
- */
-
-var exec = require('child_process');
-var prompt = require('prompt');
-var fs = require('fs');
-
-
-function runNpm(target, dir) {
-       console.log('\n---> npm ' + target);
-       let options = {stdio:[0,1,2]};
-       if (dir) options.cwd = dir;
-       exec.execSync("npm " + target,options);
-}
-
-function npmInstallAll() {
-       setNpmconfig();
-       if (!fs.existsSync('../dox-sequence-diagram-ui/node_modules')) {
-               console.log('--> first time installing dox-sequence-diagram-ui');
-               runNpm('install', '../dox-sequence-diagram-ui');
-       };
-       runNpm('install');
-       // just to make sure restful js is installed properly
-       runNpm('install jquery', 'node_modules/restful-js');
-}
-
-function getDevConfig() {
-       var content=fs.readFileSync('./devConfig.json');
-       var data=JSON.parse(content);
-       console.log('Current ATT server is set to: ' + data.proxyATTTarget);
-       if (!data.proxyTarget) {
-               console.log('Current onboarding server defaults to the ATT server');
-       } else {
-               console.log('Current onboarding server set to: ' + data.proxyTarget);
-       }
-       return data;
-}
-
-function setNpmconfig() {
-       exec.execSync("npm config set proxy http://genproxy.amdocs.com:8080");
-       exec.execSync("npm config set https_proxy http://genproxy.amdocs.com:8080");
-}
-
-// getting the run details before starting to work
-prompt.start();
-prompt.get([{
-               name:'runType',
-               type:'number',
-               default:1,
-               description: 'Choose run: 1-test and build, 2- run frontend server '
-       }], function (err, result) {
-       if (result.runType === 2) {
-               console.log('--> Reading the configuration for the local server');
-               if (!fs.existsSync('./devConfig.json')) {
-                       console.log('First time - setting up the devConfig.json file');
-                       fs.writeFileSync('./devConfig.json', fs.readFileSync('./devConfig.defaults.json'));
-               }
-               let data = getDevConfig();
-               let attProxyField = {
-                       name:'attProxyTarget',
-                       description:'ATT server'
-               };
-               let proxyField = {
-                       name:'proxyTarget',
-                       description:'onboarding server, \'null\' to reset'
-               };
-               if (data.proxyATTTarget) attProxyField.default = data.proxyATTTarget;
-               if (data.proxyTarget) proxyField.default = data.proxyTarget;
-               prompt.get([ attProxyField, proxyField], function (err,result) {
-                               data.proxyATTTarget = result.attProxyTarget;
-                               if(result.proxyTarget) {
-                                       if (result.proxyTarget === 'null') {
-                                               if (data.proxyTarget) delete data.proxyTarget;
-                                       } else {
-                                               data.proxyTarget = result.proxyTarget;
-                                       }
-                               }
-                               fs.writeFileSync('./devConfig.json', JSON.stringify(data, null, 2));
-                               getDevConfig();
-                               console.log('FE server will be answering on: http://localhost:9000/sdc1/proxy-designer1#/onboardVendor');
-                               npmInstallAll();
-                               runNpm("start");
-                       }
-               );
-       } else {
-               npmInstallAll();
-               runNpm("run build");
-               runNpm("run test");
-       }
-});
-
index cd39376..f4673c1 100644 (file)
@@ -17,10 +17,10 @@ class CustomInput extends React.Component {
                const text = date ? date : placeholderText;
                const textStyle = date ? '' : 'placeholder';
                return (
-                       <div ref={inputRef} className='datepicker-custom-input'>
-                               <div onClick={onClick} className={`datepicker-text ${textStyle}`}>{text}</div>
-                               <div onClick={onClear} className='clear-input'/>
-                               <SVGIcon onClick={onClick} name='calendar'/>
+                       <div onClick={onClick} ref={inputRef} className='datepicker-custom-input'>
+                               <div  className={`datepicker-text ${textStyle}`}>{text}</div>
+                               {date && <SVGIcon onClick={e => {e.stopPropagation(); onClear();}} name='close' className='clear-input'/>}
+                               <SVGIcon name='calendar'/>
                        </div>
                );
        }
index 6e54254..9b11d27 100644 (file)
@@ -64,7 +64,8 @@ class InputOptions extends React.Component {
                const dataTestId = this.props['data-test-id'] ? {'data-test-id': this.props['data-test-id']} : {};
                let currentMultiSelectedEnum = [];
                let currentSelectedEnum = '';
-               let {otherInputDisabled} = this.state;
+               let otherInputDisabled = (isMultiSelect && (multiSelectedEnum === undefined || multiSelectedEnum.length === 0 || multiSelectedEnum[0] !== other.OTHER))
+                       || (!isMultiSelect && (selectedEnum === undefined || selectedEnum !== other.OTHER));
                if (isMultiSelect) {
                        currentMultiSelectedEnum = multiSelectedEnum;
                        if(!otherInputDisabled) {
index 95144b1..6f33536 100644 (file)
@@ -15,7 +15,7 @@
  */
 import React from 'react';
 import ReactDOM from 'react-dom';
-import {default as BTabs} from 'react-bootstrap/lib/Tabs.js';
+import {default as SDCTabs} from 'sdc-ui/lib/react/Tabs.js';
 import Overlay from 'react-bootstrap/lib/Overlay.js';
 import Tooltip from 'react-bootstrap/lib/Tooltip.js';
 
@@ -33,15 +33,15 @@ class Tabs extends React.Component {
                return React.cloneElement(
                        element,
                        {
-                               key: element.props.eventKey,
-                               tabClassName: invalidTabs.indexOf(element.props.eventKey) > -1 ? 'invalid-tab' : 'valid-tab'
+                               key: element.props.tabId,
+                               className: invalidTabs.indexOf(element.props.tabId) > -1 ? 'invalid-tab' : 'valid-tab'
                        }
                );
        }
 
        showTabsError() {
                const {invalidTabs} = this.props;
-               const showError = ((invalidTabs.length === 1 && invalidTabs[0] !== this.props.activeKey) || (invalidTabs.length > 1));
+               const showError = ((invalidTabs.length === 1 && invalidTabs[0] !== this.props.activeTab) || (invalidTabs.length > 1));
                return showError;
        }
 
@@ -50,21 +50,20 @@ class Tabs extends React.Component {
                let {invalidTabs, ...tabProps} = this.props;
                return (
                        <div>
-                               <BTabs {...tabProps} ref='tabsList' id='tabsList' >
+                               <SDCTabs {...tabProps} ref='tabsList' id='tabsList' >
                                        {this.props.children.map(element => this.cloneTab(element))}
-                               </BTabs>
+                               </SDCTabs>
                                <Overlay
                                        animation={false}
                                        show={this.showTabsError()}
                                        placement='bottom'
-                                       containerPadding={50}
                                        target={() => {
-                                               let target = ReactDOM.findDOMNode(this.refs.tabsList).querySelector('ul > li.invalid-tab:not(.active):nth-of-type(n)');
+                                               let target = ReactDOM.findDOMNode(this.refs.tabsList).querySelector('ul > li.invalid-tab:not(.sdc-tab-active):nth-of-type(n)');
                                                return target && target.offsetParent ? target : undefined;
                                        }
                                        }
                                        container={() => {
-                                               let target = ReactDOM.findDOMNode(this.refs.tabsList).querySelector('ul > li.invalid-tab:not(.active):nth-of-type(n)');
+                                               let target = ReactDOM.findDOMNode(this.refs.tabsList).querySelector('ul > li.invalid-tab:not(.sdc-tab-active):nth-of-type(n)');
                                                return target && target.offsetParent ? target.offsetParent : this;
                                        }}>
                                        <Tooltip
index 8d7c63f..bed304b 100644 (file)
@@ -39,7 +39,7 @@ class ListEditorItem extends React.Component {
                                </div>
                                {(onEdit || onDelete) && <div className='list-editor-item-view-controller'>
                                        {onEdit && <SVGIcon name='sliders' onClick={() => this.onClickedItem(onEdit)}/>}
-                                       {onDelete && isAbilityToDelete && <SVGIcon name='trashO' onClick={() => this.onClickedItem(onDelete)}/>}
+                                       {onDelete && isAbilityToDelete && <SVGIcon name='trashO' data-test-id='delete-list-item' onClick={() => this.onClickedItem(onDelete)}/>}
                                </div>}
                        </div>
                );
index 9af1424..c2548e4 100644 (file)
@@ -33,7 +33,7 @@ export const statusEnum = keyMirror({
 
 export const statusBarTextMap = keyMirror({
        'Locked': 'Checked Out',
-       'LockedByUser': '',
+       'LockedByUser': 'Locked',
        'Available': 'Checked In',
        'Final': 'Submitted',
        'READ ONLY': 'Locked'
index 6c04ad7..12e9a06 100644 (file)
@@ -16,7 +16,7 @@ export default class SelectActionTable extends React.Component {
                                <div className='select-action-table'>
                                        <div className='select-action-table-headers'>
                                                {columns.map(column => <div key={uuid.create()} className='select-action-table-header'>{i18n(column)}</div>)}
-                                               {Array(numOfIcons).fill().map(() => <SVGIcon name='trashO' className='dummy-icon' />)}
+                                               {Array(numOfIcons).fill().map((e, i) => <SVGIcon name='trashO' key={i} className='dummy-icon' />)}
                                        </div>
                                        <div className='select-action-table-body'>
                                                {children}
index a711b42..7df7d53 100644 (file)
@@ -27,12 +27,12 @@ function renderErrorOrCheck({hasError, overlayMsg}) {
        return <SVGIcon name='checkCircle'/>;
 }
 
-const SelectActionTableRow = ({children, onDelete, hasError, hasErrorIndication, overlayMsg}) => (
+const SelectActionTableRow = ({children, onDelete, hasError, hasErrorIndication, overlayMsg, showDelete}) => (
        <div className='select-action-table-row-wrapper'>
                <div className={`select-action-table-row ${hasError ? 'has-error' : ''}`}>
                        {children}
                </div>
-               {onDelete && <SVGIcon name='trashO' data-test-id='select-action-table-delete' onClick={onDelete} />}
+               {onDelete && <SVGIcon name='trashO' iconClassName={(showDelete) ? '' : 'hideDelete'} data-test-id='select-action-table-delete' onClick={(showDelete) ? onDelete : null} />}
                {hasErrorIndication && renderErrorOrCheck({hasError, overlayMsg})}
        </div>
 );
index 8fcf24a..1df82a2 100644 (file)
@@ -20,7 +20,9 @@ import i18n from 'nfvo-utils/i18n/i18n.js';
 class Validator {
        static get globalValidationFunctions() {
                return {
-                       required: value => value !== '',
+                       required: value => {                            
+                               return typeof value === 'string' ? value.replace(/\s+/g, '') !== '' : value !== '';                             
+                       },
                        requiredChooseOption: value => value !== '',
                        maxLength: (value, length) => ValidatorJS.isLength(value, {max: length}),
                        minLength: (value, length) => ValidatorJS.isLength(value, {min: length}),
@@ -107,6 +109,7 @@ class Validator {
        }
 
        static isItemNameAlreadyExistsInList({itemId, itemName, list}) {
+               itemName = itemName.toLowerCase();
                return list[itemName] && list[itemName] !== itemId;
        }
 }
diff --git a/openecomp-ui/src/nfvo-utils/getValue.js b/openecomp-ui/src/nfvo-utils/getValue.js
new file mode 100644 (file)
index 0000000..e6871c0
--- /dev/null
@@ -0,0 +1,32 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. 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.
+ */
+import {other as optionInputOther} from 'nfvo-components/input/validation/InputOptions.jsx';
+
+function getValueFromObject(element) {
+       return element.choices && element.choices.length > 0 && element.choices[0] !== '' && element.choices[0] !== optionInputOther.OTHER ||
+                       element.other && element.choices[0] === optionInputOther.OTHER ?
+                       element : undefined;
+} 
+
+function getValueFromVariable(variable) {
+       return variable ? variable : undefined;
+}
+
+ let getValue = element => {
+       return typeof element === 'object' ? getValueFromObject(element) : getValueFromVariable(element);       
+ };
+
+ export default getValue;
\ No newline at end of file
index 0bbb5e6..2276984 100644 (file)
@@ -16,6 +16,7 @@
 import {actionTypes} from './PlainDataReducerConstants.js';
 import Validator from 'nfvo-utils/Validator.js';
 import forOwn from 'lodash/forOwn.js';
+import {other as optionInputOther} from 'nfvo-components/input/inputOptions/InputOptions.jsx';
 
 function updateDataAndValidateReducer(state = {}, action) {
        let genericFieldInfoCopy;
@@ -46,6 +47,12 @@ function updateDataAndValidateReducer(state = {}, action) {
                        forOwn(state.genericFieldInfo,(value, key) => {
                                let val = state.data && state.data[key] ? state.data[key] : '';
                                let result = Validator.validate(key, val, state.genericFieldInfo[key].validations, state, {});
+                               if(val.choice !== undefined) {
+                                       result = Validator.validate(key, val.choice, state.genericFieldInfo[key].validations, state, {});
+                               }
+                               if(val.choice !== undefined && val.choice === optionInputOther.OTHER) {
+                                       result = Validator.validate(key, val.other, state.genericFieldInfo[key].validations, state, {});
+                               }
                                genericFieldInfoCopy[key] = {...genericFieldInfoCopy[key], isValid: result.isValid, errorText: result.errorText};
                                if (!result.isValid) {
                                        formReady = false;
index 2b59361..dad9301 100644 (file)
@@ -31,8 +31,7 @@ import OnboardActionHelper from './onboard/OnboardActionHelper.js';
 import SoftwareProductComponentsMonitoringAction from './softwareProduct/components/monitoring/SoftwareProductComponentsMonitoringActionHelper.js';
 import {actionTypes, enums} from './OnboardingConstants.js';
 import SoftwareProductComponentsImageActionHelper from './softwareProduct/components/images/SoftwareProductComponentsImageActionHelper.js';
-import {navigationItems as SoftwareProductNavigationItems, actionTypes as SoftwareProductActionTypes,
-    onboardingMethod as onboardingMethodTypes} from 'sdc-app/onboarding/softwareProduct/SoftwareProductConstants.js';
+import {navigationItems as SoftwareProductNavigationItems, actionTypes as SoftwareProductActionTypes} from 'sdc-app/onboarding/softwareProduct/SoftwareProductConstants.js';
 import ActivityLogActionHelper from 'sdc-app/common/activity-log/ActivityLogActionHelper.js';
 import licenseModelOverviewActionHelper from 'sdc-app/onboarding/licenseModel/overview/licenseModelOverviewActionHelper.js';
 import store from 'sdc-app/AppStore.js';
@@ -164,18 +163,10 @@ export default {
                        const newVersion = response[0].version ? response[0].version : version;
 
                        SoftwareProductActionHelper.loadSoftwareProductDetailsData(dispatch, {licenseModelId, licensingVersion});
-                       let isFetchImageDetails = (response[0].onboardingMethod === onboardingMethodTypes.HEAT);
-                       if (isFetchImageDetails) {
-                               // will only continue after we can properly build the navigation bar with the images links
-                               SoftwareProductComponentsActionHelper.fetchSoftwareProductComponents(dispatch, {softwareProductId, version: newVersion, isFetchImageDetails}).then(() => {
-                                       SoftwareProductActionHelper.loadSoftwareProductHeatCandidate(dispatch, {softwareProductId, version: newVersion});
-                                       setCurrentScreen(dispatch, enums.SCREEN.SOFTWARE_PRODUCT_LANDING_PAGE, {softwareProductId, licenseModelId, version: newVersion});
-                               });
-                       } else {
-                               SoftwareProductComponentsActionHelper.fetchSoftwareProductComponents(dispatch, {softwareProductId, version: newVersion, isFetchImageDetails});
-                               SoftwareProductActionHelper.loadSoftwareProductHeatCandidate(dispatch, {softwareProductId, version: newVersion});
-                               setCurrentScreen(dispatch, enums.SCREEN.SOFTWARE_PRODUCT_LANDING_PAGE, {softwareProductId, licenseModelId, version: newVersion});
-                       }
+
+                       SoftwareProductComponentsActionHelper.fetchSoftwareProductComponents(dispatch, {softwareProductId, version: newVersion});
+                       SoftwareProductActionHelper.loadSoftwareProductHeatCandidate(dispatch, {softwareProductId, version: newVersion});
+                       setCurrentScreen(dispatch, enums.SCREEN.SOFTWARE_PRODUCT_LANDING_PAGE, {softwareProductId, licenseModelId, version: newVersion});
                });
        },
 
index 1f0bef7..aea5fc6 100644 (file)
@@ -415,9 +415,9 @@ export default class OnboardingPunchOut {
        handleStoreChange() {
                let {currentScreen, licenseModelList, softwareProductList,
                        softwareProduct: {softwareProductEditor: {data = {onboardingMethod: ''}},
-                               softwareProductComponents: {componentsList, images: {imagesNavigationList}}, softwareProductAttachments: {heatSetup}}} = store.getState();
+                               softwareProductComponents: {componentsList}, softwareProductAttachments: {heatSetup}}} = store.getState();
                let {onboardingMethod} = data;
-               let breadcrumbsData = {onboardingMethod, currentScreen, licenseModelList, softwareProductList, componentsList, heatSetup, imagesNavigationList};
+               let breadcrumbsData = {onboardingMethod, currentScreen, licenseModelList, softwareProductList, componentsList, heatSetup};
                if (currentScreen.forceBreadCrumbsUpdate || !isEqual(breadcrumbsData, this.prevBreadcrumbsData) || this.breadcrumbsPrefixSelected) {
                        this.prevBreadcrumbsData = breadcrumbsData;
                        this.breadcrumbsPrefixSelected = false;
@@ -434,7 +434,7 @@ export default class OnboardingPunchOut {
                }
        }
 
-       buildBreadcrumbs({currentScreen: {screen, props}, onboardingMethod, licenseModelList, softwareProductList, componentsList, heatSetup, imagesNavigationList}) {
+       buildBreadcrumbs({currentScreen: {screen, props}, onboardingMethod, licenseModelList, softwareProductList, componentsList, heatSetup}) {
                let screenToBreadcrumb;
                switch (screen) {
                        case enums.SCREEN.ONBOARDING_CATALOG:
@@ -646,15 +646,7 @@ export default class OnboardingPunchOut {
                                                        }, {
                                                                key: enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_MONITORING,
                                                                displayText: i18n('Monitoring')
-                                                       }].filter(item => {
-                                                               switch (item.key) {
-                                                                       case enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_IMAGES:
-                                                                               return (onboardingMethod === onboardingMethodTypes.MANUAL ||
-                                                                               (imagesNavigationList && imagesNavigationList[props.componentId] === true));
-                                                                       default:
-                                                                               return true;
-                                                               }
-                                                       })
+                                                       }]
                                                }]
                                        ];
                                }
index 4ba10c3..960090c 100644 (file)
@@ -14,6 +14,7 @@
  * permissions and limitations under the License.
  */
 import keyMirror from 'nfvo-utils/KeyMirror.js';
+import i18n from 'nfvo-utils/i18n/i18n.js';
 
 export const actionTypes = keyMirror({
        LICENSE_MODEL_LOADED: null,
@@ -31,3 +32,16 @@ export const navigationItems = keyMirror({
        LICENSE_KEY_GROUPS: 'license-key-groups',
        ACTIVITY_LOG: 'activity-log'
 });
+
+export const thresholdUnitType = {
+       ABSOLUTE: 'Absolute',
+       PERCENTAGE: 'Percentage'
+};
+
+export const optionsInputValues = {
+       THRESHOLD_UNITS: [
+               {enum: '', title: i18n('please select…')},
+               {enum: thresholdUnitType.ABSOLUTE, title: 'Absolute'},
+               {enum: thresholdUnitType.PERCENTAGE, title: '%'}
+       ]
+};
\ No newline at end of file
index bd060a4..80beda2 100644 (file)
@@ -35,6 +35,7 @@ import licenseKeyGroupsListReducer from './licenseKeyGroups/LicenseKeyGroupsList
 import {createPlainDataReducer} from 'sdc-app/common/reducers/PlainDataReducer.js';
 
 import {actionTypes as licenseModelOverviewConstants, selectedButton, VLM_DESCRIPTION_FORM} from './overview/LicenseModelOverviewConstants.js';
+import limitEditorReducer from './limits/LimitEditorReducer.js'; 
 
 export default combineReducers({
        licenseModelCreation: createPlainDataReducer(licenseModelCreationReducer),
@@ -81,5 +82,6 @@ export default combineReducers({
                        }
                }
        )}),
+       limitEditor: createPlainDataReducer(limitEditorReducer),
        activityLog: activityLogReducer
 });
diff --git a/openecomp-ui/src/sdc-app/onboarding/licenseModel/LicenseModelValidations.js b/openecomp-ui/src/sdc-app/onboarding/licenseModel/LicenseModelValidations.js
new file mode 100644 (file)
index 0000000..64bae3b
--- /dev/null
@@ -0,0 +1,41 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. 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.
+ */
+import i18n from 'nfvo-utils/i18n/i18n.js';
+import {thresholdUnitType} from './LicenseModelConstants.js';
+import Validator from 'nfvo-utils/Validator.js';
+
+export function validateStartDate(value, state) {
+       if (state.data.expiryDate) {
+               if (!value) {
+                       return {isValid: false, errorText: i18n('Start date has to be specified if expiry date is specified')};
+               }
+       }
+       return {isValid: true, errorText: ''};
+}
+
+export function thresholdValueValidation(value, state) {
+       let  unit = state.data.thresholdUnits;
+       if (unit === thresholdUnitType.PERCENTAGE) {
+               return Validator.validate('thresholdValue', value, [
+                       {type: 'numeric', data: true},
+                       {type: 'maximum', data: 100},
+                       {type: 'minimum', data: 0}]);
+       } else {
+               return Validator.validate('thresholdValue', value, [
+                       {type: 'numeric', data: true},
+               ]);
+       }
+}
index d85618c..39b3c15 100644 (file)
@@ -26,7 +26,7 @@ export const mapStateToProps = ({licenseModelList, licenseModel: {licenseModelCr
 
        let VLMNames = {};
        for (let i = 0; i < licenseModelList.length; i++) {
-               VLMNames[licenseModelList[i].vendorName] = licenseModelList[i].id;
+               VLMNames[licenseModelList[i].vendorName.toLowerCase()] = licenseModelList[i].id;
        }
 
        return {...licenseModelCreation, isFormValid: isFormValid, VLMNames};
index a7c95f6..a371d56 100644 (file)
@@ -17,6 +17,8 @@ import RestAPIUtil from 'nfvo-utils/RestAPIUtil.js';
 import Configuration from 'sdc-app/config/Configuration.js';
 import {actionTypes as entitlementPoolsActionTypes } from './EntitlementPoolsConstants.js';
 import LicenseModelActionHelper from 'sdc-app/onboarding/licenseModel/LicenseModelActionHelper.js';
+import {actionTypes as limitEditorActions} from 'sdc-app/onboarding/licenseModel/limits/LimitEditorConstants.js';
+import getValue from 'nfvo-utils/getValue.js';
 
 function baseUrl(licenseModelId, version) {
        const restPrefix = Configuration.get('restPrefix');
@@ -28,18 +30,16 @@ function fetchEntitlementPoolsList(licenseModelId, version) {
        return RestAPIUtil.fetch(`${baseUrl(licenseModelId, version)}`);
 }
 
-function postEntitlementPool(licenseModelId, entitlementPool, version) {
+function postEntitlementPool(licenseModelId, entitlementPool, version) {       
        return RestAPIUtil.post(baseUrl(licenseModelId, version), {
                name: entitlementPool.name,
                description: entitlementPool.description,
                thresholdValue: entitlementPool.thresholdValue,
-               thresholdUnits: entitlementPool.thresholdUnits,
+               thresholdUnits: getValue(entitlementPool.thresholdUnits),
                entitlementMetric: entitlementPool.entitlementMetric,
                increments: entitlementPool.increments,
-               aggregationFunction: entitlementPool.aggregationFunction,
-               operationalScope: entitlementPool.operationalScope,
+               operationalScope: getValue(entitlementPool.operationalScope),
                time: entitlementPool.time,
-               manufacturerReferenceNumber: entitlementPool.manufacturerReferenceNumber,
                startDate: entitlementPool.startDate,
                expiryDate: entitlementPool.expiryDate
        });
@@ -47,17 +47,16 @@ function postEntitlementPool(licenseModelId, entitlementPool, version) {
 
 
 function putEntitlementPool(licenseModelId, previousEntitlementPool, entitlementPool, version) {
+       
        return RestAPIUtil.put(`${baseUrl(licenseModelId, version)}/${entitlementPool.id}`, {
                name: entitlementPool.name,
                description: entitlementPool.description,
                thresholdValue: entitlementPool.thresholdValue,
-               thresholdUnits: entitlementPool.thresholdUnits,
+               thresholdUnits: getValue(entitlementPool.thresholdUnits),
                entitlementMetric: entitlementPool.entitlementMetric,
                increments: entitlementPool.increments,
-               aggregationFunction: entitlementPool.aggregationFunction,
-               operationalScope: entitlementPool.operationalScope,
+               operationalScope: getValue(entitlementPool.operationalScope),
                time: entitlementPool.time,
-               manufacturerReferenceNumber: entitlementPool.manufacturerReferenceNumber,
                startDate: entitlementPool.startDate,
                expiryDate: entitlementPool.expiryDate
        });
@@ -67,8 +66,43 @@ function deleteEntitlementPool(licenseModelId, entitlementPoolId, version) {
        return RestAPIUtil.destroy(`${baseUrl(licenseModelId, version)}/${entitlementPoolId}`);
 }
 
+function fetchLimitsList(licenseModelId, entitlementPoolId, version) { 
+       return RestAPIUtil.fetch(`${baseUrl(licenseModelId, version)}/${entitlementPoolId}/limits`);
+}
+
+function deleteLimit(licenseModelId, entitlementPoolId, version, limitId) {    
+       return RestAPIUtil.destroy(`${baseUrl(licenseModelId, version)}/${entitlementPoolId}/limits/${limitId}`);
+}
+
+function postLimit(licenseModelId, entitlementPoolId, version, limit) {        
+       return RestAPIUtil.post(`${baseUrl(licenseModelId, version)}/${entitlementPoolId}/limits`, {
+               name: limit.name,
+               type: limit.type,
+               description: limit.description,
+               metric: limit.metric,
+               value: limit.value,
+               unit: limit.unit,
+               aggregationFunction: getValue(limit.aggregationFunction),
+               time: getValue(limit.time)
+       });
+}
+
+function putLimit(licenseModelId, entitlementPoolId, version, limit) {
+       
+       return RestAPIUtil.put(`${baseUrl(licenseModelId, version)}/${entitlementPoolId}/limits/${limit.id}`, {
+               name: limit.name,
+               type: limit.type,
+               description: limit.description,
+               metric: limit.metric,
+               value: limit.value,
+               unit: limit.unit,
+               aggregationFunction: getValue(limit.aggregationFunction),
+               time: getValue(limit.time)
+       });     
+}
 
 export default {
+
        fetchEntitlementPoolsList(dispatch, {licenseModelId, version}) {
                return fetchEntitlementPoolsList(licenseModelId, version).then(response => dispatch({
                        type: entitlementPoolsActionTypes.ENTITLEMENT_POOLS_LIST_LOADED,
@@ -76,7 +110,10 @@ export default {
                }));
        },
 
-       openEntitlementPoolsEditor(dispatch, {entitlementPool} = {}) {
+       openEntitlementPoolsEditor(dispatch, {entitlementPool, licenseModelId, version} = {}) {
+               if (licenseModelId && version) {
+                       this.fetchLimits(dispatch, {licenseModelId, version, entitlementPool});
+               }
                dispatch({
                        type: entitlementPoolsActionTypes.entitlementPoolsEditor.OPEN,
                        entitlementPool
@@ -145,5 +182,32 @@ export default {
                LicenseModelActionHelper.fetchLicenseModelById(dispatch, {licenseModelId, version}).then(() => {
                        this.fetchEntitlementPoolsList(dispatch, {licenseModelId, version});
                });
+       },
+
+
+       fetchLimits(dispatch, {licenseModelId, version, entitlementPool}) {
+               return fetchLimitsList(licenseModelId, entitlementPool.id, version). then (response => {
+                       dispatch({
+                               type: entitlementPoolsActionTypes.entitlementPoolsEditor.LIMITS_LIST_LOADED,
+                               response
+                       });
+               });             
+       },
+
+       submitLimit(dispatch, {licenseModelId, version, entitlementPool, limit}) {      
+               const propmise  =  limit.id ? putLimit(licenseModelId,entitlementPool.id, version, limit)
+                       : postLimit(licenseModelId,entitlementPool.id, version, limit);
+               return propmise.then(() => {
+                       dispatch({
+                               type: limitEditorActions.CLOSE
+                       });
+                       this.fetchLimits(dispatch, {licenseModelId, version, entitlementPool});
+               });             
+       },
+
+       deleteLimit(dispatch, {licenseModelId, version, entitlementPool, limit}) {                              
+               return  deleteLimit(licenseModelId,entitlementPool.id, version, limit.id).then(() => {
+                       this.fetchLimits(dispatch, {licenseModelId, version, entitlementPool});         
+               });                             
        }
 };
index 761614d..de2a87c 100644 (file)
@@ -15,7 +15,7 @@
  */
 import keyMirror from 'nfvo-utils/KeyMirror.js';
 import i18n from 'nfvo-utils/i18n/i18n.js';
-import InputOptions, {other as optionInputOther} from 'nfvo-components/input/inputOptions/InputOptions.jsx';
+import InputOptions, {other as optionInputOther} from 'nfvo-components/input/validation/InputOptions.jsx';
 
 export const actionTypes = keyMirror({
 
@@ -28,6 +28,7 @@ export const actionTypes = keyMirror({
                OPEN: null,
                CLOSE: null,
                DATA_CHANGED: null,
+               LIMITS_LIST_LOADED: null
        }
 
 });
@@ -94,11 +95,6 @@ export const optionsInputValues = {
                {enum: 'Units_TB', title: 'Units-TB'},
                {enum: 'Units_GB', title: 'Units-GB'},
                {enum: 'Units_MB', title: 'Units-MB'}
-       ],
-       THRESHOLD_UNITS: [
-               {enum: '', title: i18n('please select…')},
-               {enum: thresholdUnitType.ABSOLUTE, title: 'Absolute'},
-               {enum: thresholdUnitType.PERCENTAGE, title: '%'}
        ]
 };
 
@@ -112,6 +108,11 @@ export const extractUnits = (units) => {
        return units === 'Absolute' ? '' : '%';
 };
 
-export const SP_ENTITLEMENT_POOL_FORM = 'SPENTITLEMENTPOOL';
+export const tabIds = {
+       GENERAL: 'GENERAL',
+       SP_LIMITS: 'SP_LIMITS',
+       VENDOR_LIMITS: 'VENDOR_LIMITS',
+       ADD_LIMIT_BUTTON: 'ADD_LIMIT_BUTTON'
+};
 
-export const EP_TIME_FORMAT = 'MM/DD/YYYY';
+export const SP_ENTITLEMENT_POOL_FORM = 'SPENTITLEMENTPOOL';
\ No newline at end of file
index f89cf8f..23c260f 100644 (file)
@@ -18,10 +18,12 @@ import EntitlementPoolsActionHelper from './EntitlementPoolsActionHelper.js';
 import EntitlementPoolsEditorView from './EntitlementPoolsEditorView.jsx';
 import ValidationHelper from 'sdc-app/common/helpers/ValidationHelper.js';
 
+import LimitEditorActionHelper from '../limits/LimitEditorActionHelper.js';
+
 const mapStateToProps = ({licenseModel: {entitlementPool}}) => {
 
 
-       let {data, genericFieldInfo, formReady} = entitlementPool.entitlementPoolEditor;
+       let {data, genericFieldInfo, formReady, limitsList} = entitlementPool.entitlementPoolEditor;
 
        let isFormValid = ValidationHelper.checkFormValid(genericFieldInfo);
 
@@ -33,7 +35,7 @@ const mapStateToProps = ({licenseModel: {entitlementPool}}) => {
 
        const list = entitlementPool.entitlementPoolsList;
        for (let i = 0; i < list.length; i++) {
-               EPNames[list[i].name] = list[i].id;
+               EPNames[list[i].name.toLowerCase()] = list[i].id;
        }
 
        return {
@@ -42,7 +44,8 @@ const mapStateToProps = ({licenseModel: {entitlementPool}}) => {
                previousData,
                isFormValid,
                formReady,
-               EPNames
+               EPNames,
+               limitsList
        };
 };
 
@@ -50,11 +53,13 @@ const mapActionsToProps = (dispatch, {licenseModelId, version}) => {
        return {
                onDataChanged: (deltaData, formName, customValidations) => ValidationHelper.dataChanged(dispatch, {deltaData, formName, customValidations}),
                onCancel: () => EntitlementPoolsActionHelper.closeEntitlementPoolsEditor(dispatch),
-               onSubmit: ({previousEntitlementPool, entitlementPool}) => {
-                       EntitlementPoolsActionHelper.closeEntitlementPoolsEditor(dispatch);
+               onSubmit: ({previousEntitlementPool, entitlementPool, keepOpen}) => {
+                       if (!keepOpen) {EntitlementPoolsActionHelper.closeEntitlementPoolsEditor(dispatch);}
                        EntitlementPoolsActionHelper.saveEntitlementPool(dispatch, {licenseModelId, previousEntitlementPool, entitlementPool, version});
                },
-               onValidateForm: (formName) => ValidationHelper.validateForm(dispatch, formName)
+               onValidateForm: (formName) => ValidationHelper.validateForm(dispatch, formName),
+               onCloseLimitEditor: () => LimitEditorActionHelper.closeLimitsEditor(dispatch),
+               onOpenLimitEditor: (limit) => LimitEditorActionHelper.openLimitsEditor(dispatch, {limit})
        };
 };
 
index bc95497..be100f6 100644 (file)
@@ -41,12 +41,7 @@ export default (state = {}, action) => {
                                        'description' : {
                                                isValid: true,
                                                errorText: '',
-                                               validations: [{type: 'required', data: true}, {type: 'maxLength', data: 1000}]
-                                       },
-                                       'manufacturerReferenceNumber' : {
-                                               isValid: true,
-                                               errorText: '',
-                                               validations: [{type: 'required', data: true}, {type: 'maxLength', data: 100}]
+                                               validations: [{type: 'maxLength', data: 1000}]
                                        },
                                        'increments' : {
                                                isValid: true,
@@ -56,33 +51,18 @@ export default (state = {}, action) => {
                                        'operationalScope' : {
                                                isValid: true,
                                                errorText: '',
-                                               validations: [{type: 'required', data: true}]
+                                               validations: []
                                        },
                                        'thresholdUnits' : {
                                                isValid: true,
                                                errorText: '',
-                                               validations: [{type: 'required', data: true}]
+                                               validations: []
                                        },
                                        'thresholdValue' : {
                                                isValid: true,
                                                errorText: '',
-                                               validations: [{type: 'required', data: true}]
-                                       },
-                                       'entitlementMetric' : {
-                                               isValid: true,
-                                               errorText: '',
-                                               validations: [{type: 'required', data: true}]
-                                       },
-                                       'aggregationFunction' : {
-                                               isValid: true,
-                                               errorText: '',
-                                               validations: [{type: 'required', data: true}]
-                                       },
-                                       'time' : {
-                                               isValid: true,
-                                               errorText: '',
-                                               validations: [{type: 'required', data: true}]
-                                       },
+                                               validations: []
+                                       },                                      
                                        'startDate': {
                                                isValid: true,
                                                errorText: '',
@@ -106,6 +86,12 @@ export default (state = {}, action) => {
                        };
                case actionTypes.entitlementPoolsEditor.CLOSE:
                        return {};
+
+               case actionTypes.entitlementPoolsEditor.LIMITS_LIST_LOADED:
+                       return {
+                               ...state,
+                               limitsList: action.response.results
+                       };      
                default:
                        return state;
        }
index e4b52fc..aa1321c 100644 (file)
@@ -21,41 +21,39 @@ import Validator from 'nfvo-utils/Validator.js';
 import Input from 'nfvo-components/input/validation/Input.jsx';
 import InputOptions from 'nfvo-components/input/validation/InputOptions.jsx';
 import Form from 'nfvo-components/input/validation/Form.jsx';
+import Button from 'sdc-ui/lib/react/Button.js';
 import GridSection from 'nfvo-components/grid/GridSection.jsx';
 import GridItem from 'nfvo-components/grid/GridItem.jsx';
-import {optionsInputValues as  EntitlementPoolsOptionsInputValues, thresholdUnitType, SP_ENTITLEMENT_POOL_FORM, EP_TIME_FORMAT}  from  './EntitlementPoolsConstants.js';
-import {other as optionInputOther} from 'nfvo-components/input/inputOptions/InputOptions.jsx';
+import {optionsInputValues as  EntitlementPoolsOptionsInputValues, SP_ENTITLEMENT_POOL_FORM, tabIds}  from  './EntitlementPoolsConstants.js';
+import {optionsInputValues as LicenseModelOptionsInputValues} from '../LicenseModelConstants.js';
+import {validateStartDate, thresholdValueValidation} from '../LicenseModelValidations.js';
+import {DATE_FORMAT} from 'sdc-app/onboarding/OnboardingConstants.js';
+import {other as optionInputOther} from 'nfvo-components/input/validation/InputOptions.jsx';
+import Tabs from 'sdc-ui/lib/react/Tabs.js';
+import Tab from 'sdc-ui/lib/react/Tab.js';
+import EntitlementPoolsLimits from './EntitlementPoolsLimits.js';
+import {limitType, NEW_LIMIT_TEMP_ID} from '../limits/LimitEditorConstants.js';
 
 const EntitlementPoolPropType = React.PropTypes.shape({
        id: React.PropTypes.string,
        name: React.PropTypes.string,
        description: React.PropTypes.string,
-       manufacturerReferenceNumber: React.PropTypes.string,
        operationalScope: React.PropTypes.shape({
                choices: React.PropTypes.array,
                other: React.PropTypes.string
        }),
-       aggregationFunction: React.PropTypes.shape({
-               choice: React.PropTypes.string,
-               other: React.PropTypes.string
-       }),
+       thresholdUnits: React.PropTypes.string,
+       thresholdValue: React.PropTypes.number,
        increments: React.PropTypes.string,
-       time: React.PropTypes.shape({
-               choice: React.PropTypes.string,
-               other: React.PropTypes.string
-       }),
-       entitlementMetric: React.PropTypes.shape({
-               choice: React.PropTypes.string,
-               other: React.PropTypes.string
-       })
+       startDate: React.PropTypes.string,
+       expiryDate: React.PropTypes.string
 });
 
-const EntitlementPoolsFormContent = ({data, genericFieldInfo, onDataChanged, validateName, validateChoiceWithOther, validateTimeOtherValue,
+const EntitlementPoolsFormContent = ({data, genericFieldInfo, onDataChanged, validateName,
         thresholdValueValidation, validateStartDate}) => {
-       let {
-               name, description, manufacturerReferenceNumber, operationalScope , aggregationFunction,  thresholdUnits, thresholdValue,
-               increments, time, entitlementMetric, startDate, expiryDate} = data;
 
+       let {name, description, operationalScope, thresholdUnits, thresholdValue,
+               increments, startDate, expiryDate} = data;
        return (
                <GridSection>
                        <GridItem colSpan={2}>
@@ -73,12 +71,10 @@ const EntitlementPoolsFormContent = ({data, genericFieldInfo, onDataChanged, val
                                <InputOptions
                                        onInputChange={()=>{}}
                                        isMultiSelect={true}
-
-                                       isRequired={true}
                                        onEnumChange={operationalScope => onDataChanged({operationalScope:{choices: operationalScope, other: ''}},
-                                               SP_ENTITLEMENT_POOL_FORM, {operationalScope: validateChoiceWithOther})}
+                                               SP_ENTITLEMENT_POOL_FORM)}
                                        onOtherChange={operationalScope => onDataChanged({operationalScope:{choices: [optionInputOther.OTHER],
-                                               other: operationalScope}}, SP_ENTITLEMENT_POOL_FORM, {operationalScope: validateChoiceWithOther})}
+                                               other: operationalScope}}, SP_ENTITLEMENT_POOL_FORM)}
                                        label={i18n('Operational Scope')}
                                        data-test-id='create-ep-operational-scope'
                                        type='select'
@@ -95,21 +91,21 @@ const EntitlementPoolsFormContent = ({data, genericFieldInfo, onDataChanged, val
                                        errorText={genericFieldInfo.description.errorText}
                                        label={i18n('Description')}
                                        value={description}
-                                       isRequired={true}
                                        data-test-id='create-ep-description'
                                        type='textarea'/>
                        </GridItem>
                        <GridItem colSpan={2}>
                                <div className='threshold-section'>
                                        <Input
-                                               isRequired={true}
                                                onChange={e => {
                                                        // setting the unit to the correct value
                                                        const selectedIndex = e.target.selectedIndex;
                                                        const val = e.target.options[selectedIndex].value;
                                                        onDataChanged({thresholdUnits: val}, SP_ENTITLEMENT_POOL_FORM);
                                                        // TODO make sure that the value is valid too
-                                                       onDataChanged({thresholdValue: thresholdValue}, SP_ENTITLEMENT_POOL_FORM,{thresholdValue : thresholdValueValidation});}
+                                                       if(thresholdValue && thresholdValue !== '') {
+                                                               onDataChanged({thresholdValue: thresholdValue}, SP_ENTITLEMENT_POOL_FORM,{thresholdValue : thresholdValueValidation});
+                                                       }}
 
                                                }
                                                value={thresholdUnits}
@@ -120,7 +116,7 @@ const EntitlementPoolsFormContent = ({data, genericFieldInfo, onDataChanged, val
                                                groupClassName='bootstrap-input-options'
                                                className='input-options-select'
                                                type='select' >
-                                               {EntitlementPoolsOptionsInputValues.THRESHOLD_UNITS.map(mtype =>
+                                               {LicenseModelOptionsInputValues.THRESHOLD_UNITS.map(mtype =>
                                                        <option key={mtype.enum} value={mtype.enum}>{`${mtype.title}`}</option>)}
                                        </Input>
 
@@ -133,116 +129,46 @@ const EntitlementPoolsFormContent = ({data, genericFieldInfo, onDataChanged, val
                                                errorText={genericFieldInfo.thresholdValue.errorText}
                                                data-test-id='create-ep-threshold-value'
                                                value={thresholdValue}
-                                               isRequired={true}
                                                type='text'/>
                                </div>
-                               <InputOptions
-                                       onInputChange={()=>{}}
-                                       isMultiSelect={false}
-                                       isRequired={true}
-                                       onEnumChange={entitlementMetric => onDataChanged({entitlementMetric:{choice: entitlementMetric, other: ''}},
-                                               SP_ENTITLEMENT_POOL_FORM, {entitlementMetric: validateChoiceWithOther})}
-                                       onOtherChange={entitlementMetric => onDataChanged({entitlementMetric:{choice: optionInputOther.OTHER,
-                                               other: entitlementMetric}}, SP_ENTITLEMENT_POOL_FORM, {entitlementMetric: validateChoiceWithOther})}
-                                       label={i18n('Entitlement Metric')}
-                                       data-test-id='create-ep-entitlement-metric'
-                                       type='select'
-                                       required={true}
-                                       selectedEnum={entitlementMetric && entitlementMetric.choice}
-                                       otherValue={entitlementMetric && entitlementMetric.other}
-                                       values={EntitlementPoolsOptionsInputValues.ENTITLEMENT_METRIC}
-                                       isValid={genericFieldInfo.entitlementMetric.isValid}
-                                       errorText={genericFieldInfo.entitlementMetric.errorText} />
-                               <InputOptions
-                                       onInputChange={()=>{}}
-                                       isMultiSelect={false}
-                                       isRequired={true}
-                                       onEnumChange={aggregationFunction => onDataChanged({aggregationFunction:{choice: aggregationFunction, other: ''}},
-                                               SP_ENTITLEMENT_POOL_FORM, {aggregationFunction: validateChoiceWithOther})}
-                                       onOtherChange={aggregationFunction => onDataChanged({aggregationFunction:{choice: optionInputOther.OTHER,
-                                               other: aggregationFunction}}, SP_ENTITLEMENT_POOL_FORM, {aggregationFunction: validateChoiceWithOther})}
-                                       label={i18n('Aggregate Function')}
-                                       data-test-id='create-ep-aggregate-function'
-                                       type='select'
-                                       required={true}
-                                       selectedEnum={aggregationFunction && aggregationFunction.choice}
-                                       otherValue={aggregationFunction && aggregationFunction.other}
-                                       values={EntitlementPoolsOptionsInputValues.AGGREGATE_FUNCTION}
-                                       isValid={genericFieldInfo.aggregationFunction.isValid}
-                                       errorText={genericFieldInfo.aggregationFunction.errorText} />
-                       </GridItem>
-                       <GridItem colSpan={2}>
-                               <Input
-                                       onChange={manufacturerReferenceNumber => onDataChanged({manufacturerReferenceNumber}, SP_ENTITLEMENT_POOL_FORM)}
-                                       label={i18n('Manufacturer Reference Number')}
-                                       value={manufacturerReferenceNumber}
-                                       isValid={genericFieldInfo.manufacturerReferenceNumber.isValid}
-                                       errorText={genericFieldInfo.manufacturerReferenceNumber.errorText}
-                                       isRequired={true}
-                                       data-test-id='create-ep-reference-number'
-                                       type='text'/>
-                       </GridItem>
-                       <GridItem colSpan={2}>
-                               <InputOptions
-                                       onInputChange={()=>{}}
-                                       isMultiSelect={false}
-                                       isRequired={true}
-                                       onEnumChange={time => onDataChanged({time:{choice: time, other: ''}},
-                                               SP_ENTITLEMENT_POOL_FORM, {time: validateChoiceWithOther})}
-                                       onOtherChange={time => onDataChanged({time:{choice: optionInputOther.OTHER,
-                                               other: time}}, SP_ENTITLEMENT_POOL_FORM, {time: validateTimeOtherValue})}
-                                       label={i18n('Time')}
-                                       data-test-id='create-ep-time'
-                                       type='select'
-                                       required={true}
-                                       selectedEnum={time && time.choice}
-                                       otherValue={time && time.other}
-                                       values={EntitlementPoolsOptionsInputValues.TIME}
-                                       isValid={genericFieldInfo.time.isValid}
-                                       errorText={genericFieldInfo.time.errorText} />
-                       </GridItem>
-                       <GridItem colSpan={2}>
                                <Input
                                        onChange={increments => onDataChanged({increments}, SP_ENTITLEMENT_POOL_FORM)}
                                        label={i18n('Increments')}
                                        value={increments}
                                        data-test-id='create-ep-increments'
                                        type='text'/>
-                       </GridItem>
-                       <GridItem colSpan={2} />
-                       <GridItem colSpan={2}>
-                               <Input
-                                       type='date'
-                                       label={i18n('Start Date')} 
-                                       value={startDate}
-                                       dateFormat={EP_TIME_FORMAT}
-                                       startDate={startDate}
-                                       endDate={expiryDate}
-                                       onChange={startDate => onDataChanged(
-                                               {startDate: startDate ? startDate.format(EP_TIME_FORMAT) : ''}, 
-                                               SP_ENTITLEMENT_POOL_FORM,
-                                               {startDate: validateStartDate}
-                                       )}
-                                       isValid={genericFieldInfo.startDate.isValid}
-                                       errorText={genericFieldInfo.startDate.errorText}
-                                       selectsStart/>
-                       </GridItem>
-                       <GridItem colSpan={2}>
-                               <Input
-                                       type='date' 
-                                       label={i18n('Expiry Date')} 
-                                       value={expiryDate}
-                                       dateFormat={EP_TIME_FORMAT}
-                                       startDate={startDate}
-                                       endDate={expiryDate}
-                                       onChange={expiryDate => {
-                                               onDataChanged({expiryDate: expiryDate ? expiryDate.format(EP_TIME_FORMAT) : ''}, SP_ENTITLEMENT_POOL_FORM);
-                                               onDataChanged({startDate}, SP_ENTITLEMENT_POOL_FORM, {startDate: validateStartDate});
-                                       }}
-                                       isValid={genericFieldInfo.expiryDate.isValid}
-                                       errorText={genericFieldInfo.expiryDate.errorText}
-                                       selectsEnd/>
-                       </GridItem>
+                               <div className='date-section'>
+                                       <Input
+                                               type='date'
+                                               label={i18n('Start Date')}
+                                               value={startDate}
+                                               dateFormat={DATE_FORMAT}
+                                               startDate={startDate}
+                                               endDate={expiryDate}
+                                               onChange={startDate => onDataChanged(
+                                                       {startDate: startDate ? startDate.format(DATE_FORMAT) : ''},
+                                                       SP_ENTITLEMENT_POOL_FORM,
+                                                       {startDate: validateStartDate}
+                                               )}
+                                               isValid={genericFieldInfo.startDate.isValid}
+                                               errorText={genericFieldInfo.startDate.errorText}
+                                               selectsStart/>  
+                                       <Input
+                                               type='date'
+                                               label={i18n('Expiry Date')}
+                                               value={expiryDate}
+                                               dateFormat={DATE_FORMAT}
+                                               startDate={startDate}
+                                               endDate={expiryDate}
+                                               onChange={expiryDate => {
+                                                       onDataChanged({expiryDate: expiryDate ? expiryDate.format(DATE_FORMAT) : ''}, SP_ENTITLEMENT_POOL_FORM);
+                                                       onDataChanged({startDate}, SP_ENTITLEMENT_POOL_FORM, {startDate: validateStartDate});
+                                               }}
+                                               isValid={genericFieldInfo.expiryDate.isValid}
+                                               errorText={genericFieldInfo.expiryDate.errorText}
+                                               selectsEnd/>
+                               </div>                                                  
+                       </GridItem>                                                                     
                </GridSection>
        );
 };
@@ -263,42 +189,102 @@ class EntitlementPoolsEditorView extends React.Component {
                data: {}
        };
 
-       render() {
-               let {data = {}, onDataChanged, isReadOnlyMode, genericFieldInfo} = this.props;
+       componentDidUpdate(prevProps) {                         
+               if (this.props.formReady && this.props.formReady !== prevProps.formReady) { // if form validation succeeded -> continue with submit
+                       this.submit();
+               }
+       }
+       
+       state = {               
+               selectedTab: tabIds.GENERAL,
+               selectedLimit: ''
+       };
 
+       render() {
+               let {data = {}, onDataChanged, isReadOnlyMode, genericFieldInfo, onCloseLimitEditor, limitsList = []} = this.props;
+               const {selectedTab} = this.state;
+               const isTabsDisabled = !data.id || !this.props.isFormValid;
 
                return (
                        <div>
-                               {
-                                       genericFieldInfo && <Form
-                                               ref='validationForm'
-                                               hasButtons={true}
-                                               onSubmit={ () => this.submit() }
-                                               onReset={ () => this.props.onCancel() }
-                                               labledButtons={true}
-                                               isReadOnlyMode={isReadOnlyMode}
-                                               isValid={this.props.isFormValid}
-                                               formReady={this.props.formReady}
-                                               onValidateForm={() => this.props.onValidateForm(SP_ENTITLEMENT_POOL_FORM) }
-                                               className='entitlement-pools-form'>
-                                               <EntitlementPoolsFormContent
-                                                       data={data}
-                                                       genericFieldInfo={genericFieldInfo}
-                                                       onDataChanged={onDataChanged}
-                                                       validateName={(value)=> this.validateName(value)}
-                                                       validateTimeOtherValue ={(value)=> this.validateTimeOtherValue(value)}
-                                                       validateChoiceWithOther={(value)=> this.validateChoiceWithOther(value)}
-                                                       validateStartDate={(value, state)=> this.validateStartDate(value, state)}
-                                                       thresholdValueValidation={(value, state)=> this.thresholdValueValidation(value, state)}/>
-                                       </Form>
+                       <Tabs 
+                               type='menu' 
+                               activeTab={selectedTab} 
+                               onTabClick={(tabIndex)=>{
+                                       if (tabIndex === tabIds.ADD_LIMIT_BUTTON)  {
+                                               this.onAddLimit();
+                                       } else {
+                                               this.setState({selectedTab: tabIndex});
+                                               this.setState({selectedLimit: ''});
+                                               onCloseLimitEditor();
+                                       }
+                                       
+                               }} 
+                               invalidTabs={[]}>
+                               <Tab tabId={tabIds.GENERAL} data-test-id='general-tab' title={i18n('General')}>
+                                       {
+                                               genericFieldInfo && <Form
+                                                       ref='validationForm'
+                                                       hasButtons={false}                                              
+                                                       labledButtons={false}
+                                                       isReadOnlyMode={isReadOnlyMode}
+                                                       isValid={this.props.isFormValid}
+                                                       formReady={this.props.formReady}
+                                                       onValidateForm={() => this.props.onValidateForm(SP_ENTITLEMENT_POOL_FORM) }
+                                                       className='license-model-form entitlement-pools-form'>
+                                                       <EntitlementPoolsFormContent
+                                                               data={data}
+                                                               genericFieldInfo={genericFieldInfo}
+                                                               onDataChanged={onDataChanged}
+                                                               validateName={(value) => this.validateName(value)}
+                                                               validateStartDate={(value, state) => validateStartDate(value, state)}
+                                                               thresholdValueValidation={(value, state) => thresholdValueValidation(value, state)}/>
+                                               </Form>
+                                       }
+                               </Tab>
+                               <Tab disabled={isTabsDisabled} tabId={tabIds.SP_LIMITS} data-test-id='sp-limits-tab' title={i18n('SP Limits')}>
+                                       {selectedTab === tabIds.SP_LIMITS && 
+                                               <EntitlementPoolsLimits 
+                                                       limitType={limitType.SERVICE_PROVIDER} 
+                                                       limitsList={limitsList.filter(item => item.type === limitType.SERVICE_PROVIDER)}
+                                                       selectedLimit={this.state.selectedLimit}
+                                                       onCloseLimitEditor={() => this.onCloseLimitEditor()}
+                                                       onSelectLimit={limit => this.onSelectLimit(limit)}/>}
+                               </Tab>
+                               <Tab disabled={isTabsDisabled} tabId={tabIds.VENDOR_LIMITS} data-test-id='vendor-limits-tab' title={i18n('Vendor Limits')}>
+                                       {selectedTab === tabIds.VENDOR_LIMITS && 
+                                               <EntitlementPoolsLimits 
+                                                       limitType={limitType.VENDOR} 
+                                                       limitsList={limitsList.filter(item => item.type === limitType.VENDOR)}
+                                                       selectedLimit={this.state.selectedLimit}
+                                                       onCloseLimitEditor={() => this.onCloseLimitEditor()}
+                                                       onSelectLimit={limit => this.onSelectLimit(limit)}/>}
+                               </Tab>
+                               {selectedTab !== tabIds.GENERAL ? 
+                                       <Button disabled={this.state.selectedLimit} className='add-limit-button' tabId={tabIds.ADD_LIMIT_BUTTON} btnType='link' iconName='plus'>{i18n('Add Limit')}</Button> : 
+                                       <div></div> // Render empty div to not break tabs
                                }
+                       </Tabs>
+                       <GridSection className='license-model-modal-buttons entitlement-pools-editor-buttons'>
+                       {!this.state.selectedLimit && <Button btnType='default' disabled={!this.props.isFormValid} onClick={() => this.submit()} type='reset'>{i18n('Save')}</Button>}
+                       <Button btnType={this.state.selectedLimit ? 'default' : 'outline'} onClick={() => this.props.onCancel()} type='reset'>
+                               {i18n('Cancel')}
+                       </Button>
+                       </GridSection>  
                        </div>
                );
        }
 
        submit() {
-               const {data: entitlementPool, previousData: previousEntitlementPool} = this.props;
-               this.props.onSubmit({entitlementPool, previousEntitlementPool});
+               const {data: entitlementPool, previousData: previousEntitlementPool, formReady} = this.props;
+
+               if (!formReady) {
+                       this.props.onValidateForm(SP_ENTITLEMENT_POOL_FORM);
+               } else {
+                       this.props.onSubmit({entitlementPool, previousEntitlementPool});
+               }
+
+               
        }
 
        validateName(value) {
@@ -309,52 +295,26 @@ class EntitlementPoolsEditorView extends React.Component {
                {isValid: false, errorText: i18n('Entitlement pool by the name \'' + value + '\' already exists. Entitlement pool name must be unique')};
        }
 
-       validateStartDate(value, state) {
-               if (state.data.expiryDate) {
-                       if (!value) {
-                               return {isValid: false, errorText: i18n('Start date has to be specified if expiry date is specified')};
-                       }
+       onSelectLimit(limit) {
+               if (limit.id === this.state.selectedLimit) {
+                       this.setState({selectedLimit: ''});
+                       return;
                }
-               return {isValid: true, errorText: ''};
+               this.setState({selectedLimit: limit.id});
+               this.props.onOpenLimitEditor(limit);
        }
 
-       validateTimeOtherValue(value) {
-               return Validator.validate('time', value.other, [{type: 'required', data: true}, {type: 'numeric', data: true}]);
+       onCloseLimitEditor() {
+               this.setState({selectedLimit: ''});
+               this.props.onCloseLimitEditor();
        }
 
-       validateChoiceWithOther(value) {
-               let chosen = value.choice;
-               // if we have an empty multiple select we have a problem since it's required
-               if (value.choices) {
-                       if (value.choices.length === 0) {
-                               return  Validator.validate('field', '', [{type: 'required', data: true}]);
-                       } else {
-                               // continuing validation with the first chosen value in case we have the 'Other' field
-                               chosen = value.choices[0];
-                       }
-               }
-               if (chosen !== optionInputOther.OTHER) {
-                       return  Validator.validate('field', chosen, [{type: 'required', data: true}]);
-               } else { // when 'Other' was chosen, validate other value
-                       return  Validator.validate('field', value.other, [{type: 'required', data: true}]);
-               }
+       onAddLimit() {
+               this.setState({selectedLimit: NEW_LIMIT_TEMP_ID});
+               this.props.onOpenLimitEditor();
        }
 
-       thresholdValueValidation(value, state) {
 
-               let  unit = state.data.thresholdUnits;
-               if (unit === thresholdUnitType.PERCENTAGE) {
-                       return Validator.validate('thresholdValue', value, [
-                               {type: 'required', data: true},
-                               {type: 'numeric', data: true},
-                               {type: 'maximum', data: 100},
-                               {type: 'minimum', data: 0}]);
-               } else {
-                       return Validator.validate('thresholdValue', value, [
-                               {type: 'numeric', data: true},
-                               {type: 'required', data: true}]);
-               }
-       }
 
 }
 
diff --git a/openecomp-ui/src/sdc-app/onboarding/licenseModel/entitlementPools/EntitlementPoolsLimits.js b/openecomp-ui/src/sdc-app/onboarding/licenseModel/entitlementPools/EntitlementPoolsLimits.js
new file mode 100644 (file)
index 0000000..ae53a75
--- /dev/null
@@ -0,0 +1,56 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. 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.
+ */
+import {connect} from 'react-redux';
+import i18n from 'nfvo-utils/i18n/i18n.js';
+import ValidationHelper from 'sdc-app/common/helpers/ValidationHelper.js';
+import Limits from 'sdc-app/onboarding/licenseModel/limits/Limits.jsx';
+import {actionTypes as globalModalActionTypes} from 'nfvo-components/modal/GlobalModalConstants.js';
+import EntitlementPoolsActionHelper from './EntitlementPoolsActionHelper.js';
+
+const mapStateToProps = ({licenseModel: {entitlementPool: {entitlementPoolEditor: {data}}, limitEditor}, currentScreen}) => {  
+       let  {props: {licenseModelId, version}} = currentScreen;
+       return {
+               parent: data,           
+               limitEditor,
+               licenseModelId,
+               version
+       };
+};
+
+const mapActionsToProps = (dispatch) => {
+       return {
+               onDataChanged: (deltaData, formName, customValidations) => ValidationHelper.dataChanged(dispatch, {deltaData, formName, customValidations}),
+               onSubmit: (limit, entitlementPool, licenseModelId, version) => EntitlementPoolsActionHelper.submitLimit(dispatch,
+                       {
+                               limit,
+                               entitlementPool,
+                               licenseModelId,
+                               version}),
+               onDelete: ({limit, parent, licenseModelId, version, onCloseLimitEditor, selectedLimit}) => dispatch({
+                       type: globalModalActionTypes.GLOBAL_MODAL_WARNING,
+                       data:{
+                               msg: i18n(`Are you sure you want to delete ${limit.name}?`),
+                               confirmationButtonText: i18n('Delete'),
+                               title: i18n('Warning'),
+                               onConfirmed: ()=> EntitlementPoolsActionHelper.deleteLimit(dispatch, {limit, entitlementPool: parent, licenseModelId, version}).then(() => 
+                                       selectedLimit === limit.id && onCloseLimitEditor()
+                               )
+                       }
+               })
+       };
+};
+
+export default connect(mapStateToProps, mapActionsToProps)(Limits);
\ No newline at end of file
index 993ed48..62c6663 100644 (file)
@@ -39,7 +39,7 @@ const mapStateToProps = ({licenseModel: {entitlementPool, licenseModelEditor}})
 const mapActionsToProps = (dispatch, {licenseModelId, version}) => {
        return {
                onAddEntitlementPoolClick: () => EntitlementPoolsActionHelper.openEntitlementPoolsEditor(dispatch),
-               onEditEntitlementPoolClick: entitlementPool => EntitlementPoolsActionHelper.openEntitlementPoolsEditor(dispatch, {entitlementPool}),
+               onEditEntitlementPoolClick: entitlementPool => EntitlementPoolsActionHelper.openEntitlementPoolsEditor(dispatch, {entitlementPool, licenseModelId, version}),
                onDeleteEntitlementPool: entitlementPool => dispatch({
                        type: globalMoadlActions.GLOBAL_MODAL_WARNING,
                        data:{
index 55fd11b..c730d66 100644 (file)
@@ -21,7 +21,7 @@ import ListEditorView from 'nfvo-components/listEditor/ListEditorView.jsx';
 import ListEditorItemView from 'nfvo-components/listEditor/ListEditorItemView.jsx';
 
 import EntitlementPoolsEditor from './EntitlementPoolsEditor.js';
-import {extractUnits, extractValue} from './EntitlementPoolsConstants';
+import {extractUnits} from './EntitlementPoolsConstants';
 
 class EntitlementPoolsListEditorView extends React.Component {
        static propTypes = {
@@ -60,7 +60,7 @@ class EntitlementPoolsListEditorView extends React.Component {
                                        isReadOnlyMode={isReadOnlyMode}>
                                        {this.filterList().map(entitlementPool => this.renderEntitlementPoolListItem(entitlementPool, isReadOnlyMode))}
                                </ListEditorView>
-                               <Modal show={isDisplayModal} bsSize='large' animation={true} className='onborading-modal entitlement-pools-modal'>
+                               <Modal show={isDisplayModal} bsSize='large' animation={true} className='onborading-modal license-model-modal entitlement-pools-modal'>
                                        <Modal.Header>
                                                <Modal.Title>{`${isModalInEditMode ? i18n('Edit Entitlement Pool') : i18n('Create New Entitlement Pool')}`}</Modal.Title>
                                        </Modal.Header>
@@ -91,8 +91,7 @@ class EntitlementPoolsListEditorView extends React.Component {
        }
 
        renderEntitlementPoolListItem(entitlementPool, isReadOnlyMode) {
-               let {id, name, description, thresholdValue, thresholdUnits, entitlementMetric, aggregationFunction,
-                       manufacturerReferenceNumber, time} = entitlementPool;
+               let {id, name, description, thresholdValue, thresholdUnits} = entitlementPool;
                let {onEditEntitlementPoolClick, onDeleteEntitlementPool} = this.props;
                return (
                        <ListEditorItemView
@@ -109,13 +108,7 @@ class EntitlementPoolsListEditorView extends React.Component {
 
                                <div className='list-editor-item-view-field'>
                                        <div className='title'>{i18n('Entitlement')}</div>
-                                       <div className='entitlement-parameters'>{`${extractValue(aggregationFunction)} ${extractValue(entitlementMetric)} per  ${extractValue(time)}`}</div>
-                                       <div className='entitlement-pools-count'>{`${thresholdValue ? thresholdValue : ''} ${extractUnits(thresholdUnits)}`}</div>
-                               </div>
-
-                               <div className='list-editor-item-view-field'>
-                                       <div className='title'>{i18n('Manufacturer Reference Number')}</div>
-                                       <div className='text contract-number'>{manufacturerReferenceNumber}</div>
+                                       <div className='entitlement-pools-count'>{thresholdValue && `${thresholdValue} ${extractUnits(thresholdUnits)}`}</div>
                                </div>
 
                                <div className='list-editor-item-view-field'>
index c6249c9..6edb1e1 100644 (file)
@@ -34,7 +34,7 @@ export const mapStateToProps = ({licenseModel: {featureGroup, entitlementPool, l
        }
 
        for (let i = 0; i < list.length; i++) {
-               FGNames[list[i].name] = list[i].id;
+               FGNames[list[i].name.toLowerCase()] = list[i].id;
        }
 
        for (let field in genericFieldInfo) {
index d695484..6a5ee46 100644 (file)
@@ -15,7 +15,7 @@
  */
 import React from 'react';
 import Tabs from 'nfvo-components/input/validation/Tabs.jsx';
-import Tab from 'react-bootstrap/lib/Tab.js';
+import Tab from 'sdc-ui/lib/react/Tab.js';
 import GridSection from 'nfvo-components/grid/GridSection.jsx';
 import GridItem from 'nfvo-components/grid/GridItem.jsx';
 import {TabsForm as Form} from 'nfvo-components/input/validation/Form.jsx';
@@ -31,12 +31,13 @@ const FeatureGroupsPropType = React.PropTypes.shape({
        name: React.PropTypes.string,
        description: React.PropTypes.string,
        partNumber: React.PropTypes.string,
+       manufacturerReferenceNumber: React.PropTypes.string,
        entitlementPoolsIds: React.PropTypes.arrayOf(React.PropTypes.string),
        licenseKeyGroupsIds: React.PropTypes.arrayOf(React.PropTypes.string)
 });
 
 const GeneralTab = ({data = {}, onDataChanged, genericFieldInfo, validateName}) => {
-       let {name, description, partNumber} = data;
+       let {name, description, partNumber, manufacturerReferenceNumber} = data;
        return (
                        <GridSection>
                                <GridItem colSpan={2}>
@@ -51,6 +52,8 @@ const GeneralTab = ({data = {}, onDataChanged, genericFieldInfo, validateName})
                                                isRequired={true}
                                                isValid={genericFieldInfo.name.isValid}
                                                errorText={genericFieldInfo.name.errorText} />
+                               </GridItem>
+                               <GridItem colSpan={2}>
                                        <Input
                                                groupClassName='field-section'
                                                className='description-field'
@@ -60,9 +63,10 @@ const GeneralTab = ({data = {}, onDataChanged, genericFieldInfo, validateName})
                                                value={description}
                                                name='feature-group-description'
                                                type='textarea'
-                                               isRequired={true}
                                                isValid={genericFieldInfo.description.isValid}
                                                errorText={genericFieldInfo.description.errorText} />
+                               </GridItem>
+                               <GridItem colSpan={2}>
                                        <Input
                                                groupClassName='field-section'
                                                onChange={partNumber => onDataChanged({partNumber}, FG_EDITOR_FORM)}
@@ -74,6 +78,18 @@ const GeneralTab = ({data = {}, onDataChanged, genericFieldInfo, validateName})
                                                isValid={genericFieldInfo.partNumber.isValid}
                                                errorText={genericFieldInfo.partNumber.errorText} />
                                </GridItem>
+                               <GridItem colSpan={2}>
+                                       <Input
+                                               groupClassName='field-section'
+                                               onChange={manufacturerReferenceNumber => onDataChanged({manufacturerReferenceNumber}, FG_EDITOR_FORM)}
+                                               label={i18n('Manufacturer Reference Number')}
+                                               data-test-id='create-fg-reference-number'
+                                               value={manufacturerReferenceNumber}
+                                               isRequired={true}
+                                               type='text'
+                                               isValid={genericFieldInfo.manufacturerReferenceNumber.isValid}
+                                               errorText={genericFieldInfo.manufacturerReferenceNumber.errorText} />
+                               </GridItem>
                        </GridSection>
                );
 };
@@ -94,7 +110,7 @@ const EntitlementPoolsTab = ({entitlementPoolsList, data, onDataChanged, isReadO
                );
        } else {
                return (
-                       <p>{i18n('There is no available entitlement pools')}</p>
+                       <p>{i18n('There are no available entitlement pools')}</p>
                );
        }
 };
@@ -115,7 +131,7 @@ const LKGTab = ({licenseKeyGroupsList, data, onDataChanged, isReadOnlyMode}) =>
                );
        } else {
                return (
-                       <p>{i18n('There is no available licsense key groups')}</p>
+                       <p>{i18n('There are no available license key groups')}</p>
                );
        }
 };
@@ -166,22 +182,22 @@ class FeatureGroupEditorView extends React.Component {
                                labledButtons={true}
                                isReadOnlyMode={isReadOnlyMode}
                                name='feature-group-validation-form'
-                               className='feature-group-form'>
-                               <Tabs activeKey={onTabSelect ? selectedTab : undefined} onSelect={onTabSelect} invalidTabs={invalidTabs} id='vlmFGValTabs' >
-                                       <Tab eventKey={FeatureGroupStateConstants.SELECTED_FEATURE_GROUP_TAB.GENERAL} title={i18n('General')}  >
+                               className='license-model-form feature-group-form'>
+                               <Tabs activeTab={onTabSelect ? selectedTab : undefined} onTabClick={onTabSelect} invalidTabs={invalidTabs} id='vlmFGValTabs' >
+                                       <Tab tabId={FeatureGroupStateConstants.SELECTED_FEATURE_GROUP_TAB.GENERAL} title={i18n('General')}  >
                                                <fieldset disabled={isReadOnlyMode}>
                                                        <GeneralTab data={data} onDataChanged={onDataChanged} genericFieldInfo={genericFieldInfo}  validateName={(value)=> this.validateName(value)}/>
                                                </fieldset>
                                        </Tab>
                                        <Tab
-                                               eventKey={FeatureGroupStateConstants.SELECTED_FEATURE_GROUP_TAB.ENTITLEMENT_POOLS}
+                                               tabId={FeatureGroupStateConstants.SELECTED_FEATURE_GROUP_TAB.ENTITLEMENT_POOLS}
                                                title={i18n('Entitlement Pools')} >
                                                <fieldset disabled={isReadOnlyMode}>
                                                        <EntitlementPoolsTab isReadOnlyMode={isReadOnlyMode} data={data} onDataChanged={onDataChanged} entitlementPoolsList={entitlementPoolsList} />
                                                </fieldset>
                                        </Tab>
                                        <Tab
-                                               eventKey={FeatureGroupStateConstants.SELECTED_FEATURE_GROUP_TAB.LICENSE_KEY_GROUPS}
+                                               tabId={FeatureGroupStateConstants.SELECTED_FEATURE_GROUP_TAB.LICENSE_KEY_GROUPS}
                                                title={i18n('License Key Groups')} >
                                                <fieldset disabled={isReadOnlyMode}>
                                                        <LKGTab isReadOnlyMode={isReadOnlyMode} data={data} onDataChanged={onDataChanged} licenseKeyGroupsList={licenseKeyGroupsList} />
index f883bd7..9844290 100644 (file)
@@ -65,7 +65,7 @@ class FeatureGroupListEditorView extends React.Component {
                                        {this.filterList().map(listItem => this.renderFeatureGroupListItem(listItem, isReadOnlyMode, version))}
                                </ListEditorView>
                                {featureGroupsModal.show && <Modal show={featureGroupsModal.show} bsSize='large' animation={true}
-                                              className='onborading-modal feature-group-modal'>
+                                              className='onborading-modal license-model-modal feature-group-modal'>
                                                <Modal.Header>
                                                        <Modal.Title>{`${featureGroupsModal.editMode ? i18n('Edit Feature Group') : i18n('Create New Feature Group')}`}</Modal.Title>
                                                </Modal.Header>
@@ -84,7 +84,7 @@ class FeatureGroupListEditorView extends React.Component {
 
 
        renderFeatureGroupListItem(listItem, isReadOnlyMode, version) {
-               let {name, description, entitlementPoolsIds = [], licenseKeyGroupsIds = []} = listItem;
+               let {name, description, manufacturerReferenceNumber, entitlementPoolsIds = [], licenseKeyGroupsIds = []} = listItem;
                return (
                        <ListEditorItemView
                                key={listItem.id}
@@ -110,10 +110,20 @@ class FeatureGroupListEditorView extends React.Component {
                                        </div>
                                </div>
 
+                               <div className='list-editor-item-view-field'>
+                                       <div className='feature-groups-count-field'>
+                                               <div className='title'>{i18n('Manufacturer Reference')}</div>
+                                               <div className='title'>{i18n('Number')}</div>
+                                               <div className='feature-groups-count-ep'>{manufacturerReferenceNumber}</div>
+                                       </div>
+                               </div>
+
                                <div className='list-editor-item-view-field'>
                                        <div className='title'>{i18n('Description')}</div>
                                        <div className='text description'>{description}</div>
                                </div>
+                               
+                               
 
                        </ListEditorItemView>
                );
index a201578..b8c0375 100644 (file)
@@ -39,6 +39,7 @@ function addFeatureGroup(licenseModelId, featureGroup, version) {
                name: featureGroup.name,
                description: featureGroup.description,
                partNumber: featureGroup.partNumber,
+               manufacturerReferenceNumber: featureGroup.manufacturerReferenceNumber,
                addedLicenseKeyGroupsIds: featureGroup.licenseKeyGroupsIds,
                addedEntitlementPoolsIds: featureGroup.entitlementPoolsIds
        });
@@ -54,6 +55,7 @@ function updateFeatureGroup(licenseModelId, previousFeatureGroup, featureGroup,
                name: featureGroup.name,
                description: featureGroup.description,
                partNumber: featureGroup.partNumber,
+               manufacturerReferenceNumber: featureGroup.manufacturerReferenceNumber,
                addedLicenseKeyGroupsIds: licenseKeyGroupsIds.filter(licenseKeyGroupId => prevLicenseKeyGroupsIds.indexOf(licenseKeyGroupId) === -1),
                removedLicenseKeyGroupsIds: prevLicenseKeyGroupsIds.filter(prevLicenseKeyGroupId => licenseKeyGroupsIds.indexOf(prevLicenseKeyGroupId) === -1),
                addedEntitlementPoolsIds: entitlementPoolsIds.filter(entitlementPoolId => prevEntitlementPoolsIds.indexOf(entitlementPoolId) === -1),
index 001bd20..5688fc0 100644 (file)
@@ -30,7 +30,7 @@ export default (state = {}, action) => {
                                        'description': {
                                                isValid: true,
                                                errorText: '',
-                                               validations: [{type: 'required', data: true}, {type: 'maxLength', data: 1000}],
+                                               validations: [{type: 'maxLength', data: 1000}],
                                                tabId: FeatureGroupStateConstants.SELECTED_FEATURE_GROUP_TAB.GENERAL
                                        },
                                        'partNumber': {
@@ -39,6 +39,12 @@ export default (state = {}, action) => {
                                                validations: [{type: 'required', data: true}],
                                                tabId: FeatureGroupStateConstants.SELECTED_FEATURE_GROUP_TAB.GENERAL
                                        },
+                                       'manufacturerReferenceNumber': {
+                                               isValid: true,
+                                               errorText: '',
+                                               validations: [{type: 'required', data: true}, {type: 'maxLength', data: 100}],
+                                               tabId: FeatureGroupStateConstants.SELECTED_FEATURE_GROUP_TAB.GENERAL
+                                       },
                                        'name': {
                                                isValid: true,
                                                errorText: '',
index 998d5f0..40bef2c 100644 (file)
@@ -15,7 +15,7 @@
  */
 import keyMirror from 'nfvo-utils/KeyMirror.js';
 import i18n from 'nfvo-utils/i18n/i18n.js';
-import InputOptions, {other as optionInputOther} from 'nfvo-components/input/inputOptions/InputOptions.jsx';
+import InputOptions, {other as optionInputOther} from 'nfvo-components/input/validation/InputOptions.jsx';
 
 export const actionTypes = keyMirror({
        LICENSE_AGREEMENT_LIST_LOADED: null,
index aada8dd..7d70da6 100644 (file)
@@ -32,7 +32,7 @@ export const mapStateToProps = ({licenseModel: {licenseAgreement, featureGroup}}
        }
 
        for (let i = 0; i < list.length; i++) {
-               LANames[list[i].name] = list[i].id;
+               LANames[list[i].name.toLowerCase()] = list[i].id;
        }
 
        const {featureGroupsList = []} = featureGroup;
index e02935c..5be1405 100644 (file)
@@ -26,7 +26,7 @@ export default (state = {}, action) => {
                                        'description' : {
                                                isValid: true,
                                                errorText: '',
-                                               validations: [{type: 'required', data: true}, {type: 'maxLength', data: 1000}],
+                                               validations: [{type: 'maxLength', data: 1000}],
                                                tabId: LicenseAgreementEnums.SELECTED_LICENSE_AGREEMENT_TAB.GENERAL
                                        },
                                        'requirementsAndConstrains' : {
@@ -38,7 +38,7 @@ export default (state = {}, action) => {
                                        'licenseTerm' : {
                                                isValid: true,
                                                errorText: '',
-                                               validations: [],
+                                               validations: [{type: 'required', data: true}],
                                                tabId: LicenseAgreementEnums.SELECTED_LICENSE_AGREEMENT_TAB.GENERAL
                                        },
                                        'name' : {
index 42a33fd..a15e5da 100644 (file)
@@ -19,7 +19,7 @@ import GridSection from 'nfvo-components/grid/GridSection.jsx';
 import GridItem from 'nfvo-components/grid/GridItem.jsx';
 import {TabsForm as Form} from 'nfvo-components/input/validation/Form.jsx';
 import Tabs from 'nfvo-components/input/validation/Tabs.jsx';
-import Tab from 'react-bootstrap/lib/Tab.js';
+import Tab from 'sdc-ui/lib/react/Tab.js';
 import Input from 'nfvo-components/input/validation/Input.jsx';
 import DualListboxView from 'nfvo-components/input/dualListbox/DualListboxView.jsx';
 import i18n from 'nfvo-utils/i18n/i18n.js';
@@ -96,7 +96,6 @@ const GeneralTabContent = ({data, genericFieldInfo, onDataChanged, validateName,
                                        overlayPos='bottom'
                                        data-test-id='create-la-description'
                                        name='license-agreement-description'
-                                       isRequired={true}
                                        type='textarea'/>
                        </GridItem>
                </GridSection>
@@ -145,10 +144,10 @@ class LicenseAgreementEditorView extends React.Component {
                                        isValid={this.props.isFormValid}
                                        formReady={this.props.formReady}
                                        onValidateForm={() => this.props.onValidateForm(LA_EDITOR_FORM) }
-                                       className='license-agreement-form'>
-                                       <Tabs activeKey={onTabSelect ? selectedTab : undefined} onSelect={onTabSelect} invalidTabs={this.props.invalidTabs} >
+                                       className='license-model-form license-agreement-form'>
+                                       <Tabs activeTab={onTabSelect ? selectedTab : undefined} onTabClick={onTabSelect} invalidTabs={this.props.invalidTabs} >
                                                <Tab
-                                                       eventKey={LicenseAgreementEnums.SELECTED_LICENSE_AGREEMENT_TAB.GENERAL}
+                                                       tabId={LicenseAgreementEnums.SELECTED_LICENSE_AGREEMENT_TAB.GENERAL}
                                                        data-test-id='general-tab'
                                                        title={i18n('General')}>
                                                                <fieldset disabled={isReadOnlyMode}>
@@ -157,7 +156,7 @@ class LicenseAgreementEditorView extends React.Component {
                                                                </fieldset>
                                                </Tab>
                                                <Tab
-                                                       eventKey={LicenseAgreementEnums.SELECTED_LICENSE_AGREEMENT_TAB.FEATURE_GROUPS}
+                                                       tabId={LicenseAgreementEnums.SELECTED_LICENSE_AGREEMENT_TAB.FEATURE_GROUPS}
                                                        data-test-id='feature-group-tab'
                                                        title={i18n('Feature Groups')}>
                                                                <fieldset disabled={isReadOnlyMode}>
@@ -168,7 +167,7 @@ class LicenseAgreementEditorView extends React.Component {
                                                                                selectedValuesList={data.featureGroupsIds}
                                                                                availableList={featureGroupsList}
                                                                                onChange={ selectedValuesList => onDataChanged( { featureGroupsIds: selectedValuesList }, LA_EDITOR_FORM )}/> :
-                                                                       <p>{i18n('There is no available feature groups')}</p>}
+                                                                       <p>{i18n('There are no available feature groups')}</p>}
                                                                </fieldset>
                                                </Tab>
                                        </Tabs>
index 192d2de..6247723 100644 (file)
@@ -59,7 +59,7 @@ class LicenseAgreementListEditorView extends React.Component {
                                        isReadOnlyMode={isReadOnlyMode}>
                                        {this.filterList().map(licenseAgreement => this.renderLicenseAgreementListItem(licenseAgreement, isReadOnlyMode, version))}
                                </ListEditorView>
-                               <Modal show={isDisplayModal} bsSize='large' animation={true} className='onborading-modal license-agreement-modal'>
+                               <Modal show={isDisplayModal} bsSize='large' animation={true} className='onborading-modal license-model-modal license-agreement-modal'>
                                        <Modal.Header>
                                                <Modal.Title>{`${isModalInEditMode ? i18n('Edit License Agreement') : i18n('Create New License Agreement')}`}</Modal.Title>
                                        </Modal.Header>
index dd2a5c6..f5017f6 100644 (file)
@@ -17,6 +17,8 @@ import RestAPIUtil from 'nfvo-utils/RestAPIUtil.js';
 import Configuration from 'sdc-app/config/Configuration.js';
 import {actionTypes as licenseKeyGroupsConstants} from './LicenseKeyGroupsConstants.js';
 import LicenseModelActionHelper from 'sdc-app/onboarding/licenseModel/LicenseModelActionHelper.js';
+import {actionTypes as limitEditorActions} from 'sdc-app/onboarding/licenseModel/limits/LimitEditorConstants.js';
+import getValue from 'nfvo-utils/getValue.js';
 
 function baseUrl(licenseModelId, version) {
        const restPrefix = Configuration.get('restPrefix');
@@ -36,8 +38,13 @@ function postLicenseKeyGroup(licenseModelId, licenseKeyGroup, version) {
        return RestAPIUtil.post(baseUrl(licenseModelId, version), {
                name: licenseKeyGroup.name,
                description: licenseKeyGroup.description,
-               operationalScope: licenseKeyGroup.operationalScope,
-               type: licenseKeyGroup.type
+               operationalScope: getValue(licenseKeyGroup.operationalScope),
+               type: licenseKeyGroup.type,
+               increments: licenseKeyGroup.increments,
+               thresholdValue: licenseKeyGroup.thresholdValue,
+               thresholdUnits: getValue(licenseKeyGroup.thresholdUnits),
+               startDate: licenseKeyGroup.startDate,
+               expiryDate: licenseKeyGroup.expiryDate
        });
 }
 
@@ -45,11 +52,50 @@ function putLicenseKeyGroup(licenseModelId, licenseKeyGroup, version) {
        return RestAPIUtil.put(`${baseUrl(licenseModelId, version)}/${licenseKeyGroup.id}`, {
                name: licenseKeyGroup.name,
                description: licenseKeyGroup.description,
-               operationalScope: licenseKeyGroup.operationalScope,
-               type: licenseKeyGroup.type
+               operationalScope: getValue(licenseKeyGroup.operationalScope),
+               type: licenseKeyGroup.type,
+               increments: licenseKeyGroup.increments,
+               thresholdValue: licenseKeyGroup.thresholdValue,
+               thresholdUnits: getValue(licenseKeyGroup.thresholdUnits),
+               startDate: licenseKeyGroup.startDate,
+               expiryDate: licenseKeyGroup.expiryDate
        });
 }
 
+function fetchLimitsList(licenseModelId, licenseKeyGroupId, version) {
+       return RestAPIUtil.fetch(`${baseUrl(licenseModelId, version)}/${licenseKeyGroupId}/limits`);
+}
+
+function deleteLimit(licenseModelId, licenseKeyGroupId, version, limitId) {
+       return RestAPIUtil.destroy(`${baseUrl(licenseModelId, version)}/${licenseKeyGroupId}/limits/${limitId}`);
+}
+
+function postLimit(licenseModelId, licenseKeyGroupId, version, limit) {
+       return RestAPIUtil.post(`${baseUrl(licenseModelId, version)}/${licenseKeyGroupId}/limits`, {
+               name: limit.name,
+               type: limit.type,
+               description: limit.description,
+               metric: limit.metric,
+               value: limit.value,
+               unit: limit.unit,
+               aggregationFunction: getValue(limit.aggregationFunction),
+               time: getValue(limit.time)
+       });
+}
+
+function putLimit(licenseModelId, licenseKeyGroupId, version, limit) {
+
+       return RestAPIUtil.put(`${baseUrl(licenseModelId, version)}/${licenseKeyGroupId}/limits/${limit.id}`, {
+               name: limit.name,
+               type: limit.type,
+               description: limit.description,
+               metric: limit.metric,
+               value: limit.value,
+               unit: limit.unit,
+               aggregationFunction: getValue(limit.aggregationFunction),
+               time: getValue(limit.time)
+       });
+}
 
 export default {
        fetchLicenseKeyGroupsList(dispatch, {licenseModelId, version}) {
@@ -59,7 +105,10 @@ export default {
                }));
        },
 
-       openLicenseKeyGroupsEditor(dispatch, {licenseKeyGroup} = {}) {
+       openLicenseKeyGroupsEditor(dispatch, {licenseKeyGroup, licenseModelId, version} = {}) {
+               if (licenseModelId && version) {
+                       this.fetchLimits(dispatch, {licenseModelId, version, licenseKeyGroup});
+               }
                dispatch({
                        type: licenseKeyGroupsConstants.licenseKeyGroupsEditor.OPEN,
                        licenseKeyGroup
@@ -124,5 +173,34 @@ export default {
                LicenseModelActionHelper.fetchLicenseModelById(dispatch, {licenseModelId, version}).then(() => {
                        this.fetchLicenseKeyGroupsList(dispatch, {licenseModelId, version});
                });
+       },
+
+
+       fetchLimits(dispatch, {licenseModelId, version, licenseKeyGroup}) {
+               return fetchLimitsList(licenseModelId, licenseKeyGroup.id, version).then(response => {
+                       dispatch({
+                               type: licenseKeyGroupsConstants.licenseKeyGroupsEditor.LIMITS_LIST_LOADED,
+                               response
+                       });     
+               });                                                                     
+       },
+
+       submitLimit(dispatch, {licenseModelId, version, licenseKeyGroup, limit}) {
+               const promise = limit.id ? putLimit(licenseModelId,licenseKeyGroup.id, version, limit) :
+                        postLimit(licenseModelId,licenseKeyGroup.id, version, limit);
+               return promise.then(() => {
+                       dispatch({
+                               type: limitEditorActions.CLOSE
+                       });
+                       this.fetchLimits(dispatch, {licenseModelId, version, licenseKeyGroup});
+               });                             
+       },
+
+       deleteLimit(dispatch, {licenseModelId, version, licenseKeyGroup, limit}) {
+               return deleteLimit(licenseModelId,licenseKeyGroup.id, version, limit.id).then(() => {
+                       this.fetchLimits(dispatch, {licenseModelId, version, licenseKeyGroup});
+               });             
        }
+
+
 };
index 50d1fe8..c376cb3 100644 (file)
@@ -15,7 +15,7 @@
  */
 import keyMirror from 'nfvo-utils/KeyMirror.js';
 import i18n from 'nfvo-utils/i18n/i18n.js';
-import InputOptions, {other as optionInputOther} from 'nfvo-components/input/inputOptions/InputOptions.jsx';
+import InputOptions, {other as optionInputOther} from 'nfvo-components/input/validation/InputOptions.jsx';
 
 export const actionTypes = keyMirror({
 
@@ -28,6 +28,7 @@ export const actionTypes = keyMirror({
                OPEN: null,
                CLOSE: null,
                DATA_CHANGED: null,
+               LIMITS_LIST_LOADED: null
        }
 });
 
@@ -77,3 +78,10 @@ export const getOperationalScopes = (operationalScope) => {
                return allOpScopes;
        }
 };
+
+export const tabIds = {
+       GENERAL: 'GENERAL',
+       SP_LIMITS: 'SP_LIMITS',
+       VENDOR_LIMITS: 'VENDOR_LIMITS',
+       ADD_LIMIT_BUTTON: 'ADD_LIMIT_BUTTON'
+};
index aef1532..028fa9d 100644 (file)
 import {connect} from 'react-redux';
 import LicenseKeyGroupsActionHelper from './LicenseKeyGroupsActionHelper.js';
 import LicenseKeyGroupsEditorView from './LicenseKeyGroupsEditorView.jsx';
+import LimitEditorActionHelper from '../limits/LimitEditorActionHelper.js';
 import ValidationHelper from 'sdc-app/common/helpers/ValidationHelper.js';
 
 const mapStateToProps = ({licenseModel: {licenseKeyGroup}}) => {
 
 
-       let {data, genericFieldInfo, formReady} = licenseKeyGroup.licenseKeyGroupsEditor;
+       let {data, genericFieldInfo, formReady, limitsList} = licenseKeyGroup.licenseKeyGroupsEditor;
 
        let previousData, LKGNames = {};
        const licenseKeyGroupId = data ? data.id : null;
@@ -33,7 +34,7 @@ const mapStateToProps = ({licenseModel: {licenseKeyGroup}}) => {
 
        const list = licenseKeyGroup.licenseKeyGroupsList;
        for (let i = 0; i < list.length; i++) {
-               LKGNames[list[i].name] = list[i].id;
+               LKGNames[list[i].name.toLowerCase()] = list[i].id;
        }
 
        return {
@@ -42,7 +43,8 @@ const mapStateToProps = ({licenseModel: {licenseKeyGroup}}) => {
                genericFieldInfo,
                isFormValid,
                formReady,
-               LKGNames
+               LKGNames,
+               limitsList
        };
 };
 
@@ -50,11 +52,13 @@ const mapActionsToProps = (dispatch, {licenseModelId, version}) => {
        return {
                onDataChanged: (deltaData, formName, customValidations) => ValidationHelper.dataChanged(dispatch, {deltaData, formName, customValidations}),
                onCancel: () => LicenseKeyGroupsActionHelper.closeLicenseKeyGroupEditor(dispatch),
-               onSubmit: ({previousLicenseKeyGroup, licenseKeyGroup}) => {
-                       LicenseKeyGroupsActionHelper.closeLicenseKeyGroupEditor(dispatch);
+               onSubmit: ({previousLicenseKeyGroup, licenseKeyGroup, keepOpen}) => {
+                       if (!keepOpen) {LicenseKeyGroupsActionHelper.closeLicenseKeyGroupEditor(dispatch);}
                        LicenseKeyGroupsActionHelper.saveLicenseKeyGroup(dispatch, {licenseModelId, previousLicenseKeyGroup, licenseKeyGroup, version});
                },
-               onValidateForm: (formName) => ValidationHelper.validateForm(dispatch, formName)
+               onValidateForm: (formName) => ValidationHelper.validateForm(dispatch, formName),
+               onCloseLimitEditor: () => LimitEditorActionHelper.closeLimitsEditor(dispatch),
+               onOpenLimitEditor: (limit) => LimitEditorActionHelper.openLimitsEditor(dispatch, {limit})
        };
 };
 
index 090c971..b1a22f3 100644 (file)
  * permissions and limitations under the License.
  */
 import {actionTypes, defaultState, LKG_FORM_NAME} from './LicenseKeyGroupsConstants.js';
+import moment from 'moment';
+import {DATE_FORMAT} from 'sdc-app/onboarding/OnboardingConstants.js';
 
 export default (state = {}, action) => {
        switch (action.type) {
                case actionTypes.licenseKeyGroupsEditor.OPEN:
+                       let licenseKeyGroupData = {...action.licenseKeyGroup};
+                       let {startDate, expiryDate} = licenseKeyGroupData;
+                       if (startDate) {
+                               licenseKeyGroupData.startDate = moment(startDate, DATE_FORMAT).format(DATE_FORMAT);
+                       }
+                       if (expiryDate) {
+                               licenseKeyGroupData.expiryDate = moment(expiryDate, DATE_FORMAT).format(DATE_FORMAT);
+                       }
                        return {
                                ...state,
-                               data: action.licenseKeyGroup ? {...action.licenseKeyGroup} : defaultState.licenseKeyGroupsEditor,
+                               data: action.licenseKeyGroup ? licenseKeyGroupData : defaultState.licenseKeyGroupsEditor,
                                formReady: null,
                                formName: LKG_FORM_NAME,
                                genericFieldInfo: {
                                        'description' : {
                                                isValid: true,
                                                errorText: '',
-                                               validations: [{type: 'required', data: true}, {type: 'maxLength', data: 1000}]
+                                               validations: [{type: 'maxLength', data: 1000}]
                                        },
                                        'name' : {
                                                isValid: true,
@@ -43,9 +53,39 @@ export default (state = {}, action) => {
                                                isValid: true,
                                                errorText: '',
                                                validations: []
+                                       },
+                                       'thresholdUnits' : {
+                                               isValid: true,
+                                               errorText: '',
+                                               validations: []
+                                       },
+                                       'thresholdValue' : {
+                                               isValid: true,
+                                               errorText: '',
+                                               validations: []
+                                       },
+                                       'increments' : {
+                                               isValid: true,
+                                               errorText: '',
+                                               validations: [{type: 'maxLength', data: 120}]
+                                       },
+                                       'startDate': {
+                                               isValid: true,
+                                               errorText: '',
+                                               validations: []
+                                       },
+                                       'expiryDate': {
+                                               isValid: true,
+                                               errorText: '',
+                                               validations: []
                                        }
                                }
                        };
+               case actionTypes.licenseKeyGroupsEditor.LIMITS_LIST_LOADED:
+                       return {
+                               ...state,
+                               limitsList: action.response.results
+                       };      
                case actionTypes.licenseKeyGroupsEditor.CLOSE:
                        return {};
                default:
index b95efd0..647e205 100644 (file)
@@ -17,27 +17,43 @@ import React from 'react';
 import i18n from 'nfvo-utils/i18n/i18n.js';
 import Validator from 'nfvo-utils/Validator.js';
 
+import Tabs from 'sdc-ui/lib/react/Tabs.js';
+import Tab from 'sdc-ui/lib/react/Tab.js';
+
+import Button from 'sdc-ui/lib/react/Button.js';
 import Form from 'nfvo-components/input/validation/Form.jsx';
 import Input from 'nfvo-components/input/validation/Input.jsx';
 import GridSection from 'nfvo-components/grid/GridSection.jsx';
 import GridItem from 'nfvo-components/grid/GridItem.jsx';
-import {optionsInputValues as licenseKeyGroupOptionsInputValues, LKG_FORM_NAME} from './LicenseKeyGroupsConstants.js';
+import {optionsInputValues as licenseKeyGroupOptionsInputValues, LKG_FORM_NAME, tabIds} from './LicenseKeyGroupsConstants.js';
+import {optionsInputValues as LicenseModelOptionsInputValues} from '../LicenseModelConstants.js';
+import {validateStartDate, thresholdValueValidation} from '../LicenseModelValidations.js';
 import {other as optionInputOther} from 'nfvo-components/input/validation/InputOptions.jsx';
 import InputOptions from 'nfvo-components/input/validation/InputOptions.jsx';
 
-const LicenseKeyGroupPropType = React.PropTypes.shape({
+import {DATE_FORMAT} from 'sdc-app/onboarding/OnboardingConstants.js';
+
+import LicenseKeyGroupsLimits from './LicenseKeyGroupsLimits.js';
+import {limitType, NEW_LIMIT_TEMP_ID} from '../limits/LimitEditorConstants.js';
+
+ const LicenseKeyGroupPropType = React.PropTypes.shape({
        id: React.PropTypes.string,
        name: React.PropTypes.string,
        description: React.PropTypes.string,
+       increments: React.PropTypes.string,
        operationalScope: React.PropTypes.shape({
                choices: React.PropTypes.array,
                other: React.PropTypes.string
        }),
-       type: React.PropTypes.string
+       type: React.PropTypes.string,
+        thresholdUnits: React.PropTypes.string,
+        thresholdValue: React.PropTypes.number,
+        startDate: React.PropTypes.string,
+        expiryDate: React.PropTypes.string
 });
 
-const LicenseKeyGroupFormContent = ({data, onDataChanged, genericFieldInfo, validateName, validateOperationalScope}) => {
-       let {name, description, operationalScope, type} = data;
+const LicenseKeyGroupFormContent = ({data, onDataChanged, genericFieldInfo, validateName, validateStartDate, thresholdValueValidation}) => {
+       let {name, description, increments, operationalScope, type, thresholdUnits, thresholdValue, startDate, expiryDate} = data;
        return (
                <GridSection>
                        <GridItem colSpan={2}>
@@ -55,11 +71,10 @@ const LicenseKeyGroupFormContent = ({data, onDataChanged, genericFieldInfo, vali
                                <InputOptions
                                        onInputChange={()=>{}}
                                        isMultiSelect={true}
-                                       isRequired={true}
                                        onEnumChange={operationalScope => onDataChanged({operationalScope:{choices: operationalScope, other: ''}},
-                                               LKG_FORM_NAME, {operationalScope: validateOperationalScope})}
+                                               LKG_FORM_NAME)}
                                        onOtherChange={operationalScope => onDataChanged({operationalScope:{choices: [optionInputOther.OTHER],
-                                               other: operationalScope}}, LKG_FORM_NAME, {operationalScope: validateOperationalScope})}
+                                               other: operationalScope}}, LKG_FORM_NAME)}
                                        label={i18n('Operational Scope')}
                                        data-test-id='create-lkg-operational-scope'
                                        type='select'
@@ -77,7 +92,6 @@ const LicenseKeyGroupFormContent = ({data, onDataChanged, genericFieldInfo, vali
                                        value={description}
                                        isValid={genericFieldInfo.description.isValid}
                                        errorText={genericFieldInfo.description.errorText}
-                                       isRequired={true}
                                        type='textarea'
                                        overlayPos='bottom' />
                        </GridItem>
@@ -101,6 +115,82 @@ const LicenseKeyGroupFormContent = ({data, onDataChanged, genericFieldInfo, vali
                                        }
                                </Input>
                        </GridItem>
+                       <GridItem>
+                               <Input
+                                       onChange={e => {
+                                               // setting the unit to the correct value
+                                               const selectedIndex = e.target.selectedIndex;
+                                               const val = e.target.options[selectedIndex].value;
+                                               onDataChanged({thresholdUnits: val}, LKG_FORM_NAME);
+                                               // TODO make sure that the value is valid too
+                                               onDataChanged({thresholdValue: thresholdValue}, LKG_FORM_NAME,{thresholdValue : thresholdValueValidation});}
+
+                                       }
+                                       value={thresholdUnits}
+                                       label={i18n('Threshold Units')}
+                                       data-test-id='create-ep-threshold-units'
+                                       isValid={genericFieldInfo.thresholdUnits.isValid}
+                                       errorText={genericFieldInfo.thresholdUnits.errorText}
+                                       groupClassName='bootstrap-input-options'
+                                       className='input-options-select'
+                                       type='select' >
+                                       {LicenseModelOptionsInputValues.THRESHOLD_UNITS.map(mtype =>
+                                               <option key={mtype.enum} value={mtype.enum}>{`${mtype.title}`}</option>)}
+                               </Input>
+                       </GridItem>
+                       <GridItem>
+                               <Input
+                                       className='entitlement-pools-form-row-threshold-value'
+                                       onChange={thresholdValue => onDataChanged({thresholdValue}, LKG_FORM_NAME,
+                                               {thresholdValue : thresholdValueValidation})}
+                                       label={i18n('Threshold Value')}
+                                       isValid={genericFieldInfo.thresholdValue.isValid}
+                                       errorText={genericFieldInfo.thresholdValue.errorText}
+                                       data-test-id='create-ep-threshold-value'
+                                       value={thresholdValue}
+                                       type='text'/>
+                       </GridItem>
+                               <GridItem>
+                               <Input
+                                       type='date'
+                                       label={i18n('Start Date')}
+                                       value={startDate}
+                                       dateFormat={DATE_FORMAT}
+                                       startDate={startDate}
+                                       endDate={expiryDate}
+                                       onChange={startDate => onDataChanged(
+                                               {startDate: startDate ? startDate.format(DATE_FORMAT) : ''},
+                                               LKG_FORM_NAME,
+                                               {startDate: validateStartDate}
+                                       )}
+                                       isValid={genericFieldInfo.startDate.isValid}
+                                       errorText={genericFieldInfo.startDate.errorText}
+                                       selectsStart/>
+                       </GridItem>
+                       <GridItem>
+                               <Input
+                                       type='date'
+                                       label={i18n('Expiry Date')}
+                                       value={expiryDate}
+                                       dateFormat={DATE_FORMAT}
+                                       startDate={startDate}
+                                       endDate={expiryDate}
+                                       onChange={expiryDate => {
+                                               onDataChanged({expiryDate: expiryDate ? expiryDate.format(DATE_FORMAT) : ''}, LKG_FORM_NAME);
+                                               onDataChanged({startDate}, LKG_FORM_NAME, {startDate: validateStartDate});
+                                       }}
+                                       isValid={genericFieldInfo.expiryDate.isValid}
+                                       errorText={genericFieldInfo.expiryDate.errorText}
+                                       selectsEnd/>
+                       </GridItem>
+                       <GridItem colSpan={2}>
+                               <Input
+                                       onChange={increments => onDataChanged({increments}, LKG_FORM_NAME)}
+                                       label={i18n('Increments')}
+                                       value={increments}
+                                       data-test-id='create-ep-increments'
+                                       type='text'/>
+                       </GridItem>
                </GridSection>
        );
 };
@@ -120,36 +210,100 @@ class LicenseKeyGroupsEditorView extends React.Component {
                data: {}
        };
 
+       componentDidUpdate(prevProps) {                         
+               if (this.props.formReady && this.props.formReady !== prevProps.formReady) { // if form validation succeeded -> continue with submit
+                       this.submit();
+               }
+       }
+
+       state = {
+               localFeatureGroupsListFilter: '',
+               selectedTab: tabIds.GENERAL,
+               selectedLimit: ''
+       };
+
        render() {
-               let {data = {}, onDataChanged, isReadOnlyMode, genericFieldInfo} = this.props;
+               let {data = {}, onDataChanged, isReadOnlyMode, onCloseLimitEditor, genericFieldInfo, limitsList = []} = this.props;
+               let {selectedTab} = this.state;
+               const isTabsDisabled = !data.id || !this.props.isFormValid;
                return (
-                       <div>
-               { genericFieldInfo &&
-                       <Form
-                               ref='validationForm'
-                               hasButtons={true}
-                               onSubmit={ () => this.submit() }
-                               onReset={ () => this.props.onCancel() }
-                               isValid={this.props.isFormValid}
-                               formReady={this.props.formReady}
-                               onValidateForm={() => this.props.onValidateForm(LKG_FORM_NAME) }
-                               labledButtons={true}
-                               isReadOnlyMode={isReadOnlyMode}
-                               className='license-key-groups-form'>
-                               <LicenseKeyGroupFormContent
-                                       data={data}
-                                       onDataChanged={onDataChanged}
-                                       genericFieldInfo={genericFieldInfo}
-                                       validateName={(value)=> this.validateName(value)}
-                                       validateOperationalScope={this.validateOperationalScope}/>
-                       </Form>}
+                       <div className='license-keygroup-editor'>
+                               <Tabs
+                                       type='menu' 
+                                       activeTab={selectedTab} 
+                                       onTabClick={(tabIndex)=>{
+                                               if (tabIndex === tabIds.ADD_LIMIT_BUTTON)  {
+                                                       this.onAddLimit();
+                                               } else {
+                                                       this.setState({selectedTab: tabIndex});
+                                                       onCloseLimitEditor();
+                                                       this.setState({selectedLimit: ''});
+                                               }
+                                       }} 
+                                       invalidTabs={[]}>
+                                       <Tab tabId={tabIds.GENERAL} data-test-id='general-tab' title={i18n('General')}>
+                                               { genericFieldInfo &&
+                                                       <Form
+                                                               ref='validationForm'
+                                                               hasButtons={false}
+                                                               isValid={this.props.isFormValid}
+                                                               formReady={this.props.formReady}
+                                                               onValidateForm={() => this.props.onValidateForm(LKG_FORM_NAME) }
+                                                               labledButtons={true}
+                                                               isReadOnlyMode={isReadOnlyMode}
+                                                               className='license-model-form license-key-groups-form'>
+                                                                       <LicenseKeyGroupFormContent
+                                                                               data={data}
+                                                                               onDataChanged={onDataChanged}
+                                                                               genericFieldInfo={genericFieldInfo}
+                                                                               validateName={(value)=> this.validateName(value)}
+                                                                               validateStartDate={(value, state)=> validateStartDate(value, state)}
+                                                                               thresholdValueValidation={(value, state) => thresholdValueValidation(value, state)}/>
+                                                       </Form>}
+
+                                       </Tab>
+                                       <Tab tabId={tabIds.SP_LIMITS} disabled={isTabsDisabled} data-test-id='general-tab' title={i18n('SP Limits')}>
+                                               {selectedTab === tabIds.SP_LIMITS &&
+                                                       <LicenseKeyGroupsLimits 
+                                                               limitType={limitType.SERVICE_PROVIDER} 
+                                                               limitsList={limitsList.filter(item => item.type === limitType.SERVICE_PROVIDER)}
+                                                               selectedLimit={this.state.selectedLimit}
+                                                               onCloseLimitEditor={() => this.onCloseLimitEditor()}
+                                                               onSelectLimit={limit => this.onSelectLimit(limit)}/>}
+                                       </Tab>
+                                       <Tab tabId={tabIds.VENDOR_LIMITS} disabled={isTabsDisabled} data-test-id='general-tab' title={i18n('Vendor Limits')}>
+                                               {selectedTab === tabIds.VENDOR_LIMITS && 
+                                                       <LicenseKeyGroupsLimits 
+                                                               limitType={limitType.VENDOR} 
+                                                               limitsList={limitsList.filter(item => item.type === limitType.VENDOR)}
+                                                               selectedLimit={this.state.selectedLimit}
+                                                               onCloseLimitEditor={() => this.onCloseLimitEditor()}
+                                                               onSelectLimit={limit => this.onSelectLimit(limit)}/>}
+                                       </Tab>
+                                       {selectedTab !== tabIds.GENERAL ? 
+                                               <Button disabled={this.state.selectedLimit} className='add-limit-button' tabId={tabIds.ADD_LIMIT_BUTTON} btnType='link' iconName='plus'>{i18n('Add Limit')}</Button> : 
+                                               <div></div> // Render empty div to not break tabs
+                                       }
+                               </Tabs>
+                               
+                               <GridSection className='license-model-modal-buttons license-key-group-editor-buttons'>
+                                       {!this.state.selectedLimit && <Button btnType='default' disabled={!this.props.isFormValid} onClick={() => this.submit()} type='reset'>{i18n('Save')}</Button>}
+                                       <Button btnType={this.state.selectedLimit ? 'default' : 'outline'} onClick={() => this.props.onCancel()} type='reset'>
+                                               {i18n('Cancel')}
+                                       </Button>
+                               </GridSection>
                        </div>
+
                );
        }
 
        submit() {
-               const {data: licenseKeyGroup, previousData: previousLicenseKeyGroup} = this.props;
-               this.props.onSubmit({licenseKeyGroup, previousLicenseKeyGroup});
+               const {data: licenseKeyGroup, previousData: previousLicenseKeyGroup, formReady, onValidateForm, onSubmit} = this.props;
+               if (!formReady) {
+                       onValidateForm(LKG_FORM_NAME);
+               } else {
+                       onSubmit({licenseKeyGroup, previousLicenseKeyGroup});
+               }
        }
 
        validateName(value) {
@@ -160,27 +314,23 @@ class LicenseKeyGroupsEditorView extends React.Component {
                        {isValid: false, errorText: i18n('License key group by the name \'' + value + '\' already exists. License key group name must be unique')};
        }
 
-       validateOperationalScope(value) {
-               if (value && value.choices && value.choices.length > 0) {
-                       if (value.choices[0] !== optionInputOther.OTHER)
-                       {
-                               return {
-                                       isValid: true,
-                                       errorText: ''
-                               };
-                       } else {
-                               if ( value.other ) {
-                                       return {
-                                               isValid: true,
-                                               errorText: ''
-                                       };
-                               }
-                       }
+       onSelectLimit(limit) {
+               if (limit.id === this.state.selectedLimit) {
+                       this.setState({selectedLimit: ''});
+                       return;
                }
-               return {
-                       isValid: false,
-                       errorText: 'Field is required'
-               };
+               this.setState({selectedLimit: limit.id});
+               this.props.onOpenLimitEditor(limit);
+       }
+
+       onCloseLimitEditor() {
+               this.setState({selectedLimit: ''});
+               this.props.onCloseLimitEditor();
+       }
+
+       onAddLimit() {
+               this.setState({selectedLimit: NEW_LIMIT_TEMP_ID});
+               this.props.onOpenLimitEditor();
        }
 }
 
diff --git a/openecomp-ui/src/sdc-app/onboarding/licenseModel/licenseKeyGroups/LicenseKeyGroupsLimits.js b/openecomp-ui/src/sdc-app/onboarding/licenseModel/licenseKeyGroups/LicenseKeyGroupsLimits.js
new file mode 100644 (file)
index 0000000..7745a12
--- /dev/null
@@ -0,0 +1,57 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. 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.
+ */
+import {connect} from 'react-redux';
+import i18n from 'nfvo-utils/i18n/i18n.js';
+import {actionTypes as globalModalActionTypes} from 'nfvo-components/modal/GlobalModalConstants.js';
+import ValidationHelper from 'sdc-app/common/helpers/ValidationHelper.js';
+import Limits from 'sdc-app/onboarding/licenseModel/limits/Limits.jsx';
+
+import LicenseKeyGroupsActionHelper from './LicenseKeyGroupsActionHelper.js';
+
+const mapStateToProps = ({licenseModel: {licenseKeyGroup: {licenseKeyGroupsEditor: {data}}, limitEditor}, currentScreen}) => { 
+       let  {props: {licenseModelId, version}} = currentScreen;
+       return {
+               parent: data,           
+               limitEditor,
+               licenseModelId,
+               version
+       };
+};
+
+const mapActionsToProps = (dispatch) => {
+       return {
+               onDataChanged: (deltaData, formName, customValidations) => ValidationHelper.dataChanged(dispatch, {deltaData, formName, customValidations}),
+               onSubmit: (limit, licenseKeyGroup, licenseModelId, version) => LicenseKeyGroupsActionHelper.submitLimit(dispatch,
+                       {
+                               limit,
+                               licenseKeyGroup,
+                               licenseModelId,
+                               version}),              
+               onDelete: ({limit, parent, licenseModelId, version, onCloseLimitEditor, selectedLimit}) => dispatch({
+                       type: globalModalActionTypes.GLOBAL_MODAL_WARNING,
+                       data:{
+                               msg: i18n(`Are you sure you want to delete ${limit.name}?`),
+                               confirmationButtonText: i18n('Delete'),
+                               title: i18n('Warning'),
+                               onConfirmed: ()=> LicenseKeyGroupsActionHelper.deleteLimit(dispatch, {limit, licenseKeyGroup: parent, licenseModelId, version}).then(() => 
+                                       selectedLimit === limit.id && onCloseLimitEditor()
+                               )
+                       }
+               })
+       };
+};
+
+export default connect(mapStateToProps, mapActionsToProps)(Limits);
\ No newline at end of file
index e2c6c30..a8cf1eb 100644 (file)
@@ -38,7 +38,7 @@ const mapStateToProps = ({licenseModel: {licenseKeyGroup, licenseModelEditor}})
 const mapActionsToProps = (dispatch, {licenseModelId, version}) => {   
        return {
                onAddLicenseKeyGroupClick: () => LicenseKeyGroupsActionHelper.openLicenseKeyGroupsEditor(dispatch),
-               onEditLicenseKeyGroupClick: licenseKeyGroup => LicenseKeyGroupsActionHelper.openLicenseKeyGroupsEditor(dispatch, {licenseKeyGroup}),
+               onEditLicenseKeyGroupClick: licenseKeyGroup => LicenseKeyGroupsActionHelper.openLicenseKeyGroupsEditor(dispatch, {licenseKeyGroup, licenseModelId, version}),
                onDeleteLicenseKeyGroupClick: licenseKeyGroup => dispatch({
                        type: globalMoadlActions.GLOBAL_MODAL_WARNING,
                        data:{
index b8ccd68..1a7f2b0 100644 (file)
@@ -21,7 +21,7 @@ import ListEditorView from 'nfvo-components/listEditor/ListEditorView.jsx';
 import ListEditorItemView from 'nfvo-components/listEditor/ListEditorItemView.jsx';
 
 import LicenseKeyGroupsEditor from './LicenseKeyGroupsEditor.js';
-import InputOptions, {other as optionInputOther} from 'nfvo-components/input/inputOptions/InputOptions.jsx';
+import InputOptions, {other as optionInputOther} from 'nfvo-components/input/validation/InputOptions.jsx';
 import {optionsInputValues} from './LicenseKeyGroupsConstants';
 
 class LicenseKeyGroupsListEditorView extends React.Component {
@@ -61,7 +61,7 @@ class LicenseKeyGroupsListEditorView extends React.Component {
                                        isReadOnlyMode={isReadOnlyMode}>
                                        {this.filterList().map(licenseKeyGroup => (this.renderLicenseKeyGroupListItem(licenseKeyGroup, isReadOnlyMode)))}
                                </ListEditorView>
-                               <Modal show={isDisplayModal} bsSize='large' animation={true} className='onborading-modal license-key-groups-modal'>
+                               <Modal show={isDisplayModal} bsSize='large' animation={true} className='onborading-modal license-model-modal license-key-groups-modal'>
                                        <Modal.Header>
                                                <Modal.Title>{`${isModalInEditMode ? i18n('Edit License Key Group') : i18n('Create New License Key Group')}`}</Modal.Title>
                                        </Modal.Header>
@@ -122,16 +122,20 @@ class LicenseKeyGroupsListEditorView extends React.Component {
        }
 
        getOperationalScopes(operationalScope) {
-               if(operationalScope.choices.toString() === i18n(optionInputOther.OTHER) && operationalScope.other !== '') {
+               
+               if(operationalScope.choices && operationalScope.choices.toString() === i18n(optionInputOther.OTHER)) {
                        return operationalScope.other;
                }
-               else {
+               else if (operationalScope.choices) {
                        let allOpScopes = '';
                        for (let opScope of operationalScope.choices) {
                                allOpScopes += allOpScopes === '' ? InputOptions.getTitleByName(optionsInputValues, opScope) : `, ${InputOptions.getTitleByName(optionsInputValues, opScope)}`;
                        }
                        return allOpScopes;
-               }
+               } 
+               else {
+                       return '';
+               } 
        }
 
        extractValue(item) {
diff --git a/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditor.js b/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditor.js
new file mode 100644 (file)
index 0000000..d483383
--- /dev/null
@@ -0,0 +1,25 @@
+import {connect} from 'react-redux';
+import ValidationHelper from 'sdc-app/common/helpers/ValidationHelper.js';
+import LimitEditor from './LimitEditor.jsx';
+
+const mapStateToProps = ({licenseModel: {limitEditor}}) => {
+
+       let {data, genericFieldInfo, formReady} = limitEditor;  
+       let isFormValid = ValidationHelper.checkFormValid(genericFieldInfo);
+
+       return {
+               data,           
+               genericFieldInfo,
+               isFormValid,
+               formReady
+       };
+};
+
+const mapActionsToProps = (dispatch) => {
+       return {
+               onDataChanged: (deltaData, formName, customValidations) => ValidationHelper.dataChanged(dispatch, {deltaData, formName, customValidations}),
+               onValidateForm: (formName) => ValidationHelper.validateForm(dispatch, formName)
+       };
+};
+
+export default connect(mapStateToProps, mapActionsToProps)(LimitEditor);
\ No newline at end of file
diff --git a/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditor.jsx b/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditor.jsx
new file mode 100644 (file)
index 0000000..f70f917
--- /dev/null
@@ -0,0 +1,193 @@
+import React from 'react';
+import i18n from 'nfvo-utils/i18n/i18n.js';
+import Form from 'nfvo-components/input/validation/Form.jsx';
+import Input from 'nfvo-components/input/validation/Input.jsx';
+import GridSection from 'nfvo-components/grid/GridSection.jsx';
+import GridItem from 'nfvo-components/grid/GridItem.jsx';
+import {LIMITS_FORM_NAME, selectValues} from './LimitEditorConstants.js';
+import Button from 'sdc-ui/lib/react/Button.js';
+import Validator from 'nfvo-utils/Validator.js';
+
+const LimitPropType = React.PropTypes.shape({
+       id: React.PropTypes.string,
+       name: React.PropTypes.string,
+       description: React.PropTypes.string,
+       metric: React.PropTypes.string,
+       value: React.PropTypes.number,
+       aggregationFunction: React.PropTypes.string,
+       time: React.PropTypes.string,
+       unit: React.PropTypes.number
+});
+
+class LimitEditor extends React.Component {
+       static propTypes = {
+               data: LimitPropType,
+               limitsNames: React.PropTypes.object,
+               isReadOnlyMode: React.PropTypes.bool,
+               isFormValid: React.PropTypes.bool,
+               formReady: React.PropTypes.bool,
+               genericFieldInfo: React.PropTypes.object.isRequired,
+               onDataChanged: React.PropTypes.func.isRequired,
+               onSubmit: React.PropTypes.func.isRequired,
+               onValidateForm: React.PropTypes.func.isRequired,
+               onCancel: React.PropTypes.func.isRequired
+       };
+
+       componentDidUpdate(prevProps) {                         
+               if (this.props.formReady && this.props.formReady !== prevProps.formReady) { 
+                       this.submit();
+               }
+       }
+
+       render() {
+               let {data = {}, onDataChanged, isReadOnlyMode, genericFieldInfo, onCancel, isFormValid, formReady, onValidateForm} = this.props;
+               let {name, description, metric, value, aggregationFunction, time, unit} = data;
+               return (
+                       <div className='limit-editor'>
+                       {!data.id && 
+                       <div className='limit-editor-title'>
+                               {data.name ? data.name : i18n('NEW LIMIT')}
+                       </div>}
+                       {
+                               genericFieldInfo && 
+                               <Form
+                                       ref='validationForm'
+                                       hasButtons={false}                              
+                                       isValid={isFormValid}
+                                       formReady={formReady}
+                                       onValidateForm={() => onValidateForm(LIMITS_FORM_NAME) }
+                                       labledButtons={false}
+                                       isReadOnlyMode={isReadOnlyMode}
+                                       className='limit-editor-form'>                                  
+                                       <GridSection className='limit-editor-form-grid-section'>
+                                               <GridItem colSpan={2}>
+                                                       <Input
+                                                               onChange={name => onDataChanged({name}, LIMITS_FORM_NAME, {name: () => this.validateName(name)})}
+                                                               label={i18n('Name')}
+                                                               data-test-id='limit-editor-name'
+                                                               value={name}
+                                                               isValid={genericFieldInfo.name.isValid}
+                                                               errorText={genericFieldInfo.name.errorText}
+                                                               isRequired={true}
+                                                               type='text'/>
+                                               </GridItem>
+                                               <GridItem colSpan={2}>
+                                                       <Input
+                                                               onChange={description => onDataChanged({description}, LIMITS_FORM_NAME)}
+                                                               label={i18n('Description')}
+                                                               data-test-id='limit-editor-description'
+                                                               value={description}
+                                                               isValid={genericFieldInfo.description.isValid}
+                                                               errorText={genericFieldInfo.description.errorText}
+                                                               isRequired={false}
+                                                               type='text'/>
+                                               </GridItem>
+                                               <GridItem colSpan={2}>
+                                                       <Input
+                                                               onChange={e => {                                                                        
+                                                                       const selectedIndex = e.target.selectedIndex;
+                                                                       const val = e.target.options[selectedIndex].value;
+                                                                       onDataChanged({metric: val}, LIMITS_FORM_NAME);}
+                                                               }
+                                                               isRequired={true}
+                                                               value={metric}
+                                                               label={i18n('Metric')}
+                                                               data-test-id='limit-editor-metric'
+                                                               isValid={genericFieldInfo.metric.isValid}
+                                                               errorText={genericFieldInfo.metric.errorText}
+                                                               groupClassName='bootstrap-input-options'
+                                                               className='input-options-select'
+                                                               type='select' >
+                                                               {selectValues.METRIC.map(mtype =>
+                                                                       <option key={mtype.enum} value={mtype.enum}>{`${mtype.title}`}</option>)}
+                                                       </Input>
+                                               </GridItem>
+                                               <GridItem>
+                                                       <Input
+                                                               onChange={value => onDataChanged({value}, LIMITS_FORM_NAME)}
+                                                               label={i18n('Metric value')}
+                                                               data-test-id='limit-editor-metric-value'
+                                                               value={value}
+                                                               isValid={genericFieldInfo.value.isValid}
+                                                               errorText={genericFieldInfo.value.errorText}
+                                                               isRequired={true}
+                                                               type='number'/>
+                                               </GridItem>
+                                               <GridItem>
+                                                       <Input
+                                                               onChange={unit => onDataChanged({unit}, LIMITS_FORM_NAME)}
+                                                               label={i18n('Units')}
+                                                               data-test-id='limit-editor-units'
+                                                               value={unit}
+                                                               isValid={genericFieldInfo.unit.isValid}
+                                                               errorText={genericFieldInfo.unit.errorText}
+                                                               isRequired={false}
+                                                               type='number'/>
+                                               </GridItem>
+                                               <GridItem colSpan={2}>
+                                                       <Input
+                                                               onChange={e => {                                                                        
+                                                                       const selectedIndex = e.target.selectedIndex;
+                                                                       const val = e.target.options[selectedIndex].value;
+                                                                       onDataChanged({aggregationFunction: val}, LIMITS_FORM_NAME);}
+                                                               }
+                                                               value={aggregationFunction}
+                                                               label={i18n('Aggregation Function')}
+                                                               data-test-id='limit-editor-aggregation-function'
+                                                               isValid={genericFieldInfo.aggregationFunction.isValid}
+                                                               errorText={genericFieldInfo.aggregationFunction.errorText}
+                                                               groupClassName='bootstrap-input-options'
+                                                               className='input-options-select'
+                                                               type='select' >
+                                                               {selectValues.AGGREGATION_FUNCTION.map(mtype =>
+                                                                       <option key={mtype.enum} value={mtype.enum}>{`${mtype.title}`}</option>)}
+                                                       </Input>
+                                               </GridItem>
+                                               <GridItem>
+                                                       <Input
+                                                               onChange={e => {                                                                        
+                                                                       const selectedIndex = e.target.selectedIndex;
+                                                                       const val = e.target.options[selectedIndex].value;
+                                                                       onDataChanged({time: val}, LIMITS_FORM_NAME);}
+                                                               }
+                                                               value={time}
+                                                               label={i18n('Time')}
+                                                               data-test-id='limit-editor-time'
+                                                               isValid={genericFieldInfo.time.isValid}
+                                                               errorText={genericFieldInfo.time.errorText}
+                                                               groupClassName='bootstrap-input-options'
+                                                               className='input-options-select'
+                                                               type='select' >
+                                                               {selectValues.TIME.map(mtype =>
+                                                                       <option key={mtype.enum} value={mtype.enum}>{`${mtype.title}`}</option>)}
+                                                       </Input>                                                        
+                                               </GridItem>
+                                       </GridSection>
+                                       <GridSection className='limit-editor-buttons'>
+                                               <Button btnType='outline'  disabled={!isFormValid} onClick={() => this.submit()} type='reset'>{i18n('Save')}</Button>   
+                                               <Button btnType='outline' color='gray' onClick={onCancel} type='reset'>{i18n('Cancel')}</Button>
+                                       </GridSection>                                          
+                               </Form> 
+                       }       
+                       </div>
+               );
+       }
+
+       validateName(value) {
+               const {data: {id}, limitsNames} = this.props;
+               const isExists = Validator.isItemNameAlreadyExistsInList({itemId: id, itemName: value, list: limitsNames});
+
+               return !isExists ?  {isValid: true, errorText: ''} :
+               {isValid: false, errorText: i18n('Limit by the name \'' + value + '\' already exists. Limit name must be unique')};
+       }
+
+       submit() {
+               if (!this.props.formReady) {
+                       this.props.onValidateForm(LIMITS_FORM_NAME);
+               } else {
+                       this.props.onSubmit();
+               }
+       }
+}
+
+export default LimitEditor;
\ No newline at end of file
  * or implied. See the License for the specific language governing
  * permissions and limitations under the License.
  */
-import {actionTypes} from './SoftwareProductComponentsImageConstants.js';
 
-export default (state = {}, action) => {
-       switch (action.type) {
+import {actionTypes} from './LimitEditorConstants.js';
 
-               case actionTypes.IMAGES_LIST_UPDATE:
-                       if (action.componentId) {
-                               return {
-                                       ...state,
-                                       [action.componentId] : (action.response && action.response.length > 0)
-                               };
-                       }
-                       return state;
-               default:
-                       return state;
+
+const LimitEditorActionHelper = {
+       openLimitsEditor(dispatch, {limit}) {
+               dispatch({type: actionTypes.OPEN, limitItem: limit});
+       },
+
+       closeLimitsEditor(dispatch) {
+               dispatch({type: actionTypes.CLOSE});
        }
 };
+
+export default LimitEditorActionHelper;
\ No newline at end of file
diff --git a/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditorConstants.js b/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditorConstants.js
new file mode 100644 (file)
index 0000000..1bef286
--- /dev/null
@@ -0,0 +1,52 @@
+import keyMirror from 'nfvo-utils/KeyMirror.js';
+import i18n from 'nfvo-utils/i18n/i18n.js';
+// import InputOptions, {other as optionInputOther} from 'nfvo-components/input/inputOptions/InputOptions.jsx';
+
+export const actionTypes = keyMirror({
+       OPEN: null,
+       CLOSE: null,
+       DATA_CHANGED: null,
+});
+
+export const LIMITS_FORM_NAME = 'LIMITSFORM';
+
+export const selectValues = {
+       METRIC: [
+               {enum: '', title: i18n('please select…')},
+               {enum: 'Software_Instances_Count', title: 'Software Instances'},
+               {enum: 'Core', title: 'Core'},
+               {enum: 'CPU', title: 'CPU'},
+               {enum: 'Trunks', title: 'Trunks'},
+               {enum: 'User', title: 'User'},
+               {enum: 'Subscribers', title: 'Subscribers'},
+               {enum: 'Tenants', title: 'Tenants'},
+               {enum: 'Tokens', title: 'Tokens'},
+               {enum: 'Seats', title: 'Seats'},
+               {enum: 'Units_TB', title: 'Units-TB'},
+               {enum: 'Units_GB', title: 'Units-GB'},
+               {enum: 'Units_MB', title: 'Units-MB'}
+       ],
+       AGGREGATION_FUNCTION: [
+               {enum: '', title: i18n('please select…')},
+               {enum: 'Peak', title: 'Peak'},
+               {enum: 'Average', title: 'Average'}
+       ],
+       TIME: [
+               {enum: '', title: i18n('please select…')},
+               {enum: 'Hour', title: 'Hour'},
+               {enum: 'Day', title: 'Day'},
+               {enum: 'Month', title: 'Month'}
+       ]
+       
+};
+
+export const limitType = {
+       SERVICE_PROVIDER: 'ServiceProvider',
+       VENDOR: 'Vendor'
+};
+
+export const defaultState = {
+       LIMITS_EDITOR_DATA: {}
+};
+
+export const NEW_LIMIT_TEMP_ID = 'NEW_LIMIT_TEMP_ID';
\ No newline at end of file
diff --git a/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditorReducer.js b/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditorReducer.js
new file mode 100644 (file)
index 0000000..2499093
--- /dev/null
@@ -0,0 +1,70 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. 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.
+ */
+
+import {actionTypes, LIMITS_FORM_NAME, defaultState} from './LimitEditorConstants.js';
+
+export default (state = {}, action) => {
+       switch (action.type) {
+               case actionTypes.OPEN:
+                       return {
+                               ...state,                               
+                               data: action.limitItem ? {...action.limitItem} : defaultState.LIMITS_EDITOR_DATA,
+                               formReady: null,
+                               formName: LIMITS_FORM_NAME,
+                               genericFieldInfo: {
+                                       'description' : {
+                                               isValid: true,
+                                               errorText: '',
+                                               validations: [{type: 'maxLength', data: 1000}]
+                                       },
+                                       'name' : {
+                                               isValid: true,
+                                               errorText: '',
+                                               validations: [{type: 'required', data: true}, {type: 'maxLength', data: 120}]
+                                       },
+                                       'metric' : {
+                                               isValid: true,
+                                               errorText: '',
+                                               validations: [{type: 'required', data: true}]
+                                       },
+                                       'value' : {
+                                               isValid: true,
+                                               errorText: '',
+                                               validations: [{type: 'required', data: true}, {type: 'numeric', data: true}, {type: 'minimum', data: 0}]
+                                       },
+                                       'unit' : {
+                                               isValid: true,
+                                               errorText: '',
+                                               validations: [{type: 'numeric', data: true}]
+                                       },
+                                       'aggregationFunction' : {
+                                               isValid: true,
+                                               errorText: '',
+                                               validations: []
+                                       },
+                                       'time' : {
+                                               isValid: true,
+                                               errorText: '',
+                                               validations: []
+                                       }
+                               }
+                       };
+               case actionTypes.CLOSE:
+                       return {};
+               default:
+                       return state;
+       }
+};
\ No newline at end of file
diff --git a/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/Limits.jsx b/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/Limits.jsx
new file mode 100644 (file)
index 0000000..ec5a1df
--- /dev/null
@@ -0,0 +1,108 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. 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.
+ */
+import React from 'react';
+import i18n from 'nfvo-utils/i18n/i18n.js';
+import ListEditorView from 'nfvo-components/listEditor/ListEditorView.jsx';
+import ListEditorItemView from 'nfvo-components/listEditor/ListEditorItemView.jsx';
+import LimitEditor from './LimitEditor.js'; 
+import {NEW_LIMIT_TEMP_ID, selectValues} from './LimitEditorConstants.js';
+
+const LimitItem = ({isReadOnlyMode, limit, onDelete, onSelect}) => {
+       const {name, description, metric,  value, aggregationFunction = '', time = ''} = limit;
+       const timeLabel = time ? `per ${time}` : '';
+       return (
+               <ListEditorItemView                     
+                       onDelete={onDelete}
+                       onSelect={onSelect}
+                       isReadOnlyMode={isReadOnlyMode}>
+                       <div className='list-editor-item-view-field limit-name'>                                
+                               <div className='text name'>{name}</div>
+                       </div>
+
+                       <div className='list-editor-item-view-field limit-description'>                         
+                               <div className='text description'>{description}</div>
+                       </div>
+
+                       <div className='list-editor-item-view-field limit-metric-details'>                      
+                               <div className='text description'>{`${selectValues.METRIC.find(item => item.enum === metric).title} ${value} ${aggregationFunction} ${timeLabel}`}</div>
+                       </div>                  
+               </ListEditorItemView>
+       );
+};
+
+class Limits extends React.Component {
+
+       
+       state = {
+               localFilter: ''
+       };
+
+       render() {              
+               const {isReadOnlyMode = false, limitEditor, limitsList = [], onCloseLimitEditor, selectedLimit} = this.props;
+               let limitsNames = {};
+               for (let i = 0; i < limitsList.length; i++) {
+                       limitsNames[limitsList[i].name.toLowerCase()] = limitsList[i].id;
+               }
+               return (
+                       <div className='license-model-limits-view'>
+                               <ListEditorView
+                                       isReadOnlyMode={isReadOnlyMode}>
+                                       {this.props.selectedLimit === NEW_LIMIT_TEMP_ID && limitEditor.data &&
+                                               <LimitEditor limitsNames={limitsNames} onCancel={onCloseLimitEditor} onSubmit={ () => this.submit()}/>
+                                       }
+                                       {limitsList.length === 0 && !limitEditor.data && <div className='no-limits-text'>{i18n('There are no limits')}</div>}
+                                       {limitsList.map(limit =>
+                                       <div key={limit.id}  className='limit-item-wrapper'>
+                                               <LimitItem 
+                                                       onDelete={() => this.delete(limit)} 
+                                                       onSelect={selectedLimit ? undefined : () => this.props.onSelectLimit(limit)}
+                                                       clickable={!selectedLimit} 
+                                                       isReadOnlyMode={isReadOnlyMode} 
+                                                       limit={limit}/>
+                                               {limit.id === selectedLimit &&  limitEditor.data && <LimitEditor limitsNames={limitsNames} onCancel={onCloseLimitEditor} onSubmit={ () => this.submit()}/>}
+                                       </div> )}
+                               </ListEditorView>
+                               
+                       </div>
+               );
+       }
+
+       submit() {
+               let {onSubmit, onCloseLimitEditor, parent, limitEditor, licenseModelId, version, limitType} = this.props;                       
+               onSubmit({type: limitType, ...limitEditor.data}, parent, licenseModelId, version).then(() => onCloseLimitEditor());
+       }
+
+       delete(limit) {
+               let {onDelete, parent, licenseModelId, version, onCloseLimitEditor, selectedLimit} = this.props;
+               onDelete({limit, parent, licenseModelId, version, onCloseLimitEditor, selectedLimit});
+       }
+
+       filterList() {
+               let {limitsList = []} = this.props;
+               let {localFilter} = this.state;
+               if (localFilter.trim()) {
+                       const filter = new RegExp(escape(localFilter), 'i');
+                       return limitsList.filter(({name = '', description = ''}) => {
+                               return escape(name).match(filter) || escape(description).match(filter);
+                       });
+               }
+               else {
+                       return limitsList;
+               }
+       }
+}
+
+export default Limits;
diff --git a/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitsServer.js b/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitsServer.js
new file mode 100644 (file)
index 0000000..1b8ecb9
--- /dev/null
@@ -0,0 +1,46 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. 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.
+ */
+
+// items/{itemId}/users
+
+let list = [
+       
+];
+
+export default {
+       fetch() {
+               return Promise.resolve({
+                       listCount: list.length,
+                       results: list
+               });
+       },
+
+       put(url, payload) {
+               // let {removedUsers, addedUsers} = payload;
+               // users = users.filter(user => !removedUsers.map(user => user.userId).includes(user.userId)).concat(addedUsers);
+               payload.id = Math.random() * (1000 - 1) + 1;
+               list.push(payload);
+               return Promise.resolve();
+       },
+
+       destroy(url) {
+               const parts = url.split('/');
+               const id = parts[parts.length - 1];
+               let newList  = list.filter(item => item.id !== id);
+               list = newList;
+               return Promise.resolve();
+       }
+};
\ No newline at end of file
index b5a27ed..56b2338 100644 (file)
@@ -34,9 +34,9 @@ export const actionTypes = keyMirror({
        LM_DATA_CHANGED: null
 });
 
-export const selectedButton = keyMirror({
-       VLM_LIST_VIEW: null,
-       NOT_IN_USE: null
-});
+export const selectedButton = {
+       VLM_LIST_VIEW: 'VLM_LIST_VIEW',
+       NOT_IN_USE: 'NOT_IN_USE'
+};
 
 export const VLM_DESCRIPTION_FORM = 'VLMDEWSCRIPTIONFORM';
index d6c79dd..15f6c2d 100644 (file)
@@ -52,7 +52,7 @@ class LicenseModelOverviewView extends React.Component {
                licenseModelId: React.PropTypes.string,
                licensingDataList: React.PropTypes.array,
                modalHeader: React.PropTypes.string,
-               selectedTab: React.PropTypes.symbol,
+               selectedTab: React.PropTypes.string,
                onTabSelect: React.PropTypes.func,
                onCallVCAction: React.PropTypes.func,
                onClose: React.PropTypes.func
@@ -67,14 +67,13 @@ class LicenseModelOverviewView extends React.Component {
                                <SummaryView/>
                                <div className={classNames('overview-list-section ', !selectedInUse ? 'overview-list-orphans' : '' )}>
                                        <div className='vlm-list-tab-panel'>
-                                               <div className='section-title'>{selectedInUse ? i18n('VLM List View') : i18n('Entities not in Use')}</div>
-                                               <ListButtons onTabSelect={onTabSelect} selectedInUse={selectedInUse}/>
+                                               <ListButtons onTabSelect={onTabSelect} selectedTab={selectedTab}/>
                                        </div>
                                        <VLMListView licensingDataList={licensingDataList} showInUse={selectedInUse}/>
                                </div>
                                {
                                        isDisplayModal &&
-                                       <Modal show={isDisplayModal} bsSize='large' animation={true} className={classNames('onborading-modal', setModalClassName(modalHeader))}>
+                                       <Modal show={isDisplayModal} bsSize='large' animation={true} className={classNames('onborading-modal license-model-modal', setModalClassName(modalHeader))}>
                                                <Modal.Header>
                                                        <Modal.Title>{`${i18n('Create New ')}${i18n(modalHeader)}`}</Modal.Title>
                                                </Modal.Header>
index 119008a..ec05e37 100644 (file)
@@ -66,7 +66,8 @@ class VLMListView extends Component {
                                <LicenseAgreement
                                        laData={licenseAgreement}
                                        isCollapsed={this.state[licenseAgreement.id]}
-                                       onClick={event => this.updateCollapsable(event, licenseAgreement.id) }/>
+                                       onClick={event => this.updateCollapsable(event, licenseAgreement.id) }
+                                       isOrphan={!this.props.showInUse}/>
                                <Collapse in={this.state[licenseAgreement.id]}>
                                        <ul>
                                                {licenseAgreement.children && licenseAgreement.children.map(item => this.renderLicensingItem(item))}
@@ -83,7 +84,8 @@ class VLMListView extends Component {
                                <FeatureGroup
                                        fgData={featureGroup}
                                        isCollapsed={this.state[featureGroup.id]}
-                                       onClick={event=> this.updateCollapsable(event, featureGroup.id) }/>
+                                       onClick={event=> this.updateCollapsable(event, featureGroup.id) }
+                                       isOrphan={!this.props.showInUse}/>
                                {
                                        showInUse && <Collapse in={this.state[featureGroup.id]}>
                                        <ul>
@@ -99,7 +101,7 @@ class VLMListView extends Component {
        renderEntitlementPoolItem(entitlementPool) {
                return (
                        <li key={entitlementPool.id}>
-                               <EntitlementPool epData={entitlementPool}  />
+                               <EntitlementPool epData={entitlementPool} isOrphan={!this.props.showInUse}/>
                        </li>
                );
        }
@@ -107,7 +109,7 @@ class VLMListView extends Component {
        renderLicenseKeyGroupItem(licenseKeyGroup) {
                return (
                        <li key={licenseKeyGroup.id}>
-                               <LicenseKeyGroup lkgData={licenseKeyGroup}  />
+                               <LicenseKeyGroup lkgData={licenseKeyGroup} isOrphan={!this.props.showInUse}/>
                        </li>
                );
        }
index 94977b4..34d2ee6 100644 (file)
@@ -15,7 +15,7 @@
  */
 import React, {Component} from 'react';
 import i18n from 'nfvo-utils/i18n/i18n.js';
-import {extractValue, extractUnits} from '../../entitlementPools/EntitlementPoolsConstants.js';
+import {extractUnits} from '../../entitlementPools/EntitlementPoolsConstants.js';
 import ArrowCol from './listItemsComponents/ArrowCol.jsx';
 import ItemInfo from './listItemsComponents/ItemInfo.jsx';
 import IconCol from './listItemsComponents/IconCol.jsx';
@@ -23,31 +23,23 @@ import {AdditionalDataCol, AdditionalDataElement} from './listItemsComponents/Ad
 
 class EntitlementPool extends Component {
        render() {
-               let {epData: {name, description, manufacturerReferenceNumber}} = this.props;
+               let {epData: {name, description, thresholdValue, thresholdUnits}, isOrphan} = this.props;
                return (
-                       <div className='vlm-list-item vlm-list-item-ep' data-test-id='vlm-list-item-ep'>
-                               <ArrowCol/>
-                               <IconCol className='ep-icon'/>
+                       <div className={`vlm-list-item vlm-list-item-ep ${isOrphan ? 'orphan-list-item' : ''}`} data-test-id='vlm-list-item-ep'>
+                               {!isOrphan && <ArrowCol/>}
+                               <IconCol className='ep-icon' text='EP'/>
                                <ItemInfo name={name} description={description}/>
                                <AdditionalDataCol>
-                                       <AdditionalDataElement
+                                       {thresholdValue && <AdditionalDataElement
                                                className='vlm-list-item-entitlement-metric'
                                                name={i18n('Entitlement')}
-                                               value={this.getEntitlement()}/>
-                                       <AdditionalDataElement
-                                               name={i18n('Manufacturer Reference Number')}
-                                               value={manufacturerReferenceNumber}
-                                               className='vlm-list-item-sku'/>
+                                               value={`${thresholdValue} ${extractUnits(thresholdUnits)}`}/>
+                                       }
                                </AdditionalDataCol>
                        </div>
                );
        }
 
-       getEntitlement() {
-               let {epData: {entitlementMetric, aggregationFunction, time, thresholdValue, thresholdUnits}} = this.props;
-               return `${extractValue(aggregationFunction)} ${extractValue(entitlementMetric)} per  ${extractValue(time)} ${thresholdValue} ${extractUnits(thresholdUnits)}`;
-       }
-
 }
 
 export default EntitlementPool;
index 8dbd46a..6d97dea 100644 (file)
@@ -18,30 +18,41 @@ import {overviewEditorHeaders} from '../LicenseModelOverviewConstants.js';
 import ArrowCol from './listItemsComponents/ArrowCol.jsx';
 import ItemInfo from './listItemsComponents/ItemInfo.jsx';
 import IconCol from './listItemsComponents/IconCol.jsx';
+import i18n from 'nfvo-utils/i18n/i18n.js';
+import {AdditionalDataCol, AdditionalDataElement} from './listItemsComponents/AdditionalDataCol.jsx';
 
 class FeatureGroup extends Component {
        render() {
-               let {fgData: {name, description, children = []}, isCollapsed, onClick} = this.props;
+               let {fgData: {name, manufacturerReferenceNumber, description, children = []}, isCollapsed, onClick, isOrphan} = this.props;
                return (
-                       <div onClick={e => onClick(e)} className='vlm-list-item vlm-list-item-fg' data-test-id='vlm-list-item-fg'>
-                               <ArrowCol isCollapsed={isCollapsed} length={children.length} />
-                               <IconCol className='fg-icon'/>
+                       <div 
+                               onClick={e => onClick(e)} 
+                               className={`vlm-list-item vlm-list-item-fg ${isOrphan ? 'orphan-list-item' : ''} ${children.length && !isOrphan ? 'clickable' : ''}`} data-test-id='vlm-list-item-fg'>
+                               {!isOrphan && <ArrowCol isCollapsed={isCollapsed} length={children.length} />}
+                               <IconCol className='fg-icon' text='FG'/>
                                <ItemInfo name={name} description={description}>
                                        <div className='children-count'>
                                                <span className='count-value'>
-                                                       Entitlement Pools:
+                                                       {i18n('Entitlement Pools: ')}
                                                        <span data-test-id='vlm-list-ep-count-value'>
                                                                {`${children.filter(child => child.itemType === overviewEditorHeaders.ENTITLEMENT_POOL).length}`}
                                                        </span>
                                                </span>
+                                               <span className='fg-pipeline-separator'>|</span>
                                                <span className='count-value'>
-                                                               License Key Groups:
+                                                               {i18n('License Key Groups: ')}
                                                                <span data-test-id='vlm-list-lkg-count-value'>
                                                                        {`${children.filter(child => child.itemType === overviewEditorHeaders.LICENSE_KEY_GROUP).length}`}
                                                                </span>
                                                </span>
                                        </div>
                                </ItemInfo>
+                               <AdditionalDataCol>
+                                       <AdditionalDataElement
+                                               name={i18n('Manufacturer Reference Number')}
+                                               value={manufacturerReferenceNumber}
+                                               className='vlm-list-item-sku'/>
+                               </AdditionalDataCol>
                        </div>
                );
        }
index dd4686d..dfbbe20 100644 (file)
@@ -15,7 +15,7 @@
  */
 import React, {Component} from 'react';
 import i18n from 'nfvo-utils/i18n/i18n.js';
-import InputOptions, {other as optionInputOther} from 'nfvo-components/input/inputOptions/InputOptions.jsx';
+import InputOptions, {other as optionInputOther} from 'nfvo-components/input/validation/InputOptions.jsx';
 import {optionsInputValues} from '../../licenseAgreement/LicenseAgreementConstants.js';
 import ArrowCol from './listItemsComponents/ArrowCol.jsx';
 import ItemInfo from './listItemsComponents/ItemInfo.jsx';
@@ -24,14 +24,17 @@ import {AdditionalDataCol, AdditionalDataElement} from './listItemsComponents/Ad
 
 class LicenseAgreement extends Component {
        render() {
-               let {laData: {name, description, licenseTerm, children = []}, isCollapsed, onClick} = this.props;
+               let {laData: {name, description, licenseTerm, children = []}, isCollapsed, onClick, isOrphan} = this.props;
                return (
-                       <div onClick={e => onClick(e)} className='vlm-list-item vlm-list-item-la' data-test-id='vlm-list-la-item'>
-                               <ArrowCol isCollapsed={isCollapsed} length={children.length} />
-                               <IconCol className='la-icon'/>
+                       <div 
+                               onClick={e => onClick(e)} 
+                               className={`vlm-list-item vlm-list-item-la ${isOrphan ? 'orphan-list-item' : ''} ${children.length && !isOrphan ? 'clickable' : ''} `} 
+                               data-test-id='vlm-list-la-item'>
+                               {!isOrphan && <ArrowCol isCollapsed={isCollapsed} length={children.length} />}
+                               <IconCol className='la-icon' text='LA'/>
                                <ItemInfo name={name} description={description}>
                                        <div className='children-count'>
-                                               <span className='count-value'>Feature Groups: <span data-test-id='vlm-list-fg-count-value'>{`${children.length}`}</span></span>
+                                               <span className='count-value'>{i18n('Feature Groups: ')}<span data-test-id='vlm-list-fg-count-value'>{`${children.length}`}</span></span>
                                        </div>
                                </ItemInfo>
                                <AdditionalDataCol>
index 9722b83..b1036aa 100644 (file)
@@ -23,17 +23,17 @@ import {AdditionalDataCol, AdditionalDataElement} from './listItemsComponents/Ad
 
 class LicenseKeyGroup extends Component {
        render() {
-               let {lkgData: {name, description, operationalScope, type}} = this.props;
+               let {lkgData: {name, description, operationalScope, type}, isOrphan} = this.props;
                return (
-                       <div className='vlm-list-item vlm-list-item-lkg' data-test-id='vlm-list-item-lkg'>
-                               <ArrowCol/>
-                               <IconCol className='lkg-icon'/>
+                       <div className={`vlm-list-item vlm-list-item-lkg ${isOrphan ? 'orphan-list-item' : ''}`} data-test-id='vlm-list-item-lkg'>
+                               {!isOrphan && <ArrowCol/>}
+                               <IconCol className='lkg-icon' text='LKG'/>
                                <ItemInfo name={name} description={description}/>
                                <AdditionalDataCol>
-                                       <AdditionalDataElement
+                                       {operationalScope && operationalScope.choices && <AdditionalDataElement
                                                className='vlm-list-item-operational-scope'
                                                name={i18n('Operational Scope')}
-                                               value={operationalScope && getOperationalScopes(operationalScope)}/>
+                                               value={getOperationalScopes(operationalScope)}/>}
                                        <AdditionalDataElement
                                                className='vlm-list-item-group-type'
                                                name={i18n('Type')}
index 7fd7fcb..826248e 100644 (file)
  */
 import React from 'react';
 
-function IconCol({className}) {
+function IconCol({className, text}) {
        return (
                <div className='list-item-section list-item-icon-col'>
-                       <div className={className}></div>
+                       <div className={`overview-list-icon ${className ? className : ''}`}>{text}</div>
                </div>
        );
 }
index 730ccb3..3d81aa5 100644 (file)
  */
 import React from 'react';
 import {selectedButton} from '../LicenseModelOverviewConstants.js';
+import Tabs from 'sdc-ui/lib/react/Tabs.js';
+import Tab from 'sdc-ui/lib/react/Tab.js';
+import i18n from 'nfvo-utils/i18n/i18n.js';
 
-function ListButtons ({onTabSelect, selectedInUse}) {
+function ListButtons ({onTabSelect, selectedTab}) {
        return (
-               <div className='overview-buttons-section'>
-                       <div onClick={()=>onTabSelect(selectedButton.VLM_LIST_VIEW)}
-                               className={selectedInUse ? 'button-vlm-list-view  vlm-list-icon selected' : 'button-vlm-list-view   vlm-list-icon' }
-                               data-test-id='vlm-overview-vlmlist-tab'></div>
-                       <div onClick={()=>onTabSelect(selectedButton.NOT_IN_USE)}
-                               className={selectedInUse ? 'button-vlm-list-view entities-list-icon' : 'button-vlm-list-view  entities-list-icon selected'  }
-                               data-test-id='vlm-overview-orphans-tab' >
-                       </div>
-
-               </div>
+               <Tabs 
+                       onTabClick={(tabId) => onTabSelect(tabId)}
+                       activeTab={selectedTab} 
+                       className='overview-buttons-section' 
+                       type='header' >
+                       <Tab 
+                               tabId={selectedButton.VLM_LIST_VIEW}
+                               title={i18n('Connections List')}
+                               data-test-id='vlm-overview-vlmlist-tab' />
+                       <Tab 
+                               tabId={selectedButton.NOT_IN_USE}
+                               title={i18n('Orphans List')}
+                               data-test-id='vlm-overview-orphans-tab' />
+               </Tabs>
        );
 }
 
index 1d65ab9..8755990 100644 (file)
  * or implied. See the License for the specific language governing
  * permissions and limitations under the License.
  */
-import React from 'react';
+import React, {Component} from 'react';
 import {connect} from 'react-redux';
 
+import Tooltip from 'react-bootstrap/lib/Tooltip.js';
+import OverlayTrigger from 'react-bootstrap/lib/OverlayTrigger.js';
 import ValidationHelper from 'sdc-app/common/helpers/ValidationHelper.js';
 import licenseModelOverviewActionHelper from '../licenseModelOverviewActionHelper.js';
 import LicenseModelActionHelper from '../../LicenseModelActionHelper.js';
@@ -46,9 +48,7 @@ const mapActionsToProps = (dispatch) => {
        };
 };
 
-
-
-export class VendorDataView extends React.Component {
+export class VendorDataView extends Component {
        render() {
                let {data: {vendorName}, description, isReadOnlyMode} = this.props;
                return (
@@ -62,13 +62,16 @@ export class VendorDataView extends React.Component {
                );
        }
 
+
        renderDescription() {
                let {data: {description}, onVendorDescriptionEdit, isReadOnlyMode} = this.props;
                return (
-                       <div onClick={() => {if (!isReadOnlyMode) {onVendorDescriptionEdit(description);}}}  className={!isReadOnlyMode ? 'vendor-description' : 'vendor-description-readonly'}>
-                               <div className='description-data' data-test-id='vlm-summary-vendor-description'>
-                                       {description}
-                               </div>
+                       <div onClick={() => {if (!isReadOnlyMode) {onVendorDescriptionEdit(description);}}} className={!isReadOnlyMode ? 'vendor-description' : 'vendor-description-readonly'}>
+                               {this.renderOverlay(
+                                       <div className='description-data' data-test-id='vlm-summary-vendor-description'>
+                                               {description}
+                                       </div>
+                               )}
                        </div>
                );
        }
@@ -80,7 +83,21 @@ export class VendorDataView extends React.Component {
                );
        }
 
+       renderOverlay(children) {
+               let {data: {description}, isReadOnlyMode} = this.props;
+               if (isReadOnlyMode) {
+                       return (
+                               <OverlayTrigger
+                                       placement='bottom'
+                                       overlay={<Tooltip className='vendor-description-tooltip' id='tooltip-bottom'>{description}</Tooltip>}
+                                       delayShow={400}>
+                                       {children}
+                               </OverlayTrigger>
+                       );
+               }
+               return children;
+       }
+
 }
 
 export default connect(mapStateToProps, mapActionsToProps)(VendorDataView);
-
index 3b3e2fc..5939499 100644 (file)
@@ -49,7 +49,7 @@ const CatalogTileVendorName = ({vendorName, catalogItemTypeClass}) => {
 };
 
 const CatalogTileItemName = ({name}) => (
-       <OverlayTrigger placement='top' overlay={tooltip(name && name.toUpperCase())}>
+       <OverlayTrigger placement='top' overlay={tooltip(name)}>
                <div className='catalog-tile-item-name'>{name}</div>
        </OverlayTrigger>
 );
index 07d6c74..c9c95f3 100644 (file)
@@ -36,7 +36,7 @@ function getActiveNavigationId(screen, componentId) {
        return activeItemId;
 }
 
-const buildComponentNavigationBarGroups = ({componentId, meta, hasImages}) => {
+const buildComponentNavigationBarGroups = ({componentId, meta}) => {
        const groups = ([
                {
                        id: navigationItems.GENERAL + '|' + componentId,
@@ -67,7 +67,6 @@ const buildComponentNavigationBarGroups = ({componentId, meta, hasImages}) => {
                        id: navigationItems.IMAGES + '|' + componentId,
                        name: i18n('Images'),
                        disabled: false,
-                       hidden: (!hasImages),
                        meta
                }, {
                        id: navigationItems.PROCESS_DETAILS + '|' + componentId,
@@ -85,7 +84,7 @@ const buildComponentNavigationBarGroups = ({componentId, meta, hasImages}) => {
        return groups;
 };
 
-const buildNavigationBarProps = ({softwareProduct, meta, screen, componentId, componentsList, mapOfExpandedIds, imagesNavigationList}) => {
+const buildNavigationBarProps = ({softwareProduct, meta, screen, componentId, componentsList, mapOfExpandedIds}) => {
        const {softwareProductEditor: {data: currentSoftwareProduct = {}}} = softwareProduct;
        const {id, name, onboardingMethod} = currentSoftwareProduct;
        const groups = [{
@@ -148,8 +147,7 @@ const buildNavigationBarProps = ({softwareProduct, meta, screen, componentId, co
                                                name: displayName,
                                                meta,
                                                expanded: mapOfExpandedIds[navigationItems.COMPONENTS + '|' + id] === true  && screen !== enums.SCREEN.SOFTWARE_PRODUCT_LANDING_PAGE,
-                                               items: buildComponentNavigationBarGroups({componentId: id, meta,
-                                                       hasImages : (onboardingMethod === onboardingMethodTypes.MANUAL || imagesNavigationList[id] === true)})
+                                               items: buildComponentNavigationBarGroups({componentId: id, meta})
                                        }))
                                ]
                        }
@@ -193,12 +191,12 @@ function buildMeta({softwareProduct, componentId, softwareProductDependencies})
 const mapStateToProps = ({softwareProduct}, {currentScreen: {screen, props: {componentId}}}) => {
        const {softwareProductEditor, softwareProductComponents, softwareProductDependencies} = softwareProduct;
        const {mapOfExpandedIds = []} = softwareProductEditor;
-       const {componentsList = [], images: {imagesNavigationList}} = softwareProductComponents;
+       const {componentsList = []} = softwareProductComponents;
 
        const meta = buildMeta({softwareProduct, componentId, softwareProductDependencies});
        return {
                versionControllerProps: buildVersionControllerProps(softwareProduct),
-               navigationBarProps: buildNavigationBarProps({softwareProduct, meta, screen, componentId, componentsList, mapOfExpandedIds, imagesNavigationList}),
+               navigationBarProps: buildNavigationBarProps({softwareProduct, meta, screen, componentId, componentsList, mapOfExpandedIds}),
                meta
        };
 };
index d6ba86a..90a2bb8 100644 (file)
@@ -251,8 +251,7 @@ const SoftwareProductActionHelper = {
        processAndValidateHeatCandidate(dispatch, {softwareProductId, version}){
                return validateHeatCandidate(softwareProductId, version).then(response => {
                        if (response.status === 'Success') {
-                               let isFetchImageDetails = true;
-                               SoftwareProductComponentsActionHelper.fetchSoftwareProductComponents(dispatch, {softwareProductId, version, isFetchImageDetails});
+                               SoftwareProductComponentsActionHelper.fetchSoftwareProductComponents(dispatch, {softwareProductId, version});
                                SoftwareProductActionHelper.fetchSoftwareProduct(dispatch, {softwareProductId, version});
                        }
                });
index 5248c4e..977a76a 100644 (file)
@@ -35,7 +35,6 @@ import SoftwareProductComponentsNICListReducer from './components/network/Softwa
 import SoftwareProductComponentsNICEditorReducer from './components/network/SoftwareProductComponentsNICEditorReducer.js';
 import SoftwareProductComponentsImageListReducer from './components/images/SoftwareProductComponentsImageListReducer.js';
 import SoftwareProductComponentsImageEditorReducer from './components/images/SoftwareProductComponentsImageEditorReducer.js';
-import SoftwareProductComponentsImageNavigationReducer from './components/images/SoftwareProductComponentsImageNavigationReducer.js';
 import SoftwareProductComponentsNICCreationReducer from './components/network/NICCreation/NICCreationReducer.js';
 import SoftwareProductComponentsMonitoringReducer from './components/monitoring/SoftwareProductComponentsMonitoringReducer.js';
 import SoftwareProductComponentsComputeFlavorListReducer from './components/compute/computeComponents/computeFlavor/ComputeFlavorListReducer.js';
@@ -83,7 +82,6 @@ export default combineReducers({
                }),
                images: combineReducers({
                        imagesList: SoftwareProductComponentsImageListReducer,
-                       imagesNavigationList: SoftwareProductComponentsImageNavigationReducer,
                        imageEditor: createPlainDataReducer(createComposedJSONSchemaReducer(IMAGE_QUESTIONNAIRE, SoftwareProductComponentsImageEditorReducer))
                }),
                computeFlavor: combineReducers({
index 5314364..87953bb 100644 (file)
@@ -17,8 +17,8 @@ import {actionTypes} from './HeatSetupConstants.js';
 import isEqual from 'lodash/isEqual.js';
 import cloneDeep from 'lodash/cloneDeep.js';
 import SoftwareProductActionHelper from 'sdc-app/onboarding/softwareProduct/SoftwareProductActionHelper.js';
-import i18n from 'nfvo-utils/i18n/i18n.js';
-import {actionTypes as modalActionTypes} from 'nfvo-components/modal/GlobalModalConstants.js';
+// import i18n from 'nfvo-utils/i18n/i18n.js';
+// import {actionTypes as modalActionTypes} from 'nfvo-components/modal/GlobalModalConstants.js';
 
 export default {
 
@@ -56,7 +56,11 @@ export default {
                dispatch({type: actionTypes.ADD_ALL_UNASSIGNED_TO_ARTIFACTS});
        },
 
-       heatSetupLeaveConfirmation(dispatch, {softwareProductId, heatSetup, heatSetupCache}) {
+       heatSetupLeaveConfirmation() {
+               return Promise.resolve();
+       }
+
+       /*heatSetupLeaveConfirmation(dispatch, {softwareProductId, heatSetup, heatSetupCache}) {
                return new Promise((resolve, reject) => {
                        if (isEqual({...heatSetup, softwareProductId}, heatSetupCache)) {
                                resolve();
@@ -73,5 +77,5 @@ export default {
                                });
                        }
                });
-       }
+       }*/
 };
index 71dc832..8085c87 100644 (file)
@@ -18,7 +18,6 @@ import Configuration from 'sdc-app/config/Configuration.js';
 
 import {actionTypes, COMPONENTS_QUESTIONNAIRE} from './SoftwareProductComponentsConstants.js';
 import ValidationHelper from 'sdc-app/common/helpers/ValidationHelper.js';
-import SoftwareProductComponentsImageActionHelper from './images/SoftwareProductComponentsImageActionHelper.js';
 import {actionTypes as modalActionTypes} from 'nfvo-components/modal/GlobalModalConstants.js';
 
 function baseUrl(softwareProductId, version) {
@@ -69,32 +68,12 @@ function postSoftwareProductComponent(softwareProductId, vspComponent, version)
 
 
 const SoftwareProductComponentsActionHelper = {
-       fetchSoftwareProductComponents(dispatch, {softwareProductId, version, isFetchImageDetails = false}) {
+       fetchSoftwareProductComponents(dispatch, {softwareProductId, version}) {
                return fetchSoftwareProductComponents(softwareProductId, version).then(response => {
-                       let componentImagesCalls = [];
-                       if (isFetchImageDetails && response.listCount) {
-                               response.results.map(component => {
-                                       let componentId = component.id;
-                                       componentImagesCalls[componentImagesCalls.length] =
-                                               SoftwareProductComponentsImageActionHelper.fetchImagesList(dispatch, {
-                                                       softwareProductId,
-                                                       componentId,
-                                                       version
-                                               });
-
-                               });
-                               return Promise.all(componentImagesCalls).then(() => {
-                                       dispatch({
-                                               type: actionTypes.COMPONENTS_LIST_UPDATE,
-                                               componentsList: response.results
-                                       });
-                               });
-                       } else {
-                               dispatch({
-                                       type: actionTypes.COMPONENTS_LIST_UPDATE,
-                                       componentsList: response.results
-                               });
-                       }
+                       dispatch({
+                               type: actionTypes.COMPONENTS_LIST_UPDATE,
+                               componentsList: response.results
+                       });
                });
        },
 
index 86c4e07..fb3bd35 100644 (file)
@@ -77,9 +77,10 @@ const mapActionsToProps = (dispatch, {softwareProductId, componentId}) => {
                                image, isReadOnlyMode, softwareProductId, componentId, version, modalClassName: 'image-modal-edit'}
                        );
                },
-               onSubmit: ({qdata}) => { return SoftwareProductComponentsActionHelper.updateSoftwareProductComponentQuestionnaire(dispatch,
+               onSubmit: (version, qdata) => { return SoftwareProductComponentsActionHelper.updateSoftwareProductComponentQuestionnaire(dispatch,
                        {softwareProductId,
                                vspComponentId: componentId,
+                               version,
                                qdata});
                }
        };
index ccf5b9d..54def08 100644 (file)
@@ -125,8 +125,8 @@ class SoftwareProductComponentsImageListView extends React.Component {
        }
 
        save() {
-               let {onSubmit, qdata} = this.props;
-               return onSubmit({qdata});
+               let {onSubmit, qdata, version} = this.props;
+               return onSubmit(version, qdata);
        }
 }
 export default SoftwareProductComponentsImageListView;
index 2ad48ec..36c1728 100644 (file)
@@ -96,7 +96,7 @@ class SoftwareProductComponentsMonitoringView extends Component {
                        <ButtonToolbar>
                                <ButtonGroup>
                                        <Button disabled>{filename}</Button>
-                                       <Button className='delete-button' onClick={()=>this.props.onDeleteFile(type)}>X</Button>
+                                       <Button data-test-id={`monitoring-delete-${type}`} className='delete-button' onClick={()=>this.props.onDeleteFile(type)}>X</Button>
                                </ButtonGroup>
                        </ButtonToolbar>
                );
index 5a159b4..4d460c7 100644 (file)
@@ -122,7 +122,7 @@ class SoftwareProductComponentsNetworkView extends React.Component {
                                <ListEditorItemViewField>
                                        <div className={isManual ? 'details-col' : 'details'}>
                                                <div className={isManual ? 'manual-title' : 'title'}>{i18n('Purpose of NIC')}</div>
-                                               <div className={isManual ? 'description' : ''}>{description ? description : i18n('N/A')}</div>
+                                               {description && <div className={isManual ? 'description' : ''}>{description}</div>}
                                        </div>
                                        {!isManual && <div className='details'>
                                                <div className='title'>{i18n('Network')}</div>
index 18a3b1e..7149adb 100644 (file)
@@ -33,14 +33,15 @@ const mapStateToProps = ({softwareProduct}) => {
                qdata,
                isReadOnlyMode,
                qGenericFieldInfo,
-               dataMap
+               dataMap,
+               version: currentVSP.version
        };
 };
 
-const mapActionToProps = (dispatch, {softwareProductId, version, componentId}) => {
+const mapActionToProps = (dispatch, {softwareProductId, componentId}) => {
        return {
                onQDataChanged: (deltaData) => ValidationHelper.qDataChanged(dispatch, {deltaData, qName: COMPONENTS_QUESTIONNAIRE}),
-               onSubmit: ({componentData, qdata}) => { return SoftwareProductComponentsActionHelper.updateSoftwareProductComponent(dispatch,
+               onSubmit: ({componentData, qdata, version}) => { return SoftwareProductComponentsActionHelper.updateSoftwareProductComponent(dispatch,
                        {softwareProductId, version, vspComponentId: componentId, componentData, qdata});
                }
        };
index 28bdf8e..00df21b 100644 (file)
@@ -162,7 +162,7 @@ class SoftwareProductComponentStorageView extends React.Component {
        };
 
        render() {
-               let {onQDataChanged, dataMap, qGenericFieldInfo, isReadOnlyMode, onSubmit, qdata} =  this.props;
+               let {onQDataChanged, dataMap, qGenericFieldInfo, isReadOnlyMode, onSubmit, qdata, version} =  this.props;
 
                return(
                        <div className='vsp-component-questionnaire-view'>
@@ -170,7 +170,7 @@ class SoftwareProductComponentStorageView extends React.Component {
                                        ref={form => this.form = form }
                                        isValid={true}
                                        formReady={null}
-                                       onSubmit={() => onSubmit({qdata})}
+                                       onSubmit={() => onSubmit({qdata, version})}
                                        className='component-questionnaire-validation-form'
                                        isReadOnlyMode={isReadOnlyMode}
                                        hasButtons={false}>
@@ -182,8 +182,9 @@ class SoftwareProductComponentStorageView extends React.Component {
                );
        }
 
-       save(){
-               return this.form.handleFormSubmit(new Event('dummy'));
+       save(){         
+               const {componentData, qdata, onSubmit, version} = this.props;
+               return onSubmit({componentData, qdata, version});               
        }
 }
 
index 19e2d5b..3b973c6 100644 (file)
@@ -27,7 +27,7 @@ export const mapStateToProps = ({finalizedLicenseModelList, softwareProductList,
 
        let VSPNames = {};
        for (let i = 0; i < softwareProductList.length; i++) {
-               VSPNames[softwareProductList[i].name] = softwareProductList[i].id;
+               VSPNames[softwareProductList[i].name.toLowerCase()] = softwareProductList[i].id;
        }
 
        return {
index 2e0cd34..a427470 100644 (file)
@@ -63,14 +63,15 @@ export default class SoftwareProductDependenciesView extends React.Component {
                                        numOfIcons={2}
                                        isReadOnlyMode={isReadOnlyMode}
                                        onAdd={canAdd ? onAddDependency : undefined}
-                                       onAddItem={i18n('Add Rule')}>                                   
+                                       onAddItem={i18n('Add Rule')}>
                                        {softwareProductDependencies.map(dependency => (
                                                <SelectActionTableRow
                                                        key={dependency.id}
                                                        onDelete={() => onDataChanged(softwareProductDependencies.filter(currentDependency => currentDependency.id !== dependency.id))}
                                                        overlayMsg={i18n('There is a loop between selections')}
                                                        hasError={dependency.hasCycle}
-                                                       hasErrorIndication>
+                                                       hasErrorIndication
+                                                       showDelete={dependency.id !== 'fake' || dependency.hasCycle !== undefined}>
                                                        <SelectActionTableCell
                                                                options={this.filterSources({componentsOptions, sourceToTargetMapping, selectedSourceId: dependency.sourceId, selectedTargetId: dependency.targetId})}
                                                                selected={dependency.sourceId}
index 6b924a2..ba00d4e 100644 (file)
@@ -58,7 +58,7 @@ export function mapStateToProps({licenseModel, softwareProduct}) {
        let DFNames = {};
 
        deploymentFlavors.map(deployment => {
-               DFNames[deployment.model] = deployment.id;
+               DFNames[deployment.model.toLowerCase()] = deployment.id;
        });
 
        return {
index 98dd773..e4caf92 100644 (file)
@@ -19,7 +19,7 @@ import i18n from 'nfvo-utils/i18n/i18n.js';
 import sortByStringProperty from 'nfvo-utils/sortByStringProperty.js';
 import Form from 'nfvo-components/input/validation/Form.jsx';
 import Input from 'nfvo-components/input/validation/Input.jsx';
-import InputOptions from 'nfvo-components/input/inputOptions/InputOptions.jsx';
+import InputOptions from 'nfvo-components/input/validation/InputOptions.jsx';
 import GridSection from 'nfvo-components/grid/GridSection.jsx';
 import GridItem from 'nfvo-components/grid/GridItem.jsx';
 import SoftwareProductCategoriesHelper from 'sdc-app/onboarding/softwareProduct/SoftwareProductCategoriesHelper.js';
index 14df58e..a28245e 100644 (file)
@@ -19,9 +19,7 @@ import {overviewEditorHeaders} from 'sdc-app/onboarding/licenseModel/overview/Li
 Factory.define('EntitlementPoolBaseFactory')
        .attrs({
                name: 'EntitlementPoolName',
-               description: 'description',
-               entitlementMetric: {'choice': 'User', 'other': ''},
-               manufacturerReferenceNumber: '123'
+               description: 'description'
        });
 
 Factory.define('EntitlementPoolExtendedBaseFactory')
@@ -29,10 +27,10 @@ Factory.define('EntitlementPoolExtendedBaseFactory')
        .attrs({
                thresholdValue: 75,
                thresholdUnits: '%',
-               increments: 'string',
-               aggregationFunction: {'choice': 'Average', 'other': ''},
-               operationalScope: {'choices': ['Other'], 'other': 'blabla'},
-               time: {'choice': 'Hour', 'other': ''}
+               increments: 'string',           
+               operationalScope: {'choices': ['Other'], 'other': 'blabla'},            
+               startDate: (new Date()).getTime(),
+               expiryDate: (new Date()).getTime()
        });
 
 export const EntitlementPoolListItemFactory = new Factory()
diff --git a/openecomp-ui/test-utils/factories/licenseModel/LimitFactories.js b/openecomp-ui/test-utils/factories/licenseModel/LimitFactories.js
new file mode 100644 (file)
index 0000000..a08e7e6
--- /dev/null
@@ -0,0 +1,38 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. 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.
+ */
+
+import {Factory} from 'rosie';
+import {limitType} from 'sdc-app/onboarding/licenseModel/limits/LimitEditorConstants.js';
+import IdMixin from 'test-utils/factories/mixins/IdMixin.js';
+
+Factory.define('LimitBaseFactory')
+       .attrs({                
+               name: 'SpLimit1',
+               type: limitType.SERVICE_PROVIDER,
+               description: 'fgfg',
+               metric: 'CPU',
+               value: 45,
+               unit: 55,
+               aggregationFunction: 'Peak',
+               time: 'Day'             
+       });
+
+export const LimitPostFactory = new Factory()
+       .extend('LimitBaseFactory');
+
+export const LimitItemFactory = new Factory()
+       .extend('LimitBaseFactory')
+       .extend(IdMixin);       
index 15e1dee..911fb01 100644 (file)
@@ -20,6 +20,7 @@ import {storeCreator} from 'sdc-app/AppStore.js';
 import EntitlementPoolsActionHelper from 'sdc-app/onboarding/licenseModel/entitlementPools/EntitlementPoolsActionHelper.js';
 import {EntitlementPoolStoreFactory, EntitlementPoolPostFactory} from 'test-utils/factories/licenseModel/EntitlementPoolFactories.js';
 import VersionControllerUtilsFactory from 'test-utils/factories/softwareProduct/VersionControllerUtilsFactory.js';
+import {LimitItemFactory, LimitPostFactory} from 'test-utils/factories/licenseModel/LimitFactories.js';
 
 describe('Entitlement Pools Module Tests', function () {
 
@@ -162,4 +163,173 @@ describe('Entitlement Pools Module Tests', function () {
                });
        });
 
+       it('Load Limits List', () => {
+
+               const limitsList = LimitItemFactory.buildList(3);               
+               deepFreeze(limitsList);
+               const store = storeCreator();
+               deepFreeze(store.getState());
+
+               const expectedStore = cloneAndSet(store.getState(), 'licenseModel.entitlementPool.entitlementPoolEditor.limitsList', limitsList);
+               const entitlementPool = EntitlementPoolStoreFactory.build();
+               mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
+                       expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/entitlement-pools/${entitlementPool.id}/limits`);
+                       expect(data).toEqual(undefined);
+                       expect(options).toEqual(undefined);
+                       return {results: limitsList};
+                });
+
+               return EntitlementPoolsActionHelper.fetchLimits(store.dispatch, {licenseModelId: LICENSE_MODEL_ID, version, entitlementPool}).then(() => {
+                       expect(store.getState()).toEqual(expectedStore);
+                });
+       });
+
+       it('Add Limit', () => {
+
+               const store = storeCreator();
+               deepFreeze(store.getState());
+
+               const limitToAdd = LimitPostFactory.build();
+
+               deepFreeze(limitToAdd);
+
+               const LimitIdFromResponse = 'ADDED_ID';
+               const limitAddedItem = {...limitToAdd, id: LimitIdFromResponse};
+               deepFreeze(limitAddedItem);
+               const entitlementPool = EntitlementPoolStoreFactory.build();
+
+               const expectedStore = cloneAndSet(store.getState(), 'licenseModel.entitlementPool.entitlementPoolEditor.limitsList', [limitAddedItem]);
+
+               mockRest.addHandler('post', ({data, options, baseUrl}) => {
+                       expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/entitlement-pools/${entitlementPool.id}/limits`);
+                       expect(data).toEqual(limitToAdd);
+                       expect(options).toEqual(undefined);
+                       return {
+                               returnCode: 'OK',
+                               value: LimitIdFromResponse
+                       };
+               });
+
+               mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
+                       expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/entitlement-pools/${entitlementPool.id}/limits`);
+                       expect(data).toEqual(undefined);
+                       expect(options).toEqual(undefined);
+                       return {results: [limitAddedItem]};
+                });
+
+               return EntitlementPoolsActionHelper.submitLimit(store.dispatch,
+                       {
+                               licenseModelId: LICENSE_MODEL_ID,
+                               version,                                
+                               entitlementPool,
+                               limit: limitToAdd
+                       }
+               ).then(() => {
+                       expect(store.getState()).toEqual(expectedStore);
+               });
+       });
+
+
+       it('Delete Limit', () => {
+
+               const limitsList = LimitItemFactory.buildList(1);               
+               deepFreeze(limitsList);
+                                       
+               const store = storeCreator({
+                       licenseModel: {
+                               entitlementPool: {
+                                       entitlementPoolEditor: {
+                                               limitsList
+                                       }
+                               }
+                       }
+               });
+               deepFreeze(store.getState());
+
+               const entitlementPool = EntitlementPoolStoreFactory.build();
+               const expectedStore = cloneAndSet(store.getState(), 'licenseModel.entitlementPool.entitlementPoolEditor.limitsList', []);
+
+               mockRest.addHandler('destroy', ({data, options, baseUrl}) => {
+                       expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/entitlement-pools/${entitlementPool.id}/limits/${limitsList[0].id}`);
+                       expect(data).toEqual(undefined);
+                       expect(options).toEqual(undefined);
+                       return {
+                               results: {
+                                       returnCode: 'OK'
+                               }
+                       };
+               });
+
+               mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
+                       expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/entitlement-pools/${entitlementPool.id}/limits`);
+                       expect(data).toEqual(undefined);
+                       expect(options).toEqual(undefined);
+                       return {results: []};
+                });
+
+               return EntitlementPoolsActionHelper.deleteLimit(store.dispatch, {
+                       licenseModelId: LICENSE_MODEL_ID,
+                       version,
+                       entitlementPool,
+                       limit: limitsList[0]
+               }).then(() => {
+                       expect(store.getState()).toEqual(expectedStore);
+               });
+       });
+
+       it('Update Limit', () => {
+
+               const limitsList = LimitItemFactory.buildList(1);               
+               deepFreeze(limitsList);
+               const entitlementPool = EntitlementPoolStoreFactory.build();
+               const store = storeCreator({
+                       licenseModel: {
+                               entitlementPool: {
+                                       entitlementPoolEditor: {
+                                               limitsList
+                                       }
+                               }
+                       }
+               });
+
+               deepFreeze(store.getState());
+
+               
+               const previousData = limitsList[0];
+               deepFreeze(previousData);
+               const limitId = limitsList[0].id;
+               
+               const updatedLimit = {...previousData, name: 'updatedLimit'};
+               deepFreeze(updatedLimit);
+               const updatedLimitForPut = {...updatedLimit, id: undefined};
+
+               const expectedStore = cloneAndSet(store.getState(), 'licenseModel.entitlementPool.entitlementPoolEditor.limitsList', [updatedLimit]);
+
+
+               mockRest.addHandler('put', ({data, options, baseUrl}) => {
+                       expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/entitlement-pools/${entitlementPool.id}/limits/${limitId}`);
+                       expect(data).toEqual(updatedLimitForPut);
+                       expect(options).toEqual(undefined);
+                       return {returnCode: 'OK'};
+               });
+
+               mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
+                       expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/entitlement-pools/${entitlementPool.id}/limits`);
+                       expect(data).toEqual(undefined);
+                       expect(options).toEqual(undefined);
+                       return {results: [updatedLimit]};
+                });
+
+               return EntitlementPoolsActionHelper.submitLimit(store.dispatch,
+                       {
+                               licenseModelId: LICENSE_MODEL_ID,
+                               version,                                
+                               entitlementPool,
+                               limit: updatedLimit
+                       }
+               ).then(() => {
+                       expect(store.getState()).toEqual(expectedStore);
+               });
+       });
+
 });
index dd09030..77fcc00 100644 (file)
@@ -21,6 +21,7 @@ import {LicenseKeyGroupStoreFactory, LicenseKeyGroupPostFactory} from 'test-util
 
 import LicenseKeyGroupsActionHelper from 'sdc-app/onboarding/licenseModel/licenseKeyGroups/LicenseKeyGroupsActionHelper.js';
 import VersionControllerUtilsFactory from 'test-utils/factories/softwareProduct/VersionControllerUtilsFactory.js';
+import {LimitItemFactory, LimitPostFactory} from 'test-utils/factories/licenseModel/LimitFactories.js';
 
 describe('License Key Groups Module Tests', function () {
 
@@ -157,4 +158,172 @@ describe('License Key Groups Module Tests', function () {
                });
        });
 
+       it('Load Limits List', () => {
+
+               const limitsList = LimitItemFactory.buildList(3);               
+               deepFreeze(limitsList);
+               const store = storeCreator();
+               deepFreeze(store.getState());
+
+               const expectedStore = cloneAndSet(store.getState(), 'licenseModel.licenseKeyGroup.licenseKeyGroupsEditor.limitsList', limitsList);
+               const licenseKeyGroup = LicenseKeyGroupStoreFactory.build();
+               mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
+                       expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/license-key-groups/${licenseKeyGroup.id}/limits`);
+                       expect(data).toEqual(undefined);
+                       expect(options).toEqual(undefined);
+                       return {results: limitsList};
+                });
+
+               return LicenseKeyGroupsActionHelper.fetchLimits(store.dispatch, {licenseModelId: LICENSE_MODEL_ID, version, licenseKeyGroup}).then(() => {
+                       expect(store.getState()).toEqual(expectedStore);
+                });
+       });
+
+       it('Add Limit', () => {
+
+               const store = storeCreator();
+               deepFreeze(store.getState());
+
+               const limitToAdd = LimitPostFactory.build();
+
+               deepFreeze(limitToAdd);
+
+               const LimitIdFromResponse = 'ADDED_ID';
+               const limitAddedItem = {...limitToAdd, id: LimitIdFromResponse};
+               deepFreeze(limitAddedItem);
+               const licenseKeyGroup = LicenseKeyGroupStoreFactory.build();
+
+               const expectedStore = cloneAndSet(store.getState(), 'licenseModel.licenseKeyGroup.licenseKeyGroupsEditor.limitsList', [limitAddedItem]);
+
+               mockRest.addHandler('post', ({data, options, baseUrl}) => {
+                       expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/license-key-groups/${licenseKeyGroup.id}/limits`);
+                       expect(data).toEqual(limitToAdd);
+                       expect(options).toEqual(undefined);
+                       return {
+                               returnCode: 'OK',
+                               value: LimitIdFromResponse
+                       };
+               });
+
+               mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
+                       expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/license-key-groups/${licenseKeyGroup.id}/limits`);
+                       expect(data).toEqual(undefined);
+                       expect(options).toEqual(undefined);
+                       return {results: [limitAddedItem]};
+                });
+
+               return LicenseKeyGroupsActionHelper.submitLimit(store.dispatch,
+                       {
+                               licenseModelId: LICENSE_MODEL_ID,
+                               version,                                
+                               licenseKeyGroup,
+                               limit: limitToAdd
+                       }
+               ).then(() => {
+                       expect(store.getState()).toEqual(expectedStore);
+               });
+       });
+
+       it('Delete Limit', () => {
+
+               const limitsList = LimitItemFactory.buildList(1);               
+               deepFreeze(limitsList);
+                                       
+               const store = storeCreator({
+                       licenseModel: {
+                               entitlementPool: {
+                                       entitlementPoolEditor: {
+                                               limitsList
+                                       }
+                               }
+                       }
+               });
+               deepFreeze(store.getState());
+
+               const licenseKeyGroup = LicenseKeyGroupStoreFactory.build();
+               const expectedStore = cloneAndSet(store.getState(), 'licenseModel.licenseKeyGroup.licenseKeyGroupsEditor.limitsList', []);
+
+               mockRest.addHandler('destroy', ({data, options, baseUrl}) => {
+                       expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/license-key-groups/${licenseKeyGroup.id}/limits/${limitsList[0].id}`);
+                       expect(data).toEqual(undefined);
+                       expect(options).toEqual(undefined);
+                       return {
+                               results: {
+                                       returnCode: 'OK'
+                               }
+                       };
+               });
+
+               mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
+                       expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/license-key-groups/${licenseKeyGroup.id}/limits`);
+                       expect(data).toEqual(undefined);
+                       expect(options).toEqual(undefined);
+                       return {results: []};
+                });
+
+               return LicenseKeyGroupsActionHelper.deleteLimit(store.dispatch, {
+                       licenseModelId: LICENSE_MODEL_ID,
+                       version,
+                       licenseKeyGroup,
+                       limit: limitsList[0]
+               }).then(() => {
+                       expect(store.getState()).toEqual(expectedStore);
+               });
+       });
+
+       it('Update Limit', () => {
+
+               const limitsList = LimitItemFactory.buildList(1);               
+               deepFreeze(limitsList);
+               const licenseKeyGroup = LicenseKeyGroupStoreFactory.build();
+               const store = storeCreator({
+                       licenseModel: {
+                               licenseKeyGroup: {
+                                       licenseKeyGroupsEditor: {
+                                               limitsList
+                                       }
+                               }
+                       }
+               });
+
+               deepFreeze(store.getState());
+
+               
+               const previousData = limitsList[0];
+               deepFreeze(previousData);
+               const limitId = limitsList[0].id;
+               
+               const updatedLimit = {...previousData, name: 'updatedLimit'};
+               deepFreeze(updatedLimit);
+               const updatedLimitForPut = {...updatedLimit, id: undefined};
+
+               const expectedStore = cloneAndSet(store.getState(), 'licenseModel.licenseKeyGroup.licenseKeyGroupsEditor.limitsList', [updatedLimit]);
+
+
+               mockRest.addHandler('put', ({data, options, baseUrl}) => {
+                       expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/license-key-groups/${licenseKeyGroup.id}/limits/${limitId}`);
+                       expect(data).toEqual(updatedLimitForPut);
+                       expect(options).toEqual(undefined);
+                       return {returnCode: 'OK'};
+               });
+
+               mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
+                       expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/license-key-groups/${licenseKeyGroup.id}/limits`);
+                       expect(data).toEqual(undefined);
+                       expect(options).toEqual(undefined);
+                       return {results: [updatedLimit]};
+                });
+
+               return LicenseKeyGroupsActionHelper.submitLimit(store.dispatch,
+                       {
+                               licenseModelId: LICENSE_MODEL_ID,
+                               version,                                
+                               licenseKeyGroup,
+                               limit: updatedLimit
+                       }
+               ).then(() => {
+                       expect(store.getState()).toEqual(expectedStore);
+               });
+       });
+
 });
diff --git a/sdc-os-chef/sdc-cassandra/chef-repo/cookbooks/cassandra-actions/attributes/default.rb b/sdc-os-chef/sdc-cassandra/chef-repo/cookbooks/cassandra-actions/attributes/default.rb
new file mode 100644 (file)
index 0000000..c7f408f
--- /dev/null
@@ -0,0 +1 @@
+normal['version'] = "1.1.0"