5035ef20154aebb0d8fce8f5c90805716656c50d
[sdc.git] / catalog-ui / src / app / view-models / workspace / tabs / general / general-view.html
1 <!--
2   ~ Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
3   ~
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
7   ~
8   ~      http://www.apache.org/licenses/LICENSE-2.0
9   ~
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.
15 -->
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
20         </div>
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>
25
26     </div>
27     <form novalidate class="w-sdc-form" name="editForm" validation-on-load form-to-validate="editForm">
28
29         <div class="w-sdc-form-section-container">
30
31             <div class="w-sdc-form-columns-wrapper">
32
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}}"
39                                      data-ng-class="{
40                                      'disable': isViewMode() || !possibleToUpdateIcon(),
41                                      'archive-component active-component-static': component.archived
42                                      }"
43                                      ng-model="component.icon"
44                                      tooltips tooltip-content='{{component.icon | translate}}'
45                                 >
46                                 </div>
47                             </div>
48                         </div>
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()}"
55                                        name="componentName"
56                                        data-ng-init="isCreateMode() && validateName(true)"
57                                        data-ng-maxlength="50"
58                                        data-ng-model="component.name"
59                                        type="text"
60                                        data-required
61                                        data-ng-model-options="{ debounce: 500 }"
62                                        data-ng-pattern="validation.componentNameValidationPattern"
63                                        data-ng-disabled="component.isAlreadyCertified()"
64                                        data-tests-id="name"
65                                        autofocus
66                                        ng-readonly="isViewMode()"
67                                 />
68
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>
75                                 </div>
76                             </div>
77                             <!--------------------- NAME -------------------->
78
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                                     name="modelName"
84                                     data-ng-class="{'view-mode': isViewMode()}"
85                                     data-ng-disabled="!isCreateMode()"
86                                     data-ng-model="component.model"
87                                     data-ng-change="onModelChange()"
88                                     data-tests-id="modelName"
89                                     ng-required="isModelRequired">
90                               <option ng-repeat="model in models" value="{{model.id}}">{{model.name}}</option>
91                             </select>
92                           </div>
93                           <!--------------------- Model -------------------->
94
95                             <!--------------------- CATEGORIES -------------------->
96                             <div class="i-sdc-form-item"
97                                  data-ng-class="{'error': validateField(editForm.category)}">
98                                 <loader data-display="!categories && !initCategoreis()" relative="true"></loader>
99                                 <label class="i-sdc-form-label required" translate="GENERAL_LABEL_CATEGORY"></label>
100                                 <select class="i-sdc-form-select"
101                                         data-required
102                                         name="category"
103                                         data-ng-class="{'view-mode': isViewMode()}"
104                                         data-ng-change="onCategoryChange()"
105                                         data-ng-disabled="component.isAlreadyCertified() || (component.isCsarComponent() && component.selectedCategory && component.selectedCategory!=='') || isHiddenCategorySelected"
106                                         data-ng-model="componentCategories.selectedCategory"
107                                         data-tests-id="selectGeneralCategory"
108                                 >
109                                     <option value="">Select category</option>
110                                     <optgroup ng-if="component.isResource()" data-ng-repeat="mainCategory in categories | orderBy:['name']" label="{{mainCategory.name}}" data-tests-id="{{mainCategory.name}}">
111                                         <option data-ng-repeat="subCategory in mainCategory.subcategories track by $index"
112                                                 data-ng-selected="componentCategories.selectedCategory === calculateUnique(mainCategory.name,subCategory.name)"
113                                                 data-tests-id="{{subCategory.name}}"
114                                                 value="{{calculateUnique(mainCategory.name, subCategory.name)}}">{{subCategory.name}}
115
116                                         </option>
117                                     </optgroup>
118                                     <option ng-if="component.isService()" data-ng-repeat="mainCategory in categories | orderBy:['name']"
119                                             data-ng-selected="component.selectedCategory===mainCategory.name"
120                                             value="{{mainCategory.name}}"
121                                             data-tests-id="{{mainCategory.name}}">{{mainCategory.name}}</option>
122                                 </select>
123
124                                 <div class="input-error" data-ng-show="validateField(editForm.category)">
125                                     <span ng-show="editForm.category.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_CATEGORY_REQUIRED"></span>
126                                     <span ng-show="editForm.category.$error.validForBaseType" translate="NEW_SERVICE_RESOURCE_ERROR_CATEGORY_NOT_VALID"></span>
127                                 </div>
128                             </div>
129                             <!--------------------- CATEGORIES -------------------->
130                         </div>
131                     </div>
132
133                     <!--------------------- Category Specific Metadata -------------------->
134
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="{{key}}"></label>
141                                 <select class="i-sdc-form-select"
142                                     name="{{key}}"
143                                     data-ng-class="{'view-mode': isViewMode()}"
144                                     data-ng-model="component.categorySpecificMetadata[key]"
145                                     data-tests-id="{{key}}"
146                                     data-required>
147                                    <option ng-repeat="value in getMetadataKeyValidValues(key)">{{value}}</option>
148                                 </select>
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>
151                                 </div>
152                             </div>
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="{{key}}"></label>
156                                 <select class="i-sdc-form-select"
157                                     name="{{key}}"
158                                     data-ng-class="{'view-mode': isViewMode()}"
159                                     data-ng-model="component.categorySpecificMetadata[key]"
160                                     data-tests-id="{{key}}">
161                                    <option ng-repeat="value in getMetadataKeyValidValues(key)">{{value}}</option>
162                                 </select>
163                             </div>
164                             <div ng-if="isMetadataKeyForComponentCategory(key) && !isCategoryServiceMetadataKey(key) && !getMetadataKeyValidValues(key) && isMetadataKeyMandatory(key)"
165                                  class="i-sdc-form-item"
166                                  data-ng-class="{'error': validateField(editForm['{{key}}'])}">
167                                 <label class="i-sdc-form-label required" translate="{{key}}"></label>
168                                 <input class="i-sdc-form-input" type="text"
169                                        data-required
170                                        data-ng-class="{'view-mode': isViewMode()}"
171                                        data-ng-model="component.categorySpecificMetadata[key]"
172                                        name="{{key}}"
173                                        data-tests-id="{{key}}"
174                                 />
175                                 <div class="input-error" data-ng-show="validateField(editForm['{{key}}'])">
176                                     <span ng-show="editForm['{{key}}'].$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_REQUIRED"></span>
177                                 </div>
178                             </div>
179                             <div ng-if="isMetadataKeyForComponentCategory(key) && !isCategoryServiceMetadataKey(key) && !getMetadataKeyValidValues(key) && !isMetadataKeyMandatory(key)"
180                                  class="i-sdc-form-item">
181                                 <label class="i-sdc-form-label" translate="{{key}}"></label>
182                                 <input class="i-sdc-form-input" type="text"
183                                        data-ng-class="{'view-mode': isViewMode()}"
184                                        data-ng-model="component.categorySpecificMetadata[key]"
185                                        name="{{key}}"
186                                        data-tests-id="{{key}}"
187                                 />
188                             </div>
189                         </ng-container>
190                     </div>
191                 <!--------------------- RESOURCE TAGS -------------------->
192                 <div class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.tags)}">
193                     <label class="i-sdc-form-label" translate="GENERAL_LABEL_TAGS"></label>
194
195                     <sdc-tags form-element="editForm" element-name="tags" max-tags="20" class="i-sdc-form-item-tags"
196                               sdc-disabled="isViewMode()"
197                               tags="component.tags"
198                               pattern="validation.tagValidationPattern"
199                               special-tag="component.name"></sdc-tags>
200
201                     <div class="input-error" data-ng-show="validateField(editForm.tags)">
202                         <span ng-show="editForm.tags.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
203                         <span ng-show="editForm.tags.$error.nameExist" translate="NEW_SERVICE_RESOURCE_ERROR_TAG_NAME_EXIST"></span>
204                     </div>
205                 </div>
206                 <!--------------------- RESOURCE TAGS -------------------->
207
208                 <!--------------------- DESCRIPTION -------------------->
209                 <div class="i-sdc-form-item description-field"
210                      data-ng-class="{'error': validateField(editForm.description)}">
211                     <label class="i-sdc-form-label required" translate="GENERAL_LABEL_DESCRIPTION"></label>
212                 <textarea class="description"
213                           name="description"
214                           data-ng-class="{'view-mode': isViewMode()}"
215                           data-ng-maxlength="1024"
216                           data-required
217                           data-ng-model="component.description"
218                           data-ng-model-options="{ debounce: 500 }"
219                           data-ng-pattern="validation.commentValidationPattern"
220                           data-tests-id="description"></textarea>
221                     <!-- placeholder="Description here..." -->
222
223                     <div class="input-error" data-ng-show="validateField(editForm.description)">
224                         <span ng-show="editForm.description.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_RESOURCE_DESCRIPTION_REQUIRED"></span>
225                         <span ng-show="editForm.description.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '1024' }"></span>
226                         <span ng-show="editForm.description.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
227                     </div>
228                 </div>
229                 <!--------------------- DESCRIPTION -------------------->
230
231             </div><!-- Close w-sdc-form-column -->
232
233                 <div class="w-sdc-form-column">
234                     <!--------------------- IMPORT TOSCA FILE USING BROWSE (ALSO VFC) -------------------->
235                     <div class="i-sdc-form-item" ng-if="isShowFileBrowse">
236
237                         <!-- //                                     element-disabled="{{!isCreateMode()&&!(isEditMode()&&component.resourceType=='VF')&&component.vspArchived}} || {{isViewMode()}}" -->
238
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'"
250                                      ></file-upload>
251                     </div>
252
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>
261                             </div>
262                     </div>
263
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>
270                     </div>
271                     <!--------------------- IMPORT TOSCA FILE -------------------->
272
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"
280                                name="contactId"
281                                data-ng-pattern="validation.contactIdValidationPattern"
282                                data-ng-model-options="{ debounce: 500 }"
283                                data-tests-id="contactId"
284                                data-ng-maxlength="50"
285                         />
286
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>
291                         </div>
292                     </div>
293                     <!--------------------- USER ID -------------------->
294
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"
303                            data-required
304                            ng-click="oldValue = component.vendorName"
305                            name="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"
310                     />
311
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>
316                     </div>
317
318                 </div>
319
320                 <!--------------------- VENDOR NAME -------------------->
321
322                 <!--------------------- VENDOR RELEASE -------------------->
323                 <div ng-if="component.isResource()"
324                      class="i-sdc-form-item"
325                      data-ng-class="{'error': validateField(editForm.vendorRelease)}">
326                     <label class="i-sdc-form-label required" translate="GENERAL_LABEL_VENDOR_RELEASE"></label>
327                     <input class="i-sdc-form-input" type="text"
328                            data-ng-class="{'view-mode': isViewMode()}"
329                            data-ng-model="component.vendorRelease"
330                            data-ng-model-options="{ debounce: 500 }"
331                            data-ng-maxlength="25"
332                            data-required
333                            name="vendorRelease"
334                            data-ng-pattern="validation.VendorReleaseValidationPattern"
335                            data-ng-disabled="component.isCsarComponent() && component.vendorRelease && component.vendorRelease!==''"
336                            data-tests-id="vendorRelease"
337                     />
338
339                     <div class="input-error" data-ng-show="validateField(editForm.vendorRelease)">
340                         <span ng-show="editForm.vendorRelease.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_VENDOR_RELEASE_REQUIRED"></span>
341                         <span ng-show="editForm.vendorRelease.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '25' }"></span>
342                         <span ng-show="editForm.vendorRelease.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
343                     </div>
344                 </div>
345                 <!--------------------- VENDOR RELEASE -------------------->
346
347                 <!--------------------- Resource Model Number -------------------->
348                 <div ng-if="component.isResource()"
349                      class="i-sdc-form-item"
350                      data-ng-class="{'error': validateField(editForm.resourceVendorModelNumber)}">
351                     <label class="i-sdc-form-label" translate="GENERAL_LABEL_RESOURCE_MODEL_NUMBER"></label>
352                     <input class="i-sdc-form-input" type="text"
353                            data-ng-class="{'view-mode': isViewMode()}"
354                            data-ng-model="component.resourceVendorModelNumber"
355                            data-ng-model-options="{ debounce: 500 }"
356                            data-ng-maxlength="65"
357                            name="resourceVendorModelNumber"
358                            data-ng-pattern="validation.VendorModelNumberValidationPattern"
359                            data-tests-id="resourceVendorModelNumber"
360                     />
361
362                     <div class="input-error" data-ng-show="validateField(editForm.resourceVendorModelNumber)">
363                         <span ng-show="editForm.resourceVendorModelNumber.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '65' }"></span>
364                         <span ng-show="editForm.resourceVendorModelNumber.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
365                     </div>
366                 </div>
367                 <!--------------------- Resource Model Number -------------------->
368
369                 <!--------------------- ECOMPGENERATEDNAMING -------------------->
370
371                     <div class="i-sdc-form-item"
372                          data-ng-class="{'error': validateField(editForm.ecompGeneratedNaming)}"
373                          data-ng-if="component.isService()">
374                         <label class="i-sdc-form-label">Generated Naming</label>
375                         <select class="i-sdc-form-select"
376                                 data-required
377                                 name="ecompGeneratedNaming"
378                                 data-ng-change="onEcompGeneratedNamingChange()"
379                                 data-ng-class="{'view-mode': isViewMode()}"
380                                 data-ng-model="component.ecompGeneratedNaming"
381                                 data-tests-id="ecompGeneratedNaming">
382                             <option ng-value="true">true</option>
383                             <option ng-value="false">false</option>
384                         </select>
385                         <div class="input-error" data-ng-show="validateField(editForm.ecompGeneratedNaming)">
386
387                         </div>
388                     </div>
389                     <!--------------------- CATEGORIES -------------------->
390
391                     <!--------------------- NAMING POLICY  -------------------->
392                     <div ng-if="component.isService()" class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.namingPolicy)}">
393                         <div ng-if="component.selectedCategory && isMetadataKeyForComponentCategoryService('Naming Policy', 'namingPolicy')">
394                                 <div ng-if="isMetadataKeyMandatory('Naming Policy')">
395                                 <label class="i-sdc-form-label required">Naming Policy</label>
396                                 </div>
397                                 <div ng-if="!isMetadataKeyMandatory('Naming Policy')">
398                                 <label class="i-sdc-form-label">Naming Policy</label>
399                                 </div>
400                                 <select class="i-sdc-form-input" type="text"
401                                        ng-required="isMetadataKeyMandatory('Naming Policy')"
402                                        data-ng-class="{'view-mode': isViewMode()}"
403                                        data-ng-model="component.namingPolicy"
404                                        data-ng-model-options="{ debounce: 500 }"
405                                        name="namingPolicy"
406                                        data-tests-id="namingPolicy"
407                                        data-ng-maxlength="256"
408                                    data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
409                                 > <option ng-repeat="value in getMetadataKeyValidValues('Naming Policy')">{{value}}</option>
410                             </select>
411                         </div>
412                         <div ng-if="!component.selectedCategory || !isMetadataKeyForComponentCategory('Naming Policy')">
413                                 <label class="i-sdc-form-label">Naming Policy</label>
414                                 <input class="i-sdc-form-input"
415                                        name="namingPolicy"
416                                        data-ng-class="{'view-mode': isViewMode() || !component.ecompGeneratedNaming}"
417                                        data-ng-maxlength="100"
418                                        data-ng-model="component.namingPolicy"
419                                        type="text"
420                                        data-ng-model-options="{ debounce: 500 }"
421                                        data-ng-pattern="validation.commentValidationPattern"
422                                        data-tests-id="namingPolicy"
423                                        autofocus
424                                        ng-readonly="isViewMode() || !component.ecompGeneratedNaming"
425                                 />
426                         </div>
427                         <div class="input-error" data-ng-show="validateField(editForm.namingPolicy)">
428                             <span ng-show="editForm.namingPolicy.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '100' }"></span>
429                             <span ng-show="editForm.namingPolicy.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
430                         </div>
431                     </div>
432                     <!--------------------- NAMING POLICY  -------------------->
433
434                     <!--------------------- Service Type -------------------->
435                     <div ng-if="component.isService()"
436                          class="i-sdc-form-item"
437                          data-ng-class="{'error': validateField(editForm.serviceFunctionType)}">
438                         <div ng-if="component.selectedCategory && isMetadataKeyForComponentCategoryService('Service Type', 'serviceType')">
439                                 <div ng-if="isMetadataKeyMandatory('Service Type')">
440                                 <label class="i-sdc-form-label required" translate="GENERAL_TAB_LABEL_SERVICE_TYPE"></label>
441                             </div>
442                                 <div ng-if="!isMetadataKeyMandatory('Service Type')">
443                                 <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_TYPE"></label>
444                                 </div>
445                                 <select class="i-sdc-form-input" type="text"
446                                        ng-required="isMetadataKeyMandatory('Service Type')"
447                                        data-ng-class="{'view-mode': isViewMode()}"
448                                        data-ng-model="component.serivceType"
449                                        data-ng-model-options="{ debounce: 500 }"
450                                        name="serviceType"
451                                        data-tests-id="serviceType"
452                                        data-ng-maxlength="256"
453                                    data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
454                                 > <option ng-repeat="value in getMetadataKeyValidValues('Service Type')">{{value}}</option>
455                             </select>
456                         </div>
457                         <div ng-if="!component.selectedCategory || !isMetadataKeyForComponentCategory('Service Type')">
458                                 <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_TYPE"></label>
459                                 <input class="i-sdc-form-input" type="text"
460                                        data-ng-class="{'view-mode': isViewMode()}"
461                                        data-ng-model="component.serviceType"
462                                        data-ng-model-options="{ debounce: 500 }"
463                                        name="serviceType"
464                                        data-tests-id="serviceType"
465                                        data-ng-maxlength="256"
466                                    data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
467                                 />
468                         </div>
469                         <div class="input-error" data-ng-show="validateField(editForm.serviceType)">
470                             <span ng-show="editForm.serviceType.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '256' }"></span>
471                             <span ng-show="editForm.serviceType.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
472                         </div>
473                     </div>
474                     <!--------------------- Service Type -------------------->
475
476                     <!--------------------- Service Role -------------------->
477                     <div ng-if="component.isService()"
478                          class="i-sdc-form-item"
479                          data-ng-class="{'error': validateField(editForm.serviceRole)}">
480                         <div ng-if="component.selectedCategory && isMetadataKeyForComponentCategoryService('Service Role', 'serviceRole')">
481                                 <div ng-if="isMetadataKeyMandatory('Service Role')">
482                                 <label class="i-sdc-form-label required" translate="GENERAL_TAB_LABEL_SERVICE_ROLE"></label>
483                                 </div>
484                                 <div ng-if="!isMetadataKeyMandatory('Service Role')">
485                                 <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_ROLE"></label>
486                                 </div>
487                                 <select class="i-sdc-form-input" type="text"
488                                        ng-required="isMetadataKeyMandatory('Service Role')"
489                                        data-ng-class="{'view-mode': isViewMode()}"
490                                        data-ng-model="component.serviceRole"
491                                        data-ng-model-options="{ debounce: 500 }"
492                                        name="serviceRole"
493                                        data-tests-id="serviceRole"
494                                        data-ng-maxlength="256"
495                                 > <option ng-repeat="value in getMetadataKeyValidValues('Service Role')">{{value}}</option>
496                                 </select>
497                         </div>
498                         <div ng-if="!component.selectedCategory || !isMetadataKeyForComponentCategory('Service Role')">
499                                     <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_ROLE"></label>
500                                     <input class="i-sdc-form-input" type="text"
501                                        data-ng-class="{'view-mode': isViewMode()}"
502                                        data-ng-model="component.serviceRole"
503                                        data-ng-model-options="{ debounce: 500 }"
504                                        name="serviceRole"
505                                        data-tests-id="serviceRole"
506                                        data-ng-maxlength="256"
507                                        data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
508                                 />
509                         </div>
510                         <div class="input-error" data-ng-show="validateField(editForm.serviceRole)">
511                             <span ng-show="editForm.serviceRole.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '256' }"></span>
512                             <span ng-show="editForm.serviceRole.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
513                         </div>
514                     </div>
515                     <!--------------------- Service Role -------------------->
516                     <!--------------------- Service Function -------------------->
517                     <div ng-if="component.isService()"
518                          class="i-sdc-form-item"
519                          data-ng-class="{'error': validateField(editForm.serviceFunction)}">
520                         <div ng-if="component.selectedCategory && isMetadataKeyForComponentCategoryService('Service Function', 'serviceFunction')">
521                             <div ng-if="isMetadataKeyMandatory('Service Function')">
522                                 <label class="i-sdc-form-label required" translate="GENERAL_TAB_LABEL_SERVICE_FUNCTION"></label>
523                             </div>
524                             <div ng-if="!isMetadataKeyMandatory('Service Function')">
525                                 <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_FUNCTION"></label>
526                             </div>
527                                 <select class="i-sdc-form-input" type="text"
528                                        ng-required="isMetadataKeyMandatory('Service Function')"
529                                        data-ng-class="{'view-mode': isViewMode()}"
530                                        data-ng-model="component.serviceFunction"
531                                        data-ng-model-options="{ debounce: 500 }"
532                                        name="serviceFunction"
533                                        data-tests-id="serviceFunction"
534                                        data-ng-maxlength="256"
535                                        data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
536                                 > <option ng-repeat="value in getMetadataKeyValidValues('Service Function')">{{value}}</option>
537                                 </select>
538                         </div>
539                         <div ng-if="!component.selectedCategory || !isMetadataKeyForComponentCategory('Service Function')">
540                               <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_FUNCTION"></label>
541                               <input class="i-sdc-form-input" type="text"
542                                       data-ng-class="{'view-mode': isViewMode()}"
543                                       data-ng-model="component.serviceFunction"
544                                       name="serviceFunction"
545                                       data-tests-id="serviceFunction"
546                                       data-ng-maxlength="256"
547                                       data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
548                                />
549                         </div>
550                         <div class="input-error" data-ng-show="validateField(editForm.serviceFunction)">
551                             <span ng-show="editForm.serviceFunction.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '256' }"></span>
552                             <span ng-show="editForm.serviceFunction.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
553                         </div>
554                     </div>
555                     <!--------------------- Service Function -------------------->
556
557                     <!-------------------- ENVIRONMENT CONTEXT  ----------------->
558
559                     <div  ng-if="component.isService()" class="i-sdc-form-item">
560                         <loader data-display="!environmentContextObj && !initEnvironmentContext()" relative="true"></loader>
561                         <label class="i-sdc-form-label">Environment Context</label>
562                         <select class="i-sdc-form-select"
563                                 name="environmentContext"
564                                 data-ng-class="{'view-mode': isViewMode()}"
565                                 data-ng-model="component.environmentContext"
566                                 data-tests-id="environmentContext"
567                         >
568                             <option data-ng-repeat="environmentContextVal in (environmentContextObj.validValues) | orderBy"
569                                     value="{{environmentContextVal}}"
570                                     data-tests-id="{{environmentContextVal}}">{{environmentContextVal}}</option>
571                         </select>
572
573                     </div>
574                     <!--------------------- ENVIRONMENT CONTEXT ------------------>
575
576                     <!--------------------- Instantiation Type -------------------->
577                     <div class="i-sdc-form-item" data-ng-if="component.isService() && instantiationTypes">
578                         <label class="i-sdc-form-label">Instantiation Type</label>
579                         <select class="i-sdc-form-select"
580                                 name="instantiationType"
581                                 data-ng-class="{'view-mode': isViewMode()}"
582                                 data-ng-disabled="component.isCsarComponent()"
583                                 data-ng-model="component.instantiationType"
584                                 data-tests-id="selectInstantiationType">
585                         <option ng-repeat="type in instantiationTypes">{{type}}</option>
586
587                         </select>
588                     </div>
589
590                     <!--------------------- Instantiation Type -------------------->
591
592                     <!--------------------- Base Type -------------------->
593
594                     <div class="w-sdc-form-columns-wrapper">
595                         <div class="w-sdc-form-column">
596                                     <div class="i-sdc-form-item" data-ng-if="component.isService()">
597                                         <label class="i-sdc-form-label">Base Type</label>
598                                         <select class="i-sdc-form-select"
599                                                 name="baseType"
600                                                 data-ng-class="{'view-mode': isViewMode()}"
601                                                 data-ng-disabled="component.isCsarComponent() || !isCreateMode()"
602                                                 data-ng-model="component.derivedFromGenericType"
603                                                 data-ng-change="onBaseTypeChange()"
604                                                 data-tests-id="selectBaseType">
605                                             <option ng-repeat="type in baseTypes">{{type}}</option>
606                                         </select>
607                                     </div>
608                                 </div>
609                                 <div class="w-sdc-form-column">
610                                     <div class="i-sdc-form-item" data-ng-if="component.isService()">
611                                         <label class="i-sdc-form-label">Base Type Version</label>
612                                         <select class="i-sdc-form-select"
613                                                 name="baseTypeVersion"
614                                                 data-ng-class="{'view-mode': isViewMode()}"
615                                                 data-ng-disabled="component.isCsarComponent() || !isCreateMode()"
616                                                 data-ng-model="component.derivedFromGenericVersion"
617                                                 data-tests-id="selectBaseTypeVersion">
618                                             <option ng-repeat="version in baseTypeVersions">{{version}}</option>
619                                         </select>
620                                     </div>
621                                 </div>
622                         </div>
623
624                     <!--------------------- Base Type -------------------->
625
626                     <div class="meta-data" data-ng-if="component.creationDate">
627                         <div>
628                             <b>Created:</b>
629                         </div>
630                         <div class="meta-data-item-value">{{component.creationDate | date:'MM/dd/yyyy'}}, {{component.creatorFullName}}</div>
631                         <div>
632                             <b>Modifed:</b>
633                         </div>
634                         <div class="meta-data-item-value">
635                             {{component.lastUpdateDate | date:'MM/dd/yyyy'}}
636                         </div>
637                         <div>
638                             <b>UUID:</b>
639                         </div>
640                         <div class="meta-data-item-value">
641                             {{component.uuid}}
642                         </div>
643                         <div>
644                             <b>Invariant UUID:</b>
645                         </div>
646                         <div class="meta-data-item-value">
647                             {{component.invariantUUID}}
648                         </div>
649                     </div>
650                 </div><!-- Close w-sdc-form-column -->
651             </div>
652
653         </div><!-- Close w-sdc-form-section-container -->
654
655     </form>
656 </div>