Profile.java
Home
/
src /
main /
java /
br /
ufrgs /
inf /
prosoft /
requestssimulator /
Profile.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package br.ufrgs.inf.prosoft.requestssimulator;
import br.ufrgs.inf.prosoft.requestssimulator.requests.RequestPlan;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Stream;
/**
*
* @author romulo
*/
public class Profile {
private final Collection<RequestPlan> roots;
private final Map<String, RequestPlan> urlHasRequestPlan;
private final List<Session> sessions;
public Profile(Map<String, RequestPlan> urlHasRequestPlan) {
this.urlHasRequestPlan = urlHasRequestPlan;
Map<String, RequestPlan> rootsReferences = new HashMap<>(this.urlHasRequestPlan);
this.urlHasRequestPlan.forEach((reference, requestPlan) -> {
if (reference.charAt(0) == '*') {
rootsReferences.remove(reference);
return;
}
if (requestPlan.links().count() == 0) {
rootsReferences.remove(reference);
return;
}
requestPlan.links().forEach(linkReference -> {
rootsReferences.remove(linkReference.getReference());
});
});
this.roots = rootsReferences.values();
this.sessions = new ArrayList<>();
}
public Profile(List<Session> sessions) {
this.sessions = sessions;
this.roots = null;
this.urlHasRequestPlan = null;
}
public Stream<Session> sessions() {
return this.sessions.stream();
}
public Session newSession() {
Session session = new Session(this.roots);
this.sessions.add(session);
return session;
}
public RequestPlan getRequestPlan(String requestPlanReference) {
return this.urlHasRequestPlan.get(requestPlanReference);
}
public void simulate(long time) {
long end = System.currentTimeMillis() + time;
while (System.currentTimeMillis() < end) {
newSession().simulate();
}
}
public void execute() {
this.sessions.forEach(Session::execute);
}
@Override
protected Profile clone() {
return new Profile(this.urlHasRequestPlan);
}
}