package com.kolakcc.loljclient.model.swing;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.kolakcc.loljclient.model.LoLNewsItem;
public class LoLNewsTableModel extends AbstractTableModel {
ArrayList<LoLNewsItem> items = new ArrayList<LoLNewsItem>();
private String[] columnNames = { "Title" };
public LoLNewsTableModel(String URL) {
populateModel(URL);
}
public void populateModel(String URL) {
try {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
HttpURLConnection httpcon = (HttpURLConnection) new URL(URL)
.openConnection();
httpcon.addRequestProperty("User-Agent", "Mozilla/4.76");
Document doc = dBuilder.parse(httpcon.getInputStream());
doc.getDocumentElement().normalize();
NodeList articleItems = doc.getElementsByTagName("item");
for (int i = 0; i < articleItems.getLength(); i++) {
Node node = articleItems.item(i);
if ((node.getNodeType() == Node.ELEMENT_NODE)
&& (node.getNodeName() == "item")) {
Element itemElement = (Element) node;
this.items.add(new LoLNewsItem(itemElement));
}
}
} catch (Exception e) {
System.out.println("Error on reading the news.");
e.printStackTrace();
}
this.fireTableDataChanged();
}
@SuppressWarnings({ "unchecked", "rawtypes" })
public Class getColumnClass(int c) {
return String.class;
}
public int getColumnCount() {
return this.columnNames.length;
}
public String getColumnName(int col) {
return this.columnNames[col];
}
public LoLNewsItem getItemAt(int row) {
return this.items.get(row);
}
public int getRowCount() {
return this.items.size();
}
public Object getValueAt(int row, int col) {
LoLNewsItem selectedObject = this.items.get(row);
if (col == 0) {
return selectedObject.title;
}
return "???";
}
public void clear() {
this.items.clear();
}
}