Skip to content

Commit

Permalink
Merge branch 'main' into feature/171-variable-syntax
Browse files Browse the repository at this point in the history
  • Loading branch information
hohwille authored Jun 25, 2024
2 parents f957f79 + 2f837b5 commit da85257
Show file tree
Hide file tree
Showing 10 changed files with 181 additions and 28 deletions.
2 changes: 1 addition & 1 deletion README.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ image::documentation/images/logo.png["Logo",align="center",width=60%]
Tool to automate the setup and updates of a development environment for any project (Successor of https://github.com/devonfw/ide[devonfw-ide]).

image:https://img.shields.io/github/license/devonfw/IDEasy.svg?label=License["Apache License, Version 2.0",link=https://github.com/devonfw/IDEasy/blob/master/LICENSE]
image:https://img.shields.io/maven-central/v/com.devonfw.tools.ide/ide-cli.svg?label=Maven%20Central["Maven Central",link=https://search.maven.org/search?q=g:com.devonfw.tools.ide]
image:https://img.shields.io/maven-central/v/com.devonfw.tools.IDEasy/ide-cli.svg?label=Maven%20Central["Maven Central",link=https://search.maven.org/search?q=g:com.devonfw.tools.IDEasy]
image:https://github.com/devonfw/IDEasy/actions/workflows/build.yml/badge.svg["Build Status",link="https://github.com/devonfw/IDEasy/actions/workflows/build.yml"]
image:https://github.com/devonfw/IDEasy/actions/workflows/update-urls.yml/badge.svg["Update URLS Status",link="https://github.com/devonfw/IDEasy/actions/workflows/update-urls.yml"]
image:https://github.com/devonfw/IDEasy/actions/workflows/nightly-build.yml/badge.svg["Nightly Release", link="https://github.com/devonfw/IDEasy/actions/workflows/nightly-build.yml"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import com.devonfw.tools.ide.tool.node.Node;
import com.devonfw.tools.ide.tool.npm.Npm;
import com.devonfw.tools.ide.tool.oc.Oc;
import com.devonfw.tools.ide.tool.pgadmin.PgAdmin;
import com.devonfw.tools.ide.tool.quarkus.Quarkus;
import com.devonfw.tools.ide.tool.sonar.Sonar;
import com.devonfw.tools.ide.tool.terraform.Terraform;
Expand Down Expand Up @@ -101,6 +102,7 @@ public CommandletManagerImpl(IdeContext context) {
add(new Docker(context));
add(new Sonar(context));
add(new GraalVm(context));
add(new PgAdmin(context));
}

private void add(Commandlet commandlet) {
Expand Down
3 changes: 3 additions & 0 deletions cli/src/main/java/com/devonfw/tools/ide/common/Tag.java
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,9 @@ public final class Tag {
/** {@link #Tag} for WSL. */
public static final Tag WSL = create("wsl", VIRTUALIZATION);

/** {@link Tag} for everything related to databases. */
public static final Tag DB = create("database", ROOT);

/** {@link #Tag} for network. */
public static final Tag NETWORK = create("network", ROOT, false, "remote");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,26 +33,28 @@ public GlobalToolCommandlet(IdeContext context, String tool, Set<Tag> tags) {
}

/**
* Performs the installation of the {@link #getName() tool} via a package manager.
* Performs the installation or uninstallation of the {@link #getName() tool} via a package manager.
*
* @param silent {@code true} if called recursively to suppress verbose logging, {@code false} otherwise.
* @param commandStrings commandStrings The package manager command strings to execute.
* @return {@code true} if installation succeeds with any of the package manager commands, {@code false} otherwise.
* @return {@code true} if installation or uninstallation succeeds with any of the package manager commands,
* {@code false} otherwise.
*/
protected boolean installWithPackageManager(boolean silent, String... commandStrings) {
protected boolean runWithPackageManager(boolean silent, String... commandStrings) {

List<PackageManagerCommand> pmCommands = Arrays.stream(commandStrings).map(PackageManagerCommand::of).toList();
return installWithPackageManager(silent, pmCommands);
return runWithPackageManager(silent, pmCommands);
}

/**
* Performs the installation of the {@link #getName() tool} via a package manager.
*
* Performs the installation or uninstallation of the {@link #getName() tool} via a package manager.
*
* @param silent {@code true} if called recursively to suppress verbose logging, {@code false} otherwise.
* @param pmCommands A list of {@link PackageManagerCommand} to be used for installation.
* @return {@code true} if installation succeeds with any of the package manager commands, {@code false} otherwise.
* @param pmCommands A list of {@link PackageManagerCommand} to be used for installation or uninstallation.
* @return {@code true} if installation or uninstallation succeeds with any of the package manager commands,
* {@code false} otherwise.
*/
protected boolean installWithPackageManager(boolean silent, List<PackageManagerCommand> pmCommands) {
protected boolean runWithPackageManager(boolean silent, List<PackageManagerCommand> pmCommands) {

for (PackageManagerCommand pmCommand : pmCommands) {
PackageManager packageManager = pmCommand.packageManager();
Expand All @@ -63,7 +65,7 @@ protected boolean installWithPackageManager(boolean silent, List<PackageManagerC
}

if (executePackageManagerCommand(pmCommand, silent)) {
return true; // Successfully installed
return true; // Success
}
}
return false; // None of the package manager commands were successful
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,13 @@ public boolean isExtract() {
protected boolean doInstall(boolean silent) {

if (this.context.getSystemInfo().isLinux()) {
return installWithPackageManager(silent, getPackageManagerCommands());
return runWithPackageManager(silent, getPackageManagerCommandsInstall());
} else {
return super.doInstall(silent);
}
}

private List<PackageManagerCommand> getPackageManagerCommands() {
private List<PackageManagerCommand> getPackageManagerCommandsInstall() {

String edition = getEdition();
ToolRepository toolRepository = this.context.getDefaultToolRepository();
Expand Down
87 changes: 87 additions & 0 deletions cli/src/main/java/com/devonfw/tools/ide/tool/pgadmin/PgAdmin.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package com.devonfw.tools.ide.tool.pgadmin;

import com.devonfw.tools.ide.common.Tag;
import com.devonfw.tools.ide.context.IdeContext;
import com.devonfw.tools.ide.repo.ToolRepository;
import com.devonfw.tools.ide.tool.GlobalToolCommandlet;
import com.devonfw.tools.ide.tool.PackageManager;
import com.devonfw.tools.ide.tool.PackageManagerCommand;
import com.devonfw.tools.ide.version.VersionIdentifier;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;

/**
* {@link GlobalToolCommandlet} for <a href="https://www.pgadmin.org/">pgadmin</a>
*/
public class PgAdmin extends GlobalToolCommandlet {
/**
* The constructor.
*
* @param context the {@link IdeContext}.
*/
public PgAdmin(IdeContext context) {

//TODO: add relevant Tag.
super(context, "pgadmin", Set.of(Tag.DB));
}

@Override
protected boolean doInstall(boolean silent) {

if (this.context.getSystemInfo().isLinux()) {
return runWithPackageManager(silent, getPackageManagerCommandsInstall());
} else {
return super.doInstall(silent);
}
}

private List<PackageManagerCommand> getPackageManagerCommandsInstall() {

String edition = getEdition();
ToolRepository toolRepository = this.context.getDefaultToolRepository();
VersionIdentifier configuredVersion = getConfiguredVersion();
String resolvedVersion = toolRepository.resolveVersion(this.tool, edition, configuredVersion).toString();

List<PackageManagerCommand> pmCommands = new ArrayList<>();

pmCommands.add(new PackageManagerCommand(PackageManager.APT, Arrays.asList(
"curl -fsS https://www.pgadmin.org/static/packages_pgadmin_org.pub | "
+ "sudo gpg --yes --dearmor -o /usr/share/keyrings/packages-pgadmin-org.gpg",
"sudo sh -c 'echo \"deb [signed-by=/usr/share/keyrings/packages-pgadmin-org.gpg] "
+ "https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/$(lsb_release -cs) pgadmin4 main\" "
+ "> /etc/apt/sources.list.d/pgadmin4.list && apt update'", String.format(
"sudo apt install -y --allow-downgrades pgadmin4=%1$s pgadmin4-server=%1$s pgadmin4-desktop=%1$s pgadmin4-web=%1$s",
resolvedVersion))));

return pmCommands;
}

@Override
public void uninstall() {

if (this.context.getSystemInfo().isLinux()) {
runWithPackageManager(false, getPackageManagerCommandsUninstall());
} else {
super.uninstall();
}
}

private List<PackageManagerCommand> getPackageManagerCommandsUninstall() {

List<PackageManagerCommand> pmCommands = new ArrayList<>();

pmCommands.add(new PackageManagerCommand(PackageManager.APT,
Arrays.asList("sudo apt -y autoremove pgadmin4 pgadmin4-server pgadmin4-desktop pgadmin4-web")));

return pmCommands;
}

@Override
protected String getBinaryName() {

return "pgadmin4";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package com.devonfw.tools.ide.tool.pgadmin;

import com.devonfw.tools.ide.os.OperatingSystem;
import com.devonfw.tools.ide.url.model.folder.UrlVersion;
import com.devonfw.tools.ide.url.updater.WebsiteUrlUpdater;
import com.devonfw.tools.ide.version.VersionIdentifier;

import java.util.regex.Pattern;

/**
* {@link WebsiteUrlUpdater} for pgadmin.
*/
public class PgAdminUrlUpdater extends WebsiteUrlUpdater {

@Override
protected String getTool() {

return "pgadmin";
}

@Override
protected String getVersionUrl() {

return "https://www.postgresql.org/ftp/pgadmin/pgadmin4/";
}

@Override
protected Pattern getVersionPattern() {

return Pattern.compile("v(\\d{1,2}+\\.\\d+)");
}

@Override
protected String getVersionPrefixToRemove() {

return "v";
}

@Override
protected void addVersion(UrlVersion urlVersion) {

VersionIdentifier vid = urlVersion.getVersionIdentifier();

String baseUrl = "https://ftp.postgresql.org/pub/pgadmin/pgadmin4/";
doAddVersion(urlVersion, baseUrl + "v${version}/windows/pgadmin4-${version}-x64.exe", OperatingSystem.WINDOWS);

if (vid.compareVersion(VersionIdentifier.of("7.6")).isGreater()) {
doAddVersion(urlVersion, baseUrl + "v${version}/macos/pgadmin4-${version}-arm64.dmg", MAC, ARM64);
doAddVersion(urlVersion, baseUrl + "v${version}/macos/pgadmin4-${version}-x86_64.dmg", MAC, X64);
} else {
doAddVersion(urlVersion, baseUrl + "v${version}/macos/pgadmin4-${version}.dmg", MAC);
}
}

}
Original file line number Diff line number Diff line change
@@ -1,13 +1,5 @@
package com.devonfw.tools.ide.url.updater;

import java.nio.file.Path;
import java.time.Instant;
import java.util.Arrays;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.devonfw.tools.ide.tool.androidstudio.AndroidStudioUrlUpdater;
import com.devonfw.tools.ide.tool.aws.AwsUrlUpdater;
import com.devonfw.tools.ide.tool.az.AzureUrlUpdater;
Expand All @@ -26,6 +18,7 @@
import com.devonfw.tools.ide.tool.gradle.GradleUrlUpdater;
import com.devonfw.tools.ide.tool.helm.HelmUrlUpdater;
import com.devonfw.tools.ide.tool.intellij.IntellijUrlUpdater;
import com.devonfw.tools.ide.tool.jasypt.JasyptUrlUpdater;
import com.devonfw.tools.ide.tool.java.JavaUrlUpdater;
import com.devonfw.tools.ide.tool.jenkins.JenkinsUrlUpdater;
import com.devonfw.tools.ide.tool.jmc.JmcUrlUpdater;
Expand All @@ -37,6 +30,7 @@
import com.devonfw.tools.ide.tool.node.NodeUrlUpdater;
import com.devonfw.tools.ide.tool.npm.NpmUrlUpdater;
import com.devonfw.tools.ide.tool.oc.OcUrlUpdater;
import com.devonfw.tools.ide.tool.pgadmin.PgAdminUrlUpdater;
import com.devonfw.tools.ide.tool.pip.PipUrlUpdater;
import com.devonfw.tools.ide.tool.python.PythonUrlUpdater;
import com.devonfw.tools.ide.tool.quarkus.QuarkusUrlUpdater;
Expand All @@ -45,7 +39,13 @@
import com.devonfw.tools.ide.tool.tomcat.TomcatUrlUpdater;
import com.devonfw.tools.ide.tool.vscode.VsCodeUrlUpdater;
import com.devonfw.tools.ide.url.model.folder.UrlRepository;
import com.devonfw.tools.ide.tool.jasypt.JasyptUrlUpdater;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.nio.file.Path;
import java.time.Instant;
import java.util.Arrays;
import java.util.List;

/**
* The {@code UpdateManager} class manages the update process for various tools by using a list of
Expand All @@ -63,12 +63,12 @@ public class UpdateManager extends AbstractProcessorWithTimeout {
new AzureUrlUpdater(), new CobigenUrlUpdater(), new DockerDesktopUrlUpdater(), new DotNetUrlUpdater(),
new EclipseCppUrlUpdater(), new EclipseJeeUrlUpdater(), new EclipseJavaUrlUpdater(), new GCloudUrlUpdater(),
new GcViewerUrlUpdater(), new GhUrlUpdater(), new GraalVmCommunityUpdater(), new GraalVmOracleUrlUpdater(),
new GradleUrlUpdater(), new HelmUrlUpdater(), new IntellijUrlUpdater(), new JavaUrlUpdater(),
new JenkinsUrlUpdater(), new JmcUrlUpdater(), new KotlincUrlUpdater(), new KotlincNativeUrlUpdater(),
new LazyDockerUrlUpdater(), new MvnUrlUpdater(), new Mvn4UrlUpdater(), new NodeUrlUpdater(), new NpmUrlUpdater(), new OcUrlUpdater(),
new PipUrlUpdater(), new PythonUrlUpdater(), new QuarkusUrlUpdater(), new DockerRancherDesktopUrlUpdater(),
new SonarUrlUpdater(), new TerraformUrlUpdater(), new TomcatUrlUpdater(), new VsCodeUrlUpdater(),
new JasyptUrlUpdater());
new GradleUrlUpdater(), new HelmUrlUpdater(), new IntellijUrlUpdater(), new JasyptUrlUpdater(),
new JavaUrlUpdater(), new JenkinsUrlUpdater(), new JmcUrlUpdater(), new KotlincUrlUpdater(),
new KotlincNativeUrlUpdater(), new LazyDockerUrlUpdater(), new MvnUrlUpdater(), new Mvn4UrlUpdater(),
new NodeUrlUpdater(), new NpmUrlUpdater(), new OcUrlUpdater(), new PgAdminUrlUpdater(), new PipUrlUpdater(),
new PythonUrlUpdater(), new QuarkusUrlUpdater(), new DockerRancherDesktopUrlUpdater(), new SonarUrlUpdater(),
new TerraformUrlUpdater(), new TomcatUrlUpdater(), new VsCodeUrlUpdater());

/**
* The constructor.
Expand Down
2 changes: 2 additions & 0 deletions cli/src/main/resources/nls/Help.properties
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ cmd.npm=Tool commandlet for Npm (JavaScript Node Package Manager).
cmd.npm.detail=TODO npm
cmd.oc=Tool commandlet for Openshift CLI (Kubernetes management tool).
cmd.oc.detail=TODO oc
cmd.pgadmin=Tool commandlet for pgAdmin.
cmd.pgadmin.detail=pgAdmin is an open source management tool for PostgreSQL and derivative relational databases. Detailed documentation can be found at https://www.pgadmin.org/docs/pgadmin4/latest/index.html
cmd.quarkus=Tool commandlet for Quarkus (framework for cloud-native apps).
cmd.quarkus.detail=TODO quarkus
cmd.repository=Setup pre-configured git repositories (clone, build, import).
Expand Down
2 changes: 2 additions & 0 deletions cli/src/main/resources/nls/Help_de.properties
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ cmd.npm=Werkzeug Kommando für Npm (JavaScript Node Package Manager).
cmd.npm.detail=TODO DE npm
cmd.oc=Werkzeug Kommando für Openshift CLI (Kubernetes Management Tool).
cmd.oc.detail=TODO DE oc
cmd.pgadmin=Werkzeug Kommando für pgAdmin.
cmd.pgadmin.detail=pgAdmin ist ein Open-Source-Verwaltungswerkzeug for PostgreSQL und verwandte relationale Datenbanken. Detaillierte Dokumentation ist erhältlich unter https://www.pgadmin.org/docs/pgadmin4/latest/index.html
cmd.quarkus=Werkzeug Kommando für Quarkus (Framework für Cloud-native Anwendungen).
cmd.quarkus.detail=TODO DE quarkus
cmd.repository=Richtet das vorkonfigurierte Git Repository ein.
Expand Down

0 comments on commit da85257

Please sign in to comment.