package org.openlca.core.database.usage;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.openlca.core.database.IDatabase;
import org.openlca.core.model.ModelType;
import org.openlca.core.model.descriptors.CategorizedDescriptor;
abstract class BaseUseSearch<T extends CategorizedDescriptor> implements
IUseSearch<T> {
private IDatabase database;
BaseUseSearch(IDatabase database) {
this.database = database;
}
@Override
public List<CategorizedDescriptor> findUses(T descriptor) {
if (descriptor == null || descriptor.getId() == 0l)
return Collections.emptyList();
return findUses(Collections.singletonList(descriptor));
}
@Override
public List<CategorizedDescriptor> findUses(List<T> descriptors) {
if (descriptors == null || descriptors.isEmpty())
return Collections.emptyList();
return findUses(toIdSet(descriptors));
}
@Override
public List<CategorizedDescriptor> findUses(long id) {
if (id == 0l)
return Collections.emptyList();
return findUses(Collections.singleton(id));
}
protected List<CategorizedDescriptor> queryFor(ModelType type,
Set<Long> toFind, String... inFields) {
return Search.on(database).queryFor(type, toFind, inFields);
}
protected List<CategorizedDescriptor> queryFor(ModelType type,
String idField, String table, Set<Long> toFind, String... inFields) {
return Search.on(database).queryFor(type, idField, table, toFind,
inFields);
}
protected Set<Long> queryForIds(String idField, String table,
Set<Long> toFind, String... inFields) {
return Search.on(database)
.queryForIds(idField, table, toFind, inFields);
}
protected List<CategorizedDescriptor> loadDescriptors(ModelType type,
Set<Long> ids) {
return Search.on(database).loadDescriptors(type, ids);
}
private Set<Long> toIdSet(List<? extends CategorizedDescriptor> descriptors) {
Set<Long> ids = new HashSet<>();
for (CategorizedDescriptor descriptor : descriptors)
ids.add(descriptor.getId());
return ids;
}
}