Package scigest.configuration

Source Code of scigest.configuration.ScigestCmd

package scigest.configuration;

import java.io.IOException;

import org.apache.commons.configuration.ConfigurationException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.martiansoftware.jsap.FlaggedOption;
import com.martiansoftware.jsap.JSAP;
import com.martiansoftware.jsap.JSAPException;
import com.martiansoftware.jsap.JSAPResult;
import com.martiansoftware.jsap.Switch;
import com.martiansoftware.jsap.UnflaggedOption;

/**
*
* This command class provides the following sub-commands to interact with with the scigest
* configuration management.
*
* <ul>
*
* <li> <code>set key value</code>: set property locally
* <li> <code>get key</code>: retrieve property, it can be partial and we will do partial matching
* <li> <code>list</code>: show all properties in effect
* <li> <code>restore</code>: restore all properties to its default value
*
* </ul>
*
* @author Feiyi Wang
*
*/
public class ScigestCmd {

  /**
   * @param args
   * @throws IOException
   * @throws ConfigurationException
   * @throws JSAPException
   */

  public static final String CMD_LIST   = "list";
  public static final String CMD_SET    = "set";
  public static final String CMD_GET    = "get";
  public static final String CMD_RESTORE   = "restore";

  private static final Logger logger = LoggerFactory.getLogger(ScigestCmd.class);
  private static ScigestConfiguration sc;
 
  public static void main(String[] args) throws ConfigurationException, IOException, JSAPException {
   
    sc = new ScigestConfiguration();
    JSAP jsap = new JSAP();

    CmdParser cmdParser = new CmdParser();
    UnflaggedOption command = new UnflaggedOption("command")
                      .setStringParser(cmdParser)
                      .setRequired(true);
   
    jsap.registerParameter(command);
   
    Switch local = new Switch("local")
                .setShortFlag('l')
                .setLongFlag("local");
   
    jsap.registerParameter(local);
   
    UnflaggedOption key = new UnflaggedOption("key")
                      .setStringParser(JSAP.STRING_PARSER)
                      .setRequired(false)
                      .setGreedy(false);
   
    jsap.registerParameter(key);

    UnflaggedOption val = new UnflaggedOption("value")
                      .setStringParser(JSAP.STRING_PARSER)
                      .setRequired(false)
                      .setGreedy(false);
   
    jsap.registerParameter(val);
   
    JSAPResult config = jsap.parse(args);
       
    usage(jsap, config);
   
    String subCmd = config.getString("command");

    if (subCmd.equals(CMD_GET)) {
      processKey(config.getString("key"));
     
    } else if (subCmd.equals(CMD_LIST)) {
      if (config.getBoolean("local"))
        processListLocal();
      else
        processList();
    } else if (subCmd.equals(CMD_SET)) {
      String propKey = config.getString("key");
      String propVal = config.getString("value");
      if ( ( propKey==null) || (propVal == null)) {
        logger.error("either property key or proerty value is missing!");
        System.exit(1);
      }
      processSet(propKey, propVal);
    } else if (subCmd.equals(CMD_RESTORE)) {
      processRestore();
    }
   
  }

  private static void processKey(String key) {
    String[] keyList = sc.getKeys();
   
    for (int i = 0; i < keyList.length; i++) {
      if (keyList[i].startsWith(key)) {
        System.out.printf("%s %s\n", keyList[i], sc.getString(keyList[i]));
      }
    }
  }
 
  private static void processList() {
    String[] keyList = sc.getKeys();
   
    System.out.println("");   
    for (int i = 0; i < keyList.length; i++) {
        System.out.printf("%s=%s\n", keyList[i], sc.getString(keyList[i]));
    }
    System.out.println("");   

  }

  private static void processListLocal() {
    String[] keyList = sc.getLocalKeys();
   
    System.out.println("");   
    for (int i = 0; i < keyList.length; i++ ) {
      System.out.printf("%s=%s\n", keyList[i], sc.getLocalVal(keyList[i]));
    }
    System.out.println("");   

  }

 
  private static void processSet(String key, String val) throws ConfigurationException {
    sc.setString(key, val);
  }
 
 
  private static void processRestore() throws ConfigurationException {
    sc.reset();
    System.out.println("\nAll local changes are reset!\n");
   
  }
 
  private static void usage(JSAP jsap, JSAPResult config) {
    if (!config.success()) {
      System.err.println();
      System.err.println("Usage: java "
            + ScigestCmd.class.getName());
      System.err.println("              "
        + jsap.getUsage());
      System.err.println();
      System.exit(1);
    }
  }

}
TOP

Related Classes of scigest.configuration.ScigestCmd

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.