package org.openlca.core.database.references;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.openlca.core.database.IDatabase;
import org.openlca.core.model.Category;
import org.openlca.core.model.Exchange;
import org.openlca.core.model.Flow;
import org.openlca.core.model.FlowPropertyFactor;
import org.openlca.core.model.Process;
import org.openlca.core.model.ProductSystem;
import org.openlca.core.model.Unit;
import org.openlca.core.model.descriptors.ProductSystemDescriptor;
public class ProductSystemReferenceSearch extends
BaseReferenceSearch<ProductSystemDescriptor> {
private final static Ref[] references = {
// don't include reference process, because it is also included in
// list of all processes (avoid duplicate reference)
new Ref(Category.class, "category", "f_category", true),
new Ref(Exchange.class, "referenceExchange", "f_reference_exchange"),
new Ref(FlowPropertyFactor.class, "targetFlowPropertyFactor", "f_target_flow_property_factor"),
new Ref(Unit.class, "targetUnit", "f_target_unit"),
};
private final static Ref[] processReferences = {
new Ref(Process.class, "processes", "f_process")
};
private final static Ref[] flowReferences = {
new Ref(Flow.class, "flow", "f_flow")
};
public ProductSystemReferenceSearch(IDatabase database, boolean includeOptional) {
super(database, ProductSystem.class, includeOptional);
}
@Override
public List<Reference> findReferences(Set<Long> ids) {
List<Reference> results = new ArrayList<>();
results.addAll(findReferences("tbl_product_systems", "id", ids,
references));
results.addAll(findProcesses(ids));
results.addAll(findFlows(ids));
results.addAll(findGlobalParameterRedefs(ids));
return results;
}
private List<Reference> findProcesses(Set<Long> ids) {
return findReferences("tbl_product_system_processes",
"f_product_system", ids, processReferences);
}
private List<Reference> findFlows(Set<Long> ids) {
return findReferences("tbl_process_links", "f_product_system", ids,
flowReferences);
}
}