package org.megam.chef.shell; import java.io.File; import java.io.FileNotFoundException; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import java.util.Scanner; /** * <p>Abstract BaseCommand class.</p> * * @author rajthilak * @version $Id: $Id */ public abstract class BaseCommand implements Command { private final static Charset ENCODING = StandardCharsets.UTF_8; private File rdo; private File rde; private List<String> cmdList = new ArrayList<String>(); private String name; private String inputCmd; private String reqId; private String node_name; private boolean compose; /** * <p>Constructor for BaseCommand.</p> * * @param list a {@link java.util.List} object. * @param req_id a {@link java.lang.String} object. * @param nodeName a {@link java.lang.String} object. */ public BaseCommand(List<String> list, String req_id, String nodeName) { this.reqId = req_id; this.node_name = nodeName; this.cmdList = list; if (compose) { } File dir = new File(org.megam.chef.Constants.MEGAM_CHEF_LOG + node_name); dir.mkdir(); //limitation in heka, it doesn't pull all the files under node_name hence ignore reqId //+ "/" + node_name + "_" + reqId + "_out"); setRedirectOutput(org.megam.chef.Constants.MEGAM_CHEF_LOG + node_name + "/" + node_name + "_out"); setRedirectError(org.megam.chef.Constants.MEGAM_CHEF_LOG + node_name + "/" + node_name + "_err"); } /** * <p>getFileName.</p> * * @return a {@link java.lang.String} object. */ public String getFileName() { return name; } /** {@inheritDoc} */ public void setRedirectOutput(String trdo) { this.rdo = new File(trdo); } /** * <p>getRedirectOutputFile.</p> * * @return redirect output file */ public File getRedirectOutputFile() { return rdo; } /** * <p>getRawCommandString.</p> * * @return raw command string */ public String getRawCommandString() { return inputCmd; } /** * <p>getCommandList.</p> * * @return command list */ public List<String> getCommandList() { List<String> newList = new ArrayList<String>(); for (int i = 0; i < cmdList.size(); i++) { newList.add(trimmer(cmdList.get(i))); } return newList; } /** {@inheritDoc} */ public void setRedirectError(String trde) { this.rde = new File(trde); } /** * <p>getRedirectErrorFile.</p> * * @return redirect error file */ public File getRedirectErrorFile() { return rde; } /** * <p>toString.</p> * * @return a {@link java.lang.String} object. */ public String toString() { return getCommandList().toString(); } private String trimmer(final String s) { final StringBuilder sb = new StringBuilder(s); while (sb.length() > 0 && Character.isWhitespace(sb.charAt(0))) sb.deleteCharAt(0); // delete from the beginning while (sb.length() > 0 && Character.isWhitespace(sb.charAt(sb.length() - 1))) sb.deleteCharAt(sb.length() - 1); // delete from the end return sb.toString(); } }