package org.openlca.core.database.usage;
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;
/** Search of entities where another entity is used. */
public interface IUseSearch<T extends CategorizedDescriptor> {
/**
* Returns a list of descriptors of entities where the given entity id is
* used.
*/
public List<CategorizedDescriptor> findUses(long id);
public List<CategorizedDescriptor> findUses(T entity);
public List<CategorizedDescriptor> findUses(List<T> entity);
public List<CategorizedDescriptor> findUses(Set<Long> entity);
public static final Factory FACTORY = new Factory();
public class Factory {
@SuppressWarnings("unchecked")
public <T extends CategorizedDescriptor> IUseSearch<T> createFor(
ModelType type, IDatabase db) {
switch (type) {
case ACTOR:
return (IUseSearch<T>) new ActorUseSearch(db);
case SOURCE:
return (IUseSearch<T>) new SourceUseSearch(db);
case UNIT_GROUP:
return (IUseSearch<T>) new UnitGroupUseSearch(db);
case FLOW_PROPERTY:
return (IUseSearch<T>) new FlowPropertyUseSearch(db);
case FLOW:
return (IUseSearch<T>) new FlowUseSearch(db);
case PROCESS:
return (IUseSearch<T>) new ProcessUseSearch(db);
case PRODUCT_SYSTEM:
return (IUseSearch<T>) new ProductSystemUseSearch(db);
case LOCATION:
return (IUseSearch<T>) new LocationUseSearch(db);
case IMPACT_METHOD:
return (IUseSearch<T>) new ImpactMethodUseSearch(db);
case CURRENCY:
return (IUseSearch<T>) new CurrencyUseSearch(db);
case SOCIAL_INDICATOR:
return (IUseSearch<T>) new SocialIndicatorUseSearch(db);
case CATEGORY:
return (IUseSearch<T>) new CategoryUseSearch(db);
case PARAMETER:
return (IUseSearch<T>) new ParameterUseSearch(db);
case DQ_SYSTEM:
return (IUseSearch<T>) new DQSystemUseSearch(db);
default:
return new EmptyUseSearch<T>();
}
}
}
}