package org.openlca.app.navigation;
import java.util.ArrayList;
import java.util.List;
import org.openlca.app.db.Database;
import org.openlca.core.database.CategorizedEntityDao;
import org.openlca.core.database.CategoryDao;
import org.openlca.core.model.Category;
import org.openlca.core.model.ModelType;
import org.openlca.core.model.descriptors.CategorizedDescriptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.base.Optional;
public class ModelTypeElement extends NavigationElement<ModelType> {
private Logger log = LoggerFactory.getLogger(getClass());
public ModelTypeElement(INavigationElement<?> parent, ModelType type) {
super(parent, type);
}
@Override
protected List<INavigationElement<?>> queryChilds() {
ModelType type = getContent();
log.trace("get model type childs: {}", type);
List<INavigationElement<?>> childs = new ArrayList<>();
addCategoryElements(type, childs);
addModelElements(type, childs);
return childs;
}
private void addCategoryElements(ModelType type,
List<INavigationElement<?>> elements) {
try {
CategoryDao dao = new CategoryDao(Database.get());
for (Category category : dao.getRootCategories(type)) {
elements.add(new CategoryElement(this, category));
}
} catch (Exception e) {
log.error("failed to add category elements: " + type, e);
}
}
private void addModelElements(ModelType type,
List<INavigationElement<?>> elements) {
try {
CategorizedEntityDao<?, ?> entityDao = Database.createCategorizedDao(type);
if (entityDao == null)
return;
Optional<Category> nil = Optional.absent();
for (CategorizedDescriptor descriptor : entityDao.getDescriptors(nil))
elements.add(new ModelElement(this, descriptor));
} catch (Exception e) {
log.error("Failed to add model elements: " + type, e);
}
}
}