package org.openlca.app.ilcd_network; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.openlca.app.navigation.CategoryElement; import org.openlca.app.navigation.INavigationElement; import org.openlca.app.navigation.ModelElement; import org.openlca.core.model.Category; import org.openlca.core.model.ModelType; import org.openlca.core.model.descriptors.BaseDescriptor; /** * The navigation tree-filter for the ILCD network export. Allows the selection * of processes and product systems. * * TODO: see filters in navigation package */ public class NavigationTreeFilter extends ViewerFilter { @Override public boolean select(Viewer viewer, Object parentElement, Object element) { if (element instanceof INavigationElement) return select((INavigationElement<?>) element); return false; } private boolean select(INavigationElement<?> element) { if (element instanceof CategoryElement) return validCategory((CategoryElement) element); if (element instanceof ModelElement) return validModel((ModelElement) element); return hasModelChilds(element); } private boolean validCategory(CategoryElement element) { Category category = element.getContent(); if (category == null) return false; ModelType type = category.getModelType(); return (type.isOneOf(ModelType.PROCESS, ModelType.PRODUCT_SYSTEM)) && hasModelChilds(element); } private boolean validModel(ModelElement element) { BaseDescriptor model = element.getContent(); return model.getModelType().isOneOf(ModelType.PROCESS, ModelType.PRODUCT_SYSTEM); } private boolean hasModelChilds(INavigationElement<?> element) { for (INavigationElement<?> child : element.getChildren()) { if ((child instanceof ModelElement) && validModel((ModelElement) child)) return true; else if (hasModelChilds(child)) return true; } return false; } }