package hr.fer.zemris.ecf.log.reader; import java.util.ArrayList; import hr.fer.zemris.ecf.log.Deme; import hr.fer.zemris.ecf.log.Generation; import hr.fer.zemris.ecf.log.LogFile; import hr.fer.zemris.ecf.log.Population; /** * This class has only one static meted that is used to parse {@link Generation} from one {@link LogFile}. * @version 1.0 * */ public class GenerationReading { /** * This meted parses trough predefined lines in log file and parses it into a {@link Generation}. * Lines are predefined in this manner: * One string in given array list represents one line from log file. * In first line (array list index 0) there must be generation line example "Generation: 1". * End of the array list is after that generation, so the generation must be complete. * @param data array list of strings containing generation to parse. * @return brand new {@link Generation} class form log file. */ public static Generation parse(ArrayList<String> data){ Generation gen = new Generation(); gen.id = Integer.parseInt(data.get(0).split("\\:")[1].trim()); gen.elapsedTime = Integer.parseInt(data.get(1).split("\\:")[1].trim()); if(!data.get(2).contains("Deme")) System.err.println("Deme not found"); Deme deme = new Deme(); for(int i=2; i<data.size(); i++){ String line = data.get(i).trim(); if(line.isEmpty()){ continue; } else if(line.contains("Deme")){ deme.id = Integer.parseInt(line.split("\\:")[1].trim()); deme.evaluations = Integer.parseInt(data.get(i+1).split("\\:")[1].trim()); deme.maxFitness = Double.parseDouble(data.get(i+3).split("\\:")[1].trim()); deme.minFitness = Double.parseDouble(data.get(i+4).split("\\:")[1].trim()); deme.avgFitness = Double.parseDouble(data.get(i+5).split("\\:")[1].trim()); deme.stdevFitness = Double.parseDouble(data.get(i+6).split("\\:")[1].trim()); gen.demes.add(deme); deme = new Deme(); i +=6; } else if(line.contains("Population")){ gen.population = new Population(); gen.population.evaluations = Integer.parseInt(data.get(i+1).split("\\:")[1].trim()); gen.population.maxFitness = Double.parseDouble(data.get(i+3).split("\\:")[1].trim()); gen.population.minFitness = Double.parseDouble(data.get(i+4).split("\\:")[1].trim()); gen.population.avgFitness = Double.parseDouble(data.get(i+5).split("\\:")[1].trim()); gen.population.stdevFitness = Double.parseDouble(data.get(i+6).split("\\:")[1].trim()); break; } } return gen; } }