Mercurial > hg > Members > tatsuki > Alice
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(); + } +}