/*
* JavaXYQ Source Code
* by kylixs
* at 2009-11-23
* please visit http://javaxyq.googlecode.com
* mail to kylixs@qq.com
*/
package com.javaxyq.task;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.javaxyq.model.Task;
import com.javaxyq.util.StringUtils;
/**
* ���������
* @author dewitt
* @date 2009-11-23 create
*/
public class TaskManager {
private List<Task> tasklist = new ArrayList<Task>();
private Map<String,TaskCoolie> coolies = new HashMap<String, TaskCoolie>();
public TaskManager() {
}
/**
* ע��������Ԫ
* @param type
* @param coolie
*/
public void register(String type, Object coolie) {
try {
if (coolie instanceof String) {
coolie = Class.forName((String) coolie).newInstance();
}
coolies.put(type, (TaskCoolie) coolie);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* ��ȡij��npc����������б�
* @param npc
* @return
*/
public List<Task> getTasksFor(String npcid) {
//return tasklist.findAll{task-> task.receiver==npcid};
List<Task> tasks = new ArrayList<Task>();
for (int i = 0; i < tasklist.size(); i++) {
Task task = tasklist.get(i);
if(StringUtils.equals(npcid,task.getReceiver())) {
tasks.add(task);
}
}
return tasks;
}
/**
* �Ƿ���ij���͵�����
* @param type
* @return
*/
public boolean hasTaskOfType(String type) {
//return tasklist.any{task-> task.type==type};
for (int i = 0; i < tasklist.size(); i++) {
Task task = tasklist.get(i);
if(StringUtils.equals(type,task.getType())) {
return true;
}
}
return false;
}
/**
* ��ȡij���͵������б�
* @param type
* @return
*/
public List<Task> getTasksOfType(String type) {
//return tasklist.findAll{task-> task.type==type};
List<Task> tasks = new ArrayList<Task>();
for (int i = 0; i < tasklist.size(); i++) {
Task task = tasklist.get(i);
if(StringUtils.equals(type,task.getType())) {
tasks.add(task);
}
}
return tasks;
}
/**
* ��ȡij���͵�����
* @param type
* @param subtype
* @return
*/
public Task getTaskOfType(String type, String subtype) {
//return tasklist.find{task-> task.type==type && task.subtype == subtype};;
for (int i = 0; i < tasklist.size(); i++) {
Task task = tasklist.get(i);
if(StringUtils.equals(type,task.getType()) && StringUtils.equals(subtype, task.getSubtype())) {
return task;
}
}
return null;
}
/**
* ���������б�
* @return
*/
public List<Task> getTaskList() {
return tasklist;
}
/**
* ɾ������
* @param task
*/
public void remove(Task task) {
tasklist.remove(task);
}
/**
* �������
* @param task
*/
public void add(Task task) {
tasklist.add(task);
}
/**
* ��������
* @param task
* @return
*/
public boolean process(Task task) {
TaskCoolie coolie = coolies.get(task.getType());
if(coolie == null) {
System.out.printf("��������:%s δע�ᣬ����ʧ�ܣ�\n",task.getType());
return false;
}
return coolie.process(task);
}
/**
* ��������
* @param subtype
* @param sender
* @return
*/
public Task create(String type,String subtype,String sender) {
TaskCoolie coolie = coolies.get(type);
if(coolie == null) {
System.out.printf("��������:%s δע�ᣬ����ʧ�ܣ�\n",type);
return null;
}
return coolie.create(subtype,sender);
}
/**
* ������������
* @param task
* @return
*/
public String desc(Task task) {
TaskCoolie coolie = coolies.get(task.getType());
if(coolie == null) {
System.out.printf("��������:%s δע�ᣬ����ʧ�ܣ�\n",task.getType());
return "";
}
return coolie.desc(task);
}
}