00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 package org.objectweb.proactive.branchnbound.core.queue;
00032
00033 import java.io.InputStream;
00034 import java.io.OutputStream;
00035 import java.io.Serializable;
00036 import java.util.Collection;
00037 import java.util.Vector;
00038
00039 import org.apache.log4j.Logger;
00040 import org.objectweb.proactive.branchnbound.core.Result;
00041 import org.objectweb.proactive.branchnbound.core.Task;
00042 import org.objectweb.proactive.branchnbound.core.exception.NoResultsException;
00043 import org.objectweb.proactive.core.util.log.Loggers;
00044 import org.objectweb.proactive.core.util.log.ProActiveLogger;
00045 import org.objectweb.proactive.core.util.wrapper.BooleanMutableWrapper;
00046 import org.objectweb.proactive.core.util.wrapper.BooleanWrapper;
00047 import org.objectweb.proactive.core.util.wrapper.IntMutableWrapper;
00048
00049
00059 public abstract class TaskQueue implements Serializable {
00060
00062 public final static Logger logger = ProActiveLogger.getLogger(Loggers.P2P_SKELETONS_MANAGER);
00063
00065 private Result bestCurrentResult;
00066
00072 public abstract void addAll(Collection tasks);
00073
00077 public abstract IntMutableWrapper size();
00078
00082 public abstract BooleanMutableWrapper hasNext();
00083
00088 public abstract Task next();
00089
00093 public abstract void flushAll();
00094
00099 public abstract BooleanWrapper isHungry();
00100
00106 public abstract void setHungryLevel(int level);
00107
00114 public abstract void backupTasks(Task rootTask, Vector pendingTasks,
00115 OutputStream backupOutputStream);
00116
00121 public abstract void loadTasks(InputStream taskFile);
00122
00129 public abstract Task getRootTaskFromBackup();
00130
00135 public abstract void addResult(Result result);
00136
00140 public abstract IntMutableWrapper howManyResults();
00141
00145 public abstract Collection getAllResults();
00146
00151 public abstract void backupResults(OutputStream backupResultFile);
00152
00157 public abstract void loadResults(InputStream backupResultFile);
00158
00163 public abstract void addTask(Task t);
00164
00170 public void informNewBestResult(Result newBest) {
00171 if ((this.bestCurrentResult == null) ||
00172 newBest.isBetterThan(this.bestCurrentResult)) {
00173 this.bestCurrentResult = newBest;
00174 if (logger.isInfoEnabled()) {
00175 logger.info("A new best result was found: " +
00176 this.bestCurrentResult);
00177 }
00178 }
00179 }
00180
00184 public Result getBestCurrentResult() {
00185 if (this.bestCurrentResult != null) {
00186 return this.bestCurrentResult;
00187 }
00188 return new Result(new NoResultsException());
00189 }
00190 }