@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
JavaScript
'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;