ManageTime.java 8.65 KB
package th.co.ais.ssbsrfc.instance;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;

import th.co.ais.ssbsrfc.utils.DateUtil;
import th.co.ais.ssbsrfc.utils.Global;
import th.co.ais.ssbsrfc.utils.Log;
import ec02.utils.AppLog;

public class ManageTime {
	
	private ArrayList<Timeout> listTimeout = new ArrayList<Timeout>();
	private EC02Instance ec02Instance = null;
	
	public ManageTime() { }
	
	public ManageTime(EC02Instance ec02Instance) {
		this.setStart(ec02Instance, true);
	}
	
	public ManageTime(EC02Instance ec02Instance, boolean isSet) {
		this.setStart(ec02Instance, isSet);
	}
	
	public void setStart(EC02Instance ec02Instance, boolean isSet)
	{
		this.setEc02Instance(ec02Instance);
		if (isSet) {
			this.setListTimeout(ec02Instance.getAFInstance().getListTimeout());
		}
	}
	
	public Date getNow()
	{
		Date date = Calendar.getInstance().getTime();
		return date;
	}
	
	public int diffDate(Date date1, Date date2)
	{
		Calendar strF_Cal = Calendar.getInstance();
		Calendar strL_Cal = Calendar.getInstance();
		strF_Cal.setTime(date1);
		strL_Cal.setTime(date2);
		Calendar fCal = DateUtil.getCalendar(DateUtil.getDay(strF_Cal), DateUtil
				.getMonth(strF_Cal), DateUtil.getYear(strF_Cal), DateUtil
				.getHour(strF_Cal), DateUtil.getMinute(strF_Cal), DateUtil.getSecond(strF_Cal));
		Calendar lCal = DateUtil.getCalendar(DateUtil.getDay(strL_Cal), DateUtil
				.getMonth(strL_Cal), DateUtil.getYear(strL_Cal),
				DateUtil.getHour(strL_Cal), DateUtil.getMinute(strL_Cal), DateUtil.getSecond(strL_Cal));
		
		long lastLong = lCal.getTime().getTime();
		long firstLong = fCal.getTime().getTime();

		long diff = lastLong - firstLong;
		
		return (new Long(diff / 1000)).intValue();
	}
	
	public String getTimeout(String name, String timeout)
	{
		Date now = this.getNow();
//		System.out.println(name + ":" + timeout + ":" + now);
		String time = this.getTimeout(name, timeout, now);
		return time;
	}
	
	public String getTimeout(String name, String timeout, Date now)
	{
		String inputTimeStamp = Global.inputTimeStamp;
		for (Timeout item : this.getListTimeout()) {
			if (inputTimeStamp == null) {
				int second = item.getTimeout() - this.diffDate(item.getDate(), now);
				item.setNet(second);
			} else {
				if (!item.getInputTimeStamp().equals(inputTimeStamp)) {
					int second = item.getTimeout() - this.diffDate(item.getDate(), now);
					item.setNet(second);
				} else {
					item.setDate(now);
				}
			}
		}
		Timeout state = new Timeout();
		state.setName(name);
		state.setInputTimeStamp(inputTimeStamp);
		state.setDate(now);
		state.setTimeout(Integer.parseInt(timeout));
		state.setNet(Integer.parseInt(timeout));
		this.getListTimeout().add(state);
		Collections.sort(this.getListTimeout(), new Comparator<Timeout>(){
			public int compare(Timeout p1, Timeout p2) {
		           return Integer.valueOf(p1.getNet()) .compareTo(Integer.valueOf(p2.getNet()));
		        }
		});
		this.getEc02Instance().getAFInstance().setListTimeout(this.getListTimeout());
		String time = "";
		if (this.getListTimeout().size() > 0) {
			time = String.valueOf(this.getListTimeout().get(0).getNet());
			if (!time.matches("^\\d+$")) {
				time = "0";
			}
		}
		/////////////////////////////////////////////////////
		AppLog.d("####### TABLE TIMEOUT #######");
		for (Timeout item : this.getListTimeout()) {
			AppLog.d("NAME :" + item.getName() + " DATE :" + item.getDate() + " TIME :" + item.getTimeout() + " NET :" + item.getNet());
//			System.out.println("NAME :" + item.getName() + " DATE :" + item.getDate() + " TIME :" + item.getTimeout() + " NET :" + item.getNet());
		}
		AppLog.d("############# END #############");
		/////////////////////////////////////////////////////
		return time;
	}
	
