From b857033b7a5a274dcb523cf52acfb3e06d159d05 Mon Sep 17 00:00:00 2001 From: Paras14 Date: Thu, 2 Jul 2026 12:50:17 +0200 Subject: [PATCH 1/2] #2071: Add SoapUi commandlet --- .../ide/commandlet/CommandletManagerImpl.java | 2 + .../devonfw/tools/ide/tool/soapui/SoapUi.java | 38 +++++++++++++++++++ cli/src/main/resources/nls/Help.properties | 2 + cli/src/main/resources/nls/Help_de.properties | 2 + .../tools/ide/tool/soapui/SoapUiTest.java | 34 +++++++++++++++++ .../_ide/urls/soapui/soapui/5.10.0/urls | 1 + .../soapui/project/settings/ide.properties | 1 + .../soapui/project/workspaces/main/readme | 1 + .../soapui/soapui/default/bin/soapui.bat | 2 + .../soapui/soapui/default/bin/soapui.sh | 2 + documentation/LICENSE.adoc | 1 + 11 files changed, 86 insertions(+) create mode 100644 cli/src/main/java/com/devonfw/tools/ide/tool/soapui/SoapUi.java create mode 100644 cli/src/test/java/com/devonfw/tools/ide/tool/soapui/SoapUiTest.java create mode 100644 cli/src/test/resources/ide-projects/soapui/_ide/urls/soapui/soapui/5.10.0/urls create mode 100644 cli/src/test/resources/ide-projects/soapui/project/settings/ide.properties create mode 100644 cli/src/test/resources/ide-projects/soapui/project/workspaces/main/readme create mode 100644 cli/src/test/resources/ide-projects/soapui/repository/soapui/soapui/default/bin/soapui.bat create mode 100644 cli/src/test/resources/ide-projects/soapui/repository/soapui/soapui/default/bin/soapui.sh diff --git a/cli/src/main/java/com/devonfw/tools/ide/commandlet/CommandletManagerImpl.java b/cli/src/main/java/com/devonfw/tools/ide/commandlet/CommandletManagerImpl.java index 580534f0f7..b0ff888c99 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/commandlet/CommandletManagerImpl.java +++ b/cli/src/main/java/com/devonfw/tools/ide/commandlet/CommandletManagerImpl.java @@ -59,6 +59,7 @@ import com.devonfw.tools.ide.tool.python.Python; import com.devonfw.tools.ide.tool.quarkus.Quarkus; import com.devonfw.tools.ide.tool.rust.Rust; +import com.devonfw.tools.ide.tool.soapui.SoapUi; import com.devonfw.tools.ide.tool.sonar.Sonar; import com.devonfw.tools.ide.tool.spring.Spring; import com.devonfw.tools.ide.tool.spyder.Spyder; @@ -175,6 +176,7 @@ public CommandletManagerImpl(IdeContext context) { add(new Claude(context)); add(new Mvnd(context)); add(new Just(context)); + add(new SoapUi(context)); } /** diff --git a/cli/src/main/java/com/devonfw/tools/ide/tool/soapui/SoapUi.java b/cli/src/main/java/com/devonfw/tools/ide/tool/soapui/SoapUi.java new file mode 100644 index 0000000000..076f909fb4 --- /dev/null +++ b/cli/src/main/java/com/devonfw/tools/ide/tool/soapui/SoapUi.java @@ -0,0 +1,38 @@ +package com.devonfw.tools.ide.tool.soapui; + +import com.devonfw.tools.ide.common.Tag; +import com.devonfw.tools.ide.context.IdeContext; +import com.devonfw.tools.ide.tool.LocalToolCommandlet; + +import java.util.Set; + +/** + * {@link LocalToolCommandlet} for SoapUI, an open source API testing tool for SOAP and REST services. + */ +public class SoapUi extends LocalToolCommandlet { + + private static final String SOAPUI = "soapui"; + + private static final String SOAPUI_BAT = SOAPUI + ".bat"; + + private static final String SOAPUI_BASH_SCRIPT = SOAPUI + ".sh"; + + /** + * The constructor. + * + * @param ideContext {@link IdeContext}. + */ + public SoapUi(IdeContext ideContext) { + super(ideContext, SOAPUI, Set.of(Tag.TEST, Tag.REST)); + } + + @Override + protected String getBinaryName() { + if (this.context.getSystemInfo().isWindows()) { + return SOAPUI_BAT; + } else { + return SOAPUI_BASH_SCRIPT; + } + } + +} diff --git a/cli/src/main/resources/nls/Help.properties b/cli/src/main/resources/nls/Help.properties index 1e52f11056..420ed41b5f 100644 --- a/cli/src/main/resources/nls/Help.properties +++ b/cli/src/main/resources/nls/Help.properties @@ -129,6 +129,8 @@ cmd.set-version.opt.--cfg=Selection of the configuration file (settings | home | cmd.set-version.val.version=The tool version to set. cmd.shell=Commandlet to start built-in shell with advanced auto-completion. cmd.shell.detail=The interactive shell offers console users a new user experience with an advanced auto-completion. Most inputs can be autocompleted in this mode. IDEasy will offer several matching commands e.g. 'install' or options e.g. '-t' by simply hitting the 'Tab' key after the expression e.g. 'in' for 'install' and 'intellij'. You can use the Tab key to switch between both suggestions. Users familiar with Git Bash will feel right at home, as the Tab feature works the same way.\nThis functionality is powered by JLine3, which provides advanced autocompletion capabilities, including cursor navigation within the suggested options. To exit this mode use 'CTRL+C', 'CTRL+D' or type 'exit'. +cmd.soapui=Tool commandlet for SoapUI. +cmd.soapui.detail=SoapUI is an open source tool for testing SOAP and REST webservices. Detailed documentation can be found at https://www.soapui.org/ cmd.sonar=Tool commandlet for SonarQube. cmd.sonar.detail=SonarQube is a platform for continuous inspection of code quality. Detailed documentation can be found at https://docs.sonarqube.org/ cmd.sonar.val.command=Action to perform (START|STOP|ANALYZE) diff --git a/cli/src/main/resources/nls/Help_de.properties b/cli/src/main/resources/nls/Help_de.properties index 3c4f9787cf..26256e8ebc 100644 --- a/cli/src/main/resources/nls/Help_de.properties +++ b/cli/src/main/resources/nls/Help_de.properties @@ -129,6 +129,8 @@ cmd.set-version.opt.--cfg=Auswahl der Konfigurationsdatei (settings | home | con cmd.set-version.val.version=Die zu setzende Werkzeug Version. cmd.shell=Kommando zum Starten der integrierten Shell mit erweiterter Autovervollständigung. cmd.shell.detail=Die integrierte Shell bietet Konsolenbenutzer*Innen eine neue Benutzererfahrung mit einer erweiterten Autovervollständigung. Die meisten Eingaben können in diesem Modus vervollständigt werden.\nIDEasy liefert zu vielen passende Kommandos wie z.B. 'install' oder Optionen wie z.B. '-t' bei der Betätigung der Tab-Taste, Vorschläge für die Autovervollständigung eines Ausdrucks wie z.B. 'in' für 'install' und 'intellij'. Sie können die Tab-Taste verwenden, um zwischen beiden Vorschlägen zu wechseln. Benutzer, die mit Git Bash vertraut sind, werden sich sofort zurechtfinden, da die Tab-Funktion auf die gleiche Weise funktioniert.\nDiese Funktionalität wird von JLine3 unterstützt, das erweiterte Autovervollständigungsfunktionen bietet, einschließlich der Cursor-Navigation innerhalb der vorgeschlagenen Optionen.\nUm den Modus wieder zu verlassen, drücken Sie einfach 'STRG+C' oder 'STRG+D' oder geben 'exit' in die Konsole ein. +cmd.soapui=Werkzeug Kommando für SoapUI. +cmd.soapui.detail=SoapUI ist ein Open-Source-Werkzeug zum Testen von SOAP- und REST-Webservices. Detaillierte Dokumentation ist zu finden unter https://www.soapui.org/ cmd.sonar=Werkzeug Kommando für SonarQube. cmd.sonar.detail=SonarQube ist eine Plattform für die kontinuierliche Code-Qualitätsprüfung. Detaillierte Dokumentation ist zu finden unter https://docs.sonarqube.org/ cmd.sonar.val.command=Auszuführende Aktion (START|STOP|ANALYZE) diff --git a/cli/src/test/java/com/devonfw/tools/ide/tool/soapui/SoapUiTest.java b/cli/src/test/java/com/devonfw/tools/ide/tool/soapui/SoapUiTest.java new file mode 100644 index 0000000000..2290222521 --- /dev/null +++ b/cli/src/test/java/com/devonfw/tools/ide/tool/soapui/SoapUiTest.java @@ -0,0 +1,34 @@ +package com.devonfw.tools.ide.tool.soapui; + +import org.junit.jupiter.api.Test; + +import com.devonfw.tools.ide.context.AbstractIdeContextTest; +import com.devonfw.tools.ide.context.IdeTestContext; +import com.github.tomakehurst.wiremock.junit5.WireMockRuntimeInfo; +import com.github.tomakehurst.wiremock.junit5.WireMockTest; + +/** + * Test of {@link SoapUi}. + */ +@WireMockTest +public class SoapUiTest extends AbstractIdeContextTest { + + private static final String PROJECT_SOAPUI = "soapui"; + + private static final String SOAPUI_VERSION = "5.10.0"; + + @Test + void testSoapUiInstall(WireMockRuntimeInfo wireMockRuntimeInfo) { + + // arrange + IdeTestContext context = newContext(PROJECT_SOAPUI, wireMockRuntimeInfo); + SoapUi soapUiCommandlet = context.getCommandletManager().getCommandlet(SoapUi.class); + + // act + soapUiCommandlet.install(); + + // assert + assertThat(context.getSoftwarePath().resolve("soapui/.ide.software.version")).exists().hasContent(SOAPUI_VERSION); + assertThat(context).logAtSuccess().hasMessageContaining("Successfully installed soapui in version " + SOAPUI_VERSION); + } +} diff --git a/cli/src/test/resources/ide-projects/soapui/_ide/urls/soapui/soapui/5.10.0/urls b/cli/src/test/resources/ide-projects/soapui/_ide/urls/soapui/soapui/5.10.0/urls new file mode 100644 index 0000000000..adcd99cba8 --- /dev/null +++ b/cli/src/test/resources/ide-projects/soapui/_ide/urls/soapui/soapui/5.10.0/urls @@ -0,0 +1 @@ +${testbaseurl}/download/soapui/soapui/5.10.0/soapui-5.10.0.tgz diff --git a/cli/src/test/resources/ide-projects/soapui/project/settings/ide.properties b/cli/src/test/resources/ide-projects/soapui/project/settings/ide.properties new file mode 100644 index 0000000000..6103f53c75 --- /dev/null +++ b/cli/src/test/resources/ide-projects/soapui/project/settings/ide.properties @@ -0,0 +1 @@ +SOAPUI_VERSION=5.10.0 diff --git a/cli/src/test/resources/ide-projects/soapui/project/workspaces/main/readme b/cli/src/test/resources/ide-projects/soapui/project/workspaces/main/readme new file mode 100644 index 0000000000..48c8fd9cd6 --- /dev/null +++ b/cli/src/test/resources/ide-projects/soapui/project/workspaces/main/readme @@ -0,0 +1 @@ +this is the IDE_ROOT directory diff --git a/cli/src/test/resources/ide-projects/soapui/repository/soapui/soapui/default/bin/soapui.bat b/cli/src/test/resources/ide-projects/soapui/repository/soapui/soapui/default/bin/soapui.bat new file mode 100644 index 0000000000..7cf3af8f9e --- /dev/null +++ b/cli/src/test/resources/ide-projects/soapui/repository/soapui/soapui/default/bin/soapui.bat @@ -0,0 +1,2 @@ +@echo off +echo soapui %* diff --git a/cli/src/test/resources/ide-projects/soapui/repository/soapui/soapui/default/bin/soapui.sh b/cli/src/test/resources/ide-projects/soapui/repository/soapui/soapui/default/bin/soapui.sh new file mode 100644 index 0000000000..42af9c11f2 --- /dev/null +++ b/cli/src/test/resources/ide-projects/soapui/repository/soapui/soapui/default/bin/soapui.sh @@ -0,0 +1,2 @@ +#!/bin/bash +echo "soapui $*" diff --git a/documentation/LICENSE.adoc b/documentation/LICENSE.adoc index b92b181ee0..100eeb6fca 100644 --- a/documentation/LICENSE.adoc +++ b/documentation/LICENSE.adoc @@ -106,6 +106,7 @@ The column `inclusion` indicates the way the component is included: |https://docs.astral.sh/uv/[uv] |Optional|https://docs.astral.sh/uv/reference/policies/license/[Apache 2.0] |https://github.com/openjdk/jfx[OpenJFX] |Optional|https://github.com/openjdk/jfx/blob/master/LICENSE[GPLv2] (with the “Classpath” Exception) |https://squirrel-sql.sourceforge.io/[SQuirreL SQL Client]|Optional|https://github.com/squirrel-sql-client/squirrel-sql-stable-releases/blob/main/LICENSE[LGPL 2.1] +|https://www.soapui.org/[SoapUI]|Optional|https://github.com/SmartBear/soapui/blob/next/LICENSE.txt[EUPL 1.1] |https://docs.nestjs.com/cli/overview[NestJS CLI] |Optional|https://github.com/nestjs/nest-cli/blob/master/LICENSE[MIT License] |https://docs.aws.amazon.com/cdk/v2/guide/home.html[AWS CDK CLI] |Optional|https://github.com/aws/aws-cdk-cli/blob/main/LICENSE[Apache 2.0] |https://www.spyder-ide.org/[Spyder] |Optional|https://github.com/spyder-ide/spyder/blob/master/LICENSE.txt[MIT License] From be293d3af0adbce64731da9bbbd0e8f2af8ffbff Mon Sep 17 00:00:00 2001 From: Paras14 Date: Thu, 2 Jul 2026 13:02:20 +0200 Subject: [PATCH 2/2] #2071: Add entry for issue 1720 SoapUI support in CHANGELOG.adoc --- CHANGELOG.adoc | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 8237e2c626..778242a7fd 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -3,6 +3,7 @@ This file documents all notable changes to https://github.com/devonfw/IDEasy[IDEasy]. == 2026.07.001 +* https://github.com/devonfw/IDEasy/issues/1720[#1720]: Add SoapUI support Release with new features and bugfixes: