blob: 8c4ac562e5cb58e35eb0d8b6acd4b8492fe400bb [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { workspace, window } from "vscode";
import * as path from "path";
import * as shell from 'shelljs';
import * as utils from "./utils";
import * as exec from "./exec";
import { CamelDefinitionYaml } from "core/api/CamelDefinitionYaml";
export async function camelJbangGenerate(rootPath: string, openApiFullPath: string, fullPath: string, add: boolean, generateRoutes: boolean, generateRest: boolean) {
let command = prepareCommand("generate rest -i '" + openApiFullPath + "' --type=yaml ");
console.log(command);
if (generateRoutes === true) command = command + " --routes";
executeJbangCommand(rootPath, command, async (code, stdout, stderr) => {
console.log('Exit code:', code);
if (code === 0) {
const filename = path.basename(fullPath);
if (add) {
const readData = await utils.readFile(fullPath);
const sourceYaml = Buffer.from(readData).toString('utf8');
const yaml = CamelDefinitionYaml.addYamlToIntegrationYaml(filename, sourceYaml, stdout, generateRest, generateRoutes);
utils.write(fullPath, yaml);
} else {
const yaml = CamelDefinitionYaml.addYamlToIntegrationYaml(filename, undefined, stdout, generateRest, generateRoutes);
utils.write(fullPath, yaml);
}
} else {
window.showErrorMessage(stderr);
}
});
}
function prepareCommand(command: string): string {
const version = workspace.getConfiguration().get("camel.version");
return "jbang -Dcamel.jbang.version=" + version + " camel@apache/camel " + command;
}
export function camelJbangRun() {
const maxMessages: number = workspace.getConfiguration().get("camel.maxMessages") || -1;
const kameletsPath: string | undefined = workspace.getConfiguration().get("Karavan.kameletsPath");
const dev: boolean = workspace.getConfiguration().get("camel.dev") || false;
const cmd = "run * "
+ (maxMessages > -1 ? " --max-messages=" + maxMessages : "")
+ (kameletsPath && kameletsPath.trim().length > 0 ? " --local-kamelet-dir=" + kameletsPath : "");
const command = prepareCommand(cmd) + (dev === true ? " --dev" : "");
exec.execTerminalCommand("jbang-run", command);
}
export function createExportCommand(fullPath: string) {
const kameletsPath: string | undefined = workspace.getConfiguration().get("Karavan.kameletsPath");
const cmd = "export --fresh "
+ (fullPath ? " --directory=" + fullPath : '')
+ (kameletsPath && kameletsPath.trim().length > 0 ? " --local-kamelet-dir=" + kameletsPath : "");
return prepareCommand(cmd);
}
function executeJbangCommand(rootPath: string, command: string, callback: (code: number, stdout: any, stderr: any) => any) {
console.log("excute command", command);
const jbang = shell.which('jbang');
if (jbang) {
exec.execCommand(command, rootPath).then(res => {
if (res.result) callback(0, res.value, res.error)
else window.showErrorMessage(res.error);
}).catch(error => {
window.showErrorMessage(error);
});
} else {
window.showErrorMessage("JBang not found!");
}
}