package plan.input; import java.io.FileNotFoundException; import plan.dom.*; /** A class used for testing other parts of the application. * It only pretends to read from a file. */ public class TestInput implements FileInput { /** Generates test sets of objects depending on the parameter. * If the parameter is "planetaria.xml", generates a test set cotnaining the product "Planetaria" * and a bunch of features.<br> * If the parameter is "random.xml", generates a test set containing randomly generated * products and features. Product names are "S<n>". * @param filename either "planetaria.xml" or "random.xml". * @throws FileNotFoundException when none of the allowed filenames are presented * @return a Company object rooting all the data from the test dataset. */ public Company readFile(String filename) throws FileNotFoundException { if (filename.equals("planetaria.xml")) return readPlanetaria(); else if (filename.equals("random.xml")) return readRandom(); else throw new java.io.FileNotFoundException(); } /** Generates a pre-determined set of test data. * @return a Company object rooting all the data from the test dataset. */ private Company readPlanetaria() { Company c; Feature f; Software s; c = new Company(); s = c.lookupOrCreateSoftware("Planetaria"); s.addFeature(f = new Feature(354, "show angular separation", 4.0, Priority.high)); new CustomerRequest(f, c.lookupOrCreateCustomer("ATT"), 3); new CustomerRequest(f, c.lookupOrCreateCustomer("IBM"), 4); f.setChampion(c.lookupOrCreateEmployee("Dave")); s.addFeature(f = new Feature(304, "FOV indicators", 8.0, Priority.high)); new CustomerRequest(f, c.lookupOrCreateCustomer("ATT"), 5); f.setChampion(c.lookupOrCreateEmployee("Britney")); s.addFeature(f = new Feature(234, "NGC/IC objects", 22.0, Priority.med)); f.setChampion(c.lookupOrCreateEmployee("Dave")); s.addFeature(f = new Feature(389, "time simulation", 35.0, Priority.med)); new CustomerRequest(f, c.lookupOrCreateCustomer("NASA"), 10); f.setChampion(c.lookupOrCreateEmployee("Stuart")); s.addFeature(f = new Feature(230, "change location", 5.0, Priority.high)); new CustomerRequest(f, c.lookupOrCreateCustomer("NASA"), 5); f.setChampion(c.lookupOrCreateEmployee("Amanda")); return c; } /** Generates a randomly-determined set of test data. * @return a Company object rooting all the data from the test dataset. */ private Company readRandom() { final int N_SOFTWARE = 3; final int N_EMPLOYEE = 20; final int N_CUSTOMER = 100; final int N_FEATURE = 100; final int N_LOWP = 5; final int N_MEDP = 3; final int N_HIGHP = 1; final int N_PRIORITY = N_LOWP + N_MEDP + N_HIGHP; Company company = new Company(); Software s[] = new Software[N_SOFTWARE]; for(int i = 0; i < N_SOFTWARE; i++) s[i] = company.lookupOrCreateSoftware("S"+i); Employee e[] = new Employee[N_EMPLOYEE]; for(int i = 0; i < N_EMPLOYEE; i++) e[i] = company.lookupOrCreateEmployee("E"+i); Customer c[] = new Customer[N_CUSTOMER]; for(int i = 0; i < N_CUSTOMER; i++) c[i] = company.lookupOrCreateCustomer("C"+i); Priority p[] = new Priority[N_PRIORITY]; for(int i = 0; i < N_PRIORITY; i++) if( i < N_HIGHP ) p[i] = Priority.high; else if( i < N_HIGHP + N_MEDP ) p[i] = Priority.med; else p[i] = Priority.low; for(int i = 0; i < N_FEATURE; i++) { Feature f = new Feature(i,"SHORT"+i,(double)randint(39)+1.0,p[randint(N_PRIORITY-1)]); f.setChampion(e[randint(N_EMPLOYEE-1)]); s[randint(N_SOFTWARE-1)].addFeature(f); for(int j = randint(5); j > 0; j--) new CustomerRequest(f,c[randint(N_CUSTOMER-1)],randint(9)+1); } return company; } /** Returns a random integer in the range 0..max drawn from a uniform distribution. * @param max the largest number allowed to be returned * @return a random integer between 0 and max inclusive */ private int randint(int max) { double r = Math.random()*(0.999999 + max); return (int)Math.floor(r); } }