package hayashi.yuu.register;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import jp.co.areaweb.tools.csv.CsvRecord;
public class CollectData
{
public Calendar date = Calendar.getInstance();
public String address = null;
public String name = null;
public String data = "";
public static Calendar baseDate = null;
public static String[] columnNames = {"日時", "カードID", "送信先アドレス","なまえ"};
static final String DATETIME_PATTERN = "yyyy/MM/dd'-'HH:mm:ss";
static SimpleDateFormat dateTimePattern = new SimpleDateFormat(DATETIME_PATTERN);
/**
* コンストラクタ: データコレクタで取得したデータ
* @param datetime
* @param data
* @param address
* @param name
*/
public CollectData(Date datetime, String data, String address, String name) {
date.setTime(datetime);
if (date.get(Calendar.YEAR) < 2000) {
if (baseDate != null) {
date.set(baseDate.get(Calendar.YEAR), baseDate.get(Calendar.MONTH), baseDate.get(Calendar.DAY_OF_MONTH));
}
}
else {
CollectData.baseDate = Calendar.getInstance();
CollectData.baseDate.set(date.get(Calendar.YEAR), date.get(Calendar.MONTH), date.get(Calendar.DAY_OF_MONTH));
}
this.data = data;
if (address == null) {
this.address = getAddress(data);
}
else {
this.address = address;
}
if (name == null) {
this.name = getName(data);
}
else {
this.name = name;
}
}
public CollectData(Date datetime, String data) {
this(datetime, data, null, null);
}
/**
* 収集データをXML形式にして表現する。
* @return XMLレコード
*/
public Element getXmlElement(Document document) {
Element point = document.createElement("point");
point.setAttribute("id", this.data);
point.setAttribute("datetime", dateTimePattern.format(this.date.getTime()));
Element addrEle = document.createElement("address");
addrEle.appendChild(document.createTextNode(this.address));
point.appendChild(addrEle);
Element nameEle = document.createElement("name");
nameEle.appendChild(document.createTextNode(this.name));
point.appendChild(nameEle);
return point;
}
/**
* [javax.swing.table.DefaultTableModel]用のレコード形式を取得する。
* @return
*/
public String[] getRecordStrs() {
String[] strs = new String[4];
strs[0] = dateTimePattern.format(this.date.getTime());
strs[1] = this.data;
strs[2] = this.address;
strs[3] = this.name;
return strs;
}
/**
* カードIDを取得する
* @return カードID(IDm) - 16文字の16進表記 '01010310DA09D027'
*/
public long getId() {
return Long.parseLong(this.data, 16);
}
public String getAddress(String dataStr) {
if (CardRegister.taglistFile == null) {
return "";
}
for (Iterator<CsvRecord> i = CardRegister.taglistFile.iterator(); i.hasNext(); ) {
CsvRecord record = i.next();
String idStr = (String)record.get(0); // ID
if (idStr.equals(dataStr)) {
return (String)record.get(1); // ID
}
}
return "";
}
public String getName(String dataStr) {
if (CardRegister.taglistFile == null) {
return "";
}
for (Iterator<CsvRecord> i = CardRegister.taglistFile.iterator(); i.hasNext(); ) {
CsvRecord record = i.next();
String idStr = (String)record.get(0); // ID
if (idStr.equals(dataStr)) {
try {
String ret = (String)record.get(2); // ID
return ret; // ID
}
catch (IndexOutOfBoundsException ioobe) {
return "";
}
}
}
return "";
}
}