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.
17 <div include-padding="true" class="sdc-workspace-general-step">
18 <div class="w-sdc-main-container-body-content-action-buttons">
19 <div data-ng-if="unsavedFile && !isCreateMode() && !isViewMode()" class="unsaved-file-warning">
20 <span class="sprite-new sdc-warning"></span> Click save to update to the new VSP
22 <button class="tlv-btn blue" data-ng-if="isDesigner()" data-ng-show="isGeneralView()" data-ng-class="{'disabled' : !isValidForm || isDisableMode() || isViewMode() || isCreateMode()}"
23 data-ng-click="save()" data-tests-id="create/save" tooltips tooltip-content="Save">Save</button>
24 <span data-ng-if="isDesigner()" data-ng-class="{'disabled' :isDisableMode() || isViewMode() || isCreateMode()}" ng-click="revert()" class="sprite-new revert-btn" data-tests-id="revert"
25 data-ng-show="isGeneralView()" tooltips tooltip-content="Revert"></span>
28 <form novalidate class="w-sdc-form" name="editForm" validation-on-load form-to-validate="editForm">
30 <div class="w-sdc-form-section-container">
32 <div class="w-sdc-form-columns-wrapper">
34 <div class="w-sdc-form-column">
35 <div class="upper-general-fields">
36 <div class="selected-icon-container" data-ng-class="{'show-only-on-over':'defaulticon'!=component.icon && !isViewMode()}">
37 <div class="selected-icon-inner-container ">
38 <div class="sprite-new update-component-icon" data-ng-click="updateIcon()" data-ng-if="!isViewMode() && possibleToUpdateIcon()"></div>
39 <div class="i-sdc-form-item-suggested-icon large selected-icon {{component.iconSprite}} {{component.icon}}"
41 'disable': isViewMode() || !possibleToUpdateIcon(),
42 'archive-component active-component-static': component.archived
44 ng-model="component.icon"
45 tooltips tooltip-content='{{component.icon | translate}}'
50 <div class="name-and-category-fields">
51 <!--------------------- NAME -------------------->
52 <div class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.componentName)}">
53 <label class="i-sdc-form-label required">Name</label>
54 <input class="i-sdc-form-input"
55 data-ng-class="{'view-mode': isViewMode()}"
57 data-ng-init="isCreateMode() && validateName(true)"
58 data-ng-maxlength="50"
59 data-ng-model="component.name"
62 data-ng-model-options="{ debounce: 500 }"
63 data-ng-pattern="validation.componentNameValidationPattern"
64 data-ng-disabled="component.isAlreadyCertified()"
67 ng-readonly="isViewMode()"
70 <div class="input-error" data-ng-show="validateField(editForm.componentName)">
71 <span ng-show="editForm.componentName.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_RESOURCE_NAME_REQUIRED"></span>
72 <span ng-show="editForm.componentName.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '50' }"></span>
73 <span ng-show="editForm.componentName.$error.minlength" translate="VALIDATION_ERROR_MIN_LENGTH" translate-values="{'min': '4' }"></span>
74 <span ng-show="editForm.componentName.$error.nameExist" translate="NEW_SERVICE_RESOURCE_ERROR_NAME_EXISTS"></span>
75 <span ng-show="editForm.componentName.$error.pattern" translate="VALIDATION_ERROR_INVALID_NAME"></span>
78 <!--------------------- NAME -------------------->
82 <!--------------------- CATEGORIES -------------------->
83 <div class="i-sdc-form-item"
84 data-ng-class="{'error': validateField(editForm.category)}">
85 <loader data-display="!categories && !initCategoreis()" relative="true"></loader>
86 <label class="i-sdc-form-label required">Category</label>
87 <select class="i-sdc-form-select"
90 data-ng-class="{'view-mode': isViewMode()}"
91 data-ng-change="onCategoryChange()"
92 data-ng-disabled="component.isAlreadyCertified() || (component.isCsarComponent() && component.selectedCategory && component.selectedCategory!=='')"
93 data-ng-model="componentCategories.selectedCategory"
94 data-tests-id="selectGeneralCategory"
96 <option value="">Select category</option>
97 <optgroup ng-if="component.isResource()" data-ng-repeat="mainCategory in categories | orderBy:['name']" label="{{mainCategory.name}}" data-tests-id="{{mainCategory.name}}">
98 <option data-ng-repeat="subCategory in mainCategory.subcategories track by $index"
99 data-ng-selected="componentCategories.selectedCategory === calculateUnique(mainCategory.name,subCategory.name)"
100 data-tests-id="{{subCategory.name}}"
101 value="{{calculateUnique(mainCategory.name, subCategory.name)}}">{{subCategory.name}}
105 <option ng-if="component.isService()" data-ng-repeat="mainCategory in categories | orderBy:['name']"
106 data-ng-selected="component.selectedCategory===mainCategory.name"
107 value="{{mainCategory.name}}"
108 data-tests-id="{{mainCategory.name}}">{{mainCategory.name}}</option>
111 <div class="input-error" data-ng-show="validateField(editForm.category)">
112 <span ng-show="editForm.category.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_CATEGORY_REQUIRED"></span>
115 <!--------------------- CATEGORIES -------------------->
118 <!--------------------- RESOURCE TAGS -------------------->
119 <div class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.tags)}">
120 <label class="i-sdc-form-label">Tags</label>
122 <sdc-tags form-element="editForm" element-name="tags" max-tags="20" class="i-sdc-form-item-tags"
123 sdc-disabled="isViewMode()"
124 tags="component.tags"
125 pattern="validation.tagValidationPattern"
126 special-tag="component.name"></sdc-tags>
128 <div class="input-error" data-ng-show="validateField(editForm.tags)">
129 <span ng-show="editForm.tags.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
130 <span ng-show="editForm.tags.$error.nameExist" translate="NEW_SERVICE_RESOURCE_ERROR_TAG_NAME_EXIST"></span>
133 <!--------------------- RESOURCE TAGS -------------------->
135 <!--------------------- DESCRIPTION -------------------->
136 <div class="i-sdc-form-item description-field"
137 data-ng-class="{'error': validateField(editForm.description)}">
138 <label class="i-sdc-form-label required">Description</label>
139 <textarea class="description"
141 data-ng-class="{'view-mode': isViewMode()}"
142 data-ng-maxlength="1024"
144 data-ng-model="component.description"
145 data-ng-model-options="{ debounce: 500 }"
146 data-ng-pattern="validation.commentValidationPattern"
147 data-tests-id="description"></textarea>
148 <!-- placeholder="Description here..." -->
150 <div class="input-error" data-ng-show="validateField(editForm.description)">
151 <span ng-show="editForm.description.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_RESOURCE_DESCRIPTION_REQUIRED"></span>
152 <span ng-show="editForm.description.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '1024' }"></span>
153 <span ng-show="editForm.description.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
156 <!--------------------- DESCRIPTION -------------------->
158 </div><!-- Close w-sdc-form-column -->
160 <div class="w-sdc-form-column">
161 <!--------------------- IMPORT TOSCA FILE USING BROWSE (ALSO VFC) -------------------->
162 <div class="i-sdc-form-item" ng-if="isShowFileBrowse">
164 <!-- // element-disabled="{{!isCreateMode()&&!(isEditMode()&&component.resourceType=='VF')&&component.vspArchived}} || {{isViewMode()}}" -->
166 <label class="i-sdc-form-label" data-ng-class="{'required':isCreateMode()}">{{browseFileLabel}}</label>
167 <file-upload id="fileUploadElement"
168 class="i-sdc-form-input"
169 element-name="fileElement"
170 element-disabled="{{(!isCreateMode()&&!(isEditMode()&&component.resourceType=='VF'))|| isViewMode() || component.vspArchived}}"
171 form-element="editForm"
172 file-model="component.importedFile"
173 on-file-changed-in-directive="onImportFileChange"
174 extensions="{{importedFileExtension}}"
175 default-text="'Browse to select file'"
176 data-ng-class="{'error':!(isEditMode()&&component.resourceType=='VF') && (!editForm.fileElement.$valid || !component.importedFile.filename)}"></file-upload>
179 <!--------------------- IMPORT TOSCA FILE USING ONBOARDING -------------------->
180 <div class="i-sdc-form-item" ng-if="isShowOnboardingSelectionBrowse">
181 <label class="i-sdc-form-label required">Select VSP</label>
182 <div class="i-sdc-form-file-upload i-sdc-form-input">
183 <span class="i-sdc-form-file-name" data-ng-disabled="component.vspArchived" data-tests-id="filename">{{(fileModel && fileModel.filename) || importedToscaBrowseFileText }}</span>
184 <div class="i-sdc-form-file-upload-x-btn" ng-click="cancel()" data-ng-show="fileModel.filename && fileModel.filename!=='' && elementDisabled!=='true'"></div>
185 <input type="button" data-ng-disabled="component.vspArchived" name="fileElement" />
186 <div class="file-upload-browse-btn" data-ng-click="openOnBoardingModal()" data-ng-disabled="!component.vspArchived" data-tests-id="browseButton">Browse</div>
190 <div class="input-error-file-upload" data-ng-disabled="!component.archived" data-ng-show="component.importedFile && (!editForm.fileElement.$valid || !component.importedFile.filename)">
191 <!-- editForm.fileElement.$error.required <== Can not use this, because the browse is done from outside for the first time -->
192 <span ng-show="!(isEditMode()&&component.resourceType=='VF')&&!component.importedFile.filename" translate="NEW_SERVICE_RESOURCE_ERROR_TOSCA_FILE_REQUIRED"></span><!-- Required -->
193 <span ng-show="editForm.fileElement.$error.maxsize" translate="VALIDATION_ERROR_MAX_FILE_SIZE"></span>
194 <span ng-show="editForm.fileElement.$error.filetype" translate="NEW_SERVICE_RESOURCE_ERROR_VALID_TOSCA_EXTENSIONS" translate-values="{'extensions': '{{importedFileExtension}}' }"></span>
195 <span ng-show="editForm.fileElement.$error.emptyFile" translate="VALIDATION_ERROR_EMPTY_FILE"></span>
197 <!--------------------- IMPORT TOSCA FILE -------------------->
199 <!--------------------- USER ID -------------------->
200 <div class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.contactId)}">
201 <label class="i-sdc-form-label required" translate="GENERAL_LABEL_CONTACT_ID"></label>
202 <input class="i-sdc-form-input" type="text"
203 data-ng-model="component.contactId"
204 data-ng-class="{'view-mode': isViewMode()}"
205 data-ng-required="true"
207 data-ng-pattern="validation.contactIdValidationPattern"
208 data-ng-model-options="{ debounce: 500 }"
209 data-tests-id="contactId"
210 data-ng-maxlength="50"
213 <div class="input-error" data-ng-show="validateField(editForm.contactId)">
214 <span ng-show="editForm.contactId.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '50' }"></span>
215 <span ng-show="editForm.contactId.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_CONTACT_REQUIRED"></span>
216 <span ng-show="editForm.contactId.$error.pattern" translate="NEW_SERVICE_RESOURCE_ERROR_CONTACT_NOT_VALID"></span>
219 <!--------------------- USER ID -------------------->
221 <!--------------------- PROJECT CODE -------------------->
222 <div class="i-sdc-form-item" data-ng-if="!component.isResource()"
223 data-ng-class="{'error': validateField(editForm.projectCode)}">
224 <label class="i-sdc-form-label required" translate="GENERAL_LABEL_PROJECT_CODE"></label>
225 <input class="i-sdc-form-input" type="text"
226 data-ng-model="component.projectCode"
227 data-ng-class="{'view-mode': isViewMode()}"
228 data-ng-model-options="{ debounce: 500 }"
229 data-ng-maxlength="50"
232 data-ng-pattern="validation.projectCodeValidationPattern"
233 data-tests-id="projectCode"
236 <div class="input-error" data-ng-show="validateField(editForm.projectCode)">
237 <span ng-show="editForm.contactId.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '50' }"></span>
238 <span ng-show="editForm.projectCode.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_PROJECT_CODE_REQUIRED"></span>
239 <span ng-show="editForm.projectCode.$error.pattern" translate="NEW_SERVICE_RESOURCE_ERROR_PROJECT_CODE_NOT_VALID"></span>
243 <!--------------------- VENDOR NAME -------------------->
244 <div ng-if="component.isResource()" class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.vendorName)}">
245 <label class="i-sdc-form-label required">Vendor</label>
246 <input class="i-sdc-form-input" type="text"
247 data-ng-class="{'view-mode': isViewMode()}"
248 data-ng-model="component.vendorName"
249 data-ng-model-options="{ debounce: 500 }"
250 data-ng-maxlength="60"
252 ng-click="oldValue = component.vendorName"
254 data-ng-change="onVendorNameChange(oldValue)"
255 data-ng-pattern="validation.VendorNameValidationPattern"
256 data-ng-disabled="component.isAlreadyCertified() || (component.isCsarComponent() && component.vendorName && component.vendorName!=='')"
257 data-tests-id="vendorName"
260 <div class="input-error" data-ng-show="validateField(editForm.vendorName)">
261 <span ng-show="editForm.vendorName.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_VENDOR_NAME_REQUIRED"></span>
262 <span ng-show="editForm.vendorName.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '60' }"></span>
263 <span ng-show="editForm.vendorName.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
268 <!--------------------- VENDOR NAME -------------------->
270 <!--------------------- VENDOR RELEASE -------------------->
271 <div ng-if="component.isResource()"
272 class="i-sdc-form-item"
273 data-ng-class="{'error': validateField(editForm.vendorRelease)}">
274 <label class="i-sdc-form-label required">Vendor Release</label>
275 <input class="i-sdc-form-input" type="text"
276 data-ng-class="{'view-mode': isViewMode()}"
277 data-ng-model="component.vendorRelease"
278 data-ng-model-options="{ debounce: 500 }"
279 data-ng-maxlength="25"
282 data-ng-pattern="validation.VendorReleaseValidationPattern"
283 data-ng-disabled="component.isCsarComponent() && component.vendorRelease && component.vendorRelease!==''"
284 data-tests-id="vendorRelease"
287 <div class="input-error" data-ng-show="validateField(editForm.vendorRelease)">
288 <span ng-show="editForm.vendorRelease.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_VENDOR_RELEASE_REQUIRED"></span>
289 <span ng-show="editForm.vendorRelease.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '25' }"></span>
290 <span ng-show="editForm.vendorRelease.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
293 <!--------------------- VENDOR RELEASE -------------------->
295 <!--------------------- Resource Model Number -------------------->
296 <div ng-if="component.isResource()"
297 class="i-sdc-form-item"
298 data-ng-class="{'error': validateField(editForm.resourceVendorModelNumber)}">
299 <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_RESOURCE_MODEL_NUMBER"></label>
300 <input class="i-sdc-form-input" type="text"
301 data-ng-class="{'view-mode': isViewMode()}"
302 data-ng-model="component.resourceVendorModelNumber"
303 data-ng-model-options="{ debounce: 500 }"
304 data-ng-maxlength="65"
305 name="resourceVendorModelNumber"
306 data-ng-pattern="validation.VendorModelNumberValidationPattern"
307 data-tests-id="resourceVendorModelNumber"
310 <div class="input-error" data-ng-show="validateField(editForm.resourceVendorModelNumber)">
311 <span ng-show="editForm.resourceVendorModelNumber.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '65' }"></span>
312 <span ng-show="editForm.resourceVendorModelNumber.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
315 <!--------------------- Resource Model Number -------------------->
317 <!--------------------- ECOMPGENERATEDNAMING -------------------->
319 <div class="i-sdc-form-item"
320 data-ng-class="{'error': validateField(editForm.ecompGeneratedNaming)}"
321 data-ng-if="component.isService()">
322 <label class="i-sdc-form-label">Generated Naming</label>
323 <select class="i-sdc-form-select"
325 name="ecompGeneratedNaming"
326 data-ng-change="onEcompGeneratedNamingChange()"
327 data-ng-class="{'view-mode': isViewMode()}"
328 data-ng-model="component.ecompGeneratedNaming"
329 data-tests-id="ecompGeneratedNaming">
330 <option ng-value="true">true</option>
331 <option ng-value="false">false</option>
333 <div class="input-error" data-ng-show="validateField(editForm.ecompGeneratedNaming)">
337 <!--------------------- CATEGORIES -------------------->
339 <!--------------------- NAMING POLICY -------------------->
340 <div ng-if="component.isService()" class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.namingPolicy)}">
341 <label class="i-sdc-form-label">Naming Policy</label>
342 <input class="i-sdc-form-input"
344 data-ng-class="{'view-mode': isViewMode() || !component.ecompGeneratedNaming}"
345 data-ng-maxlength="100"
346 data-ng-model="component.namingPolicy"
348 data-ng-model-options="{ debounce: 500 }"
349 data-ng-pattern="validation.commentValidationPattern"
350 data-tests-id="namingPolicy"
352 ng-readonly="isViewMode() || !component.ecompGeneratedNaming"
355 <div class="input-error" data-ng-show="validateField(editForm.namingPolicy)">
356 <span ng-show="editForm.namingPolicy.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '100' }"></span>
357 <span ng-show="editForm.namingPolicy.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
360 <!--------------------- NAMING POLICY -------------------->
362 <!--------------------- Service Type -------------------->
363 <div ng-if="component.isService()"
364 class="i-sdc-form-item"
365 data-ng-class="{'error': validateField(editForm.serviceType)}">
366 <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_TYPE"></label>
367 <input class="i-sdc-form-input" type="text"
368 data-ng-class="{'view-mode': isViewMode()}"
369 data-ng-model="component.serviceType"
370 data-ng-model-options="{ debounce: 500 }"
372 data-tests-id="serviceType"
373 data-ng-maxlength="256"
374 data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
376 <div class="input-error" data-ng-show="validateField(editForm.serviceType)">
377 <span ng-show="editForm.serviceType.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '256' }"></span>
378 <span ng-show="editForm.serviceType.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
381 <!--------------------- Service Type -------------------->
383 <!--------------------- Service Role -------------------->
384 <div ng-if="component.isService()"
385 class="i-sdc-form-item"
386 data-ng-class="{'error': validateField(editForm.serviceRole)}">
387 <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_ROLE"></label>
388 <input class="i-sdc-form-input" type="text"
389 data-ng-class="{'view-mode': isViewMode()}"
390 data-ng-model="component.serviceRole"
391 data-ng-model-options="{ debounce: 500 }"
393 data-tests-id="serviceRole"
394 data-ng-maxlength="256"
395 data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
397 <div class="input-error" data-ng-show="validateField(editForm.serviceRole)">
398 <span ng-show="editForm.serviceRole.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '256' }"></span>
399 <span ng-show="editForm.serviceRole.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
402 <!--------------------- Service Role -------------------->
404 <!-------------------- ENVIRONMENT CONTEXT ----------------->
406 <div ng-if="component.isService()" class="i-sdc-form-item">
407 <loader data-display="!environmentContextObj && !initEnvironmentContext()" relative="true"></loader>
408 <label class="i-sdc-form-label">Environment Context</label>
409 <select class="i-sdc-form-select"
410 name="environmentContext"
411 data-ng-class="{'view-mode': isViewMode()}"
412 data-ng-model="component.environmentContext"
413 data-tests-id="environmentContext"
415 <option data-ng-repeat="environmentContextVal in (environmentContextObj.validValues) | orderBy"
416 value="{{environmentContextVal}}"
417 data-tests-id="{{environmentContextVal}}">{{environmentContextVal}}</option>
421 <!--------------------- ENVIRONMENT CONTEXT ------------------>
423 <!--------------------- Instantiation Type -------------------->
424 <div class="i-sdc-form-item" data-ng-if="component.isService() && instantiationTypes">
425 <label class="i-sdc-form-label">Instantiation Type</label>
426 <select class="i-sdc-form-select"
427 name="instantiationType"
428 data-ng-class="{'view-mode': isViewMode()}"
429 data-ng-disabled="component.isCsarComponent()"
430 data-ng-model="component.instantiationType"
431 data-tests-id="selectInstantiationType">
432 <option ng-repeat="type in instantiationTypes">{{type}}</option>
437 <!--------------------- Instantiation Type -------------------->
439 <div class="meta-data" data-ng-if="component.creationDate">
443 <div class="meta-data-item-value">{{component.creationDate | date:'MM/dd/yyyy'}}, {{component.creatorFullName}}</div>
447 <div class="meta-data-item-value">
448 {{component.lastUpdateDate | date:'MM/dd/yyyy'}}
453 <div class="meta-data-item-value">
457 <b>Invariant UUID:</b>
459 <div class="meta-data-item-value">
460 {{component.invariantUUID}}
463 </div><!-- Close w-sdc-form-column -->
466 </div><!-- Close w-sdc-form-section-container -->