All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.snapscript.studio.agent.cli.CommandLineBuilder Maven / Gradle / Ivy

The newest version!
package org.snapscript.studio.agent.cli;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class CommandLineBuilder {
   
   private final List options;
   private final CommandOptionParser parser;

   public CommandLineBuilder(List options) {
      this.parser = new CommandOptionParser(options);
      this.options = options;
   }
   
   public CommandLine build(String[] arguments) {
      Map map = new LinkedHashMap();
      List values = new ArrayList();
      Set done = new HashSet();
      
      for(CommandOption option : options){
         String name = option.getName();
         String code = option.getCode();
         
         if(!done.add(name)) {
            throw new IllegalStateException("Option '" + name + "' declared twice");
         }
         if(!done.add(code)) {
            throw new IllegalStateException("Option '" + code + "' declared twice");
         }
      }
      for(String argument: arguments) {
         if(argument.startsWith("--")) {
            CommandValue value = parser.parse(argument);
            Object object = value.getValue();
            String name = value.getName();
            
            map.put(name, object);
         } else {
            values.add(argument);
         }
      }
      for(CommandOption option : options){
         String name = option.getName();
         
         if(!map.containsKey(name)) {
            Object token = option.getDefault();
            
            if(token != null) {
               Class type = option.getType();
               Object value = parser.convert(token, type);
               
               map.put(name, value);
            }
         }
      }
      String[] remainder = values.toArray(new String[]{});
      return new CommandLine(options, map, remainder);
   }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy