return response
}
+ static async updateInstanceProperties(instanceName, version, instancePropertiesTemplate) {
+ const params = {
+ name: instanceName,
+ version: version
+ }
+
+ const response = await fetch(window.location.pathname +
+ 'restservices/clds/v2/acm/putToscaInstanceProperties?' + (new URLSearchParams(params)), {
+ method: 'PUT',
+ headers: {
+ "Content-Type": "application/json"
+ },
+ credentials: 'same-origin',
+ body: JSON.stringify(instancePropertiesTemplate),
+ });
+
+ return response
+ }
+
static async deleteInstantiation(name, version) {
const params = {
name: name,
return response
}
- static async getToscaTemplate(name, version) {
- const params = {
- name: name,
- version: version
- }
+ static async getToscaTemplate(name, version, instanceName) {
+ const params = instanceName != null ?
+ {
+ name: name,
+ version: version,
+ instanceName: instanceName
+ } :
+ {
+ name: name,
+ version: version
+ }
const response = await fetch(window.location.pathname +
'restservices/clds/v2/acm/getToscaTemplate' + '?' + (new URLSearchParams(params)));
return data;
}
- static async getCommonOrInstanceProperties(name, version, isCommon) {
- const params = {
- name: name,
- version: version,
- common: isCommon
- }
+ static async getCommonOrInstanceProperties(name, version, instanceName, isCommon) {
+ const params = instanceName != null ?
+ {
+ name: name,
+ version: version,
+ instanceName: instanceName,
+ common: isCommon
+ } :
+ {
+ name: name,
+ version: version,
+ common: isCommon
+ }
const response = await fetch(window.location.pathname +
'restservices/clds/v2/acm/getCommonOrInstanceProperties' + '?' + (new URLSearchParams(params)));
const CommissioningModal = (props) => {
const [fullToscaTemplate, setFullToscaTemplate] = useState({});
- const [toscaInitialValues, setToscaInitialValues] = useState({});
const [commonProperties, setCommonProperties] = useState({})
- const [toscaJsonSchema, setToscaJsonSchema] = useState({});
const [jsonEditor, setJsonEditor] = useState(null);
const [show, setShow] = useState(true);
const [alertMessages, setAlertMessages] = useState();
const version = '1.0.0';
useEffect(async () => {
- const toscaTemplateResponse = await ACMService.getToscaTemplate(name, version)
+ const toscaTemplateResponse = await ACMService.getToscaTemplate(name, version, null)
.catch(error => error.message);
- const toscaCommonProperties = await ACMService.getCommonOrInstanceProperties(name, version, true)
+ const toscaCommonProperties = await ACMService.getCommonOrInstanceProperties(name, version, null, true)
.catch(error => error.message);
if (!toscaCommonProperties.ok) {
const errorResponse = await toscaCommonProperties.json()
- console.log(errorResponse)
setCommonProperties(errorResponse)
setCommonPropertiesResponseOk(false);
}
if (toscaTemplateResponse.ok && toscaCommonProperties.ok) {
const renderedEditorObjects = CommissioningUtils.renderJsonEditor(toscaTemplateResponse, toscaCommonProperties)
setFullToscaTemplate((await renderedEditorObjects).fullTemplate)
- setToscaJsonSchema((await renderedEditorObjects).propertySchema)
setJsonEditor((await renderedEditorObjects).editorTemp)
- setToscaInitialValues((await renderedEditorObjects).toscaInitialValues)
}
return null;
}
-Fragment.propTypes = { children: PropTypes.node };
+const specialCharacter = /[ `!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?~]/;
+
+Fragment.propTypes = {children: PropTypes.node};
const InstancePropertiesModal = (props) => {
const [show, setShow] = useState(true);
const [toscaFullTemplate, setToscaFullTemplate] = useState({});
const [jsonEditor, setJsonEditor] = useState(null);
const [alertMessage, setAlertMessage] = useState(null);
+ const [clearButton, setClearButton] = useState(null);
const [instancePropertiesGlobal, setInstancePropertiesGlobal] = useState({});
const [serviceTemplateResponseOk, setServiceTemplateResponseOk] = useState(true);
const [instancePropertiesResponseOk, setInstancePropertiesResponseOk] = useState(true);
const [instanceName, setInstanceName] = useState('');
+ const [instanceVersion, setInstanceVersion] = useState('');
+ const [oldInstanceName, setOldInstanceName] = useState('');
+ const [tempInstanceName, setTempInstanceName] = useState('');
+ const [validated, setValidated] = useState(false);
+ const [editMode, setEditMode] = useState(false);
useEffect(async () => {
- const toscaTemplateResponse = await ACMService.getToscaTemplate(templateName, templateVersion)
+ let isEditMode = false;
+
+ if (props.location.instantiationName !== undefined) {
+ isEditMode = true;
+ setEditMode(true);
+ setInstanceName(props.location.instantiationName);
+ setInstanceVersion(props.location.instantiationVersion);
+ }
+
+ const instantiationName = isEditMode ? props.location.instantiationName : null;
+ console.log(instantiationName);
+
+ const toscaTemplateResponse = await ACMService.getToscaTemplate(templateName, templateVersion, instantiationName)
.catch(error => error.message);
- const toscaInstanceProperties = await ACMService.getCommonOrInstanceProperties(templateName, templateVersion, false)
+ const toscaInstanceProperties = await ACMService.getCommonOrInstanceProperties(templateName, templateVersion, instantiationName, false)
.catch(error => error.message);
+ if (toscaInstanceProperties == null || toscaTemplateResponse == null) {
+ await warningAlert('Tosca service template is empty')
+ return;
+ }
+
if (!toscaInstanceProperties.ok) {
const errorResponse = await toscaInstanceProperties.json();
console.log(errorResponse);
}, []);
+ useEffect(async () => {
+
+ await validateInstanceName();
+
+ }, [instanceName])
+
+ const validateInstanceName = async () => {
+ console.log('validateInstanceName called');
+
+ if (specialCharacter.test(instanceName)) {
+ await warningAlert('Instance name cannot contain special characters');
+ } else if (alertMessage) {
+ clearWarning();
+ }
+
+ if (instanceName.length > 2 && !specialCharacter.test(instanceName)) {
+ console.log('validated');
+ setOldInstanceName(tempInstanceName);
+ setValidated(true);
+ } else {
+ setValidated(false);
+ }
+ }
+
const handleClose = () => {
console.log('handleClose called');
setShow(false);
const handleInstanceName = (event) => {
console.log('handleInstanceName called');
+ setTempInstanceName(instanceName);
setInstanceName(event.target.value);
+
+ validateInstanceName().then(() => {
+ });
}
const handleSave = async () => {
setToscaFullTemplate(InstantiationUtils.updateTemplate(instanceName, jsonEditor.getValue(), toscaFullTemplate));
}
- const response = await ACMService.createInstanceProperties(toscaFullTemplate)
- .catch(error => error.message);
+ let response = null;
+
+ if (editMode) {
+ response = await ACMService.updateInstanceProperties(oldInstanceName, instanceVersion, toscaFullTemplate)
+ .catch(error => error.message);
+ } else {
+ response = await ACMService.createInstanceProperties(toscaFullTemplate)
+ .catch(error => error.message);
+ }
if (response.ok) {
successAlert();
await errorAlert(response);
}
} else {
- await warningAlert();
+ await warningAlert('Instance name cannot be empty');
}
}
- const warningAlert = async () => {
+ const warningAlert = async (message) => {
console.log("warningAlert called");
+
setAlertMessage(<Alert variant="warning">
<Alert.Heading>Instantiation Properties Warning</Alert.Heading>
- <p>Instance name cannot be empty</p>
+ <p>{message}</p>
<hr/>
</Alert>);
}
</Alert>);
}
+ const clearWarning = () => {
+ console.log("clearWarning called");
+
+ if (specialCharacter.test(instanceName)) {
+ return;
+ }
+
+ setClearButton(null);
+ setAlertMessage(null);
+ }
+
return (
<ModalStyled size="xl"
show={ show }
backdrop="static"
keyboard={ false }>
<Modal.Header closeButton>
- <Modal.Title>Create Tosca Instance Properties</Modal.Title>
+ <Modal.Title>{ editMode ? 'Edit' : 'Create' } Tosca Instance Properties</Modal.Title>
</Modal.Header>
<div style={ { padding: '5px 5px 0 5px' } }>
<Modal.Body>
</DivWhiteSpaceStyled>
</div>
<Modal.Footer>
- <Button variant="primary" onClick={ handleSave }>Save</Button>
+ { clearButton }
+ <Button variant="primary" disabled={ !validated } onClick={ handleSave } style={validated ? {} : { cursor: "not-allowed" }}>Save</Button>
<Button variant="secondary" onClick={ handleClose }>Close</Button>
</Modal.Footer>
</ModalStyled>