package com.zillabyte.motherbrain.flow;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import com.google.monitoring.runtime.instrumentation.common.com.google.common.collect.Lists;
public class FlowOperationInstanceCollection implements Iterable<FlowOperationInstance> {
private ConcurrentHashMap<String, FlowOperationInstance> _map;
public FlowOperationInstanceCollection() {
_map = new ConcurrentHashMap<>();
}
public FlowOperationInstanceCollection(FlowOperationInstanceCollection f) {
_map = new ConcurrentHashMap<>(f._map);
}
public FlowOperationInstanceCollection clone() {
return new FlowOperationInstanceCollection(this);
}
@Override
public Iterator<FlowOperationInstance> iterator() {
return _map.values().iterator();
}
public synchronized void clear() {
_map.clear();
}
public boolean contains(String id) {
return _map.containsKey(id);
}
public FlowOperationInstance getOrCreate(String id) {
if (_map.containsKey(id) == false) {
synchronized(this) {
if (_map.containsKey(id) == false) {
_map.put(id, new FlowOperationInstance(id));
}
}
}
return _map.get(id);
}
public FlowOperationInstance get(String instanceId) {
return _map.get(instanceId);
}
public Collection<FlowOperationInstance> getByOperation(String opId) {
List<FlowOperationInstance> ret = Lists.newLinkedList();
for(FlowOperationInstance inst : this._map.values()) {
if (opId.equals(inst.getOperationId())) {
ret.add(inst);
}
}
return ret;
}
public Set<String> idSet() {
return _map.keySet();
}
public void remove(Object id) {
_map.remove(id);
}
public List<Map<String,Object>> getJSONDetails() {
List<Map<String,Object>> ret = Lists.newLinkedList();
for(FlowOperationInstance inst : this._map.values()) {
ret.add(inst.getJSONDetails());
}
return ret;
}
}