diff --git a/uk/ac/sanger/artemis/components/genebuilder/cv/CVPanel.java b/uk/ac/sanger/artemis/components/genebuilder/cv/CVPanel.java index aa0b59c768566a443f81f1ec37c9b34dbe7837bb..28bf9045b002a530e5d4057ae126bbb539b1dc40 100644 --- a/uk/ac/sanger/artemis/components/genebuilder/cv/CVPanel.java +++ b/uk/ac/sanger/artemis/components/genebuilder/cv/CVPanel.java @@ -39,6 +39,7 @@ import java.util.Vector; import javax.swing.Box; +import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JOptionPane; @@ -933,13 +934,18 @@ public class CVPanel extends JPanel private Object promptKeyWord(final Box xBox, final String cv_name) { final String options[] = { "<PREV", "CANCEL", "NEXT>"}; - final JTextField tfield = new JTextField(10); + final JTextField tfield = new JTextField(25); tfield.setSelectionStart(0); tfield.setSelectionEnd(tfield.getText().length()); tfield.setSelectedTextColor(Color.blue); xBox.add(tfield); - int select = JOptionPane.showOptionDialog(null, xBox, + final Box yBox = Box.createVerticalBox(); + yBox.add(xBox); + final JCheckBox ignoreCase = new JCheckBox("Ignore case",false); + yBox.add(ignoreCase); + + int select = JOptionPane.showOptionDialog(null, yBox, "keyword term selection", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, @@ -958,7 +964,8 @@ public class CVPanel extends JPanel xBox.remove(tfield); logger4j.debug("CvTerm cache lookup: "+tfield.getText().trim()+" from "+cv_name); - return DatabaseDocument.getCvterms(tfield.getText().trim(), cv_name); + return DatabaseDocument.getCvterms(tfield.getText().trim(), + cv_name, ignoreCase.isSelected()); } /** diff --git a/uk/ac/sanger/artemis/util/DatabaseDocument.java b/uk/ac/sanger/artemis/util/DatabaseDocument.java index f639fafa3c9c8f71045df645f2e4cbf14cfc4109..d26871381617b43bec3f9bc89acbb24866e7a09c 100644 --- a/uk/ac/sanger/artemis/util/DatabaseDocument.java +++ b/uk/ac/sanger/artemis/util/DatabaseDocument.java @@ -1859,7 +1859,7 @@ public class DatabaseDocument extends Document getCvterms(getDAOOnly()); } - return getCvterms("", cvName); + return getCvterms("", cvName, false); } public List getDatabaseNames() @@ -1893,7 +1893,9 @@ public class DatabaseDocument extends Document return organismNames; } - public static Vector getCvterms(final String search_str, final String cv_name) + public static Vector getCvterms(final String search_str, + final String cv_name, + final boolean ignoreCase) { final Vector cvterm_match = new Vector(); @@ -1905,16 +1907,43 @@ public class DatabaseDocument extends Document if(cvterm.getCv().getName().startsWith(cv_name)) { - if(cvterm.getName().indexOf(search_str) > -1) - cvterm_match.add(cvterm); + if(ignoreCase) + { + if(indexOfIgnoreCase(cvterm.getName(),search_str,0) > -1) + cvterm_match.add(cvterm); + } + else + { + if(cvterm.getName().indexOf(search_str) > -1) + cvterm_match.add(cvterm); + } } } - return cvterm_match; } + /** + * Similar to <code>String.indexOf(String, int)</code>, but it ignores + * case + */ + private static int indexOfIgnoreCase(String textToSearch, + String pattern, + int fromIndex) + { + int n = pattern.length(); + while(textToSearch.length() > ((fromIndex + n) - 1)) + { + if(textToSearch.regionMatches(true, fromIndex, pattern, 0, n)) + return fromIndex; + fromIndex++; + } + return -1; + } + + /** * Get a list of the CV names + * * @return */ public static List getCvControledCurationNames()