package org.wildstang.wildrank.desktop.modes; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JTextField; import org.json.JSONObject; import org.wildstang.wildrank.desktop.game.Game; import org.wildstang.wildrank.desktop.game.Item; import org.wildstang.wildrank.desktop.game.Section; import org.wildstang.wildrank.desktop.game.Stat; import org.wildstang.wildrank.desktop.utils.FileUtilities; import org.wildstang.wildrank.desktop.utils.JSONTools; import org.wildstang.wildrank.desktop.utils.Logger; public class Compare extends Mode implements ActionListener { JButton refresh; JTextField teama; JTextField teamb; JLabel aLabela; JLabel bLabela; JLabel aLabelb; JLabel bLabelb; JLabel titles; JLabel titlesb; @Override protected void initializePanel() { refresh = new JButton("Refresh"); refresh.addActionListener(this); teama = new JTextField(); teamb = new JTextField(); aLabela = new JLabel("select a team"); bLabela = new JLabel("select a team"); aLabelb = new JLabel("select a team"); bLabelb = new JLabel("select a team"); titles = new JLabel("select a team"); titlesb = new JLabel("select a team"); c.gridx = 0; c.gridy = 1; panel.add(teama, c); c.gridx = 0; panel.add(refresh, c); c.gridx = 2; panel.add(teamb, c); c.gridy = 1; c.gridx = 0; panel.add(titles, c); c.gridx = 1; panel.add(aLabela, c); c.gridx = 2; panel.add(bLabela, c); c.gridx = 3; panel.add(titlesb, c); c.gridx = 4; panel.add(aLabelb, c); c.gridx = 5; panel.add(bLabelb, c); } @Override public void actionPerformed(ActionEvent event) { if (event.getSource() == refresh) { File dir = new File(FileUtilities.getSyncedDirectory() + File.separator + "matches"); List<File> aFiles = new ArrayList<File>(); getMatches(dir, aFiles, Integer.parseInt(teama.getText())); List<File> bFiles = new ArrayList<File>(); getMatches(dir, bFiles, Integer.parseInt(teamb.getText())); List<Stat> aStats = setup(); List<Stat> bStats = setup(); for (int i = 0; i < aFiles.size(); i++) { try { read(aFiles.get(i), aStats); } catch (IOException e) { e.printStackTrace(); } } for (int i = 0; i < bFiles.size(); i++) { try { read(bFiles.get(i), bStats); } catch (IOException e) { e.printStackTrace(); } } setupTitles(setup()); statAdder(aLabela, aLabelb, aStats); statAdder(bLabela, bLabelb, bStats); } } public void getMatches(File directory, List<File> list, int team) { Logger.getInstance().log("listFilesInDirectory; directory: " + directory.getAbsolutePath()); File[] files = directory.listFiles(); if (files != null) { for (File file : files) { if (file.isFile() && !file.isHidden() && file.getName().equals(Integer.toString(team) + ".json")) { list.add(file); } else { getMatches(file, list, team); } } } } public List<Stat> setup() { Game game = appData.getGame(); List<Stat> stats = new ArrayList<Stat>(); for (Section section : game.getSections()) { for (Item item : section.getItems()) { stats.add(new Stat(item)); } } return stats; } public void read(File json, List<Stat> stats) throws IOException { Game game = appData.getGame(); String fileString = JSONTools.getJsonFromFile(json); JSONObject jsonMatch = new JSONObject(fileString); JSONObject main = jsonMatch.getJSONObject(game.getMainKey()); JSONObject object; for (Section section : game.getSections()) { object = main.getJSONObject(section.getKey()); for (Item item : section.getItems()) { for (Stat stat : stats) { if (stat.value.getKey().equals(item.getKey())) { switch (item.getType()) { case TYPE_NUM: stat.amount += object.getInt(item.getKey()); break; case TYPE_BOOLEAN: stat.amount += object.getBoolean(item.getKey()) ? 1 : 0; break; default: break; } stat.matches++; } } } } } public void statAdder(JLabel a, JLabel b, List<Stat> stats) { StringBuilder sba = new StringBuilder(); StringBuilder sbb = new StringBuilder(); sba.append("<html>"); sbb.append("<html>"); for (int i = 0; i < stats.size(); i++) { Stat stat = stats.get(i); if (i <= stats.size() / 2) { sba.append((double) stat.amount / (double) stat.matches + "<br>"); } else { sbb.append((double) stat.amount / (double) stat.matches + "<br>"); } } sba.append("</html>"); sbb.append("</html>"); a.setText(sba.toString()); b.setText(sbb.toString()); } public void setupTitles(List<Stat> stats) { StringBuilder sb = new StringBuilder(); sb.append("<html>"); StringBuilder sbb = new StringBuilder(); sbb.append("<html>"); for (int i = 0; i < stats.size(); i++) { Stat stat = stats.get(i); if (i <= stats.size() / 2) { sb.append(stat.value.getName() + "<br>"); } else { sbb.append(stat.value.getName() + "<br>"); } } sb.append("</html>"); sbb.append("</html>"); titles.setText(sb.toString()); titlesb.setText(sbb.toString()); } }