Move some CLIs to Argeo Commons.
authorMathieu Baudier <mbaudier@argeo.org>
Sun, 10 Jul 2022 10:14:32 +0000 (12:14 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Sun, 10 Jul 2022 10:14:32 +0000 (12:14 +0200)
cms/org.argeo.slc.cms/src/org/argeo/slc/cli/posix/Echo.java
cms/org.argeo.slc.cms/src/org/argeo/slc/cli/posix/PosixCommands.java
suite/org.argeo.slc.tool/src/org/argeo/slc/tool/CmsCli.java [deleted file]
suite/org.argeo.slc.tool/src/org/argeo/slc/tool/Main.java
suite/org.argeo.slc.tool/src/org/argeo/slc/tool/SshCli.java [deleted file]
suite/org.argeo.slc.tool/src/org/argeo/slc/tool/swt/MiniDesktopCli.java

index d773760bc23809e3e9522264d478e5578be8ab3e..b5576f93de558dd4d187151f53925e0fb83e5c7e 100644 (file)
@@ -5,7 +5,7 @@ import java.util.List;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
-import org.argeo.cms.cli.DescribedCommand;
+import org.argeo.api.cli.DescribedCommand;
 
 public class Echo implements DescribedCommand<String> {
 
index bb5920e55ba259ee9d533ad5213bb36f1ff9eef4..3f463efea225a95abbd5f85ed0f72f5d107ae4a2 100644 (file)
@@ -1,6 +1,6 @@
 package org.argeo.slc.cli.posix;
 
-import org.argeo.cms.cli.CommandsCli;
+import org.argeo.api.cli.CommandsCli;
 
 /** POSIX commands. */
 public class PosixCommands extends CommandsCli {
diff --git a/suite/org.argeo.slc.tool/src/org/argeo/slc/tool/CmsCli.java b/suite/org.argeo.slc.tool/src/org/argeo/slc/tool/CmsCli.java
deleted file mode 100644 (file)
index 0619209..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-package org.argeo.slc.tool;
-
-import java.lang.management.ManagementFactory;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.List;
-import java.util.concurrent.ForkJoinPool;
-
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.Option;
-import org.apache.commons.cli.Options;
-import org.argeo.api.acr.spi.ProvidedRepository;
-import org.argeo.api.cms.CmsApp;
-import org.argeo.cms.cli.CommandsCli;
-import org.argeo.cms.cli.DescribedCommand;
-import org.argeo.cms.runtime.StaticCms;
-import org.argeo.cms.swt.app.CmsUserApp;
-import org.argeo.cms.ui.rcp.CmsRcpDisplayFactory;
-import org.argeo.util.register.Component;
-import org.argeo.util.register.SimpleRegister;
-
-public class CmsCli extends CommandsCli {
-
-       public CmsCli(String commandName) {
-               super(commandName);
-               addCommand("static", new Launch());
-       }
-
-       @Override
-       public String getDescription() {
-               return "Argeo CMS utilities.";
-       }
-
-       static class Launch implements DescribedCommand<String> {
-               private Option dataOption;
-               private Option uiOption;
-
-               @Override
-               public Options getOptions() {
-                       Options options = new Options();
-                       dataOption = Option.builder().longOpt("data").hasArg().required()
-                                       .desc("path to the writable data area (mandatory)").build();
-                       uiOption = Option.builder().longOpt("ui").desc("open a user interface").build();
-                       options.addOption(dataOption);
-                       options.addOption(uiOption);
-                       return options;
-               }
-
-               @Override
-               public String apply(List<String> args) {
-                       CommandLine cl = toCommandLine(args);
-                       String dataPath = cl.getOptionValue(dataOption);
-                       boolean ui = cl.hasOption(uiOption);
-
-                       Path instancePath = Paths.get(dataPath);
-                       System.setProperty("osgi.instance.area", instancePath.toUri().toString());
-
-                       StaticCms staticCms = new StaticCms() {
-                               @Override
-                               protected void addComponents(SimpleRegister register) {
-                                       if (ui) {
-                                               Component<? extends ProvidedRepository> contentRepositoryC = register
-                                                               .find(ProvidedRepository.class, null).first();
-                                               CmsUserApp cmsApp = new CmsUserApp();
-                                               Component<CmsUserApp> cmsAppC = new Component.Builder<>(cmsApp) //
-                                                               .addType(CmsApp.class) //
-                                                               .addType(CmsUserApp.class) //
-                                                               .addDependency(contentRepositoryC.getType(ProvidedRepository.class),
-                                                                               cmsApp::setContentRepository, null) //
-                                                               .build(register);
-
-                                               CmsRcpDisplayFactory displayFactory = new CmsRcpDisplayFactory();
-                                               Component<CmsRcpDisplayFactory> displayFactoryC = new Component.Builder<>(displayFactory) //
-                                                               .addActivation(displayFactory::init) //
-                                                               .addDeactivation(displayFactory::destroy) //
-                                                               .build(register);
-
-                                       }
-                               }
-
-                               @Override
-                               protected void postActivation(SimpleRegister register) {
-                                       if (ui) {
-                                               Component<? extends CmsUserApp> cmsAppC = register.find(CmsUserApp.class, null).first();
-                                               CmsRcpDisplayFactory.openCmsApp(null, cmsAppC.get(), "data", (e) -> {
-                                                       // asynchronous in order to avoid deadlock in UI thread
-                                                       ForkJoinPool.commonPool().execute(() -> stop());
-                                               });
-                                       }
-                               }
-
-                       };
-                       Runtime.getRuntime().addShutdownHook(new Thread(() -> staticCms.stop(), "Static CMS Shutdown"));
-                       staticCms.start();
-
-                       long jvmUptime = ManagementFactory.getRuntimeMXBean().getUptime();
-                       System.out.println("Static CMS available in " + jvmUptime + " ms.");
-
-                       staticCms.waitForStop();
-
-                       return null;
-               }
-
-               @Override
-               public String getDescription() {
-                       return "Launch a static CMS.";
-               }
-
-       }
-}
index 26b6156004aa1880be2e0db9db1ff766a4fbf471..22e345f55f45a33f7d66aa6a5ebed2a580a76252 100644 (file)
@@ -3,7 +3,9 @@ package org.argeo.slc.tool;
 import java.security.Security;
 
 import org.apache.commons.cli.Option;
-import org.argeo.cms.cli.CommandsCli;
+import org.argeo.api.cli.CommandsCli;
+import org.argeo.cms.ssh.cli.SshCli;
+import org.argeo.cms.swt.rcp.cli.CmsCli;
 import org.argeo.slc.cli.posix.PosixCommands;
 import org.argeo.slc.tool.swt.MiniDesktopCli;
 import org.bouncycastle.jce.provider.BouncyCastleProvider;
diff --git a/suite/org.argeo.slc.tool/src/org/argeo/slc/tool/SshCli.java b/suite/org.argeo.slc.tool/src/org/argeo/slc/tool/SshCli.java
deleted file mode 100644 (file)
index bc82e40..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-package org.argeo.slc.tool;
-
-import java.io.Console;
-import java.io.IOException;
-import java.lang.management.ManagementFactory;
-import java.net.URI;
-import java.security.GeneralSecurityException;
-import java.security.KeyPair;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Scanner;
-
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.Option;
-import org.apache.commons.cli.Options;
-import org.apache.sshd.agent.SshAgent;
-import org.apache.sshd.agent.SshAgentFactory;
-import org.apache.sshd.agent.local.LocalAgentFactory;
-import org.apache.sshd.agent.unix.UnixAgentFactory;
-import org.apache.sshd.client.config.keys.ClientIdentityLoader;
-import org.apache.sshd.common.NamedResource;
-import org.apache.sshd.common.config.keys.FilePasswordProvider;
-import org.argeo.cms.cli.CommandsCli;
-import org.argeo.cms.cli.DescribedCommand;
-import org.argeo.cms.ssh.AbstractSsh;
-import org.argeo.cms.ssh.Ssh;
-import org.argeo.cms.ssh.SshKeyPair;
-
-public class SshCli extends CommandsCli {
-       public SshCli(String commandName) {
-               super(commandName);
-               addCommand("shell", new SshShell());
-       }
-
-       @Override
-       public String getDescription() {
-               return "Argeo CMS utilities.";
-       }
-
-       static class SshShell implements DescribedCommand<String> {
-               private Option portOption;
-
-               @Override
-               public Options getOptions() {
-                       Options options = new Options();
-                       portOption = Option.builder().option("p").longOpt("port").hasArg().desc("port to connect to").build();
-                       options.addOption(portOption);
-                       return options;
-               }
-
-               @Override
-               public String apply(List<String> args) {
-                       CommandLine cl = toCommandLine(args);
-                       String portStr = cl.getOptionValue(portOption);
-                       if (portStr == null)
-                               portStr = "22";
-
-                       String host = cl.getArgList().get(0);
-
-                       String uriStr = "ssh://" + host + ":" + portStr + "/";
-                       // System.out.println(uriStr);
-                       URI uri = URI.create(uriStr);
-
-                       Ssh ssh = null;
-                       try {
-                               ssh = new Ssh(uri);
-                               boolean osAgent;
-                               SshAgent sshAgent;
-                               try {
-                                       String sshAuthSockentEnv = System.getenv(SshAgent.SSH_AUTHSOCKET_ENV_NAME);
-                                       if (sshAuthSockentEnv != null) {
-                                               ssh.getSshClient().getProperties().put(SshAgent.SSH_AUTHSOCKET_ENV_NAME, sshAuthSockentEnv);
-                                               SshAgentFactory agentFactory = new UnixAgentFactory();
-                                               ssh.getSshClient().setAgentFactory(agentFactory);
-                                               sshAgent = agentFactory.createClient(null, ssh.getSshClient());
-                                               osAgent = true;
-                                       } else {
-                                               osAgent = false;
-                                       }
-                               } catch (Exception e) {
-                                       e.printStackTrace();
-                                       osAgent = false;
-                               }
-
-                               if (!osAgent) {
-                                       SshAgentFactory agentFactory = new LocalAgentFactory();
-                                       ssh.getSshClient().setAgentFactory(agentFactory);
-                                       sshAgent = agentFactory.createClient(null, ssh.getSshClient());
-                                       String keyPath = System.getProperty("user.home") + "/.ssh/id_rsa";
-
-                                       char[] keyPassword = AbstractSsh.readPassword();
-                                       NamedResource namedResource = new NamedResource() {
-
-                                               @Override
-                                               public String getName() {
-                                                       return keyPath;
-                                               }
-                                       };
-                                       KeyPair keyPair = ClientIdentityLoader.DEFAULT
-                                                       .loadClientIdentities(null, namedResource, FilePasswordProvider.of(new String(keyPassword)))
-                                                       .iterator().next();
-                                       sshAgent.addIdentity(keyPair, "NO COMMENT");
-                               }
-
-//                             char[] keyPassword = AbstractSsh.readPassword();
-//                             SshKeyPair keyPair = SshKeyPair.loadDefault(keyPassword);
-//                             Arrays.fill(keyPassword, '*');
-//                             ssh.setSshKeyPair(keyPair);
-//                             ssh.authenticate();
-                               ssh.verifyAuth();
-
-                               long jvmUptime = ManagementFactory.getRuntimeMXBean().getUptime();
-                               System.out.println("Ssh available in " + jvmUptime + " ms.");
-
-                               AbstractSsh.openShell(ssh);
-                       } catch (IOException | GeneralSecurityException e) {
-                               // TODO Auto-generated catch block
-                               e.printStackTrace();
-                       } finally {
-                               if (ssh != null)
-                                       ssh.closeSession();
-                       }
-                       return null;
-               }
-
-               @Override
-               public String getDescription() {
-                       return "Launch a static CMS.";
-               }
-
-       }
-}
index 748ee8f3fcc889b845b340e85b3391b51a6dd0af..ed52674f755054119c65ce13ec6092f6952bff49 100644 (file)
@@ -5,8 +5,8 @@ import java.util.List;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
-import org.argeo.cms.cli.CommandsCli;
-import org.argeo.cms.cli.DescribedCommand;
+import org.argeo.api.cli.CommandsCli;
+import org.argeo.api.cli.DescribedCommand;
 import org.argeo.minidesktop.MiniDesktopManager;
 
 public class MiniDesktopCli extends CommandsCli {