	public void setTimeout(String name, String timeout, Date now)
	{
		String inputTimeStamp = Global.inputTimeStamp;
		for (Timeout item : this.getListTimeout()) {
			if (inputTimeStamp == null) {
				int second = item.getTimeout() - this.diffDate(item.getDate(), now);
				item.setNet(second);
			} else {
				if (!item.getInputTimeStamp().equals(inputTimeStamp)) {
					int second = item.getTimeout() - this.diffDate(item.getDate(), now);
					item.setNet(second);
				} else {
					item.setDate(now);
				}
			}
		}
		Timeout state = new Timeout();
		state.setName(name);
		state.setInputTimeStamp(inputTimeStamp);
		state.setDate(now);
		state.setTimeout(Integer.parseInt(timeout));
		state.setNet(Integer.parseInt(timeout));
		this.getListTimeout().add(state);
		Collections.sort(this.getListTimeout(), new Comparator<Timeout>(){
			public int compare(Timeout p1, Timeout p2) {
		           return Integer.valueOf(p1.getNet()) .compareTo(Integer.valueOf(p2.getNet()));
		        }
		});
		/////////////////////////////////////////////////////
		AppLog.d("####### TABLE TIMEOUT #######");
		for (Timeout item : this.getListTimeout()) {
			AppLog.d("NAME :" + item.getName() + " DATE :" + item.getDate() + " TIME :" + item.getTimeout() + " NET :" + item.getNet());
			//System.out.println("NAME :" + item.getName() + " DATE :" + item.getDate() + " TIME :" + item.getTimeout() + " NET :" + item.getNet());
		}
		AppLog.d("############# END #############");
		/////////////////////////////////////////////////////
	}
	
	public String getCalTime()
	{
		Date now = this.getNow();
		for (Timeout item : this.getListTimeout()) {
			int second = item.getTimeout() - this.diffDate(item.getDate(), now);
			item.setNet(second);
		}
		Collections.sort(this.getListTimeout(), new Comparator<Timeout>(){
			public int compare(Timeout p1, Timeout p2) {
		           return Integer.valueOf(p1.getNet()).compareTo(Integer.valueOf(p2.getNet()));
		        }
		});
		String time = null;
		int second = 0;
		if (this.getListTimeout().size() > 0) {
			second = this.getListTimeout().get(0).getNet();
		}
		if (second > 0) {
			time = "" + second;
		}
		return time;
	}
	
	public String getTime()
	{
		String time = null;
		int second = 0;
		if (this.getListTimeout().size() > 0) {
			second = this.getListTimeout().get(0).getNet();
		}
		if (second > 0) {
			time = "" + second;
		}
		return time;
	}
	
	public Timeout getInsTime()
	{
		Date now = this.getNow();
		for (Timeout item : this.getListTimeout()) {
			int second = item.getTimeout() - this.diffDate(item.getDate(), now);
			item.setNet(second);
		}
		Collections.sort(this.getListTimeout(), new Comparator<Timeout>(){
			public int compare(Timeout p1, Timeout p2) {
		           return Integer.valueOf(p1.getNet()).compareTo(Integer.valueOf(p2.getNet()));
		        }
		});
		Timeout ins = null;
		if (this.getListTimeout().size() > 0) {
			ins = this.getListTimeout().get(0);
		}
		return ins;
	}
	
	public List<String> getState()
	{
		List<String> list = this.getState(true);
		return list;
	}
	
	public List<String> getState(boolean isSet)
	{
		Log.dev("####### TABLE TIMEOUT(OLD) #######");
		for (Timeout item : this.getListTimeout()) {
			Log.dev("NAME :" + item.getName() + " DATE :" + item.getDate() + " TIME :" + item.getTimeout() + " NET :" + item.getNet());
//			System.out.println("NAME :" + item.getName() + " DATE :" + item.getDate() + " TIME :" + item.getTimeout() + " NET :" + item.getNet());
		}
		Log.dev("############# END #############");
		Collections.sort(this.getListTimeout(), new Comparator<Timeout>(){
			public int compare(Timeout p1, Timeout p2) {
		           return Integer.valueOf(p1.getNet()).compareTo(Integer.valueOf(p2.getNet()));
		        }
		});
		int second = 0;
		List<String> list = new ArrayList<String>();
		if (this.getListTimeout().size() > 0) {
			second = this.getListTimeout().get(0).getNet();
		}
		List<Timeout> tmp = new ArrayList<Timeout>();
		for (Timeout item : this.getListTimeout()) {
			if (item.getNet() == second) {
				tmp.add(item);
				list.add(item.getName());
			}
		}
		for (Timeout timeout : tmp) {
			this.getListTimeout().remove(timeout);
		}
		if (isSet) {
			this.getEc02Instance().getAFInstance().setListTimeout(this.getListTimeout());
		}
		Log.dev("####### TABLE TIMEOUT(NEW) #######");
		for (Timeout item : this.getListTimeout()) {
			Log.dev("NAME :" + item.getName() + " DATE :" + item.getDate() + " TIME :" + item.getTimeout() + " NET :" + item.getNet());
//			System.out.println("NAME :" + item.getName() + " DATE :" + item.getDate() + " TIME :" + item.getTimeout() + " NET :" + item.getNet());
		}
		Log.dev("############# END #############");
		return list;
	}

	public ArrayList<Timeout> getListTimeout() {
		return listTimeout;
	}

	public void setListTimeout(ArrayList<Timeout> listTimeout) {
		this.listTimeout = listTimeout;
	}

	public EC02Instance getEc02Instance() {
		return ec02Instance;
	}

	public void setEc02Instance(EC02Instance ec02Instance) {
		this.ec02Instance = ec02Instance;
	}
}