package org.bndtools.core.ui.wizards.shared; import java.util.LinkedHashMap; import java.util.Map; import org.bndtools.templating.Category; import org.bndtools.templating.Template; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; public class LatestTemplateFilter extends ViewerFilter { @Override public Object[] filter(Viewer viewer, Object parent, Object[] elements) { Object[] result; if (parent instanceof Category) { Map<String,Template> selected = new LinkedHashMap<>(); // Preserves the order of names, as they were already sorted by the content provider. for (Object element : elements) { Template template = (Template) element; Template existing = selected.get(template.getName()); if (existing == null) // no selected template for this name -> add selected.put(template.getName(), template); else if (template.getVersion().compareTo(existing.getVersion()) > 0) // existing selected template for this name is lower -> replace selected.put(template.getName(), template); } result = selected.values().toArray(); } else { result = elements; } return result; } @Override public boolean select(Viewer viewer, Object parentElement, Object element) { // not invoked throw new UnsupportedOperationException(); } }