package org.openlca.core.database.references; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.openlca.core.database.IDatabase; import org.openlca.core.database.references.IReferenceSearch.Reference; import org.openlca.core.model.AbstractEntity; import org.openlca.core.model.Flow; import org.openlca.core.model.FlowProperty; import org.openlca.core.model.FlowPropertyFactor; import org.openlca.core.model.ImpactFactor; import org.openlca.core.model.Process; import org.openlca.core.model.ProductSystem; import org.openlca.core.model.Project; public class FlowPropertyFactorReferenceSearch { private final static Ref[] references = { new Ref(FlowProperty.class, "flowProperty", "f_flow_property") }; private final IDatabase database; private final Map<Long, Class<? extends AbstractEntity>> ownerTypes; private final Map<Long, Long> ownerIds; private static final Map<Class<? extends AbstractEntity>, Map<Class<? extends AbstractEntity>, String>> nestedProperties = new HashMap<>(); static { putNestedProperty(Flow.class, "flowPropertyFactors"); putNestedProperty(Process.class, "flowPropertyFactor"); putNestedProperty(ImpactFactor.class, "flowPropertyFactor"); putNestedProperty(Project.class, "flowPropertyFactor"); putNestedProperty(ProductSystem.class, "targetFlowPropertyFactor"); } private static void putNestedProperty( Class<? extends AbstractEntity> ownerType, String nestedProperty) { for (Ref ref : references) { Map<Class<? extends AbstractEntity>, String> inner = nestedProperties .get(ownerType); if (inner == null) nestedProperties.put(ownerType, inner = new HashMap<>()); inner.put(ref.type, nestedProperty); } } public FlowPropertyFactorReferenceSearch(IDatabase database) { this(database, new HashMap<>(), new HashMap<>()); } public FlowPropertyFactorReferenceSearch(IDatabase database, Map<Long, Class<? extends AbstractEntity>> ownerTypes, Map<Long, Long> ownerIds) { this.database = database; this.ownerTypes = ownerTypes; this.ownerIds = ownerIds; } public List<Reference> findReferences(Set<Long> ids) { List<Reference> refs = Search.on(database, FlowPropertyFactor.class) .findReferences("tbl_flow_property_factors", "id", ids, references, true); return Search.applyOwnerMaps(refs, ownerTypes, ownerIds, nestedProperties); } }