UNPKG

@broadcom/endevor-bridge-for-git-for-zowe-cli

Version:

Endevor Bridge for Git plug-in for Zowe CLI

171 lines (166 loc) 9.26 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var tslib_es6 = require('../../../../node_modules/tslib/tslib.es6.js'); var BaseHandler = require('../../../BaseHandler.js'); var imperative = require('@zowe/imperative'); var fs = require('fs'); var object = require('../../../../utils/object.js'); var EBGConnectionService = require('../../../../api/service/EBGConnectionService.js'); var MappingOptions = require('../../../options/MappingOptions.js'); var index = require('../../../../node_modules/@broadcom/bridge-for-git-zowe-client/dist/index.js'); require('../../../../api/constants/EBGConstants.js'); require('../../../../api/constants/PluginConstants.js'); require('../../../../api/doc/ebg/IMappingView.js'); var EBGMappingService = require('../../../../api/service/EBGMappingService.js'); var EBGEndevorService = require('../../../../api/service/EBGEndevorService.js'); require('../../../../api/doc/IBranchMetadata.js'); require('child_process'); require('../../../../api/utils/ChangeValidator.js'); require('lodash'); require('../../../../api/utils/OptionValidator.js'); /* * Copyright (c) 2019 Broadcom. All Rights Reserved. The term * "Broadcom" refers to Broadcom Inc. and/or its subsidiaries. * * This software and all information contained therein is * confidential and proprietary and shall not be duplicated, * used, disclosed, or disseminated in any way except as * authorized by the applicable license agreement, without the * express written permission of Broadcom. All authorized * reproductions must be marked with this language. * * EXCEPT AS SET FORTH IN THE APPLICABLE LICENSE AGREEMENT, TO * THE EXTENT PERMITTED BY APPLICABLE LAW, BROADCOM PROVIDES THIS * SOFTWARE WITHOUT WARRANTY OF ANY KIND, INCLUDING WITHOUT * LIMITATION, ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL BROADCOM * BE LIABLE TO THE END USER OR ANY THIRD PARTY FOR ANY LOSS OR * DAMAGE, DIRECT OR INDIRECT, FROM THE USE OF THIS SOFTWARE, * INCLUDING WITHOUT LIMITATION, LOST PROFITS, BUSINESS * INTERRUPTION, GOODWILL, OR LOST DATA, EVEN IF BROADCOM IS * EXPRESSLY ADVISED OF SUCH LOSS OR DAMAGE. */ class CreateMappingHandler extends BaseHandler.BaseHandler { processWithSession() { return tslib_es6.__awaiter(this, void 0, void 0, function* () { var _a; const task = { percentComplete: imperative.TaskProgress.ZERO_PERCENT, statusMessage: "Validate options", stageName: imperative.TaskStage.IN_PROGRESS, }; this.progress.startBar({ task }); // TODO revisit how payload is being populated let payload; const mappingFile = this.getOption(MappingOptions.MappingOptions.CREATE_MAPPING_JSON_FILE, false); const mappingMode = (_a = this.getOption(MappingOptions.MappingOptions.MAPPING_MODE)) !== null && _a !== void 0 ? _a : index.MappingModeE.FULL; if (mappingFile !== undefined) { const contents = fs.readFileSync(mappingFile); payload = JSON.parse(contents.toLocaleString()); if (object.isNil(payload.endevor.connection) || object.isNil(payload.endevor.configuration)) { throw new imperative.ImperativeError({ msg: `Provided file has to define Endevor Connection and Endevor Environment`, }); } const endevorConnectionDetails = yield EBGConnectionService.EBGConnectionService.getConnection(this.apiClient, payload.endevor.connection); payload.endevor.baseUrl = endevorConnectionDetails[0].baseUrl; payload.endevor.configuration = endevorConnectionDetails[0].config; payload.branches.forEach((branch) => { if (branch.defaultBranch === undefined) { branch.defaultBranch = false; } if (branch.synchronizeListings === undefined) { branch.synchronizeListings = false; } if (!branch.mappingMode) { branch.mappingMode = mappingMode; } }); this.validateRequiredOptions(); } else { // Mapping with single system/subsystem const cloneUrl = this.getOption(MappingOptions.MappingOptions.GIT_REMOTE_URL, true); const repositoryCheck = String(this.getOption(MappingOptions.MappingOptions.REPOSITORY_CHECK)); // if connection is passed get baseUrl and configuration from connection const connection = this.getOption(MappingOptions.MappingOptions.CONNECTION_NAME, true); const endevorConnectionDetails = yield EBGConnectionService.EBGConnectionService.getConnection(this.apiClient, connection); const baseUrl = endevorConnectionDetails[0].baseUrl; const configuration = endevorConnectionDetails[0].config; const system = this.getOption(MappingOptions.MappingOptions.ENDEVOR_SYSTEM); const systemAlias = this.getOption(MappingOptions.MappingOptions.ENDEVOR_SYSTEM_ALIAS); const subsystem = this.getOption(MappingOptions.MappingOptions.ENDEVOR_SUBSYSTEM, true); const subsystemAlias = this.getOption(MappingOptions.MappingOptions.ENDEVOR_SUBSYSTEM_ALIAS); const branchId = this.getOption(MappingOptions.MappingOptions.BRANCH_ID); const environment = this.getOption(MappingOptions.MappingOptions.ENDEVOR_ENVIRONMENT); const readOnly = Boolean(this.getOption(MappingOptions.MappingOptions.READ_ONLY)); let stageNumber; const typeFilter = this.getOption(MappingOptions.MappingOptions.TYPE_FILTERS); const nameFilter = this.getOption(MappingOptions.MappingOptions.NAME_FILTERS); if (readOnly) { stageNumber = this.getOption(MappingOptions.MappingOptions.ENDEVOR_STAGE_NUMBER); // Validate after reading of the options this.validateRequiredOptions(); } else { // Validate before making any API call this.validateRequiredOptions(); task.statusMessage = "Get entry stage"; task.percentComplete = imperative.TaskProgress.TEN_PERCENT; stageNumber = yield EBGEndevorService.EBGEndevorService.getEntryStage({ api: this.apiClient, connectionName: endevorConnectionDetails[0].name, environment, }); } payload = { git: { cloneUrl, repositoryCheck: object.isNil(repositoryCheck) ? index.RepositoryCheckE.REQUIRE_EMPTY : repositoryCheck, }, endevor: { connection, baseUrl, configuration, }, branches: [ { name: branchId, environment, stageNumber: Number(stageNumber), systems: [ { name: system, alias: systemAlias, subsystems: [ { name: subsystem, alias: subsystemAlias, filter: [ { elements: object.isNil(nameFilter) ? [] : nameFilter, types: object.isNil(typeFilter) ? [] : typeFilter, }, ], }, ], }, ], mappingMode: mappingMode, readOnly, synchronizeListings: false, // TODO add to parameters defaultBranch: false, // TODO add to parameters }, ], }; } yield EBGMappingService.EBGMappingService.createMapping(this.apiClient, payload); task.percentComplete = imperative.TaskProgress.ONE_HUNDRED_PERCENT; this.console.log(`The mapping with git URL ${payload.git.cloneUrl} will be initialized in background. You will be notified once this operation is completed`); }); } } exports.default = CreateMappingHandler;