Introduce CMS client
[lgpl/argeo-commons.git] / org.argeo.cms.cli / src / org / argeo / cms / cli / CmsCommands.java
index 6f2db4ff22db5e495f5374f8cc162af1edab80e2..50977d1e1045a58bc0132cccd4389f78a631bf66 100644 (file)
@@ -6,12 +6,12 @@ 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.api.cli.CommandArgsException;
 import org.argeo.api.cli.CommandsCli;
 import org.argeo.api.cli.DescribedCommand;
-import org.argeo.cms.client.WebSocketEventClient;
+import org.argeo.cms.client.CmsClient;
 import org.argeo.cms.client.WebSocketPing;
 
+/** Commands dealing with CMS. */
 public class CmsCommands extends CommandsCli {
        final static Option connectOption = Option.builder().option("c").longOpt("connect").desc("server to connect to")
                        .hasArg(true).build();
@@ -19,7 +19,9 @@ public class CmsCommands extends CommandsCli {
        public CmsCommands(String commandName) {
                super(commandName);
                addCommand("ping", new Ping());
-               addCommand("event", new Events());
+               addCommand("get", new Get());
+               addCommand("status", new Status());
+               addCommand("event", new EventCommands("event"));
        }
 
        @Override
@@ -60,7 +62,7 @@ public class CmsCommands extends CommandsCli {
 
        }
 
-       class Events implements DescribedCommand<Void> {
+       class Get implements DescribedCommand<String> {
 
                @Override
                public Options getOptions() {
@@ -70,32 +72,56 @@ public class CmsCommands extends CommandsCli {
                }
 
                @Override
-               public Void apply(List<String> t) {
+               public String apply(List<String> t) {
                        CommandLine line = toCommandLine(t);
                        List<String> remaining = line.getArgList();
-                       if (remaining.size() == 0) {
-                               throw new CommandArgsException("There must be at least one argument");
+                       String additionalUri = null;
+                       if (remaining.size() != 0) {
+                               additionalUri = remaining.get(0);
                        }
-                       String topic = remaining.get(0);
 
-                       String uriArg = line.getOptionValue(connectOption);
-                       // TODO make it more robust (trailing /, etc.)
-                       URI uri = URI.create(uriArg);
-                       if ("".equals(uri.getPath())) {
-                               uri = URI.create(uri.toString() + "/cms/status/event/" + topic);
-                       }
-                       new WebSocketEventClient(uri).run();
-                       return null;
+                       String connectUri = line.getOptionValue(connectOption);
+                       CmsClient cmsClient = new CmsClient(URI.create(connectUri));
+                       return additionalUri != null ? cmsClient.getAsString(URI.create(additionalUri)) : cmsClient.getAsString();
+               }
+
+               @Override
+               public String getUsage() {
+                       return "[URI]";
+               }
+
+               @Override
+               public String getDescription() {
+                       return "Retrieve this URI as a string";
+               }
+
+       }
+
+       class Status implements DescribedCommand<String> {
+
+               @Override
+               public Options getOptions() {
+                       Options options = new Options();
+                       options.addOption(connectOption);
+                       return options;
+               }
+
+               @Override
+               public String apply(List<String> t) {
+                       CommandLine line = toCommandLine(t);
+                       String connectUri = line.getOptionValue(connectOption);
+                       CmsClient cmsClient = new CmsClient(URI.create(connectUri));
+                       return cmsClient.getAsString(URI.create("/cms/status"));
                }
 
                @Override
                public String getUsage() {
-                       return "TOPIC";
+                       return "[URI]";
                }
 
                @Override
                public String getDescription() {
-                       return "Listen to events on a topic";
+                       return "Retrieve the CMS status as a string";
                }
 
        }