// Path: haogrgr-buka/src/main/java/com/haogrgr/buka/manager/DetailCapturerManager.java
// public class DetailCapturerManager {
// 	
// 	private static final Logger logger = LoggerFactory.getLogger(DetailCapturerManager.class);
// 	
// 	private Map<String, DetailCapturer> capturers = new ConcurrentHashMap<String, DetailCapturer>();
// 	private BlockingQueue<DetailCapturerTask> completes = new LinkedBlockingQueue<>(1000);
// 	private BlockingQueue<DetailCapturerTask> errors = new LinkedBlockingQueue<>(1000);
// 	private TaskGenerater taskGenerater = null;
// 	private ComicsDetailHandler resultHandler = null;
// 	private ComicsDetailErrorHandler errorTaskHandler = null;
// 
// 	public DetailCapturerManager(TaskGenerater taskGenerater) {
// 		this.taskGenerater = taskGenerater;
// 	}
// 
// 	public void start(int size) {
// 		for (int i = 0; i < size; i++) {
// 			String name = "detail-capturer-" + i;
// 			DetailCapturer capturer = new DetailCapturer(name, this, 100);
// 			capturers.put(name, capturer);
// 			capturer.start();
// 		}
// 		
// 		resultHandler = new ComicsDetailHandler(this);
// 		resultHandler.start();
// 		
// 		errorTaskHandler = new ComicsDetailErrorHandler(this);
// 		errorTaskHandler.start();
// 	}
// 	
// 	public void stop(){
// 		for (Entry<String, DetailCapturer> entry : capturers.entrySet()) {
// 			entry.getValue().stopCapturer();
// 		}
// 	}
// 
// 	public boolean hasTask() {
// 		return taskGenerater.hasNext();
// 	}
// 
// 	public DetailCapturerTask getTask() {
// 		return (DetailCapturerTask) taskGenerater.next();
// 	}
// 	
// 	public void complete(DetailCapturerTask task){
// 		if(task == null){
// 			return ;
// 		}
// 		try {
// 			completes.put(task);
// 		} catch (InterruptedException e) {
// 			logger.warn("线程被中断");
// 		}
// 	}
// 	
// 	public void error(DetailCapturerTask task){
// 		if(task == null){
// 			return ;
// 		}
// 		try {
// 			errors.put(task);
// 		} catch (InterruptedException e) {
// 			logger.warn("线程被中断");
// 		}
// 	}
// 	
// 	public DetailCapturerTask processComplete(){
// 		try {
// 			return completes.take();
// 		} catch (InterruptedException e) {
// 			logger.warn("线程被中断");
// 		}
// 		return null;
// 	}
// 	
// 	public DetailCapturerTask processError(){
// 		try {
// 			return errors.take();
// 		} catch (InterruptedException e) {
// 			logger.warn("线程被中断");
// 		}
// 		return null;
// 	}
// }
// 
// Path: haogrgr-buka/src/main/java/com/haogrgr/buka/task/model/DetailCapturerTask.java
// public class DetailCapturerTask extends CapturerTask {
// 
// 	private static final long serialVersionUID = 976314830842198753L;
// 
// 	private Integer detailId;
// 	private ComicsDetail result;
// 
// 	public DetailCapturerTask() {
// 		super();
// 	}
// 
// 	public DetailCapturerTask(Integer detailId) {
// 		this.detailId = detailId;
// 	}
// 
// 	@Override
// 	@SuppressWarnings("unchecked")
// 	public <T> T getData(Class<T> clazz) {
// 		return (T) detailId;
// 	}
// 
// 	@Override
// 	@SuppressWarnings("unchecked")
// 	public <T> T getResult(Class<T> clazz) {
// 		return (T) result;
// 	}
// 
// 	public void setResult(ComicsDetail result) {
// 		this.result = result;
// 	}
// 	
// 	public boolean hasResult(){
// 		return result != null;
// 	}
// 	
// 	@Override
// 	public String toString() {
// 		return "DetailTask [detailId=" + detailId + ", result=" + result + ", getUuid()=" + getUuid() + "]";
// 	}
// 
// }


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.haogrgr.buka.manager.DetailCapturerManager;
import com.haogrgr.buka.task.model.DetailCapturerTask;
package com.haogrgr.buka.handler;



public class ComicsDetailErrorHandler extends Thread {

	private static final Logger logger = LoggerFactory.getLogger(ComicsDetailErrorHandler.class);

	private DetailCapturerManager manager;

