Package com.sijobe.spc.command

Source Code of com.sijobe.spc.command.Macro

package com.sijobe.spc.command;

import com.sijobe.spc.core.Constants;
import com.sijobe.spc.validation.Parameter;
import com.sijobe.spc.validation.ParameterString;
import com.sijobe.spc.validation.Parameters;
import com.sijobe.spc.wrapper.CommandException;
import com.sijobe.spc.wrapper.CommandManager;
import com.sijobe.spc.wrapper.CommandSender;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.List;

/**
* Macro command allows you to write a file with a list of commands in it then
* run the file.
*
* @author simo_415
* @version 1.0
*/
@Command (
   name = "macro",
   description = "Macro based commands allow multiple commands to be run",
   example = "test",
   videoURL = "http://www.youtube.com/watch?v=hkQfslQJoQs",
   version = "1.0"
)
public class Macro extends StandardCommand {

   /**
    * The file extension of macro files
    */
   public static final String MACRO_EXTENSION = ".txt";
   /**
    * The directory that the macro files and retrieved from
    */
   public static final File MACRO_DIR = new File(Constants.MOD_DIR, "macros");
   static {
      if (!MACRO_DIR.exists()) {
         MACRO_DIR.mkdirs();
      }
   }

   /**
    * Parameters of the command
    */
   private static final Parameters PARAMETERS = new Parameters (
            new Parameter[] {
                     new ParameterString("<FILE>", false),
                     new ParameterString("{PARAMETERS}", true, true)
            }
   );

   /**
    * @see com.sijobe.spc.wrapper.CommandBase#execute(com.sijobe.spc.wrapper.CommandSender, java.util.List)
    */
   @Override
   public void execute(CommandSender sender, List<?> params) throws CommandException {
      File macro = new File(MACRO_DIR, (String)params.get(0) + MACRO_EXTENSION);
      if (!macro.exists()) {
         throw new CommandException("Specified macro does not exist.");
      }

      try {
         BufferedReader br = new BufferedReader(new FileReader(macro));
         String split[] = null;
         if (params.size() == 1) {
            split = new String[] { (String)params.get(0) };
         } else {
            split = (((String)params.get(0)) + " " + ((String)params.get(1))).split(" ");
         }
         String line = null;
         while ((line = br.readLine()) != null) {
            // Adds arguments to the line
            for (int i = 0; i < split.length; i++) {
               line = line.replaceAll("\\$_" + i, split[i]);
            }

            // Remove all unspecified arguments from line
            line = line.replaceAll("\\$_[0-9]+", "");

            // Executes the line
            CommandManager.runCommand(sender, line);
         }
      } catch (Exception e) {
         throw new CommandException(e);
      }
   }

   /**
    * @see com.sijobe.spc.wrapper.CommandBase#getParameters()
    */
   @Override
   public Parameters getParameters() {
      return PARAMETERS;
   }
}
TOP

Related Classes of com.sijobe.spc.command.Macro

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.