UNPKG

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

Version:

Endevor Bridge for Git plug-in for Zowe CLI

124 lines (119 loc) 6.82 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var tslib_es6 = require('../../../../node_modules/tslib/tslib.es6.js'); var BaseHandler = require('../../../BaseHandler.js'); require('../../../../api/constants/EBGConstants.js'); require('../../../../api/constants/PluginConstants.js'); require('../../../../api/doc/ebg/IMappingView.js'); var imperative = require('@zowe/imperative'); var object = require('../../../../utils/object.js'); var LocalRepositoryUtils = require('../../../../api/utils/LocalRepositoryUtils.js'); require('../../../../api/utils/ChangeValidator.js'); var MappingMetadata = require('../../../../api/utils/MappingMetadata.js'); require('lodash'); require('../../../../api/utils/OptionValidator.js'); var BridgeMetadataUtils = require('../../../../api/utils/BridgeMetadataUtils.js'); var ProcessorGroupOptions = require('../../../options/ProcessorGroupOptions.js'); var EBGOptions = require('../../../options/EBGOptions.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 UpdateProcessorGroupHandler extends BaseHandler.BaseHandler { processWithSession() { return tslib_es6.__awaiter(this, void 0, void 0, function* () { const workDir = this.getOption(EBGOptions.EBGOptions.WORK_DIRECTORY); const newProcGroup = this.getOption(ProcessorGroupOptions.ProcessorGroupOptions.PROCESSOR_GROUP, true); let system = this.getOption(ProcessorGroupOptions.ProcessorGroupOptions.ENDEVOR_SYSTEM, false); let subsystem = this.getOption(ProcessorGroupOptions.ProcessorGroupOptions.ENDEVOR_SUBSYSTEM, false); const type = this.getOption(ProcessorGroupOptions.ProcessorGroupOptions.TYPE, true); const updateAll = this.getOption(ProcessorGroupOptions.ProcessorGroupOptions.UPDATE_ALL, false); let element = this.getOption(ProcessorGroupOptions.ProcessorGroupOptions.ELEMENT, false); this.validateRequiredOptions(); const mappingMetadata = LocalRepositoryUtils.LocalRepositoryUtils.readMappingMetadata(workDir); const branchMetadata = MappingMetadata.MappingMetadata.getSynchronizedBranch(mappingMetadata); if (!branchMetadata) { throw new imperative.ImperativeError({ msg: `Invalid mapping configuration`, }); } if (MappingMetadata.MappingMetadata.isMultiSystem(branchMetadata) && (object.isNil(system) || object.isNil(subsystem))) { throw new imperative.ImperativeError({ msg: `You must specify system/subsystem for multi system/subsystem mappings`, }); } if (object.isNil(system)) { system = branchMetadata.systems[0]; system = object.isNil(system.alias) ? system.name : system.alias; } if (object.isNil(subsystem)) { subsystem = branchMetadata.systems[0].subsystems[0]; subsystem = object.isNil(subsystem.alias) ? subsystem.name : subsystem.alias; } const bridgeMetadata = BridgeMetadataUtils.BridgeMetadataUtils.readBridgeMetadataFile(workDir, system, subsystem, type); const definedProcGroups = bridgeMetadata.definedProcessorGroups; const fileExt = bridgeMetadata.fileExtension.trim(); if (updateAll) { this.validatePG(definedProcGroups, newProcGroup); const modifiedElements = LocalRepositoryUtils.LocalRepositoryUtils.getAllChangedElements(workDir, branchMetadata, mappingMetadata, type, fileExt); const elements = bridgeMetadata.elements; for (const ele of modifiedElements) { elements[ele] = { processorGroup: newProcGroup }; } BridgeMetadataUtils.BridgeMetadataUtils.updateBridgeMetadataFile(workDir, system, subsystem, type, bridgeMetadata); this.console.log(`Processor Group of changed elements of type '${type}' has been updated`); } else { if (object.isNil(element)) { throw new imperative.ImperativeError({ msg: `Specify --element or set --update-all to true to update the processor groups of all changed elements`, }); } // if element is passed with a its file extension remove it if (object.isNotNil(fileExt) && fileExt !== "" && element.includes(".")) { element = element.substr(0, element.lastIndexOf(".")); } this.validatePG(definedProcGroups, newProcGroup); const elements = bridgeMetadata.elements; if (!elements[element]) { throw new imperative.ImperativeError({ msg: `${element} element does not exist in system ${system}, subsystem ${subsystem}, type ${type}`, }); } else { elements[element].processorGroup = newProcGroup; } BridgeMetadataUtils.BridgeMetadataUtils.updateBridgeMetadataFile(workDir, system, subsystem, type, bridgeMetadata); this.console.log(`Processor Group of element ${element} has been updated`); } }); } validatePG(definedProcGroups, newProcGroup) { if (definedProcGroups.filter((pg) => pg.name === newProcGroup).length < 1) { throw new imperative.ImperativeError({ msg: `Processor Group '${newProcGroup}' is not a valid processor group`, }); } } } exports.default = UpdateProcessorGroupHandler;