package com.sequenceiq.cloudbreak.cloud.template.context;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
import com.sequenceiq.cloudbreak.cloud.model.CloudResource;
import com.sequenceiq.cloudbreak.cloud.model.Location;
import com.sequenceiq.cloudbreak.cloud.model.generic.DynamicModel;
public class ResourceBuilderContext extends DynamicModel {
private Location location;
private String name;
private int parallelResourceRequest;
private Queue<CloudResource> networkResources = new ConcurrentLinkedQueue<>();
private Map<String, List<CloudResource>> groupResources = new HashMap<>();
private Map<Long, List<CloudResource>> computeResources = new HashMap<>();
private boolean build;
public ResourceBuilderContext(String name, Location location, int parallelResourceRequest, boolean build) {
this(name, location, parallelResourceRequest);
this.build = build;
}
public ResourceBuilderContext(String name, Location location, int parallelResourceRequest) {
this.location = location;
this.name = name;
this.parallelResourceRequest = parallelResourceRequest;
}
public Location getLocation() {
return location;
}
public boolean isBuild() {
return build;
}
public List<CloudResource> getNetworkResources() {
return new ArrayList<>(networkResources);
}
public String getName() {
return name;
}
public int getParallelResourceRequest() {
return parallelResourceRequest;
}
public void addNetworkResources(List<CloudResource> resources) {
this.networkResources.addAll(resources);
}
public List<CloudResource> getGroupResources(String groupName) {
return groupResources.get(groupName);
}
public synchronized void addGroupResources(String groupName, List<CloudResource> resources) {
List<CloudResource> list = groupResources.get(groupName);
if (list == null) {
list = new ArrayList<>();
groupResources.put(groupName, list);
}
list.addAll(resources);
}
public synchronized void addComputeResources(long index, List<CloudResource> resources) {
List<CloudResource> list = computeResources.get(index);
if (list == null) {
list = new ArrayList<>();
computeResources.put(index, list);
}
list.addAll(resources);
}
public List<CloudResource> getComputeResources(long index) {
return computeResources.get(index);
}
}