1 package sourceforge.org.qmc2.options.editor.ui;
2 
3 import java.util.Iterator;
4 import java.util.Set;
5 
6 import org.eclipse.jface.viewers.Viewer;
7 import org.eclipse.jface.viewers.ViewerFilter;
8 
9 import sourceforge.org.qmc2.options.editor.model.DescriptableItem;
10 import sourceforge.org.qmc2.options.editor.model.Option;
11 import sourceforge.org.qmc2.options.editor.model.Section;
12 
13 public class QMC2ViewFilter extends ViewerFilter {
14 
15 	private final QMC2Editor editor;
16 
QMC2ViewFilter(QMC2Editor editor)17 	public QMC2ViewFilter(QMC2Editor editor) {
18 		this.editor = editor;
19 	}
20 
21 	@Override
select(Viewer viewer, Object parentElement, Object element)22 	public boolean select(Viewer viewer, Object parentElement, Object element) {
23 		boolean canShow = false;
24 		if (editor.getFilter() != null) {
25 			if (element instanceof DescriptableItem) {
26 				DescriptableItem item = (DescriptableItem) element;
27 				canShow = canShow(item, editor.getFilter());
28 				/*
29 				 * Only hide sections if all children can be hidden
30 				 */
31 				if (item instanceof Section) {
32 					Iterator<Option> iterator = ((Section) item).getOptions()
33 							.iterator();
34 					while (iterator.hasNext() && !canShow) {
35 						canShow = canShow
36 								|| canShow(iterator.next(), editor.getFilter());
37 					}
38 				}
39 			}
40 		} else {
41 			canShow = true;
42 		}
43 		return canShow;
44 	}
45 
canShow(DescriptableItem item, String filterString)46 	public boolean canShow(DescriptableItem item, String filterString) {
47 		boolean canShow = false;
48 
49 		Set<String> languages = item.getLanguages();
50 		Iterator<String> iterator = languages.iterator();
51 		while (!canShow && iterator.hasNext()) {
52 			String lang = iterator.next();
53 			String description = item.getDescription(lang).toLowerCase();
54 			;
55 			if (description == null
56 					|| !description.contains(editor.getFilter())) {
57 				canShow = canShow || false;
58 			} else {
59 				canShow = canShow || true;
60 			}
61 		}
62 		if (item.getName().contains(editor.getFilter())) {
63 			canShow = canShow || true;
64 		} else {
65 			canShow = canShow || false;
66 		}
67 
68 		return canShow;
69 	}
70 
71 }
72