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.core.body.request;
00032
00033 import java.io.Serializable;
00034 import java.util.AbstractList;
00035 import java.util.Vector;
00036
00037
00059 public class NonFunctionalRequestsProcessor implements RequestProcessor, Serializable {
00060
00061
00062 private static final long serialVersionUID = 1L;
00063 private AbstractList<Request> nfRequestsQueue;
00064 private RequestFilter immediateNFResquestFilter;
00065 private RequestFilter priorityNFRequestFilter;
00066 private int immediateNFReqNumber, priorityNFReqNumber;
00067
00068
00069 public NonFunctionalRequestsProcessor() {
00070 nfRequestsQueue = new Vector<Request>();
00071 this.immediateNFResquestFilter = new ImmediateNFRequestFilter();
00072 this.priorityNFRequestFilter = new PriorityNFRequestFilter();
00073 immediateNFReqNumber = 0;
00074 priorityNFReqNumber = 0;
00075 }
00076
00077
00078
00084 public synchronized void addToNFRequestsQueue(Request request) {
00085 if(immediateNFResquestFilter.acceptRequest(request)) {
00086 nfRequestsQueue.add(immediateNFReqNumber,request);
00087 immediateNFReqNumber ++;
00088 } else if (priorityNFRequestFilter.acceptRequest(request)){
00089 nfRequestsQueue.add(immediateNFReqNumber + priorityNFReqNumber, request);
00090 priorityNFReqNumber ++;
00091 }
00092 }
00093
00099 public synchronized Request getOldestPriorityNFRequest(boolean remove) {
00100 Request request;
00101 if(nfRequestsQueue.isEmpty()) {
00102 return null;
00103 }else if (remove){
00104 request = nfRequestsQueue.remove(0);
00105 if(immediateNFReqNumber > 0){
00106 immediateNFReqNumber --;
00107 }else {
00108 priorityNFReqNumber --;
00109 }
00110 return request;
00111 }else {
00112 return nfRequestsQueue.get(0);
00113 }
00114 }
00115
00116
00122 public synchronized Request getYoungestPriorityNFRequest(boolean remove) {
00123 Request request;
00124
00125 if(nfRequestsQueue.isEmpty()) {
00126 return null;
00127 }else if (remove){
00128 if(immediateNFReqNumber != 0){
00129 request = nfRequestsQueue.remove(immediateNFReqNumber);
00130 immediateNFReqNumber --;
00131 return request;
00132 }else {
00133 request = nfRequestsQueue.remove(priorityNFReqNumber);
00134 priorityNFReqNumber --;
00135 return request;
00136 }
00137 }else {
00138 if(immediateNFReqNumber != 0){
00139 return nfRequestsQueue.get(immediateNFReqNumber);
00140 }else {
00141 return nfRequestsQueue.get(priorityNFReqNumber);
00142 }
00143 }
00144 }
00145
00146
00147 public synchronized boolean isEmpty() {
00148 return (immediateNFReqNumber == 0 && priorityNFReqNumber == 0);
00149 }
00150
00151
00152 public synchronized String toString() {
00153 StringBuffer sb = new StringBuffer("NFRequests Queue : ");
00154 sb.append("--- NonFunctionalRequestQueue n=").append(nfRequestsQueue.size()).append(" requests --- ->\n");
00155 int count = 0;
00156 java.util.Iterator<Request> iterator = nfRequestsQueue.iterator();
00157 while (iterator.hasNext()) {
00158 Request currentrequest = iterator.next();
00159 sb.append(count).append("--> ")
00160 .append(currentrequest.getMethodName()).append("\n");
00161 count++;
00162 }
00163 sb.append("--- End NonFunctionalRequestQueue ---");
00164 return sb.toString();
00165 }
00166
00167 public int processRequest(Request request) {
00168 if((request.getNFRequestPriority() == Request.NFREQUEST_IMMEDIATE_PRIORITY )|| (request.getNFRequestPriority() == Request.NFREQUEST_PRIORITY)){
00169 nfRequestsQueue.add(request);
00170 }
00171 return RequestProcessor.KEEP;
00172 }
00173
00174
00175
00176
00186 protected class ImmediateNFRequestFilter implements RequestFilter, Serializable {
00190 private static final long serialVersionUID = 1L;
00191
00192 public boolean acceptRequest(Request request) {
00193 return (request.isFunctionalRequest()
00194 && (request.getNFRequestPriority() == Request.NFREQUEST_IMMEDIATE_PRIORITY));
00195 }
00196 }
00197
00198
00208 protected class PriorityNFRequestFilter implements RequestFilter, Serializable {
00212 private static final long serialVersionUID = 1L;
00213
00214 public boolean acceptRequest(Request request) {
00215 return (request.isFunctionalRequest()
00216 && (request.getNFRequestPriority() == Request.NFREQUEST_PRIORITY));
00217 }
00218 }
00219
00229 protected class NoPriorityNFRequestFilter implements RequestFilter, Serializable {
00233 private static final long serialVersionUID = 1L;
00234
00235 public boolean acceptRequest(Request request) {
00236 return (request.isFunctionalRequest()
00237 && (request.getNFRequestPriority() == Request.NFREQUEST_NO_PRIORITY));
00238 }
00239
00240 }
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251 }