view src/alice/topology/manager/keeparive/ListManager.java @ 325:54d0b947079a

addTask method has bug.
author one
date Fri, 24 Jan 2014 01:51:14 +0900
parents 806cc010a5bd
children 235f6d0994df
line wrap: on
line source

package alice.topology.manager.keeparive;

import java.util.LinkedList;

public class ListManager {
	private LinkedList<TaskInfo> list = new LinkedList<TaskInfo>();
	
	public LinkedList<TaskInfo> getTaskList() {
		return list;
	}
		
	public void addTask(TaskInfo newInfo) {
		TaskExecuter exec = TaskExecuter.getInstance();
		if (list.isEmpty()) {
			if (exec.getNowTask() == null) { // active task is nothing
				list.add(newInfo);
			} else {
				TaskInfo nowTask = exec.getNowTask();
				long remainingTime = nowTask.getSleepTime() - (System.currentTimeMillis() - exec.getStartTime());
				if (remainingTime < 0) {
					list.add(newInfo);
					return;
				}
				if (remainingTime < newInfo.getSleepTime()){
					// newTask is longer than active task.
					newInfo.setSleepTime(newInfo.getSleepTime() - remainingTime);
					list.add(newInfo);
				} else {
					// active task is longer than newTask. 
					list.add(newInfo);
					TaskInfo task = nowTask.clone();
					task.setSleepTime(remainingTime);
					addTask(task);
					exec.skip();				
				}
			}
		} else {
			int cnt = 0;
			for (TaskInfo info : list){
				if (info.getSleepTime() < newInfo.getSleepTime()){
					newInfo.setSleepTime(newInfo.getSleepTime() - info.getSleepTime());	
				} else if (info.getSleepTime() == newInfo.getSleepTime()){
					// newInfo.getSleepTime() - info.getSleepTime() must be Zero
					newInfo.setSleepTime(0);
					cnt++;
					break;
				} else if (info.getSleepTime() > newInfo.getSleepTime()){
					info.setSleepTime(info.getSleepTime() - newInfo.getSleepTime());
					break;
				}
				cnt++;
			}
			list.add(cnt, newInfo);
		}
		
	}
	
	
}