Statistics
| Revision:

svn-gvsig-desktop / trunk / libraries / libRemoteServices / src / org / gvsig / remoteClient / taskplanning / retrieving / RetrieveQueue.java @ 5230

History | View | Annotate | Download (2.38 KB)

1
/*
2
 * Created on 01-oct-2005
3
 */
4
package org.gvsig.remoteClient.taskplanning.retrieving;
5

    
6
import java.util.Date;
7
import java.util.Vector;
8

    
9
import org.gvsig.remoteClient.taskplanning.FIFOTaskPlanner;
10
import org.gvsig.remoteClient.taskplanning.IQueue;
11
import org.gvsig.remoteClient.taskplanning.IRunnableTask;
12
import org.gvsig.remoteClient.taskplanning.ITaskPlanner;
13

    
14
/**
15
 * @author jaume dominguez faus - jaume.dominguez@iver.es
16
 *                    Luis W. Sevilla (sevilla_lui@gva.es)
17
 */
18
public class RetrieveQueue implements IQueue {
19
        private String hostName;
20
        private Date startTime;
21
        private Vector tasks = new Vector();
22
        private boolean waiting;
23
        private ITaskPlanner taskPlanner;
24
        private Worker worker;
25
        
26
        /**
27
         * 
28
         */
29
        public RetrieveQueue(String hName) {
30
                hostName = hName;
31
                startTime = new Date();
32
                worker = new Worker();
33
                new Thread(worker).start();
34
        }
35
        
36
        
37
        public IRunnableTask put(IRunnableTask task) {
38
                tasks.add(task);
39
                if (waiting) {
40
                        synchronized (this) {
41
                                notifyAll();
42
                        }
43
                }
44
                return task;
45
        }
46
        
47
        public IRunnableTask take() {
48
                if (tasks.isEmpty()) {
49
                        synchronized (this) {
50
                                waiting = true;
51
                                try {
52
                                        wait();
53
                                } catch (InterruptedException ie) {
54
                                        waiting = false;
55
                                }
56
                        }
57
                }
58
                return getTaskPlanner().nextTask() ;
59
        }
60
        
61
        
62
        
63
        public boolean isEmpty() {
64
                synchronized (this) {
65
                        return tasks.isEmpty() && !worker.r.isRunning();
66
                }
67
        }
68
        
69
        
70

    
71
        public ITaskPlanner getTaskPlanner() {
72
                if (taskPlanner == null) {
73
                        taskPlanner = new FIFOTaskPlanner(this);
74
                }
75
                return taskPlanner;
76
        }
77

    
78

    
79
        public void setTaskPlanner(ITaskPlanner planner) {
80
                taskPlanner = planner;
81
        }
82

    
83

    
84
        public void pause() {
85
                waiting = true;
86
        }
87

    
88

    
89
        public void resume() {
90
                waiting = false;
91
        }
92

    
93

    
94
        public Vector getTasks() {
95
                return tasks;
96
        }
97

    
98
        private class Worker implements Runnable {
99
                URLRetrieveTask r;
100
                int i = 0; 
101
                public void run() {
102
                        while (true) {
103
                                r = (URLRetrieveTask) take();
104
                                r.execute();
105
                        }
106
                }
107
        }
108

    
109
        
110
        
111

    
112
        protected URLRetrieveTask getURLPreviousRequest(URLRequest request) {
113
                // Is the one currently running?
114
                /*URLRetrieveTask aux = (URLRetrieveTask) worker.r;
115
                if (request.equals(aux.getRequest())) {
116
                                return aux;
117
                }*/        
118
                // Is one of those in the queue?
119
                for (int i = 0; i < tasks.size(); i++) {
120
                        URLRetrieveTask task = (URLRetrieveTask) tasks.get(i);
121
                        URLRequest aWorkingRequest = task.getRequest();
122
                        if (aWorkingRequest.equals(request)) {
123
                                return task;
124
                        }
125
                }
126
                return null;
127
        }
128
}