/** * Print an error message and a usage message to stderr, and die with exit code -1 * * @param msg the error message to print */ private static void dieUsage(String msg) { System.err.println("Error: " + msg); System.err.println("Usage: java Plan filename productname capacity"); System.exit(1); }
/** * Main program. Expects three arguments:<br> * <code> <feature_file.xml> <product_name> <person-days-available></code><br> * Any errors result in an error message and a usage message to stderr and termination with an * exit code of -1. Correct execution will result in an exit code of 0. */ public static void main(String[] argv) { // get data from test scaffolding // The real XML file reader is being worked on now. FileInput reader = new TestInput(); // check for correct number of arguments if (argv.length != 3) dieUsage("wrong number of arguments"); // check for non-null filename String filename = argv[0]; if (filename == null || filename.equals("")) dieUsage("empty filename specified"); // check for non-null osftware product String software = argv[1]; if (software == null || software.equals("")) dieUsage("empty software name specified"); // parse capacity, checking for errors String capacityStr = argv[2]; double capacity = 0.0; try { capacity = Double.parseDouble(capacityStr); } catch (NumberFormatException e) { dieUsage("Illegal capacity specified, '" + capacityStr + "'"); } if (capacity <= 0) dieUsage("Capacity specified, '" + capacityStr + "' must be be greater than 0"); // read the XML feature file. Returns the root "Company" object from the file. Company c = null; try { c = reader.readFile(filename); } catch (java.io.FileNotFoundException e) { dieUsage("File not found, '" + filename + "'"); } catch (java.io.IOException e) { dieUsage("IO error while opening file '" + filename + "'"); } // check that software product specified on the command line exists in the file Software s = c.getSoftware(software); if (s == null) dieUsage("Specified software product not found, '" + software + "'"); // plan a release given the capacity in person-days specified on the command line Release planned = s.planRelease(capacity); planned.setDesignator("in-plan"); // plan a second release given the extra capacity and subtract the features from // the above rleease, leaving just the excess. Release overflow = s.planRelease(capacity * JUST_MISSED_RATIO); overflow.subtract(planned); overflow.setDesignator("just-missed"); // write the report header, echoing the comamnd line Report.writeHeader( "File: " + filename + " Product: " + software + " Capacity: " + capacityStr); // write a summary chart for all the features, the in-plan features, and the just-missed // features final FeatureList[] featureListsToSummarize = {s, planned, overflow}; Report.writeSummaryTable(featureListsToSummarize); // write details for the in-plan features Report.writeFeatures("In-Plan Features for sizing " + capacityStr, planned); // write details for the just-missed features Report.writeFeatures( "Just-Missed Features under sizing " + capacity * JUST_MISSED_RATIO, overflow); // all went well System.exit(0); }