Newer
Older
CardRegister / src / hayashi / yuu / register / CollectData.java
@yuuhayashi yuuhayashi on 26 Jan 2014 3 KB version 2010-03-19
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 "";
	}
}