package io.fathom.cloud.compute.services;
import io.fathom.cloud.CloudException;
import io.fathom.cloud.compute.scheduler.InstanceScheduler;
import io.fathom.cloud.compute.state.HostStore;
import io.fathom.cloud.protobuf.CloudModel.HostData;
import io.fathom.cloud.protobuf.CloudModel.HostGroupData;
import io.fathom.cloud.protobuf.CloudModel.HostGroupData.Builder;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Singleton;
import com.google.inject.persist.Transactional;
@Singleton
@Transactional
public class NetworkMapImpl implements NetworkMap {
@Inject
HostStore hostStore;
@Inject
InstanceScheduler instanceScheduler;
@Override
public List<HostGroupData> listHostGroups() throws CloudException {
List<HostGroupData> dcs = hostStore.getHostGroups().list();
return dcs;
}
@Override
public HostGroupData findHostGroup(long key) throws CloudException {
return hostStore.getHostGroups().find(key);
}
@Override
public HostData createHost(HostData.Builder b) throws CloudException {
long parent = b.getHostGroup();
if (parent == 0) {
throw new IllegalArgumentException();
}
instanceScheduler.refreshHosts();
return hostStore.getHosts().create(b);
}
@Override
public List<HostData> listHosts() throws CloudException {
return hostStore.getHosts().list();
}
@Override
public HostGroupData createHostGroup(Builder b) throws CloudException {
return hostStore.getHostGroups().create(b);
}
@Override
public HostData updateHost(long hostId, io.fathom.cloud.protobuf.CloudModel.HostData.Builder b)
throws CloudException {
HostData host = hostStore.getHosts().find(hostId);
if (host == null) {
throw new IllegalArgumentException();
}
HostData.Builder hb = HostData.newBuilder(host);
hb.mergeFrom(b.buildPartial());
hb.setId(host.getId());
return hostStore.getHosts().update(hb);
}
@Override
public HostData findHost(String cidr) throws CloudException {
for (HostData host : listHosts()) {
if (host.getCidr().equals(cidr)) {
return host;
}
}
return null;
}
@Override
public HostGroupData findHostGroupByKey(String findKey) throws CloudException {
for (HostGroupData hostGroup : listHostGroups()) {
if (findKey.equals(hostGroup.getKey())) {
return hostGroup;
}
}
return null;
}
}