Skip to content

Commit 3228ba7

Browse files
committed
Active Object without Prod and Cons models
1 parent a54f66b commit 3228ba7

21 files changed

+302
-56
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.idea/

src/main/java/ActiveObject/ActivationQueue.java

-4
This file was deleted.
+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package ActiveObject.App;
2+
3+
public class Main {
4+
public static void main(String[] args) {
5+
6+
}
7+
}

src/main/java/ActiveObject/ConsumerMethodRequest.java

-4
This file was deleted.

src/main/java/ActiveObject/Future.java

-4
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package ActiveObject.Future;
2+
3+
public class Future implements IFuture<Integer>{
4+
5+
private boolean status;
6+
private Integer result;
7+
8+
@Override
9+
public Integer getResult() {
10+
return this.result;
11+
}
12+
13+
@Override
14+
public boolean isFinished() {
15+
return status;
16+
}
17+
18+
@Override
19+
public void setResult(Integer result) {
20+
this.result = result;
21+
}
22+
23+
@Override
24+
public void setStatus() {
25+
this.status = true;
26+
}
27+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package ActiveObject.Future;
2+
3+
public interface IFuture<T> {
4+
T getResult();
5+
boolean isFinished();
6+
void setResult(T result);
7+
void setStatus();
8+
}

src/main/java/ActiveObject/IMethodRequest.java renamed to src/main/java/ActiveObject/MethodRequest/IMethodRequest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package ActiveObject;
1+
package ActiveObject.MethodRequest;
22

33
public interface IMethodRequest {
44
boolean guard();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package ActiveObject.MethodRequest;
2+
3+
import ActiveObject.Future.Future;
4+
import ActiveObject.Servant;
5+
6+
public class PutMethodRequest implements IMethodRequest {
7+
8+
private Future future;
9+
private Servant servant;
10+
private int toPut;
11+
12+
public PutMethodRequest(Future future, Servant buffer, int toPut){
13+
this.future = future;
14+
this.servant = buffer;
15+
this.toPut = toPut;
16+
}
17+
18+
@Override
19+
public boolean guard() {
20+
return servant.getCurrentSize() + toPut <= servant.getCapacity();
21+
}
22+
23+
@Override
24+
public void execute() {
25+
servant.produce(toPut);
26+
future.setResult(toPut);
27+
future.setStatus();
28+
}
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package ActiveObject.MethodRequest;
2+
3+
import ActiveObject.Future.Future;
4+
import ActiveObject.Servant;
5+
6+
public class TakeMethodRequest implements IMethodRequest {
7+
8+
private Future future;
9+
private Servant servant;
10+
private int toTake;
11+
12+
public TakeMethodRequest(Future future, Servant buffer, int toTake){
13+
this.future = future;
14+
this.servant = buffer;
15+
this.toTake = toTake;
16+
}
17+
18+
@Override
19+
public boolean guard() {
20+
return servant.getCurrentSize() >= toTake;
21+
}
22+
23+
@Override
24+
public void execute() {
25+
servant.consume(toTake);
26+
future.setResult(toTake);
27+
future.setStatus();
28+
}
29+
}
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
package ActiveObject.Models;
22

3-
public class Consumer {
3+
public class Consumer extends Thread {
4+
5+
@Override
6+
public void run() {
7+
8+
}
49
}
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
package ActiveObject.Models;
22

3-
public class Procuder {
3+
public class Procuder extends Thread {
4+
5+
@Override
6+
public void run() {
7+
8+
}
49
}

src/main/java/ActiveObject/ProcuderMethodRequest.java

-4
This file was deleted.

src/main/java/ActiveObject/Proxy.java

+22-7
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,36 @@
11
package ActiveObject;
22

3-
import java.util.concurrent.Future;
3+
import ActiveObject.Future.Future;
4+
import ActiveObject.MethodRequest.PutMethodRequest;
5+
import ActiveObject.MethodRequest.TakeMethodRequest;
6+
import ActiveObject.Scheduler.Scheduler;
7+
8+
49

510
public class Proxy {
611
private Scheduler scheduler;
712
private Servant servant;
813

9-
public Proxy(){
10-
this.servant = new Servant();
14+
public Proxy(int capacity){
15+
this.servant = new Servant(capacity);
1116
this.scheduler = new Scheduler();
1217
}
1318

14-
public Future method1(){
15-
return null;
19+
public Future consume(int toConsume){
20+
Future consumeFuture = new Future();
21+
TakeMethodRequest takeMethodRequest = new TakeMethodRequest(consumeFuture, servant, toConsume);
22+
scheduler.enqueue(takeMethodRequest);
23+
24+
return consumeFuture;
1625
}
1726

18-
public Future method2(){
19-
return null;
27+
public Future produce(int toProcude){
28+
Future produceFuture = new Future();
29+
PutMethodRequest putMethodRequest = new PutMethodRequest(produceFuture, servant, toProcude);
30+
scheduler.enqueue(putMethodRequest);
31+
32+
return produceFuture;
2033
}
34+
35+
2136
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package ActiveObject.Queues;
2+
3+
import ActiveObject.MethodRequest.IMethodRequest;
4+
5+
6+
import java.util.Queue;
7+
import java.util.concurrent.ConcurrentLinkedQueue;
8+
9+
public class ActivationQueue implements IActivationQueue<IMethodRequest> {
10+
11+
private Queue<IMethodRequest> methodRequestQueue = new ConcurrentLinkedQueue<>();
12+
13+
@Override
14+
public IMethodRequest dequeue() {
15+
return methodRequestQueue.poll();
16+
}
17+
18+
@Override
19+
public void enqueue(IMethodRequest methodRequest) {
20+
methodRequestQueue.offer(methodRequest);
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package ActiveObject.Queues;
2+
3+
public interface IActivationQueue<T> {
4+
T dequeue();
5+
void enqueue(T methodRequest);
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package ActiveObject.Queues;
2+
3+
import ActiveObject.MethodRequest.PutMethodRequest;
4+
5+
import java.util.Queue;
6+
import java.util.concurrent.ConcurrentLinkedQueue;
7+
8+
public class PutActivationQueueDEPR implements IActivationQueue<PutMethodRequest> {
9+
10+
private Queue<PutMethodRequest> putMethodRequestQueue = new ConcurrentLinkedQueue<>();
11+
12+
13+
@Override
14+
public PutMethodRequest dequeue() {
15+
return putMethodRequestQueue.poll();
16+
}
17+
18+
@Override
19+
public void enqueue(PutMethodRequest methodRequest) {
20+
putMethodRequestQueue.offer(methodRequest);
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package ActiveObject.Queues;
2+
3+
import ActiveObject.MethodRequest.TakeMethodRequest;
4+
5+
import java.util.Queue;
6+
import java.util.concurrent.ConcurrentLinkedQueue;
7+
8+
public class TakeActivationQueueDEPR implements IActivationQueue<TakeMethodRequest>{
9+
10+
private Queue<TakeMethodRequest> takeMethodRequestQueue = new ConcurrentLinkedQueue<>();
11+
12+
@Override
13+
public TakeMethodRequest dequeue() {
14+
return takeMethodRequestQueue.poll();
15+
}
16+
17+
@Override
18+
public void enqueue(TakeMethodRequest methodRequest) {
19+
takeMethodRequestQueue.offer(methodRequest);
20+
}
21+
}

src/main/java/ActiveObject/Scheduler.java

-26
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package ActiveObject.Scheduler;
2+
3+
import ActiveObject.MethodRequest.IMethodRequest;
4+
import ActiveObject.MethodRequest.PutMethodRequest;
5+
import ActiveObject.Queues.ActivationQueue;
6+
7+
import java.util.Queue;
8+
import java.util.concurrent.ConcurrentLinkedQueue;
9+
10+
public class Scheduler implements Runnable {
11+
12+
private Queue<IMethodRequest> putQueue = new ConcurrentLinkedQueue<>();
13+
private Queue<IMethodRequest> takeQueue = new ConcurrentLinkedQueue<>();
14+
private ActivationQueue activationQueue = new ActivationQueue();
15+
private boolean run = true;
16+
private Thread scheduler;
17+
18+
public void enqueue(IMethodRequest methodRequest) {
19+
this.activationQueue.enqueue(methodRequest);
20+
}
21+
22+
private IMethodRequest dequeue() {
23+
IMethodRequest methodRequest = null;
24+
methodRequest = this.activationQueue.dequeue();
25+
return methodRequest;
26+
}
27+
28+
29+
@Override
30+
public void run() {
31+
while (run) {
32+
IMethodRequest methodRequest = this.dequeue();
33+
34+
if (methodRequest instanceof PutMethodRequest) {
35+
if (!putQueue.isEmpty()) {
36+
putQueue.offer(methodRequest);
37+
while (putQueue.peek().guard() && !putQueue.isEmpty())
38+
putQueue.poll().execute();
39+
40+
} else {
41+
if (!methodRequest.guard())
42+
putQueue.offer(methodRequest);
43+
else
44+
methodRequest.execute();
45+
}
46+
} else {
47+
if (!takeQueue.isEmpty()) {
48+
takeQueue.offer(methodRequest);
49+
while (takeQueue.peek().guard() && !takeQueue.isEmpty())
50+
takeQueue.poll().execute();
51+
} else {
52+
if (!methodRequest.guard()) {
53+
takeQueue.offer(methodRequest);
54+
} else {
55+
methodRequest.execute();
56+
}
57+
}
58+
}
59+
}
60+
}
61+
62+
public void stopScheduler() {
63+
run = false;
64+
}
65+
66+
public void start() {
67+
if (this.scheduler == null) {
68+
this.scheduler = new Thread();
69+
this.scheduler.start();
70+
}
71+
}
72+
73+
}

0 commit comments

Comments
 (0)