package org.ovirt.engine.api.restapi.resource.aaa;
import static org.ovirt.engine.api.utils.ReflectionHelper.assignChildModel;
import java.util.ArrayList;
import java.util.List;
import org.ovirt.engine.api.model.Domain;
import org.ovirt.engine.api.model.Domains;
import org.ovirt.engine.api.resource.aaa.DomainResource;
import org.ovirt.engine.api.resource.aaa.DomainsResource;
import org.ovirt.engine.api.restapi.model.Directory;
import org.ovirt.engine.api.restapi.resource.AbstractBackendCollectionResource;
import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils;
import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
import org.ovirt.engine.core.common.queries.VdcQueryType;
public class BackendDomainsResource extends AbstractBackendCollectionResource<Domain, Directory>
implements DomainsResource {
String id;
public BackendDomainsResource() {
super(Domain.class, Directory.class);
}
@Override
public Domains list() {
return mapCollection(getCollection());
}
private Domains mapCollection(List<Directory> entities) {
Domains collection = new Domains();
for (Directory entity : entities) {
collection.getDomains().add(injectSearchLinks(addLinks(map(entity)), subCollections));
}
return collection;
}
@Override
public DomainResource getDomainResource(String id) {
return inject(new BackendDomainResource(id, this));
}
private List<Directory> getCollection() {
List<Directory> dsl = new ArrayList<>();
for(String domain : getDomainList()){
Directory ds = new Directory();
ds.setDomain(domain);
ds.setId(DirectoryEntryIdUtils.encode(domain));
dsl.add(ds);
}
return dsl;
}
private List<String> getDomainList() {
return getBackendCollection(
String.class,
VdcQueryType.GetDomainList,
new VdcQueryParametersBase());
}
public Domain lookupDirectoryById(String id, boolean addlinks) {
for (Directory directoriesService : getCollection()) {
if (directoriesService.getId().equals(id)) {
this.id = id;
return addlinks?
addLinks(map(directoriesService))
:
map(directoriesService);
}
}
return notFound();
}
public Domain lookupDirectoryByDomain(String domain, boolean addlinks) {
for (Directory directoriesService : getCollection()) {
if (directoriesService.getDomain().equals(domain)){
this.id = directoriesService.getId().toString();
return addlinks?
addLinks(map(directoriesService))
:
map(directoriesService);
}
}
return notFound();
}
@Override
protected Domain addParents(Domain domain) {
if(id!=null){
assignChildModel(domain, Domain.class).setId(id);
}
return domain;
}
}