[SDC-29] Amdocs OnBoard 1707 initial commit.

Change-Id: Ie4d12a3f574008b792899b368a0902a8b46b5370
Signed-off-by: AviZi <avi.ziv@amdocs.com>
diff --git a/openecomp-ui/src/sdc-app/onboarding/licenseModel/creation/LicenseModelCreation.js b/openecomp-ui/src/sdc-app/onboarding/licenseModel/creation/LicenseModelCreation.js
index 63d0f27..d85618c 100644
--- a/openecomp-ui/src/sdc-app/onboarding/licenseModel/creation/LicenseModelCreation.js
+++ b/openecomp-ui/src/sdc-app/onboarding/licenseModel/creation/LicenseModelCreation.js
@@ -1,40 +1,50 @@
-/*-
- * ============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
- * 
+ *
+ * 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=========================================================
+ * 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 OnboardingActionHelper from 'sdc-app/onboarding/OnboardingActionHelper.js';
 import LicenseModelCreationActionHelper from './LicenseModelCreationActionHelper.js';
 import LicenseModelCreationView from './LicenseModelCreationView.jsx';
+import ValidationHelper from 'sdc-app/common/helpers/ValidationHelper.js';
+import LicenseModelActionHelper from 'sdc-app/onboarding/licenseModel/LicenseModelActionHelper.js';
 
-const mapStateToProps = ({licenseModel: {licenseModelCreation}}) => licenseModelCreation;
+export const mapStateToProps = ({licenseModelList, licenseModel: {licenseModelCreation}}) => {
+	let {genericFieldInfo} = licenseModelCreation;
+	let isFormValid = ValidationHelper.checkFormValid(genericFieldInfo);
 
-const mapActionsToProps = (dispatch) => {
+	let VLMNames = {};
+	for (let i = 0; i < licenseModelList.length; i++) {
+		VLMNames[licenseModelList[i].vendorName] = licenseModelList[i].id;
+	}
+
+	return {...licenseModelCreation, isFormValid: isFormValid, VLMNames};
+};
+
+export const mapActionsToProps = (dispatch) => {
 	return {
-		onDataChanged: deltaData => LicenseModelCreationActionHelper.dataChanged(dispatch, {deltaData}),
+		onDataChanged: (deltaData, formName, customValidations) => ValidationHelper.dataChanged(dispatch, {deltaData, formName, customValidations}),
 		onCancel: () => LicenseModelCreationActionHelper.close(dispatch),
 		onSubmit: (licenseModel) => {
 			LicenseModelCreationActionHelper.close(dispatch);
-			LicenseModelCreationActionHelper.createLicenseModel(dispatch, {licenseModel}).then(licenseModelId => {
-				OnboardingActionHelper.navigateToLicenseAgreements(dispatch, {licenseModelId});
+			LicenseModelCreationActionHelper.createLicenseModel(dispatch, {licenseModel}).then(response => {
+				LicenseModelActionHelper.fetchLicenseModels(dispatch).then(() => {
+					OnboardingActionHelper.navigateToLicenseModelOverview(dispatch, {licenseModelId: response.value});
+				});
 			});
-		}
+		},
+		onValidateForm: (formName) => ValidationHelper.validateForm(dispatch, formName)
 	};
 };
 
diff --git a/openecomp-ui/src/sdc-app/onboarding/licenseModel/creation/LicenseModelCreationActionHelper.js b/openecomp-ui/src/sdc-app/onboarding/licenseModel/creation/LicenseModelCreationActionHelper.js
index c2a0409..51f5b7f 100644
--- a/openecomp-ui/src/sdc-app/onboarding/licenseModel/creation/LicenseModelCreationActionHelper.js
+++ b/openecomp-ui/src/sdc-app/onboarding/licenseModel/creation/LicenseModelCreationActionHelper.js
@@ -1,27 +1,24 @@
-/*-
- * ============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
- * 
+ *
+ * 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=========================================================
+ * 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 RestAPIUtil from 'nfvo-utils/RestAPIUtil.js';
 import Configuration from 'sdc-app/config/Configuration.js';
-import LicenseModelActionHelper from 'sdc-app/onboarding/licenseModel/LicenseModelActionHelper.js';
 import {actionTypes} from './LicenseModelCreationConstants.js';
+import {modalContentMapper} from 'sdc-app/common/modal/ModalContentMapper.js';
+import {actionTypes as modalActionTypes} from 'nfvo-components/modal/GlobalModalConstants.js';
+import i18n from 'nfvo-utils/i18n/i18n.js';
 
 function baseUrl() {
 	const restPrefix = Configuration.get('restPrefix');
@@ -29,7 +26,7 @@
 }
 
 function createLicenseModel(licenseModel) {
-	return RestAPIUtil.create(baseUrl(), {
+	return RestAPIUtil.post(baseUrl(), {
 		vendorName: licenseModel.vendorName,
 		description: licenseModel.description,
 		iconRef: 'icon'
@@ -43,30 +40,28 @@
 		dispatch({
 			type: actionTypes.OPEN
 		});
+
+		dispatch({
+			type: modalActionTypes.GLOBAL_MODAL_SHOW,
+			data: {
+				modalComponentName: modalContentMapper.LICENSE_MODEL_CREATION,
+				title: i18n('New License Model')
+			}
+		});
 	},
 
 	close(dispatch){
 		dispatch({
 			type: actionTypes.CLOSE
 		});
-	},
 
-	dataChanged(dispatch, {deltaData}){
 		dispatch({
-			type: actionTypes.DATA_CHANGED,
-			deltaData
+			type: modalActionTypes.GLOBAL_MODAL_CLOSE
 		});
 	},
 
 	createLicenseModel(dispatch, {licenseModel}){
-		return createLicenseModel(licenseModel).then(response => {
-			LicenseModelActionHelper.addLicenseModel(dispatch, {
-				licenseModel: {
-					...licenseModel,
-					id: response.value
-				}
-			});
-			return response.value;
-		});
+		return createLicenseModel(licenseModel);
 	}
+
 };
diff --git a/openecomp-ui/src/sdc-app/onboarding/licenseModel/creation/LicenseModelCreationConstants.js b/openecomp-ui/src/sdc-app/onboarding/licenseModel/creation/LicenseModelCreationConstants.js
index 603d177..28f1175 100644
--- a/openecomp-ui/src/sdc-app/onboarding/licenseModel/creation/LicenseModelCreationConstants.js
+++ b/openecomp-ui/src/sdc-app/onboarding/licenseModel/creation/LicenseModelCreationConstants.js
@@ -1,27 +1,23 @@
-/*-
- * ============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
- * 
+ *
+ * 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=========================================================
+ * 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 keyMirror from 'nfvo-utils/KeyMirror.js';
 
 export const actionTypes = keyMirror({
 	OPEN: null,
-	CLOSE: null,
-	DATA_CHANGED: null
+	CLOSE: null
 });
+
+export const LICENSE_MODEL_CREATION_FORM_NAME = 'LMCREATIONFORM';
diff --git a/openecomp-ui/src/sdc-app/onboarding/licenseModel/creation/LicenseModelCreationReducer.js b/openecomp-ui/src/sdc-app/onboarding/licenseModel/creation/LicenseModelCreationReducer.js
index a54d1b3..879d356 100644
--- a/openecomp-ui/src/sdc-app/onboarding/licenseModel/creation/LicenseModelCreationReducer.js
+++ b/openecomp-ui/src/sdc-app/onboarding/licenseModel/creation/LicenseModelCreationReducer.js
@@ -1,42 +1,43 @@
-/*-
- * ============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
- * 
+ *
+ * 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=========================================================
+ * 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} from './LicenseModelCreationConstants.js';
+import {actionTypes, LICENSE_MODEL_CREATION_FORM_NAME} from './LicenseModelCreationConstants.js';
 
 export default (state = {}, action) => {
 	switch (action.type) {
 		case actionTypes.OPEN:
 			return {
 				...state,
-				data: {}
+				formReady: null,
+				formName: LICENSE_MODEL_CREATION_FORM_NAME,
+				data: {},
+				genericFieldInfo: {
+					'description' : {
+						isValid: true,
+						errorText: '',
+						validations: [{type: 'required', data: true}, {type: 'maxLength', data: 1000}]
+					},
+					'vendorName' : {
+						isValid: true,
+						errorText: '',
+						validations: [{type: 'required', data: true}, {type: 'maxLength', data: 25}]
+					}
+				}
 			};
 		case actionTypes.CLOSE:
 			return {};
-		case actionTypes.DATA_CHANGED:
-			return {
-				...state,
-				data: {
-					...state.data,
-					...action.deltaData
-				}
-			};
 		default:
 			return state;
 	}
diff --git a/openecomp-ui/src/sdc-app/onboarding/licenseModel/creation/LicenseModelCreationView.jsx b/openecomp-ui/src/sdc-app/onboarding/licenseModel/creation/LicenseModelCreationView.jsx
index 4dccc9e..8004046 100644
--- a/openecomp-ui/src/sdc-app/onboarding/licenseModel/creation/LicenseModelCreationView.jsx
+++ b/openecomp-ui/src/sdc-app/onboarding/licenseModel/creation/LicenseModelCreationView.jsx
@@ -1,7 +1,24 @@
+/*!
+ * 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 ValidationInput from 'nfvo-components/input/validation/ValidationInput.jsx';
-import ValidationForm from 'nfvo-components/input/validation/ValidationForm.jsx';
+import Validator from 'nfvo-utils/Validator.js';
+import Input from 'nfvo-components/input/validation/Input.jsx';
+import Form from 'nfvo-components/input/validation/Form.jsx';
+import {LICENSE_MODEL_CREATION_FORM_NAME} from './LicenseModelCreationConstants.js';
 
 const LicenseModelPropType = React.PropTypes.shape({
 	id: React.PropTypes.string,
@@ -13,39 +30,49 @@
 
 	static propTypes = {
 		data: LicenseModelPropType,
+		VLMNames: React.PropTypes.object,
 		onDataChanged: React.PropTypes.func.isRequired,
 		onSubmit: React.PropTypes.func.isRequired,
+		onValidateForm: React.PropTypes.func.isRequired,
 		onCancel: React.PropTypes.func.isRequired
 	};
 
 	render() {
-		let {data = {}, onDataChanged} = this.props;
+		let {data = {}, onDataChanged, genericFieldInfo} = this.props;
 		let {vendorName, description} = data;
 		return (
 			<div>
-				<ValidationForm
+				{genericFieldInfo && <Form
 					ref='validationForm'
 					hasButtons={true}
 					onSubmit={ () => this.submit() }
 					onReset={ () => this.props.onCancel() }
-					labledButtons={true}>
-					<ValidationInput
+					labledButtons={true}
+					isValid={this.props.isFormValid}
+					formReady={this.props.formReady}
+					onValidateForm={() => this.validate() }>
+					<Input
 						value={vendorName}
 						label={i18n('Vendor Name')}
-						ref='vendor-name'
-						onChange={vendorName => onDataChanged({vendorName})}
-						validations={{maxLength: 25, required: true}}
+						data-test-id='vendor-name'
+						onChange={vendorName => onDataChanged({vendorName}, LICENSE_MODEL_CREATION_FORM_NAME, {vendorName: name => this.validateName(name)})}
+						isValid={genericFieldInfo.vendorName.isValid}
+						errorText={genericFieldInfo.vendorName.errorText}
 						type='text'
+						isRequired={true}
 						className='field-section'/>
-					<ValidationInput
+					<Input
+						isRequired={true}
 						value={description}
 						label={i18n('Description')}
-						ref='description'
-						onChange={description => onDataChanged({description})}
-						validations={{maxLength: 1000, required: true}}
+						data-test-id='vendor-description'
+						overlayPos='bottom'
+						onChange={description => onDataChanged({description}, LICENSE_MODEL_CREATION_FORM_NAME)}
+						isValid={genericFieldInfo.description.isValid}
+						errorText={genericFieldInfo.description.errorText}
 						type='textarea'
 						className='field-section'/>
-				</ValidationForm>
+				</Form>}
 			</div>
 		);
 	}
@@ -55,6 +82,18 @@
 		const {data:licenseModel} = this.props;
 		this.props.onSubmit(licenseModel);
 	}
+
+	validateName(value) {
+		const {data: {id}, VLMNames} = this.props;
+		const isExists = Validator.isItemNameAlreadyExistsInList({itemId: id, itemName: value, list: VLMNames});
+
+		return !isExists ?  {isValid: true, errorText: ''} :
+			{isValid: false, errorText: i18n('License model by the name \'' + value + '\' already exists. License model name must be unique')};
+	}
+
+	validate() {
+		this.props.onValidateForm(LICENSE_MODEL_CREATION_FORM_NAME);
+	}
 }
 
 export default LicenseModelCreationView;