package org.ovirt.engine.api.restapi.resource; import static org.ovirt.engine.api.common.util.ReflectionHelper.assignChildModel; import java.util.ArrayList; import java.util.List; import javax.ws.rs.core.Response; import org.ovirt.engine.api.model.Domains; import org.ovirt.engine.api.model.Domain; import org.ovirt.engine.api.resource.DomainsResource; import org.ovirt.engine.api.resource.DomainResource; import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.NGuid; import org.ovirt.engine.api.restapi.model.Directory; public class BackendDomainsResource extends AbstractBackendCollectionResource<Domain, Directory> implements DomainsResource { static final String[] SUB_COLLECTIONS = { "users", "groups" }; String id; public BackendDomainsResource() { super(Domain.class, Directory.class,SUB_COLLECTIONS); } @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)),SUB_COLLECTIONS)); } return collection; } @Override @SingleEntityResource public DomainResource getDomainSubResource(String id) { return inject(new BackendDomainResource(id, this)); } private List<Directory> getCollection() { List<Directory> dsl = new ArrayList<Directory>(); for(String domain : getDomainList()){ Directory ds = new Directory(); ds.setDomain(domain); NGuid guid = new NGuid(domain.getBytes(),true); ds.setId(guid!=null?guid.toString():null); 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; } @Override protected Response performRemove(String id) { throw new UnsupportedOperationException(); } }