view src/main/java/alice/topology/manager/keeparive/ListManager.java @ 419:aefbe41fcf12 dispose

change tab to space
author sugi
date Tue, 15 Jul 2014 16:00:22 +0900
parents 8f71c3e6f11d
children 6e304a7a60e7
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();
        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();
    }
}