package org.wildstang.wildrank.desktop.modes; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.SwingUtilities; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.wildstang.wildrank.desktop.GlobalAppHandler; import org.wildstang.wildrank.desktop.TextFieldHintHandler; import org.wildstang.wildrank.desktop.utils.JSONTools; import org.wildstang.wildrank.desktop.utils.Logger; public class EventSelector extends Mode implements ActionListener { List<JButton> eventButtons = new ArrayList<JButton>(); List<String> eventKeys = new ArrayList<String>(); JTextField team; JTextField year; JButton loadEvents; JLabel current; JButton skip; @Override public void initializePanel() { team = new JTextField("Team"); team.addFocusListener(new TextFieldHintHandler(team, "Team")); year = new JTextField("Year"); year.addFocusListener(new TextFieldHintHandler(year, "Year")); loadEvents = new JButton("Load events"); loadEvents.addActionListener(this); current = new JLabel(appData.getEventKey()); skip = new JButton("Skip"); skip.addActionListener(this); c.gridx = 0; c.gridy = 0; panel.add(team, c); c.gridx = 1; panel.add(year, c); c.gridx = 2; panel.add(loadEvents, c); c.gridx = 0; c.gridy = 2; panel.add(current, c); c.gridx = 1; panel.add(skip, c); update.setMode("Event Selector"); } public void loadEvents() { // Retrieve team data from TBA // This API subject to change // As of 1/2/2014, API v2 was still in beta String url = "http://www.thebluealliance.com/api/v2/team/frc" + team.getText() + "/" + year.getText() + "/events"; final String teamInfoString = JSONTools.getJsonFromUrl(url); Logger.getInstance().log("TeamInfo: " + teamInfoString); // Extract event list from that data Logger.getInstance().log("Parsing team data"); try { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { JSONArray teamEvents = new JSONArray(teamInfoString); int x = 0; int y = 0; panel.removeAll(); for (int i = 0; i < teamEvents.length(); i++) { JSONObject currentEvent = teamEvents.getJSONObject(i); eventKeys.add(currentEvent.getString("key")); String shortName = currentEvent.getString("short_name"); eventButtons.add(new JButton(shortName)); eventButtons.get(i).addActionListener(EventSelector.this); c.gridx = x; c.gridy = y; panel.add(eventButtons.get(i), c); x++; if (x == 3) { y++; x = 0; } } } }); } catch (JSONException e) { e.printStackTrace(); } GlobalAppHandler.getInstance().refreshPanel(); Logger.getInstance().log("Parsing complete"); } @Override public void actionPerformed(ActionEvent event) { if (event.getSource() == skip && appData.getEventKey() != null) { setMode(new EventConfigurationDownloader()); } if (event.getSource() == loadEvents) { loadEvents(); } for (int i = 0; i < eventButtons.size(); i++) { if (event.getSource() == eventButtons.get(i)) { appData.setEventKey(eventKeys.get(i)); appData.save(); setMode(new EventConfigurationDownloader()); } } } }