package org.openlca.core.database.references;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.openlca.core.database.IDatabase;
import org.openlca.core.model.Actor;
import org.openlca.core.model.Category;
import org.openlca.core.model.FlowPropertyFactor;
import org.openlca.core.model.ImpactMethod;
import org.openlca.core.model.NwSet;
import org.openlca.core.model.ProductSystem;
import org.openlca.core.model.Project;
import org.openlca.core.model.ProjectVariant;
import org.openlca.core.model.Unit;
import org.openlca.core.model.descriptors.ProjectDescriptor;
public class ProjectReferenceSearch extends
BaseReferenceSearch<ProjectDescriptor> {
private final static Ref[] references = {
new Ref(Category.class, "category", "f_category", true),
new Ref(Actor.class, "author", "f_author", true),
new Ref(ImpactMethod.class, "impactMethodId", "f_impact_method", true, true),
new Ref(NwSet.class, "nwSetId", "f_nwset", true, true)
};
private final static Ref[] variantReferences = {
new Ref(ProductSystem.class, "productSystem", ProjectVariant.class, "variants", "f_product_system"),
new Ref(FlowPropertyFactor.class, "flowPropertyFactor", ProjectVariant.class, "variants", "f_flow_property_factor"),
new Ref(Unit.class, "unit", ProjectVariant.class, "variants", "f_unit")
};
public ProjectReferenceSearch(IDatabase database, boolean includeOptional) {
super(database, Project.class, includeOptional);
}
@Override
public List<Reference> findReferences(Set<Long> ids) {
List<Reference> results = new ArrayList<>();
results.addAll(findReferences("tbl_projects", "id", ids, references));
results.addAll(findVariantReferences(ids));
return results;
}
private List<Reference> findVariantReferences(Set<Long> ids) {
List<Reference> results = new ArrayList<>();
Map<Long, Long> variants = toIdMap(findReferences(
"tbl_project_variants", "f_project", ids, new Ref[] { new Ref(
ProjectVariant.class, "id", "id") }));
results.addAll(findReferences("tbl_project_variants", "id",
variants.keySet(), variants, variantReferences));
results.addAll(findGlobalParameterRedefs(variants.keySet(), variants));
return results;
}
}