	public ComicsDetailErrorHandler(DetailCapturerManager manager) {
		super("comics-detail-error-handler");
		this.manager = manager;
	}

// Path: haogrgr-buka/src/main/java/com/haogrgr/buka/manager/DetailCapturerManager.java
// public class DetailCapturerManager {
// 	
// 	private static final Logger logger = LoggerFactory.getLogger(DetailCapturerManager.class);
// 	
// 	private Map<String, DetailCapturer> capturers = new ConcurrentHashMap<String, DetailCapturer>();
// 	private BlockingQueue<DetailCapturerTask> completes = new LinkedBlockingQueue<>(1000);
// 	private BlockingQueue<DetailCapturerTask> errors = new LinkedBlockingQueue<>(1000);
// 	private TaskGenerater taskGenerater = null;
// 	private ComicsDetailHandler resultHandler = null;
// 	private ComicsDetailErrorHandler errorTaskHandler = null;
// 
// 	public DetailCapturerManager(TaskGenerater taskGenerater) {
// 		this.taskGenerater = taskGenerater;
// 	}
// 
// 	public void start(int size) {
// 		for (int i = 0; i < size; i++) {
// 			String name = "detail-capturer-" + i;
// 			DetailCapturer capturer = new DetailCapturer(name, this, 100);
// 			capturers.put(name, capturer);
// 			capturer.start();
// 		}
// 		
// 		resultHandler = new ComicsDetailHandler(this);
// 		resultHandler.start();
// 		
// 		errorTaskHandler = new ComicsDetailErrorHandler(this);
// 		errorTaskHandler.start();
// 	}
// 	
// 	public void stop(){
// 		for (Entry<String, DetailCapturer> entry : capturers.entrySet()) {
// 			entry.getValue().stopCapturer();
// 		}
// 	}
// 
// 	public boolean hasTask() {
// 		return taskGenerater.hasNext();
// 	}
// 
// 	public DetailCapturerTask getTask() {
// 		return (DetailCapturerTask) taskGenerater.next();
// 	}
// 	
// 	public void complete(DetailCapturerTask task){
// 		if(task == null){
// 			return ;
// 		}
// 		try {
// 			completes.put(task);
// 		} catch (InterruptedException e) {
// 			logger.warn("线程被中断");
// 		}
// 	}
// 	
// 	public void error(DetailCapturerTask task){
// 		if(task == null){
// 			return ;
// 		}
// 		try {
// 			errors.put(task);
// 		} catch (InterruptedException e) {
// 			logger.warn("线程被中断");
// 		}
// 	}
// 	
// 	public DetailCapturerTask processComplete(){
// 		try {
// 			return completes.take();
// 		} catch (InterruptedException e) {
// 			logger.warn("线程被中断");
// 		}
// 		return null;
// 	}
// 	
// 	public DetailCapturerTask processError(){
// 		try {
// 			return errors.take();
// 		} catch (InterruptedException e) {
// 			logger.warn("线程被中断");
// 		}
// 		return null;
// 	}
// }
// 
// Path: haogrgr-buka/src/main/java/com/haogrgr/buka/task/model/DetailCapturerTask.java
// public class DetailCapturerTask extends CapturerTask {
// 
// 	private static final long serialVersionUID = 976314830842198753L;
// 
// 	private Integer detailId;
// 	private ComicsDetail result;
// 
// 	public DetailCapturerTask() {
// 		super();
// 	}
// 
// 	public DetailCapturerTask(Integer detailId) {
// 		this.detailId = detailId;
// 	}
// 
// 	@Override
// 	@SuppressWarnings("unchecked")
// 	public <T> T getData(Class<T> clazz) {
// 		return (T) detailId;
// 	}
// 
// 	@Override
// 	@SuppressWarnings("unchecked")
// 	public <T> T getResult(Class<T> clazz) {
// 		return (T) result;
// 	}
// 
// 	public void setResult(ComicsDetail result) {
// 		this.result = result;
// 	}
// 	
// 	public boolean hasResult(){
// 		return result != null;
// 	}
// 	
// 	@Override
// 	public String toString() {
// 		return "DetailTask [detailId=" + detailId + ", result=" + result + ", getUuid()=" + getUuid() + "]";
// 	}
// 
// }


// Path: haogrgr-buka/src/main/java/com/haogrgr/buka/handler/ComicsDetailErrorHandler.java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.haogrgr.buka.manager.DetailCapturerManager;
import com.haogrgr.buka.task.model.DetailCapturerTask;

package com.haogrgr.buka.handler;



public class ComicsDetailErrorHandler extends Thread {

	private static final Logger logger = LoggerFactory.getLogger(ComicsDetailErrorHandler.class);

	private DetailCapturerManager manager;

	public ComicsDetailErrorHandler(DetailCapturerManager manager) {
		super("comics-detail-error-handler");
		this.manager = manager;
	}

	@Override