Author: chatellier Date: 2010-11-25 15:29:23 +0000 (Thu, 25 Nov 2010) New Revision: 280 Log: Fix years data filtering that need data reload when new years are bigger set than previous filtered data years Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java trunk/coser-business/src/test/java/fr/ifremer/coser/services/ProjectServiceTest.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2010-11-25 14:59:24 UTC (rev 279) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2010-11-25 15:29:23 UTC (rev 280) @@ -669,8 +669,26 @@ localProject = loadControlData(localProject); } + Selection selection = new Selection(); + copyControlDataToSelection(localProject, selection); + + selection.setRsufiResults(new ArrayList<RSufiResult>()); + + // init filter values with configuration + selection.setDensityFilter(config.getSelectionDensityFilter()); + selection.setOccurrenceFilter(config.getSelectionOccurrenceFilter()); + + return selection; + } + + /** + * Copy loaded control data to new created selection. + * + * @return selection initialized with + */ + protected Selection copyControlDataToSelection(Project project, Selection selection) { // create new selection - Control control = localProject.getControl(); + Control control = project.getControl(); DataStorage dataCatch = control.getCatch(); DataStorage dataHaul = control.getHaul(); DataStorage dataLength = control.getLength(); @@ -678,19 +696,14 @@ project.clearData(); - Selection selection = new Selection(); selection.setCatch(dataCatch); selection.setHaul(dataHaul); selection.setLength(dataLength); selection.setStrata(dataStrata); + + // data reloaded from control, so modification are empty selection.setHistoryCommand(new ArrayList<Command>()); - selection.setRsufiResults(new ArrayList<RSufiResult>()); - - // init filter values with configuration - selection.setDensityFilter(config.getSelectionDensityFilter()); - selection.setOccurrenceFilter(config.getSelectionOccurrenceFilter()); - return selection; } @@ -1244,14 +1257,28 @@ /** * Get zones name in project with data in [{@code beginYear}-{@code endYear}]. * + * This methods set {@link Selection#setSelectedYears(List)}, and use + * it to known if control data need to be reloaded (don't set it yourself). + * * Used in selection ui. * + * @param project project * @param selection selection * @param years selected years * @return zones + * @throws CoserBusinessException */ - public List<String> filterDataYearsAndGetStrata(Selection selection, Collection<String> years) { + public List<String> filterDataYearsAndGetStrata(Project project, Selection selection, List<String> years) throws CoserBusinessException { + List<String> currentSelectionYears = selection.getSelectedYears(); + if (currentSelectionYears == null || !currentSelectionYears.containsAll(years)) { + // la liste des nouvelles année est plus grande que la liste + // actuelle des données de la selection + // les données doivent être rechargée + project = loadControlData(project); + copyControlDataToSelection(project, selection); + } + List<String> result = new ArrayList<String>(); // manage haul @@ -1308,6 +1335,9 @@ log.debug("Length data filtered by " + years); } + // the only place to set this value + selection.setSelectedYears(years); + return result; } Modified: trunk/coser-business/src/test/java/fr/ifremer/coser/services/ProjectServiceTest.java =================================================================== --- trunk/coser-business/src/test/java/fr/ifremer/coser/services/ProjectServiceTest.java 2010-11-25 14:59:24 UTC (rev 279) +++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/ProjectServiceTest.java 2010-11-25 15:29:23 UTC (rev 280) @@ -200,30 +200,30 @@ } /** - * Test l'obtention de la liste des zones d'un projet. + * Test l'obtention de la liste des strates d'un projet. * * @throws CoserBusinessException */ @Test - public void testProjectZone() throws CoserBusinessException { + public void testProjectStrata() throws CoserBusinessException { Project project = createTestProject(projectService, true); Selection selection = projectService.initProjectSelection(project); List<String> years = new ArrayList<String>(); years.add("2010"); years.add("2011"); - List<String> strata = projectService.filterDataYearsAndGetStrata(selection, years); + List<String> strata = projectService.filterDataYearsAndGetStrata(project, selection, years); Assert.assertEquals(6, strata.size()); List<String> years2 = new ArrayList<String>(); years2.add("2009"); - strata = projectService.filterDataYearsAndGetStrata(selection, years2); + strata = projectService.filterDataYearsAndGetStrata(project, selection, years2); Assert.assertEquals(0, strata.size()); List<String> years3 = new ArrayList<String>(); years3.add("2011"); // doit recharger les données pour être correct - strata = projectService.filterDataYearsAndGetStrata(selection, years3); + strata = projectService.filterDataYearsAndGetStrata(project, selection, years3); Assert.assertEquals(3, strata.size()); @@ -239,30 +239,39 @@ Project project = createTestProject(projectService, true); Selection selection = projectService.initProjectSelection(project); - List<String> allStrata = new ArrayList<String>(); - allStrata.add("STR1"); - allStrata.add("STR2"); - allStrata.add("STR3"); - allStrata.add("STR4"); - allStrata.add("STR5"); - allStrata.add("STR6"); + List<String> years20102011 = new ArrayList<String>(); + years20102011.add("2010"); + years20102011.add("2011"); + List<String> years2011 = new ArrayList<String>(); + years2011.add("2011"); + List<String> years2009 = new ArrayList<String>(); + years2009.add("2009"); + // all data + List<String> allStrata = projectService.filterDataYearsAndGetStrata(project, selection, years20102011); List<String> species = projectService.getProjectSpecies(project, selection, allStrata, null); Assert.assertEquals(4, species.size()); - + + // data in 2011 + allStrata = projectService.filterDataYearsAndGetStrata(project, selection, years2011); species = projectService.getProjectSpecies(project, selection, allStrata, null); Assert.assertEquals(4, species.size()); + // all strata but no data for years + allStrata = projectService.filterDataYearsAndGetStrata(project, selection, years2009); species = projectService.getProjectSpecies(project, selection, allStrata, null); Assert.assertEquals(0, species.size()); // test with no strata + allStrata = projectService.filterDataYearsAndGetStrata(project, selection, years20102011); species = projectService.getProjectSpecies(project, selection, new ArrayList<String>(), null); Assert.assertEquals(0, species.size()); // test with only one stratum + allStrata = projectService.filterDataYearsAndGetStrata(project, selection, years20102011); species = projectService.getProjectSpecies(project, selection, Collections.singletonList("STR6"), null); Assert.assertEquals(4, species.size()); + } /** Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2010-11-25 14:59:24 UTC (rev 279) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2010-11-25 15:29:23 UTC (rev 280) @@ -215,6 +215,7 @@ * @param view view */ public void updateSelectionDateData(SelectionDetailsView view) { + Project project = view.getContextValue(Project.class); Selection selection = view.getContextValue(Selection.class); ProjectService projectService = view.getContextValue(ProjectService.class); @@ -224,15 +225,22 @@ for (Object selectedDate : selectedDates) { years.add((String)selectedDate); } - selection.setSelectedYears(years); - + if (log.isDebugEnabled()) { log.debug("Refreshing strata list"); } - List<String> strata = projectService.filterDataYearsAndGetStrata(selection, years); - view.getStrataListModel().setStrata(strata); - if (log.isDebugEnabled()) { - log.debug("Strata list refreshed"); + + try { + // filterDataYearsAndGetStrata do selection.setSelectedYears(years); + // don't set yourself + List<String> strata = projectService.filterDataYearsAndGetStrata(project, selection, years); + view.getStrataListModel().setStrata(strata); + + if (log.isDebugEnabled()) { + log.debug("Strata list refreshed"); + } + } catch (CoserBusinessException ex) { + throw new CoserException("Can't filters data with specified years", ex); } }
participants (1)
-
chatellier@users.labs.libre-entreprise.org