package com.moomoohk.MaceSwingerLauncher.panels;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Scanner;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.SpringLayout;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.text.html.HTMLDocument;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.moomoohk.MaceSwingerLauncher.MainFrame;
import com.moomoohk.MaceSwingerLauncher.MainFrame.View;
import com.moomoohk.MaceSwingerLauncher.utils.LauncherUtils;
import com.moomoohk.MaceSwingerLauncher.utils.Resources;
import com.moomoohk.Mootilities.ExceptionHandling.ExceptionDisplayDialog;
public class UpToDatePanel extends JPanel
{
private static final long serialVersionUID = 1L;
private JEditorPane dtrpnResponse;
private JLabel lblNoUpdate;
private JLabel lblChangelog;
private JButton btnOk;
private JScrollPane scrollPane;
public UpToDatePanel()
{
super();
setBorder(BorderFactory.createLineBorder(Resources.foreground));
setBackground(Resources.background.brighter());
SpringLayout springLayout = new SpringLayout();
setLayout(springLayout);
lblNoUpdate = new JLabel("All up to date!");
lblNoUpdate.setFont(new Font(Resources.PTSans.getName(), Font.BOLD, 20));
lblNoUpdate.setForeground(Resources.foreground);
lblNoUpdate.setHorizontalAlignment(SwingConstants.CENTER);
springLayout.putConstraint(SpringLayout.NORTH, lblNoUpdate, 13, SpringLayout.NORTH, this);
springLayout.putConstraint(SpringLayout.WEST, lblNoUpdate, 10, SpringLayout.WEST, this);
springLayout.putConstraint(SpringLayout.EAST, lblNoUpdate, -10, SpringLayout.EAST, this);
add(lblNoUpdate);
lblChangelog = new JLabel("Here's the game's full changelog:");
springLayout.putConstraint(SpringLayout.NORTH, lblChangelog, 63, SpringLayout.NORTH, this);
springLayout.putConstraint(SpringLayout.WEST, lblChangelog, 20, SpringLayout.WEST, this);
springLayout.putConstraint(SpringLayout.EAST, lblChangelog, -10, SpringLayout.EAST, this);
springLayout.putConstraint(SpringLayout.SOUTH, lblNoUpdate, -6, SpringLayout.NORTH, lblChangelog);
lblChangelog.setFont(new Font(Resources.PTSans.getName(), Font.BOLD, 16));
lblChangelog.setForeground(Resources.foreground);
lblChangelog.setHorizontalAlignment(SwingConstants.CENTER);
add(lblChangelog);
btnOk = new JButton("OK");
btnOk.setFont(new Font(Resources.PTSans.getName(), Font.PLAIN, 14));
springLayout.putConstraint(SpringLayout.WEST, btnOk, -100, SpringLayout.EAST, this);
springLayout.putConstraint(SpringLayout.EAST, btnOk, -10, SpringLayout.EAST, this);
springLayout.putConstraint(SpringLayout.SOUTH, btnOk, -10, SpringLayout.SOUTH, this);
add(btnOk);
scrollPane = new JScrollPane();
springLayout.putConstraint(SpringLayout.WEST, scrollPane, 10, SpringLayout.WEST, this);
springLayout.putConstraint(SpringLayout.EAST, scrollPane, -10, SpringLayout.EAST, this);
springLayout.putConstraint(SpringLayout.SOUTH, lblChangelog, -6, SpringLayout.NORTH, scrollPane);
springLayout.putConstraint(SpringLayout.NORTH, scrollPane, 91, SpringLayout.NORTH, this);
springLayout.putConstraint(SpringLayout.SOUTH, scrollPane, -6, SpringLayout.NORTH, btnOk);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.getVerticalScrollBar().setUnitIncrement(5);
scrollPane.setBorder(BorderFactory.createLineBorder(Resources.foreground));
add(scrollPane);
dtrpnResponse = new JEditorPane("text/html", null);
((HTMLDocument) dtrpnResponse.getDocument()).getStyleSheet().addRule("a{color:#" + Integer.toHexString(new Color(132, 170, 187).brighter().getRGB()).substring(2) + "}");
dtrpnResponse.addHyperlinkListener(Resources.hyperlinkListener);
dtrpnResponse.putClientProperty("Nimbus.Overrides", Resources.defaults);
dtrpnResponse.putClientProperty("Nimbus.Overrides.InheritDefaults", true);
dtrpnResponse.setBackground(Resources.background.brighter().brighter());
dtrpnResponse.setBorder(new EmptyBorder(0, 5, 0, 5));
dtrpnResponse.setForeground(new Color(132, 170, 187));
dtrpnResponse.setFont(new Font(Resources.PTSans.getName(), Font.BOLD, 14));
dtrpnResponse.setEditable(false);
scrollPane.setViewportView(dtrpnResponse);
btnOk.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{
MainFrame.mainFrame.animateBetween(View.UPTODATE, View.MENU, null);
}
});
}
public void updateChangelog()
{
dtrpnResponse.setText("Loading changes...");
try
{
Document d = LauncherUtils.bootstrap.getChangelog();
NodeList nList = d.getElementsByTagName("build");
StringBuilder entries = new StringBuilder();
for (int temp = nList.getLength() - 1; temp >= 0; temp--)
{
Node nNode = nList.item(temp);
if (nNode.getNodeType() == Node.ELEMENT_NODE)
{
Element eElement = (Element) nNode;
Integer buildNumber = Integer.parseInt(eElement.getAttribute("buildNumber"));
String verString = eElement.getElementsByTagName("buildVersionString").item(0).getTextContent();
Scanner reader = new Scanner(eElement.getElementsByTagName("changes").item(0).getTextContent());
StringBuilder entry = new StringBuilder("v" + verString + " (build " + buildNumber + "):");
while (reader.hasNextLine())
entry.append(" " + reader.nextLine().trim() + "\n");
entries.append(entry.toString() + "\n");
reader.close();
}
}
dtrpnResponse.setText(LauncherUtils.htmlify(d.getElementsByTagName("headerText").item(0).getTextContent().trim() + "\n\n" + entries.toString().trim()));
dtrpnResponse.setCaretPosition(0);
}
catch (Exception e)
{
new ExceptionDisplayDialog(MainFrame.mainFrame, e);
}
}
}