package org.openlca.core.database;
import org.openlca.core.model.AbstractEntity;
import org.openlca.core.model.ModelType;
public class Daos {
@SuppressWarnings("unchecked")
public static <T extends AbstractEntity> BaseDao<T> createBaseDao(
IDatabase database, Class<T> clazz) {
if (database == null)
return null;
if (clazz == null)
return null;
ModelType type = ModelType.forModelClass(clazz);
if (type != null)
return (BaseDao<T>) createRootDao(database, type);
return new BaseDao<>(clazz, database);
}
public static RootEntityDao<?, ?> createRootDao(IDatabase database,
ModelType type) {
if (database == null)
return null;
if (type == null)
return null;
if (type.isCategorized())
return createCategorizedDao(database, type);
if (type == ModelType.IMPACT_CATEGORY)
return new ImpactCategoryDao(database);
if (type == ModelType.NW_SET)
return new NwSetDao(database);
if (type == ModelType.UNIT)
return new UnitDao(database);
return null;
}
public static CategorizedEntityDao<?, ?> createCategorizedDao(
IDatabase database, ModelType type) {
if (database == null)
return null;
if (type == null)
return null;
if (!type.isCategorized())
return null;
switch (type) {
case ACTOR:
return new ActorDao(database);
case CURRENCY:
return new CurrencyDao(database);
case FLOW:
return new FlowDao(database);
case FLOW_PROPERTY:
return new FlowPropertyDao(database);
case IMPACT_METHOD:
return new ImpactMethodDao(database);
case PROCESS:
return new ProcessDao(database);
case PRODUCT_SYSTEM:
return new ProductSystemDao(database);
case PROJECT:
return new ProjectDao(database);
case SOCIAL_INDICATOR:
return new SocialIndicatorDao(database);
case SOURCE:
return new SourceDao(database);
case UNIT_GROUP:
return new UnitGroupDao(database);
case LOCATION:
return new LocationDao(database);
case PARAMETER:
return new ParameterDao(database);
case CATEGORY:
return new CategoryDao(database);
case DQ_SYSTEM:
return new DQSystemDao(database);
default:
return null;
}
}
}