Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
SuperVisor.java 2.56 KiB
package fucoin.supervisor;

import java.awt.Label;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Queue;
import java.util.concurrent.Semaphore;

import akka.actor.ActorRef;
import akka.actor.Props;
import fucoin.AbstractNode;
import fucoin.actions.Action;
import fucoin.actions.persist.ActionInvokeUpdate;

public class SuperVisor extends AbstractNode {

	
	private AmountTableModel amountTableModel;
	private Label averageamountLbl;

	public SuperVisor(AmountTableModel amountTableModel, Label averageamountLbl) {
		this.amountTableModel = amountTableModel;
		this.averageamountLbl = averageamountLbl;
	}

	@Override
	public void onReceive(Object msg) {
		log(msg.getClass().getSimpleName());
		
		((Action) msg).doAction(this);
	}

	Semaphore mutex = new Semaphore(1);
	private Map<Long,DistributedCommitedTransferRequest> requestQueue;

	public static Props props() {
		return Props.create(SuperVisor.class, new SuperVisorCreator());
	}

	public void updateValues() {
		getSelf().tell(new ActionInvokeUpdate(), getSelf());
	}

	public void exit() {
		getContext().stop(getSelf());
	}

	@Override
	public void postStop() throws Exception {
		super.postStop();
	}

	public void addDistributedCommitedTransferRequest(
			DistributedCommitedTransferRequest request) {
		requestQueue.put(request.getId(),request);
	}

	@Override
	public void preStart() throws Exception {
		super.preStart();
		requestQueue = new HashMap<Long,DistributedCommitedTransferRequest>();
		self().tell(new ActionUpdateQueue(), self());
	}
	/**
	 * filters the request for outdated and removes them
	 * @return deleted outdated request
	 */
	public List<DistributedCommitedTransferRequest> updateList(){
		List<Long> deletesIds = new ArrayList<Long>();
		List<DistributedCommitedTransferRequest> deletes = new ArrayList<DistributedCommitedTransferRequest>();
		for(Entry<Long, DistributedCommitedTransferRequest> outdatedRequest : requestQueue.entrySet()){
			if(outdatedRequest.getValue().getTimeout()<System.currentTimeMillis()){
				deletesIds.add(outdatedRequest.getKey());
				deletes.add(outdatedRequest.getValue());
			}
		}
		for(Long delete : deletesIds){
			requestQueue.remove(delete);
		}
		
		return deletes;
	}
	
	public DistributedCommitedTransferRequest getRequest(Long id) {
		DistributedCommitedTransferRequest searchedrequest = requestQueue.get(id);
		return searchedrequest ;
	}

	public void deleteRequest(DistributedCommitedTransferRequest request) {
		requestQueue.remove(request.getId());
	}
}