From: <ba...@us...> - 2007-11-14 19:16:36
|
Revision: 1177 http://obo.svn.sourceforge.net/obo/?rev=1177&view=rev Author: balhoff Date: 2007-11-14 11:16:41 -0800 (Wed, 14 Nov 2007) Log Message: ----------- Enhanced row filter field to allow simple "iTunes" search of all fields. Modified Paths: -------------- phenote/trunk/src/java/phenote/gui/field/CharFieldMatcher.java phenote/trunk/src/java/phenote/gui/field/CharFieldMatcherEditor.java Modified: phenote/trunk/src/java/phenote/gui/field/CharFieldMatcher.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/CharFieldMatcher.java 2007-11-14 02:02:11 UTC (rev 1176) +++ phenote/trunk/src/java/phenote/gui/field/CharFieldMatcher.java 2007-11-14 19:16:41 UTC (rev 1177) @@ -1,5 +1,8 @@ package phenote.gui.field; +import java.util.Arrays; +import java.util.List; + import org.obo.datamodel.Link; import org.obo.datamodel.LinkedObject; import org.obo.datamodel.OBOClass; @@ -57,10 +60,28 @@ } private boolean matchText(CharacterI character) { - final String value = character.getValueString(this.charField); - return value.toLowerCase().indexOf(this.filter.toLowerCase()) != -1; + final String value; + if (this.charField.equals(CharFieldMatcherEditor.ANY_FIELD)) { + final StringBuffer allFieldValues = new StringBuffer(); + for (CharField field : character.getAllCharFields()) { + allFieldValues.append(character.getValueString(field)); + allFieldValues.append(" "); + } + value = allFieldValues.toString(); + } else { + value = character.getValueString(this.charField); + } + return this.matchFilterList(Arrays.asList(this.filter.split(" ")), value); } + /** + * Match a value by matching every word in the list + */ + private boolean matchFilterList(List<String> filterList, String value) { + final boolean foundElsewhere = filterList.size() > 1 ? this.matchFilterList(filterList.subList(1, filterList.size()), value) : true; + return (value.toLowerCase().indexOf(filterList.get(0).toLowerCase()) != -1) && foundElsewhere; + } + private boolean termIsAncestorOfTerm(LinkedObject ancestor, LinkedObject descendant) { if (ancestor.equals(descendant)) return true; for (Link link : ancestor.getChildren()) { Modified: phenote/trunk/src/java/phenote/gui/field/CharFieldMatcherEditor.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/CharFieldMatcherEditor.java 2007-11-14 02:02:11 UTC (rev 1176) +++ phenote/trunk/src/java/phenote/gui/field/CharFieldMatcherEditor.java 2007-11-14 19:16:41 UTC (rev 1177) @@ -3,6 +3,7 @@ import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Vector; @@ -25,6 +26,7 @@ import org.obo.datamodel.OBOClass; import org.swixml.SwingEngine; +import phenote.config.xml.FieldDocument.Field.Type; import phenote.datamodel.CharField; import phenote.datamodel.CharFieldManager; import phenote.datamodel.CharacterI; @@ -52,6 +54,7 @@ private CharField editedCharField; private Mode filterMode; private String filter; + protected static CharField ANY_FIELD = new CharField("Simple Filter", "", Type.FREE_TEXT); private boolean ignoreActions = false; @@ -61,8 +64,9 @@ public CharFieldMatcherEditor(List<CharField> charFields) { if (charFields.size() < 1) log().error("Filter field initialized with no charfields"); this.loadPanelLayout(); - this.charFields = charFields; - this.editedCharField = this.charFields.get(0); + //this.charFields = charFields; + //this.editedCharField = this.charFields.get(0); + this.editedCharField = CharFieldMatcherEditor.ANY_FIELD; this.filterMode = Mode.INHERIT; this.ontologyInputField = (TermCompList)(CharFieldGui.makePostCompTermList(this.editedCharField, "", 0)); this.ontologyInputField.setSelectionManager(new SelectionManager()); // make sure the TermCompList doesn't update the term info panel @@ -72,15 +76,16 @@ this.textInputField.setToolTipText(this.filterContainer.getToolTipText()); this.textInputField.getDocument().addDocumentListener(new FilterDocumentListener()); this.charFieldPopup.setRenderer(new CharFieldRenderer()); - this.updateGUI(); + this.setCharFields(charFields); } /** * Sets the charfields which the user can choose from for filtering characters. */ public void setCharFields(List<CharField> charFields) { - this.charFields = charFields; - this.setEditedCharField(charFields.get(0)); + this.charFields = new ArrayList<CharField>(charFields); + this.charFields.add(0, CharFieldMatcherEditor.ANY_FIELD); + this.setEditedCharField(this.charFields.get(0)); this.updateGUI(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |