diff src/main/java/alice/topology/manager/keeparive/ListManager.java @ 345:8f71c3e6f11d

Change directory structure Maven standard
author sugi
date Wed, 16 Apr 2014 18:26:07 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/topology/manager/keeparive/ListManager.java	Wed Apr 16 18:26:07 2014 +0900
@@ -0,0 +1,85 @@
+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();
+		TaskInfo nowTask = exec.getNowTask();
+		if (nowTask == null) { // active task is nothing
+			add(newInfo);
+		} else {
+			long remainingTime = exec.getRemainingTime();
+			if (remainingTime > newInfo.getSleepTime()) {
+				// active task is longer than newTask.
+				TaskInfo task = nowTask.clone();
+				task.setSleepTime(remainingTime);
+				list.addFirst(task);
+				add(newInfo);
+				exec.ignore();
+			} else {
+				// newTask is longer than active task.
+				newInfo.setSleepTime(newInfo.getSleepTime() - remainingTime);
+				add(newInfo);
+			}
+		}
+		show();
+	}
+
+	private void add(TaskInfo newInfo){
+		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);
+	}
+	
+	public boolean deleteTask(TaskInfo task){
+		boolean matchFlag = false;
+		int cnt = 0;
+		for (TaskInfo t: list){
+			if (t.getType().equals(task.getType())){
+				matchFlag = true;
+				if (cnt+1 < list.size() ){ // next task exists.
+					TaskInfo next = list.get(cnt+1);
+					next.setSleepTime(next.getSleepTime()+task.getSleepTime());
+				}
+				list.remove(cnt);
+				break;
+			} else {
+				cnt++;
+			}
+		}	
+		return matchFlag;
+	}
+	
+	public void show(){
+		if (TaskExecuter.getInstance().getNowTask()!=null){
+			System.out.print("NOW | ");
+			System.out.print(TaskExecuter.getInstance().getNowTask().getSleepTime());
+			System.out.print(" | ");
+		}
+		for (TaskInfo info : list){
+			System.out.print(info.getSleepTime());
+			System.out.print(" | ");
+		}
+		System.out.println();
+	}
+}