cvs -q di -u Index: api/apichanges.xml =================================================================== RCS file: /cvs/openidex/api/apichanges.xml,v retrieving revision 1.3 diff -u -r1.3 apichanges.xml --- api/apichanges.xml 17 Jan 2005 13:06:43 -0000 1.3 +++ api/apichanges.xml 3 Feb 2005 13:26:37 -0000 @@ -76,6 +76,31 @@ + + + + Added ADD_TO_HISTORYfield + + + + + +

+ It is necessary to fire further + PropertyChangeEvent to fix it. (Details in the + issue #54028)It is event ADD_TO_HISTORY, that will + be fired after adding new SearchPattern to + history. Old value of event would be null, new + value would be added pattern. + Also pattern checking before adding to history is + a subject of the API change. +

+
+ + + +
+ Added SearchHistory and SearchPattern classes Index: src/org/openidex/search/SearchHistory.java =================================================================== RCS file: /cvs/openidex/src/org/openidex/search/SearchHistory.java,v retrieving revision 1.3 diff -u -r1.3 SearchHistory.java --- src/org/openidex/search/SearchHistory.java 3 Feb 2005 09:47:27 -0000 1.3 +++ src/org/openidex/search/SearchHistory.java 3 Feb 2005 13:26:38 -0000 @@ -53,9 +53,20 @@ /** Singleton instance */ private static SearchHistory INSTANCE = null; - /** Property name for last selected search pattern */ + /** Property name for last selected search pattern + * Firing: + * oldValue - old selected pattern + * newValue - new selected pattern + */ public final static String LAST_SELECTED = "last-selected"; //NOI18N + /** Property name for adding pattern to history + * Firing: + * oldValue - null + * newValue - added pattern + */ + public final static String ADD_TO_HISTORY = "add-to-history"; //NOI18N + /** Creates a new instance of SearchHistory */ private SearchHistory() { } @@ -116,10 +127,19 @@ * @param pattern the SearchPattern to add */ public synchronized void add(SearchPattern pattern){ + if (pattern == null || pattern.getSearchExpression() == null || pattern.getSearchExpression().length() == 0){ + return; + } + if (searchPatternsList.size()>0 && pattern.equals(searchPatternsList.get(0))){ + return; + } if (searchPatternsList.size() == MAX_SEARCH_PATTERNS_ITEMS){ searchPatternsList.remove(MAX_SEARCH_PATTERNS_ITEMS-1); } searchPatternsList.add(0, pattern); + if (pcs != null){ + pcs.firePropertyChange(ADD_TO_HISTORY, null, pattern); + } } } Index: test/unit/src/org/openidex/search/SearchHistoryTest.java =================================================================== RCS file: /cvs/openidex/test/unit/src/org/openidex/search/SearchHistoryTest.java,v retrieving revision 1.1 diff -u -r1.1 SearchHistoryTest.java --- test/unit/src/org/openidex/search/SearchHistoryTest.java 17 Jan 2005 13:06:44 -0000 1.1 +++ test/unit/src/org/openidex/search/SearchHistoryTest.java 3 Feb 2005 13:26:38 -0000 @@ -53,19 +53,92 @@ assertTrue(SearchHistory.getDefault().getSearchPatterns().size() == 50); } - public void testSearchHistoryListener() throws Exception{ + public void testLastSelectedListener() throws Exception{ final boolean fired[] = new boolean[1]; fired[0] = false; PropertyChangeListener pcl = new PropertyChangeListener(){ public void propertyChange(PropertyChangeEvent evt){ - fired[0] = true; + if (evt!=null && SearchHistory.LAST_SELECTED.equals(evt.getPropertyName())){ + fired[0] = true; + } } }; SearchHistory.getDefault().addPropertyChangeListener(pcl); SearchHistory.getDefault().setLastSelected(SearchPattern.create("searchtext",true,true,false)); SearchHistory.getDefault().removePropertyChangeListener(pcl); assertTrue(fired[0]); + } + + public void testAddToSearchHistoryListener() throws Exception{ + final boolean fired[] = new boolean[2]; + PropertyChangeListener pcl = new PropertyChangeListener(){ + public void propertyChange(PropertyChangeEvent evt){ + if (evt!=null && SearchHistory.ADD_TO_HISTORY.equals(evt.getPropertyName())){ + fired[0] = true; + }else{ + fired[1] = true; + } + } + }; + SearchHistory.getDefault().addPropertyChangeListener(pcl); + SearchHistory.getDefault().add(SearchPattern.create("searchtext",true,true,false)); + SearchHistory.getDefault().removePropertyChangeListener(pcl); + assertTrue(fired[0]); + assertFalse("Only the expected change is fired", fired[1]); + } + + public void testAddIncorrectItemToSearchHistoryListener() throws Exception{ + final boolean fired[] = new boolean[2]; + + PropertyChangeListener pcl = new PropertyChangeListener(){ + public void propertyChange(PropertyChangeEvent evt){ + if (evt!=null && SearchHistory.ADD_TO_HISTORY.equals(evt.getPropertyName())){ + fired[0] = true; + } else { + fired[1] = true; + } + } + }; + SearchHistory.getDefault().addPropertyChangeListener(pcl); + + // add valid pattern + fired[0] = false; + fired[1] = false; + SearchHistory.getDefault().add(SearchPattern.create("searchtext2",true,true,false)); + assertTrue(fired[0]); + assertFalse("Only the expected change is fired", fired[1]); + + // add the same pattern, it shouldn't be added + fired[0] = false; + fired[1] = false; + SearchHistory.getDefault().add(SearchPattern.create("searchtext2",true,true,false)); + assertTrue(!fired[0]); + assertFalse("Only the expected change is fired", fired[1]); + + // add null pattern + fired[0] = false; + fired[1] = false; + SearchHistory.getDefault().add(null); + assertTrue(!fired[0]); + assertFalse("Only the expected change is fired", fired[1]); + + // add pattern with null searchExpression + fired[0] = false; + fired[1] = false; + SearchHistory.getDefault().add(SearchPattern.create(null,true,true,false)); + assertTrue(!fired[0]); + assertFalse("Only the expected change is fired", fired[1]); + + // add pattern with empty searchExpression + fired[0] = false; + fired[1] = false; + SearchHistory.getDefault().add(SearchPattern.create("",true,true,false)); + assertTrue(!fired[0]); + assertFalse("Only the expected change is fired", fired[1]); + + SearchHistory.getDefault().removePropertyChangeListener(pcl); } + public void testEquals() throws Exception{ SearchPattern pattern_one = SearchPattern.create("one",false, false, false);