1 /* 2 * 3 * MIT License 4 * 5 * Copyright (c) [2016] [Saptarshi Debnath] 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a copy 8 * of this software and associated documentation files (the "Software"), to deal 9 * in the Software without restriction, including without limitation the rights 10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 * copies of the Software, and to permit persons to whom the Software is 12 * furnished to do so, subject to the following conditions: 13 * 14 * The above copyright notice and this permission notice shall be included in all 15 * copies or substantial portions of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 * SOFTWARE. 24 */ 25 26 package com.saptarshidebnath.lib.processrunner.output; 27 28 import com.saptarshidebnath.lib.processrunner.configuration.Configuration; 29 import com.saptarshidebnath.lib.processrunner.constants.OutputSourceType; 30 import com.saptarshidebnath.lib.processrunner.exception.ProcessConfigurationException; 31 import com.saptarshidebnath.lib.processrunner.exception.ProcessException; 32 import com.saptarshidebnath.lib.processrunner.model.OutputRecord; 33 import com.saptarshidebnath.lib.processrunner.process.Runner; 34 import java.io.File; 35 import java.io.IOException; 36 import java.util.List; 37 38 /** 39 * The Output of a run is returned as a reference of {@link Output} class. The interface for the 40 * Object which is going to be returned after running {@link Runner#run()} or {@link 41 * Runner#runAsync()}. 42 */ 43 public interface Output { 44 45 /** 46 * Prints the {@link OutputRecord#getOutputText()} of type {@link OutputSourceType#SYSOUT} to the 47 * {@link File} supplied. 48 * 49 * @param sysOut A {@link File} object where the log is going to be written. 50 * @return A {@link File} object where the log has been written. 51 * @throws ProcessException In case of any error. This is a generic error. To get the details, 52 * please use {@link ProcessException#getCause()}. 53 * @throws ProcessException is a generic Exception 54 * @throws ProcessConfigurationException if the {@link Configuration#masterLogFile} is not set. If 55 * the {@link Configuration#masterLogFile} is not set then the log is not saved at all and 56 * they are discarded. 57 * @throws IOException is thrown on any disk error. 58 */ 59 File saveSysOut(final File sysOut) 60 throws ProcessException, ProcessConfigurationException, IOException; 61 62 /** 63 * Prints the {@link OutputRecord#getOutputText()} of type {@link OutputSourceType#SYSERR} to the 64 * {@link File} supplied. 65 * 66 * @param sysError A {@link File} object where the log is going to be written. 67 * @return A {@link File} object where the log has been written. 68 * @throws ProcessException In case of any error. This is a generic error. To get the details, 69 * please use {@link ProcessException#getCause()}. 70 * @throws IOException is thrown on any disk error. 71 * @throws ProcessConfigurationException if the {@link Configuration#masterLogFile} is not set. If 72 * the {@link Configuration#masterLogFile} is not set then the log is not saved at all and 73 * they are discarded. 74 */ 75 File saveSysError(final File sysError) 76 throws ProcessException, ProcessConfigurationException, IOException; 77 78 /** 79 * Returns the master log file originally captured while executing the Process. Its an Json Array 80 * of type {@link OutputRecord}. 81 * 82 * @return a {@link File} reference to the json formatted master log . 83 * @throws ProcessConfigurationException if the {@link Configuration#masterLogFile} is not set. If 84 * the {@link Configuration#masterLogFile} is not set then the log is not saved at all and 85 * they are discarded. 86 */ 87 File getMasterLogAsJson() throws ProcessConfigurationException; 88 89 /** 90 * Prints the {@link OutputRecord#getOutputText()} of both {@link OutputSourceType#SYSERR} and 91 * {@link OutputSourceType#SYSOUT} to the {@link File} supplied. 92 * 93 * @param log A {@link File} object where the log is going to be written. 94 * @return A {@link File} object where the log is going to be written. 95 * @throws IOException when there is a issue with the IO for reading and writing the file. 96 * @throws ProcessConfigurationException if the {@link Configuration#masterLogFile} is not set. If 97 * the {@link Configuration#masterLogFile} is not set then the log is not saved at all and 98 * they are discarded. 99 */ 100 File saveLog(final File log) throws IOException, ProcessConfigurationException; 101 102 /** 103 * Returns the process exit / return code. 104 * 105 * @return return the exit code as an integer value from 0 - 255 106 */ 107 int getReturnCode(); 108 109 /** 110 * Search the content of the {@link Configuration#getMasterLogFile()} for a particular regex. The 111 * search is done line by line. 112 * 113 * @param regex a proper Regular Expression that need to be searched for. 114 * @return a {@link Boolean#TRUE} or {@link Boolean#FALSE} depending upon if the search is 115 * positive or negative. 116 * @throws ProcessConfigurationException if the {@link Configuration#masterLogFile} is not set. If 117 * the {@link Configuration#masterLogFile} is not set then the log is not saved at all and 118 * they are discarded. 119 * @throws IOException if there is an error reading the {@link Configuration#masterLogFile} 120 */ 121 boolean searchMasterLog(final String regex) throws IOException, ProcessConfigurationException; 122 123 /** 124 * Search the master log file for the provided regex. 125 * 126 * <p>Searches for a pattern and returns a {@link List} of {@link OutputRecord} which contains 127 * extracts from the output matching the provided regex ins {@link String} format 128 * 129 * @param regex accepts a {@link String} object to search for 130 * @return a {@link List} of {@link String} 131 * @throws ProcessConfigurationException if the {@link Configuration#masterLogFile} is not set. If 132 * the {@link Configuration#masterLogFile} is not set then the log is not saved at all and 133 * they are discarded. 134 * @throws IOException if there is an error reading the {@link Configuration#masterLogFile} 135 */ 136 List<OutputRecord> grepForRegex(String regex) throws IOException, ProcessConfigurationException; 137 }