/** * Colloid project * * Combat log analyzer. * * copyright: (c) 2013 by Darek <netmik12 [AT] gmail [DOT] com> * license: BSD, see LICENSE for more details */ package colloid.model.event; import java.io.File; import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.Locale; import java.util.logging.Level; import java.util.logging.Logger; import javafx.scene.control.TreeItem; public class Util { public static File[] filesByPath(String path) { File dir = new File(path); return dir.listFiles(); } public static Date parseDate(String line) { final SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss.S", Locale.getDefault()); Date logTime; try { logTime = timeFormat.parse(line.substring(1, 13)); return logTime; } catch (ParseException e) { System.out.println(e.getMessage()); } catch (StringIndexOutOfBoundsException e) { Logger.getLogger(Util.class.getName()).log(Level.SEVERE, line, e); } return null; } /** * Compare time * @param logtime * @param lastLine * @return */ public static boolean isDone(Date logtime, String lastLine) { if (logtime.getTime() > parseDate(lastLine).getTime()) { return false; } return true; } public static TreeItem<String> rootTreeView(ArrayList<Fight> fights) { TreeItem<String> root = new TreeItem<String>("Combat Fights"); root.setExpanded(true); Iterator<Fight> iter = fights.iterator(); int i = 0; while (iter.hasNext()) { Fight fight = iter.next(); TreeItem<String> item = new TreeItem<String>(fight.info()); if (i == 0) { item.setExpanded(true); } Iterator<Actor> iterActor = fight.getActors().iterator(); while(iterActor.hasNext()) { Actor actor = iterActor.next(); String dps = ""; String hps = ""; Date endTime = fight.getFinish(); if (endTime == null) { endTime = new Date(); } long duration = endTime.getTime() - fight.getStart().getTime(); if (duration > 100) { dps = valuePerSecond(actor.getDamageDone(fight), duration); hps = valuePerSecond(actor.getHealDone(fight), duration); item.getChildren().add(new TreeItem<String>(actor.info(fight, dps, hps))); } } root.getChildren().add(item); i++; } return root; } public static String valuePerSecond(double value, long duration) { final DecimalFormat df = new DecimalFormat("#.00"); double result = value/(duration/1000); if (result > 0.01) { return df.format(result); } return "0.00"; } public static String percentTotal(double value, double total) { if (total <= 0) { return "0%"; } final DecimalFormat df = new DecimalFormat("#.00"); double result = (value*100)/total; if (result > 0.01) { return df.format(result); } return "0.00"; } }