2 ~ Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
4 ~ Licensed under the Apache License, Version 2.0 (the "License");
5 ~ you may not use this file except in compliance with the License.
6 ~ You may obtain a copy of the License at
8 ~ http://www.apache.org/licenses/LICENSE-2.0
10 ~ Unless required by applicable law or agreed to in writing, software
11 ~ distributed under the License is distributed on an "AS IS" BASIS,
12 ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 ~ See the License for the specific language governing permissions and
14 ~ limitations under the License.
16 <div include-padding="true" class="sdc-workspace-general-step">
17 <div class="w-sdc-main-container-body-content-action-buttons">
18 <div data-ng-if="unsavedFile && !isCreateMode() && !isViewMode()" data-tests-id="save-warning" class="unsaved-file-warning">
19 <span class="sprite-new sdc-warning"></span> Click save to update to the new VSP
21 <button class="tlv-btn blue" data-ng-if="isDesigner()" data-ng-show="isGeneralView()" data-ng-class="{'disabled' : !isValidForm || isDisableMode() || isViewMode() || isCreateMode()}"
22 data-ng-click="save()" data-tests-id="create/save" tooltips tooltip-content="Save">Save</button>
23 <span data-ng-if="isDesigner()" data-ng-class="{'disabled' :isDisableMode() || isViewMode() || isCreateMode()}" ng-click="revert()" class="sprite-new revert-btn" data-tests-id="revert"
24 data-ng-show="isGeneralView()" tooltips tooltip-content="Revert"></span>
27 <form novalidate class="w-sdc-form" name="editForm" validation-on-load form-to-validate="editForm">
29 <div class="w-sdc-form-section-container">
31 <div class="w-sdc-form-columns-wrapper">
33 <div class="w-sdc-form-column">
34 <div class="upper-general-fields">
35 <div class="selected-icon-container" data-ng-class="{'show-only-on-over':'defaulticon'!=component.icon && !isViewMode()}">
36 <div class="selected-icon-inner-container ">
37 <div class="sprite-new update-component-icon" data-ng-click="updateIcon()" data-ng-if="!isViewMode() && possibleToUpdateIcon()"></div>
38 <div class="i-sdc-form-item-suggested-icon large selected-icon {{component.iconSprite}} {{component.icon}}"
40 'disable': isViewMode() || !possibleToUpdateIcon(),
41 'archive-component active-component-static': component.archived
43 ng-model="component.icon"
44 tooltips tooltip-content='{{component.icon | translate}}'
49 <div class="name-and-category-fields">
50 <!--------------------- NAME -------------------->
51 <div class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.componentName)}">
52 <label class="i-sdc-form-label required" translate="GENERAL_LABEL_NAME"></label>
53 <input class="i-sdc-form-input"
54 data-ng-class="{'view-mode': isViewMode()}"
56 data-ng-init="isCreateMode() && validateName(true)"
57 data-ng-maxlength="50"
58 data-ng-model="component.name"
61 data-ng-model-options="{ debounce: 500 }"
62 data-ng-pattern="validation.componentNameValidationPattern"
63 data-ng-disabled="component.isAlreadyCertified()"
66 ng-readonly="isViewMode()"
69 <div class="input-error" data-ng-show="validateField(editForm.componentName)">
70 <span ng-show="editForm.componentName.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_RESOURCE_NAME_REQUIRED"></span>
71 <span ng-show="editForm.componentName.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '50' }"></span>
72 <span ng-show="editForm.componentName.$error.minlength" translate="VALIDATION_ERROR_MIN_LENGTH" translate-values="{'min': '4' }"></span>
73 <span ng-show="editForm.componentName.$error.nameExist" translate="NEW_SERVICE_RESOURCE_ERROR_NAME_EXISTS"></span>
74 <span ng-show="editForm.componentName.$error.pattern" translate="VALIDATION_ERROR_INVALID_NAME"></span>
77 <!--------------------- NAME -------------------->
79 <!--------------------- Model -------------------->
80 <div class="i-sdc-form-item">
81 <label class="i-sdc-form-label required">Model</label>
82 <select class="i-sdc-form-select"
83 data-ng-class="{'view-mode': isViewMode()}"
84 data-ng-disabled="!isCreateMode()"
85 data-ng-change="onModelChange()"
86 data-tests-id="selectModelName"
87 data-ng-required="isModelRequired"
88 data-ng-model="component.model"
89 data-ng-options="model for model in models track by model"
91 <option ng-if="showDefaultModelOption" value="">{{defaultModelOption}}</option>
94 <!--------------------- Model -------------------->
96 <!--------------------- CATEGORIES -------------------->
97 <div class="i-sdc-form-item"
98 data-ng-class="{'error': validateField(editForm.category)}">
99 <loader data-display="!categories && !initCategoreis()" relative="true"></loader>
100 <label class="i-sdc-form-label required" translate="GENERAL_LABEL_CATEGORY"></label>
101 <select class="i-sdc-form-select"
104 data-ng-class="{'view-mode': isViewMode()}"
105 data-ng-change="onCategoryChange()"
106 data-ng-disabled="component.isAlreadyCertified() || (component.isCsarComponent() && component.selectedCategory && component.selectedCategory!=='') || isHiddenCategorySelected"
107 data-ng-model="componentCategories.selectedCategory"
108 data-tests-id="selectGeneralCategory"
110 <option value="">Select category</option>
111 <optgroup ng-if="component.isResource()" data-ng-repeat="mainCategory in categories | orderBy:['name']" label="{{mainCategory.name}}" data-tests-id="{{mainCategory.name}}">
112 <option data-ng-repeat="subCategory in mainCategory.subcategories track by $index"
113 data-ng-selected="componentCategories.selectedCategory === calculateUnique(mainCategory.name,subCategory.name)"
114 data-tests-id="{{subCategory.name}}"
115 value="{{calculateUnique(mainCategory.name, subCategory.name)}}">{{subCategory.name}}
119 <option ng-if="component.isService()" data-ng-repeat="mainCategory in categories | orderBy:['name']"
120 data-ng-selected="component.selectedCategory===mainCategory.name"
121 value="{{mainCategory.name}}"
122 data-tests-id="{{mainCategory.name}}">{{getCategoryDisplayNameOrName(mainCategory)}}</option>
125 <div class="input-error" data-ng-show="validateField(editForm.category)">
126 <span ng-show="editForm.category.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_CATEGORY_REQUIRED"></span>
127 <span ng-show="editForm.category.$error.validForBaseType" translate="NEW_SERVICE_RESOURCE_ERROR_CATEGORY_NOT_VALID"></span>
130 <!--------------------- CATEGORIES -------------------->
134 <!--------------------- Category Specific Metadata -------------------->
135 <div ng-if="component.selectedCategory">
136 <ng-container ng-repeat="(key, value) in component.categorySpecificMetadata"-->
137 <div ng-if="isMetadataKeyForComponentCategory(key) && !isCategoryServiceMetadataKey(key) && getMetadataKeyValidValues(key) && isMetadataKeyMandatory(key)"
138 class="i-sdc-form-item"
139 data-ng-class="{'error': validateField(editForm['{{key}}'])}">
140 <label class="i-sdc-form-label required" translate="{{getMetadataDisplayName(key)}}"></label>
141 <select class="i-sdc-form-select"
143 data-ng-class="{'view-mode': isViewMode()}"
144 data-ng-model="component.categorySpecificMetadata[key]"
145 data-tests-id="{{key}}"
147 <option ng-repeat="value in getMetadataKeyValidValues(key)">{{value}}</option>
149 <div class="input-error" data-ng-show="validateField(editForm['{{key}}'])">
150 <span ng-show="editForm['{{key}}'].$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_REQUIRED"></span>
153 <div ng-if="isMetadataKeyForComponentCategory(key) && !isCategoryServiceMetadataKey(key) && getMetadataKeyValidValues(key) && !isMetadataKeyMandatory(key)"
154 class="i-sdc-form-item">
155 <label class="i-sdc-form-label" translate="{{getMetadataDisplayName(key)}}"></label>
156 <select class="i-sdc-form-select"
158 data-ng-class="{'view-mode': isViewMode()}"
159 data-ng-model="component.categorySpecificMetadata[key]"
160 data-tests-id="{{key}}">
162 <option ng-repeat="value in getMetadataKeyValidValues(key)">{{value}}</option>
165 <div ng-if="isMetadataKeyForComponentCategory(key) && !isCategoryServiceMetadataKey(key) && !getMetadataKeyValidValues(key) && isMetadataKeyMandatory(key)"
166 class="i-sdc-form-item"
167 data-ng-class="{'error': validateField(editForm['{{key}}'])}">
168 <label class="i-sdc-form-label required" translate="{{getMetadataDisplayName(key)}}"></label>
169 <input class="i-sdc-form-input" type="text"
171 data-ng-class="{'view-mode': isViewMode()}"
172 data-ng-model="component.categorySpecificMetadata[key]"
174 data-tests-id="{{key}}"
176 <div class="input-error" data-ng-show="validateField(editForm['{{key}}'])">
177 <span ng-show="editForm['{{key}}'].$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_REQUIRED"></span>
180 <div ng-if="isMetadataKeyForComponentCategory(key) && !isCategoryServiceMetadataKey(key) && !getMetadataKeyValidValues(key) && !isMetadataKeyMandatory(key)"
181 class="i-sdc-form-item">
182 <label class="i-sdc-form-label" translate="{{getMetadataDisplayName(key)}}"></label>
183 <input class="i-sdc-form-input" type="text"
184 data-ng-class="{'view-mode': isViewMode()}"
185 data-ng-model="component.categorySpecificMetadata[key]"
187 data-tests-id="{{key}}"
192 <!--------------------- Category Specific Metadata -------------------->
194 <!--------------------- RESOURCE TAGS -------------------->
195 <div class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.tags)}">
196 <label class="i-sdc-form-label" translate="GENERAL_LABEL_TAGS"></label>
198 <sdc-tags form-element="editForm" element-name="tags" max-tags="20" class="i-sdc-form-item-tags"
199 sdc-disabled="isViewMode()"
200 tags="component.tags"
201 pattern="validation.tagValidationPattern"
202 special-tag="component.name"></sdc-tags>
204 <div class="input-error" data-ng-show="validateField(editForm.tags)">
205 <span ng-show="editForm.tags.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
206 <span ng-show="editForm.tags.$error.nameExist" translate="NEW_SERVICE_RESOURCE_ERROR_TAG_NAME_EXIST"></span>
209 <!--------------------- RESOURCE TAGS -------------------->
211 <!--------------------- DESCRIPTION -------------------->
212 <div class="i-sdc-form-item description-field"
213 data-ng-class="{'error': validateField(editForm.description)}">
214 <label class="i-sdc-form-label required" translate="GENERAL_LABEL_DESCRIPTION"></label>
215 <textarea class="description"
217 data-ng-class="{'view-mode': isViewMode()}"
218 data-ng-maxlength="1024"
220 data-ng-model="component.description"
221 data-ng-model-options="{ debounce: 500 }"
222 data-ng-pattern="validation.commentValidationPattern"
223 data-tests-id="description"></textarea>
225 <div class="input-error" data-ng-show="validateField(editForm.description)">
226 <span ng-show="editForm.description.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_RESOURCE_DESCRIPTION_REQUIRED"></span>
227 <span ng-show="editForm.description.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '1024' }"></span>
228 <span ng-show="editForm.description.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
231 <!--------------------- DESCRIPTION -------------------->
233 </div><!-- Close w-sdc-form-column -->
235 <div class="w-sdc-form-column">
236 <!--------------------- IMPORT TOSCA FILE USING BROWSE (ALSO VFC) -------------------->
237 <div class="i-sdc-form-item" ng-if="isShowFileBrowse">
239 <label class="i-sdc-form-label" data-ng-class="{'required':isCreateMode() && component.resourceType !=='VF'}">{{browseFileLabel}}</label>
240 <file-upload id="fileUploadElement"
241 class="i-sdc-form-input"
242 element-name="fileElement"
243 data-ng-required="false"
244 element-disabled="{{(!isCreateMode()&&!(isEditMode()&&component.resourceType=='VF'))|| isViewMode() || component.vspArchived}}"
245 form-element="editForm"
246 file-model="component.importedFile"
247 on-file-changed-in-directive="onImportFileChange"
248 extensions="{{importedFileExtension}}"
249 default-text="'Browse to select file'"
253 <!--------------------- IMPORT TOSCA FILE USING ONBOARDING -------------------->
254 <div class="i-sdc-form-item" ng-if="isShowOnboardingSelectionBrowse && !isShowFileBrowse">
255 <label class="i-sdc-form-label required">VSP</label>
256 <div class="i-sdc-form-file-upload i-sdc-form-input">
257 <span class="i-sdc-form-file-name" data-ng-disabled="component.vspArchived" data-tests-id="filename">{{(fileModel && fileModel.filename) || importedToscaBrowseFileText }}</span>
258 <div class="i-sdc-form-file-upload-x-btn" ng-click="cancel()" data-ng-show="fileModel.filename && fileModel.filename!=='' && elementDisabled!=='true'"></div>
259 <input type="button" data-ng-class="{'disabled': !isEditMode() && component.vspArchived}" data-ng-disabled="component.vspArchived" name="fileElement" />
260 <div class="file-upload-browse-btn" data-ng-class="{'disabled': !isEditMode() && !component.vspArchived}" data-ng-click="openOnBoardingModal()" data-ng-disabled="!component.vspArchived" data-tests-id="browseButton">Browse</div>
264 <div class="input-error-file-upload" data-ng-disabled="!component.archived" data-ng-show="component.importedFile && (!editForm.fileElement.$valid || !component.importedFile.filename)">
265 <!-- editForm.fileElement.$error.required <== Can not use this, because the browse is done from outside for the first time -->
266 <span ng-show="!(isEditMode()&&component.resourceType=='VF')&&!component.importedFile.filename" translate="NEW_SERVICE_RESOURCE_ERROR_TOSCA_FILE_REQUIRED"></span><!-- Required -->
267 <span ng-show="editForm.fileElement.$error.maxsize" translate="VALIDATION_ERROR_MAX_FILE_SIZE"></span>
268 <span ng-show="editForm.fileElement.$error.filetype" translate="NEW_SERVICE_RESOURCE_ERROR_VALID_TOSCA_EXTENSIONS" translate-values="{'extensions': '{{importedFileExtension}}' }"></span>
269 <span ng-show="editForm.fileElement.$error.emptyFile" translate="VALIDATION_ERROR_EMPTY_FILE"></span>
271 <!--------------------- IMPORT TOSCA FILE -------------------->
273 <!--------------------- USER ID -------------------->
274 <div class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.contactId)}">
275 <label class="i-sdc-form-label required" translate="GENERAL_LABEL_CONTACT_ID"></label>
276 <input class="i-sdc-form-input" type="text"
277 data-ng-model="component.contactId"
278 data-ng-class="{'view-mode': isViewMode()}"
279 data-ng-required="true"
281 data-ng-pattern="validation.contactIdValidationPattern"
282 data-ng-model-options="{ debounce: 500 }"
283 data-tests-id="contactId"
284 data-ng-maxlength="50"
287 <div class="input-error" data-ng-show="validateField(editForm.contactId)">
288 <span ng-show="editForm.contactId.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '50' }"></span>
289 <span ng-show="editForm.contactId.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_CONTACT_REQUIRED"></span>
290 <span ng-show="editForm.contactId.$error.pattern" translate="NEW_SERVICE_RESOURCE_ERROR_CONTACT_NOT_VALID"></span>
293 <!--------------------- USER ID -------------------->
295 <!--------------------- VENDOR NAME -------------------->
296 <div ng-if="component.isResource()" class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.vendorName)}">
297 <label class="i-sdc-form-label required" translate="GENERAL_LABEL_VENDOR_NAME"></label>
298 <input class="i-sdc-form-input" type="text"
299 data-ng-class="{'view-mode': isViewMode()}"
300 data-ng-model="component.vendorName"
301 data-ng-model-options="{ debounce: 500 }"
302 data-ng-maxlength="60"
304 ng-click="oldValue = component.vendorName"
306 data-ng-change="onVendorNameChange(oldValue)"
307 data-ng-pattern="validation.VendorNameValidationPattern"
308 data-ng-disabled="component.isAlreadyCertified() || (component.isCsarComponent() && component.vendorName && component.vendorName!=='')"
309 data-tests-id="vendorName"
312 <div class="input-error" data-ng-show="validateField(editForm.vendorName)">
313 <span ng-show="editForm.vendorName.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_VENDOR_NAME_REQUIRED"></span>
314 <span ng-show="editForm.vendorName.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '60' }"></span>
315 <span ng-show="editForm.vendorName.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
319 <!--------------------- VENDOR NAME -------------------->
321 <!--------------------- VENDOR RELEASE -------------------->
322 <div ng-if="component.isResource()"
323 class="i-sdc-form-item"
324 data-ng-class="{'error': validateField(editForm.vendorRelease)}">
325 <label class="i-sdc-form-label required" translate="GENERAL_LABEL_VENDOR_RELEASE"></label>
326 <input class="i-sdc-form-input" type="text"
327 data-ng-class="{'view-mode': isViewMode()}"
328 data-ng-model="component.vendorRelease"
329 data-ng-model-options="{ debounce: 500 }"
330 data-ng-maxlength="25"
333 data-ng-pattern="validation.VendorReleaseValidationPattern"
334 data-ng-disabled="component.isCsarComponent() && component.vendorRelease && component.vendorRelease!==''"
335 data-tests-id="vendorRelease"
338 <div class="input-error" data-ng-show="validateField(editForm.vendorRelease)">
339 <span ng-show="editForm.vendorRelease.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_VENDOR_RELEASE_REQUIRED"></span>
340 <span ng-show="editForm.vendorRelease.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '25' }"></span>
341 <span ng-show="editForm.vendorRelease.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
344 <!--------------------- VENDOR RELEASE -------------------->
346 <!--------------------- Resource Model Number -------------------->
347 <div ng-if="component.isResource()"
348 class="i-sdc-form-item"
349 data-ng-class="{'error': validateField(editForm.resourceVendorModelNumber)}">
350 <label class="i-sdc-form-label" translate="GENERAL_LABEL_RESOURCE_MODEL_NUMBER"></label>
351 <input class="i-sdc-form-input" type="text"
352 data-ng-class="{'view-mode': isViewMode()}"
353 data-ng-model="component.resourceVendorModelNumber"
354 data-ng-model-options="{ debounce: 500 }"
355 data-ng-maxlength="65"
356 name="resourceVendorModelNumber"
357 data-ng-pattern="validation.VendorModelNumberValidationPattern"
358 data-tests-id="resourceVendorModelNumber"
361 <div class="input-error" data-ng-show="validateField(editForm.resourceVendorModelNumber)">
362 <span ng-show="editForm.resourceVendorModelNumber.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '65' }"></span>
363 <span ng-show="editForm.resourceVendorModelNumber.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
366 <!--------------------- Resource Model Number -------------------->
368 <!--------------------- ECOMPGENERATEDNAMING -------------------->
369 <div class="i-sdc-form-item"
370 data-ng-class="{'error': validateField(editForm.ecompGeneratedNaming)}"
371 data-ng-if="component.isService() && !isNotApplicableMetadataKeys('Generated Naming')">
372 <label class="i-sdc-form-label">Generated Naming</label>
373 <select class="i-sdc-form-select"
375 name="ecompGeneratedNaming"
376 data-ng-change="onEcompGeneratedNamingChange()"
377 data-ng-class="{'view-mode': isViewMode()}"
378 data-ng-model="component.ecompGeneratedNaming"
379 data-tests-id="ecompGeneratedNaming">
380 <option ng-value="true">true</option>
381 <option ng-value="false">false</option>
383 <div class="input-error" data-ng-show="validateField(editForm.ecompGeneratedNaming)">
387 <!--------------------- CATEGORIES -------------------->
389 <!--------------------- NAMING POLICY -------------------->
390 <div ng-if="component.isService() && !isNotApplicableMetadataKeys('Naming Policy')" class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.namingPolicy)}">
391 <div ng-if="component.selectedCategory && isMetadataKeyForComponentCategoryService('Naming Policy', 'namingPolicy')">
392 <div ng-if="isMetadataKeyMandatory('Naming Policy')">
393 <label class="i-sdc-form-label required">Naming Policy</label>
395 <div ng-if="!isMetadataKeyMandatory('Naming Policy')">
396 <label class="i-sdc-form-label">Naming Policy</label>
398 <select class="i-sdc-form-input" type="text"
399 ng-required="isMetadataKeyMandatory('Naming Policy')"
400 data-ng-class="{'view-mode': isViewMode()}"
401 data-ng-model="component.namingPolicy"
402 data-ng-model-options="{ debounce: 500 }"
404 data-tests-id="namingPolicy"
405 data-ng-maxlength="256"
406 data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
407 > <option ng-repeat="value in getMetadataKeyValidValues('Naming Policy')">{{value}}</option>
410 <div ng-if="!component.selectedCategory || !isMetadataKeyForComponentCategory('Naming Policy')">
411 <label class="i-sdc-form-label">Naming Policy</label>
412 <input class="i-sdc-form-input"
414 data-ng-class="{'view-mode': isViewMode() || !component.ecompGeneratedNaming}"
415 data-ng-maxlength="100"
416 data-ng-model="component.namingPolicy"
418 data-ng-model-options="{ debounce: 500 }"
419 data-ng-pattern="validation.commentValidationPattern"
420 data-tests-id="namingPolicy"
422 ng-readonly="isViewMode() || !component.ecompGeneratedNaming"
425 <div class="input-error" data-ng-show="validateField(editForm.namingPolicy)">
426 <span ng-show="editForm.namingPolicy.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '100' }"></span>
427 <span ng-show="editForm.namingPolicy.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
430 <!--------------------- NAMING POLICY -------------------->
432 <!--------------------- Service Type -------------------->
433 <div ng-if="component.isService() && !isNotApplicableMetadataKeys('Service Type')"
434 class="i-sdc-form-item"
435 data-ng-class="{'error': validateField(editForm.serviceFunctionType)}">
436 <div ng-if="component.selectedCategory && isMetadataKeyForComponentCategoryService('Service Type', 'serviceType')">
437 <div ng-if="isMetadataKeyMandatory('Service Type')">
438 <label class="i-sdc-form-label required" translate="GENERAL_TAB_LABEL_SERVICE_TYPE"></label>
440 <div ng-if="!isMetadataKeyMandatory('Service Type')">
441 <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_TYPE"></label>
443 <select class="i-sdc-form-input" type="text"
444 ng-required="isMetadataKeyMandatory('Service Type')"
445 data-ng-class="{'view-mode': isViewMode()}"
446 data-ng-model="component.serviceType"
447 data-ng-model-options="{ debounce: 500 }"
449 data-tests-id="serviceType"
450 data-ng-maxlength="256"
451 data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
452 > <option ng-repeat="value in getMetadataKeyValidValues('Service Type')">{{value}}</option>
455 <div ng-if="!component.selectedCategory || !isMetadataKeyForComponentCategory('Service Type')">
456 <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_TYPE"></label>
457 <input class="i-sdc-form-input" type="text"
458 data-ng-class="{'view-mode': isViewMode()}"
459 data-ng-model="component.serviceType"
460 data-ng-model-options="{ debounce: 500 }"
462 data-tests-id="serviceType"
463 data-ng-maxlength="256"
464 data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
467 <div class="input-error" data-ng-show="validateField(editForm.serviceType)">
468 <span ng-show="editForm.serviceType.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '256' }"></span>
469 <span ng-show="editForm.serviceType.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
472 <!--------------------- Service Type -------------------->
474 <!--------------------- Service Role -------------------->
475 <div ng-if="component.isService() && !isNotApplicableMetadataKeys('Service Role')"
476 class="i-sdc-form-item"
477 data-ng-class="{'error': validateField(editForm.serviceRole)}">
478 <div ng-if="component.selectedCategory && isMetadataKeyForComponentCategoryService('Service Role', 'serviceRole')">
479 <div ng-if="isMetadataKeyMandatory('Service Role')">
480 <label class="i-sdc-form-label required" translate="GENERAL_TAB_LABEL_SERVICE_ROLE"></label>
482 <div ng-if="!isMetadataKeyMandatory('Service Role')">
483 <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_ROLE"></label>
485 <select class="i-sdc-form-input" type="text"
486 ng-required="isMetadataKeyMandatory('Service Role')"
487 data-ng-class="{'view-mode': isViewMode()}"
488 data-ng-model="component.serviceRole"
489 data-ng-model-options="{ debounce: 500 }"
491 data-tests-id="serviceRole"
492 data-ng-maxlength="256"
493 > <option ng-repeat="value in getMetadataKeyValidValues('Service Role')">{{value}}</option>
496 <div ng-if="!component.selectedCategory || !isMetadataKeyForComponentCategory('Service Role')">
497 <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_ROLE"></label>
498 <input class="i-sdc-form-input" type="text"
499 data-ng-class="{'view-mode': isViewMode()}"
500 data-ng-model="component.serviceRole"
501 data-ng-model-options="{ debounce: 500 }"
503 data-tests-id="serviceRole"
504 data-ng-maxlength="256"
505 data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
508 <div class="input-error" data-ng-show="validateField(editForm.serviceRole)">
509 <span ng-show="editForm.serviceRole.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '256' }"></span>
510 <span ng-show="editForm.serviceRole.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
513 <!--------------------- Service Role -------------------->
515 <!--------------------- Service Function -------------------->
516 <div ng-if="component.isService() && !isNotApplicableMetadataKeys('Service Function')"
517 class="i-sdc-form-item"
518 data-ng-class="{'error': validateField(editForm.serviceFunction)}">
519 <div ng-if="component.selectedCategory && isMetadataKeyForComponentCategoryService('Service Function', 'serviceFunction')">
520 <div ng-if="isMetadataKeyMandatory('Service Function')">
521 <label class="i-sdc-form-label required" translate="GENERAL_TAB_LABEL_SERVICE_FUNCTION"></label>
523 <div ng-if="!isMetadataKeyMandatory('Service Function')">
524 <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_FUNCTION"></label>
526 <select class="i-sdc-form-input" type="text"
527 ng-required="isMetadataKeyMandatory('Service Function')"
528 data-ng-class="{'view-mode': isViewMode()}"
529 data-ng-model="component.serviceFunction"
530 data-ng-model-options="{ debounce: 500 }"
531 name="serviceFunction"
532 data-tests-id="serviceFunction"
533 data-ng-maxlength="256"
534 data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
535 > <option ng-repeat="value in getMetadataKeyValidValues('Service Function')">{{value}}</option>
538 <div ng-if="!component.selectedCategory || !isMetadataKeyForComponentCategory('Service Function')">
539 <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_FUNCTION"></label>
540 <input class="i-sdc-form-input" type="text"
541 data-ng-class="{'view-mode': isViewMode()}"
542 data-ng-model="component.serviceFunction"
543 name="serviceFunction"
544 data-tests-id="serviceFunction"
545 data-ng-maxlength="256"
546 data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
549 <div class="input-error" data-ng-show="validateField(editForm.serviceFunction)">
550 <span ng-show="editForm.serviceFunction.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '256' }"></span>
551 <span ng-show="editForm.serviceFunction.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
554 <!--------------------- Service Function -------------------->
556 <!-------------------- ENVIRONMENT CONTEXT ----------------->
557 <div ng-if="component.isService() && !isNotApplicableMetadataKeys('Environment Context')" class="i-sdc-form-item">
558 <loader data-display="!environmentContextObj && !initEnvironmentContext()" relative="true"></loader>
559 <label class="i-sdc-form-label">Environment Context</label>
560 <select class="i-sdc-form-select"
561 name="environmentContext"
562 data-ng-class="{'view-mode': isViewMode()}"
563 data-ng-model="component.environmentContext"
564 data-tests-id="environmentContext"
566 <option data-ng-repeat="environmentContextVal in (environmentContextObj.validValues) | orderBy"
567 value="{{environmentContextVal}}"
568 data-tests-id="{{environmentContextVal}}">{{environmentContextVal}}</option>
572 <!--------------------- ENVIRONMENT CONTEXT ------------------>
574 <!--------------------- Instantiation Type -------------------->
575 <div class="i-sdc-form-item" data-ng-if="component.isService() && instantiationTypes && !isNotApplicableMetadataKeys('Instantiation Type')">
576 <label class="i-sdc-form-label">Instantiation Type</label>
577 <select class="i-sdc-form-select"
578 name="instantiationType"
579 data-ng-class="{'view-mode': isViewMode()}"
580 data-ng-disabled="component.isCsarComponent()"
581 data-ng-model="component.instantiationType"
582 data-tests-id="selectInstantiationType">
583 <option ng-repeat="type in instantiationTypes">{{type}}</option>
587 <!--------------------- Instantiation Type -------------------->
589 <!--------------------- Base Type -------------------->
590 <div class="w-sdc-form-columns-wrapper">
591 <div class="w-sdc-form-column">
592 <div class="i-sdc-form-item" ng-if="component.isService() && baseTypes && baseTypes.length > 0 && !isNotApplicableMetadataKeys('Substitution Node Type')">
593 <label class="i-sdc-form-label">Substitution Node Type</label>
594 <select class="i-sdc-form-select"
596 data-ng-class="{'view-mode': isViewMode()}"
597 data-ng-disabled="component.isCsarComponent() || !(isEditMode() || isCreateMode())"
598 data-ng-model="component.derivedFromGenericType"
599 data-ng-change="onBaseTypeChange()"
600 data-tests-id="selectBaseType"
601 data-ng-options="type for type in baseTypes track by type">
602 <option value="" data-ng-if="!isBaseTypeRequired">None</option>
606 <div class="w-sdc-form-column">
607 <div class="i-sdc-form-item" data-ng-if="component.isService() && showBaseTypeVersions && !isNotApplicableMetadataKeys('Substitution Node Type Version')">
608 <label class="i-sdc-form-label">Substitution Node Type Version</label>
609 <select class="i-sdc-form-select"
610 name="baseTypeVersion"
611 data-ng-class="{'view-mode': isViewMode()}"
612 data-ng-disabled="component.isCsarComponent() || !(isEditMode() || isCreateMode())"
613 data-ng-model="component.derivedFromGenericVersion"
614 data-tests-id="selectBaseTypeVersion">
615 <option ng-repeat="version in baseTypeVersions">{{version}}</option>
620 <!--------------------- Base Type -------------------->
622 <div class="meta-data" data-ng-if="component.creationDate">
624 <strong>Created:</strong>
626 <div class="meta-data-item-value">{{component.creationDate | date:'MM/dd/yyyy'}}, {{component.creatorFullName}}</div>
628 <strong>Modifed:</strong>
630 <div class="meta-data-item-value">
631 {{component.lastUpdateDate | date:'MM/dd/yyyy'}}
634 <strong>UUID:</strong>
636 <div class="meta-data-item-value">
640 <strong>Invariant UUID:</strong>
642 <div class="meta-data-item-value">
643 {{component.invariantUUID}}
646 </div><!-- Close w-sdc-form-column -->
649 </div><!-- Close w-sdc-form-section-container -->