Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#182 Implement global tool installation for pgadmin #388

Merged
merged 12 commits into from
Jun 25, 2024
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
67 changes: 67 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,67 @@
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.MISC));
}

@Override
protected boolean doInstall(boolean silent) {

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

private List<PackageManagerCommand> getPackageManagerCommands() {

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 --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
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
1 change: 1 addition & 0 deletions cli/src/main/resources/nls/Help.properties
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ cmd.mvn=Tool commandlet for Maven (Build-Tool).
cmd.node=Tool commandlet for Node.js (JavaScript runtime).
cmd.npm=Tool commandlet for Npm (JavaScript Node Package Manager).
cmd.oc=Tool commandlet for Openshift CLI (Kubernetes management tool).
cmd.pgadmin=Tool commandlet for pgAdmin.
cmd.quarkus=Tool commandlet for Quarkus (framework for cloud-native apps).
cmd.repository=Setup pre-configured git repositories (clone, build, import).
cmd.repository.val.repository=The name of the properties file of the pre-configured git repository to setup, omit to setup all active repositories.
Expand Down
1 change: 1 addition & 0 deletions cli/src/main/resources/nls/Help_de.properties
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ cmd.mvn=Werkzeug Kommando für Maven (Build-Werkzeug).
cmd.node=Werkzeug Kommando für Node.js (JavaScript Laufzeitumgebung).
cmd.npm=Werkzeug Kommando für Npm (JavaScript Node Package Manager).
cmd.oc=Werkzeug Kommando für Openshift CLI (Kubernetes Management Tool).
cmd.pgadmin=Werkzeug Kommando für pgAdmin.
cmd.quarkus=Werkzeug Kommando für Quarkus (Framework für Cloud-native Anwendungen).
cmd.repository=Richtet das vorkonfigurierte Git Repository ein.
cmd.repository.val.repository=Der Name der Properties-Datei des vorkonfigurierten Git Repositories zum Einrichten. Falls nicht angegeben, werden alle aktiven Projekte eingerichtet.
Expand Down