1 <div include-padding="true" class="sdc-workspace-general-step">
3 <form novalidate class="w-sdc-form" name="editForm" validation-on-load form-to-validate="editForm">
5 <div class="w-sdc-form-section-container">
7 <div class="w-sdc-form-columns-wrapper">
9 <div class="w-sdc-form-column">
10 <div class="upper-general-fields">
11 <div class="selected-icon-container" data-ng-class="{'show-only-on-over':'defaulticon'!=component.icon && !isViewMode()}">
12 <div class="selected-icon-inner-container">
13 <div class="sprite-new update-component-icon" data-ng-click="updateIcon()" data-ng-if="!isViewMode() && possibleToUpdateIcon()"></div>
14 <div class="i-sdc-form-item-suggested-icon large selected-icon {{component.iconSprite}} {{component.icon}}"
15 data-ng-class="{ 'disable': isViewMode() || !possibleToUpdateIcon() }"
16 ng-model="component.icon"
17 tooltips tooltip-content='{{component.icon | translate}}'
22 <div class="name-and-category-fields">
23 <!--------------------- NAME -------------------->
24 <div class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.componentName)}">
25 <label class="i-sdc-form-label required">Name</label>
26 <input class="i-sdc-form-input"
27 data-ng-class="{'view-mode': isViewMode()}"
29 data-ng-init="isCreateMode() && validateName(true)"
30 data-ng-maxlength="50"
31 data-ng-model="component.name"
34 data-ng-model-options="{ debounce: 500 }"
35 data-ng-pattern="validation.componentNameValidationPattern"
36 data-ng-disabled="component.isAlreadyCertified()"
39 ng-readonly="isViewMode()"
42 <div class="input-error" data-ng-show="validateField(editForm.componentName)">
43 <span ng-show="editForm.componentName.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_RESOURCE_NAME_REQUIRED"></span>
44 <span ng-show="editForm.componentName.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '50' }"></span>
45 <span ng-show="editForm.componentName.$error.minlength" translate="VALIDATION_ERROR_MIN_LENGTH" translate-values="{'min': '4' }"></span>
46 <span ng-show="editForm.componentName.$error.nameExist" translate="NEW_SERVICE_RESOURCE_ERROR_NAME_EXISTS"></span>
47 <span ng-show="editForm.componentName.$error.pattern" translate="VALIDATION_ERROR_INVALID_NAME"></span>
50 <!--------------------- NAME -------------------->
54 <!--------------------- CATEGORIES -------------------->
55 <div class="i-sdc-form-item"
56 data-ng-class="{'error': validateField(editForm.category)}">
57 <loader data-display="!categories && !initCategoreis()" relative="true"></loader>
58 <label class="i-sdc-form-label required">Category</label>
59 <select class="i-sdc-form-select"
62 data-ng-class="{'view-mode': isViewMode()}"
63 data-ng-change="onCategoryChange()"
64 data-ng-disabled="component.isAlreadyCertified() || (component.isCsarComponent() && component.selectedCategory && component.selectedCategory!=='')"
65 data-ng-model="componentCategories.selectedCategory"
66 data-tests-id="selectGeneralCategory"
68 <option value="">Select category</option>
69 <optgroup ng-if="component.isResource()" data-ng-repeat="mainCategory in categories | orderBy:['name']" label="{{mainCategory.name}}" data-tests-id="{{mainCategory.name}}">
70 <option data-ng-repeat="subCategory in mainCategory.subcategories track by $index"
71 data-ng-selected="componentCategories.selectedCategory === calculateUnique(mainCategory.name,subCategory.name)"
72 data-tests-id="{{subCategory.name}}"
73 value="{{calculateUnique(mainCategory.name, subCategory.name)}}">{{subCategory.name}}
77 <option ng-if="component.isService()" data-ng-repeat="mainCategory in categories | orderBy:['name']"
78 data-ng-selected="component.selectedCategory===mainCategory.name"
79 value="{{mainCategory.name}}"
80 data-tests-id="{{mainCategory.name}}">{{mainCategory.name}}</option>
83 <div class="input-error" data-ng-show="validateField(editForm.category)">
84 <span ng-show="editForm.category.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_CATEGORY_REQUIRED"></span>
87 <!--------------------- CATEGORIES -------------------->
90 <!--------------------- RESOURCE TAGS -------------------->
91 <div class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.tags)}">
92 <label class="i-sdc-form-label">Tags</label>
94 <sdc-tags form-element="editForm" element-name="tags" max-tags="20" class="i-sdc-form-item-tags"
95 sdc-disabled="isViewMode()"
97 pattern="validation.tagValidationPattern"
98 special-tag="component.name"></sdc-tags>
100 <div class="input-error" data-ng-show="validateField(editForm.tags)">
101 <span ng-show="editForm.tags.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
102 <span ng-show="editForm.tags.$error.nameExist" translate="NEW_SERVICE_RESOURCE_ERROR_TAG_NAME_EXIST"></span>
105 <!--------------------- RESOURCE TAGS -------------------->
107 <!--------------------- DESCRIPTION -------------------->
108 <div class="i-sdc-form-item description-field"
109 data-ng-class="{'error': validateField(editForm.description)}">
110 <label class="i-sdc-form-label required">Description</label>
111 <textarea class="description"
113 data-ng-class="{'view-mode': isViewMode()}"
114 data-ng-maxlength="1024"
116 data-ng-model="component.description"
117 data-ng-model-options="{ debounce: 500 }"
118 data-ng-pattern="validation.commentValidationPattern"
119 data-tests-id="description"></textarea>
120 <!-- placeholder="Description here..." -->
122 <div class="input-error" data-ng-show="validateField(editForm.description)">
123 <span ng-show="editForm.description.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_RESOURCE_DESCRIPTION_REQUIRED"></span>
124 <span ng-show="editForm.description.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '1024' }"></span>
125 <span ng-show="editForm.description.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
128 <!--------------------- DESCRIPTION -------------------->
130 </div><!-- Close w-sdc-form-column -->
132 <div class="w-sdc-form-column">
133 <!--------------------- IMPORT TOSCA FILE USING BROWSE (ALSO VFC) -------------------->
134 <div class="i-sdc-form-item" ng-if="isShowFileBrowse">
135 <label class="i-sdc-form-label" data-ng-class="{'required':isCreateMode()}">{{browseFileLabel}}</label>
136 <file-upload id="fileUploadElement"
137 class="i-sdc-form-input"
138 element-name="fileElement"
139 element-disabled="{{!isCreateMode()&&!(isEditMode()&&component.resourceType=='VF')}} || {{isViewMode()}}"
140 form-element="editForm"
141 file-model="component.importedFile"
142 on-file-changed-in-directive="uploadFileChangedInGeneralTab"
143 extensions="{{importedFileExtension}}"
144 default-text="'Browse to select file'"
145 data-ng-class="{'error':!(isEditMode()&&component.resourceType=='VF') && (!editForm.fileElement.$valid || !component.importedFile.filename)}"></file-upload>
148 <!--------------------- IMPORT TOSCA FILE USING ONBOARDING -------------------->
149 <div class="i-sdc-form-item" ng-if="isShowOnboardingSelectionBrowse">
150 <label class="i-sdc-form-label required">Select VSP</label>
151 <div class="i-sdc-form-file-upload i-sdc-form-input">
152 <span class="i-sdc-form-file-name" data-tests-id="filename">{{(fileModel && fileModel.filename) || importedToscaBrowseFileText}}</span>
153 <div class="i-sdc-form-file-upload-x-btn" ng-click="cancel()" data-ng-show="fileModel.filename && fileModel.filename!=='' && elementDisabled!=='true'"></div>
154 <input type="button" name="fileElement"/>
155 <div class="file-upload-browse-btn" data-ng-click="openOnBoardingModal()" data-tests-id="browseButton">Browse</div>
159 <div class="input-error-file-upload" data-ng-show="component.importedFile && (!editForm.fileElement.$valid || !component.importedFile.filename)">
160 <!-- editForm.fileElement.$error.required <== Can not use this, because the browse is done from outside for the first time -->
161 <span ng-show="!(isEditMode()&&component.resourceType=='VF')&&!component.importedFile.filename" translate="NEW_SERVICE_RESOURCE_ERROR_TOSCA_FILE_REQUIRED"></span><!-- Required -->
162 <span ng-show="editForm.fileElement.$error.maxsize" translate="VALIDATION_ERROR_MAX_FILE_SIZE"></span>
163 <span ng-show="editForm.fileElement.$error.filetype" translate="NEW_SERVICE_RESOURCE_ERROR_VALID_TOSCA_EXTENSIONS" translate-values="{'extensions': '{{importedFileExtension}}' }"></span>
164 <span ng-show="editForm.fileElement.$error.emptyFile" translate="VALIDATION_ERROR_EMPTY_FILE"></span>
166 <!--------------------- IMPORT TOSCA FILE -------------------->
168 <!--------------------- USER ID -------------------->
169 <div class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.contactId)}">
170 <label class="i-sdc-form-label required" translate="GENERAL_LABEL_CONTACT_ID"></label>
171 <input class="i-sdc-form-input" type="text"
172 data-ng-model="component.contactId"
173 data-ng-class="{'view-mode': isViewMode()}"
174 data-ng-required="true"
176 data-ng-pattern="validation.contactIdValidationPattern"
177 data-ng-model-options="{ debounce: 500 }"
178 data-tests-id="contactId"
179 data-ng-maxlength="50"
182 <div class="input-error" data-ng-show="validateField(editForm.contactId)">
183 <span ng-show="editForm.contactId.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '50' }"></span>
184 <span ng-show="editForm.contactId.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_CONTACT_REQUIRED"></span>
185 <span ng-show="editForm.contactId.$error.pattern" translate="NEW_SERVICE_RESOURCE_ERROR_CONTACT_NOT_VALID"></span>
188 <!--------------------- USER ID -------------------->
190 <!--------------------- PROJECT CODE -------------------->
191 <div class="i-sdc-form-item" data-ng-if="!component.isResource()"
192 data-ng-class="{'error': validateField(editForm.projectCode)}">
193 <label class="i-sdc-form-label required" translate="GENERAL_LABEL_PROJECT_CODE"></label>
194 <input class="i-sdc-form-input" type="text"
195 data-ng-model="component.projectCode"
196 data-ng-class="{'view-mode': isViewMode()}"
197 data-ng-model-options="{ debounce: 500 }"
198 data-ng-maxlength="50"
201 data-ng-pattern="validation.projectCodeValidationPattern"
202 data-tests-id="projectCode"
205 <div class="input-error" data-ng-show="validateField(editForm.projectCode)">
206 <span ng-show="editForm.contactId.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '50' }"></span>
207 <span ng-show="editForm.projectCode.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_PROJECT_CODE_REQUIRED"></span>
208 <span ng-show="editForm.projectCode.$error.pattern" translate="NEW_SERVICE_RESOURCE_ERROR_PROJECT_CODE_NOT_VALID"></span>
212 <!--------------------- VENDOR NAME -------------------->
213 <div ng-if="component.isResource()" class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.vendorName)}">
214 <label class="i-sdc-form-label required">Vendor</label>
215 <input class="i-sdc-form-input" type="text"
216 data-ng-class="{'view-mode': isViewMode()}"
217 data-ng-model="component.vendorName"
218 data-ng-model-options="{ debounce: 500 }"
219 data-ng-maxlength="60"
221 ng-click="oldValue = component.vendorName"
223 data-ng-change="onVendorNameChange(oldValue)"
224 data-ng-pattern="validation.VendorNameValidationPattern"
225 data-ng-disabled="component.isAlreadyCertified() || (component.isCsarComponent() && component.vendorName && component.vendorName!=='')"
226 data-tests-id="vendorName"
229 <div class="input-error" data-ng-show="validateField(editForm.vendorName)">
230 <span ng-show="editForm.vendorName.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_VENDOR_NAME_REQUIRED"></span>
231 <span ng-show="editForm.vendorName.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '60' }"></span>
232 <span ng-show="editForm.vendorName.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
237 <!--------------------- VENDOR NAME -------------------->
239 <!--------------------- VENDOR RELEASE -------------------->
240 <div ng-if="component.isResource()"
241 class="i-sdc-form-item"
242 data-ng-class="{'error': validateField(editForm.vendorRelease)}">
243 <label class="i-sdc-form-label required">Vendor Release</label>
244 <input class="i-sdc-form-input" type="text"
245 data-ng-class="{'view-mode': isViewMode()}"
246 data-ng-model="component.vendorRelease"
247 data-ng-model-options="{ debounce: 500 }"
248 data-ng-maxlength="25"
251 data-ng-pattern="validation.VendorReleaseValidationPattern"
252 data-ng-disabled="component.isCsarComponent() && component.vendorRelease && component.vendorRelease!==''"
253 data-tests-id="vendorRelease"
256 <div class="input-error" data-ng-show="validateField(editForm.vendorRelease)">
257 <span ng-show="editForm.vendorRelease.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_VENDOR_RELEASE_REQUIRED"></span>
258 <span ng-show="editForm.vendorRelease.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '25' }"></span>
259 <span ng-show="editForm.vendorRelease.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
262 <!--------------------- VENDOR RELEASE -------------------->
264 <!--------------------- Resource Model Number -------------------->
265 <div ng-if="component.isResource()"
266 class="i-sdc-form-item"
267 data-ng-class="{'error': validateField(editForm.resourceVendorModelNumber)}">
268 <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_RESOURCE_MODEL_NUMBER"></label>
269 <input class="i-sdc-form-input" type="text"
270 data-ng-class="{'view-mode': isViewMode()}"
271 data-ng-model="component.resourceVendorModelNumber"
272 data-ng-model-options="{ debounce: 500 }"
273 data-ng-maxlength="65"
274 name="resourceVendorModelNumber"
275 data-ng-pattern="validation.VendorModelNumberValidationPattern"
276 data-tests-id="resourceVendorModelNumber"
279 <div class="input-error" data-ng-show="validateField(editForm.resourceVendorModelNumber)">
280 <span ng-show="editForm.resourceVendorModelNumber.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '65' }"></span>
281 <span ng-show="editForm.resourceVendorModelNumber.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
284 <!--------------------- Resource Model Number -------------------->
286 <!--------------------- ECOMPGENERATEDNAMING -------------------->
288 <div class="i-sdc-form-item"
289 data-ng-class="{'error': validateField(editForm.ecompGeneratedNaming)}"
290 data-ng-if="component.isService()">
291 <label class="i-sdc-form-label">Ecomp Generated Naming</label>
292 <select class="i-sdc-form-select"
294 name="ecompGeneratedNaming"
295 data-ng-change="onEcompGeneratedNamingChange()"
296 data-ng-class="{'view-mode': isViewMode()}"
297 data-ng-model="component.ecompGeneratedNaming"
298 data-tests-id="ecompGeneratedNaming">
299 <option ng-value="true">true</option>
300 <option ng-value="false">false</option>
302 <div class="input-error" data-ng-show="validateField(editForm.ecompGeneratedNaming)">
306 <!--------------------- CATEGORIES -------------------->
308 <!--------------------- NAMING POLICY -------------------->
309 <div ng-if="component.isService()" class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.namingPolicy)}">
310 <label class="i-sdc-form-label">Naming policy</label>
311 <input class="i-sdc-form-input"
313 data-ng-class="{'view-mode': isViewMode() || !component.ecompGeneratedNaming}"
314 data-ng-maxlength="100"
315 data-ng-model="component.namingPolicy"
317 data-ng-model-options="{ debounce: 500 }"
318 data-ng-pattern="validation.commentValidationPattern"
319 data-tests-id="namingPolicy"
321 ng-readonly="isViewMode() || !component.ecompGeneratedNaming"
324 <div class="input-error" data-ng-show="validateField(editForm.namingPolicy)">
325 <span ng-show="editForm.namingPolicy.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '100' }"></span>
326 <span ng-show="editForm.namingPolicy.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
329 <!--------------------- NAMING POLICY -------------------->
331 <!--------------------- Service Type -------------------->
332 <div ng-if="component.isService()"
333 class="i-sdc-form-item"
334 data-ng-class="{'error': validateField(editForm.serviceType)}">
335 <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_TYPE"></label>
336 <input class="i-sdc-form-input" type="text"
337 data-ng-class="{'view-mode': isViewMode()}"
338 data-ng-model="component.serviceType"
339 data-ng-model-options="{ debounce: 500 }"
341 data-tests-id="serviceType"
342 data-ng-maxlength="256"
343 data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
345 <div class="input-error" data-ng-show="validateField(editForm.serviceType)">
346 <span ng-show="editForm.serviceType.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '256' }"></span>
347 <span ng-show="editForm.serviceType.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
350 <!--------------------- Service Type -------------------->
352 <!--------------------- Service Role -------------------->
353 <div ng-if="component.isService()"
354 class="i-sdc-form-item"
355 data-ng-class="{'error': validateField(editForm.serviceRole)}">
356 <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_ROLE"></label>
357 <input class="i-sdc-form-input" type="text"
358 data-ng-class="{'view-mode': isViewMode()}"
359 data-ng-model="component.serviceRole"
360 data-ng-model-options="{ debounce: 500 }"
362 data-tests-id="serviceRole"
363 data-ng-maxlength="256"
364 data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
366 <div class="input-error" data-ng-show="validateField(editForm.serviceRole)">
367 <span ng-show="editForm.serviceRole.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '256' }"></span>
368 <span ng-show="editForm.serviceRole.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
371 <!--------------------- Service Role -------------------->
373 <!-------------------- ENVIRONMENT CONTEXT ----------------->
375 <div ng-if="component.isService()" class="i-sdc-form-item">
376 <loader data-display="!environmentContextObj && !initEnvironmentContext()" relative="true"></loader>
377 <label class="i-sdc-form-label">Environment Context</label>
378 <select class="i-sdc-form-select"
379 name="environmentContext"
380 data-ng-class="{'view-mode': isViewMode()}"
381 data-ng-model="component.environmentContext"
382 data-tests-id="environmentContext"
384 <option data-ng-repeat="environmentContextVal in (environmentContextObj.validValues) | orderBy"
385 value="{{environmentContextVal}}"
386 data-tests-id="{{environmentContextVal}}">{{environmentContextVal}}</option>
390 <!--------------------- ENVIRONMENT CONTEXT ------------------>
393 <div class="meta-data" data-ng-if="component.creationDate">
397 <div class="meta-data-item-value">{{component.creationDate | date:'MM/dd/yyyy'}}, {{component.creatorFullName}}</div>
401 <div class="meta-data-item-value">
402 {{component.lastUpdateDate | date:'MM/dd/yyyy'}}
407 <div class="meta-data-item-value">
411 <b>Invariant UUID:</b>
413 <div class="meta-data-item-value">
414 {{component.invariantUUID}}
417 </div><!-- Close w-sdc-form-column -->
420 </div><!-- Close w-sdc-form-section-container -->