Author: chatellier Date: 2010-11-26 15:42:15 +0000 (Fri, 26 Nov 2010) New Revision: 299 Log: Debut de la fonction de reapplication de selection (non termin?\195?\169e) Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/SelectionsListMenuItem.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties 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-26 15:27:53 UTC (rev 298) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2010-11-26 15:42:15 UTC (rev 299) @@ -398,6 +398,10 @@ return project; } + protected void readSelectionFile() { + + } + /** * Load rsufi result in specified directory. * @@ -709,10 +713,54 @@ selection.setDensityFilter(config.getSelectionDensityFilter()); selection.setOccurrenceFilter(config.getSelectionOccurrenceFilter()); + List<String> allYears = getProjectYears(selection); + selection.setAllYears(allYears); + selection.setSelectedYears(new ArrayList<String>(allYears)); + return selection; } /** + * Initialise une nouvelle selection à partir des données de controle + * et de la definition de la selection du fichier fournit. + * + * @param project project (containing data in control) + * @param selectionFile selection file + * @return initialized selection + * @throws CoserBusinessException + */ + public Selection initProjectSelectionFromFile(Project project, File selectionFile) throws CoserBusinessException { + + Selection selection = initProjectSelection(project); + selection.setName(null); //clear name (can't be used) + + // read input file + InputStream selectionStream = null; + try { + Properties props = new Properties(); + selectionStream = new FileInputStream(selectionFile); + props.load(selectionStream); + selection.fromProperties(props); + } catch (IOException ex) { + throw new CoserBusinessException("Can't read selection properties file", ex); + } + finally { + IOUtils.closeQuietly(selectionStream); + } + + // filter years + filterDataYearsAndGetStrata(project, selection, selection.getSelectedYears()); + // applying merges commands + List<Command> commands = new ArrayList<Command>(selection.getHistoryCommand()); + selection.getHistoryCommand().clear(); + for (Command command : commands) { + commandService.doAction(command, project, selection); + } + + return selection; + } + + /** * Copy loaded control data to new created selection. * * @return selection initialized with Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java 2010-11-26 15:27:53 UTC (rev 298) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java 2010-11-26 15:42:15 UTC (rev 299) @@ -33,7 +33,6 @@ import java.text.NumberFormat; import java.util.ArrayList; import java.util.Collection; -import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -268,6 +267,7 @@ * @param project project * @param container data container * @param validationErrors errors list + * @return export html file * @throws CoserBusinessException */ public File exportErrorsAsHTML(Project project, AbstractDataContainer container, List<ControlError> validationErrors) throws CoserBusinessException { Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2010-11-26 15:27:53 UTC (rev 298) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2010-11-26 15:42:15 UTC (rev 299) @@ -39,6 +39,7 @@ import javax.swing.JOptionPane; import javax.swing.JTextField; import javax.swing.SwingWorker; +import javax.swing.filechooser.FileFilter; import jaxx.runtime.swing.editor.config.ConfigUI; import jaxx.runtime.swing.editor.config.ConfigUIHelper; @@ -464,6 +465,77 @@ } /** + * Selection file filtrer for selection file chooser. + */ + public static class SelectionFileFilter extends FileFilter { + + @Override + public boolean accept(File f) { + return f.getName().endsWith(".selection"); + } + + @Override + public String getDescription() { + return _("coser.ui.selection.selectionFilterDescription"); + } + + } + + /** + * Replay selection. + * + * Open browse selection box to select selection file. + * Inform user to selection information before applying it. + * Apply it, and display report to user. + */ + public void replaySelection() { + + ProjectService projectService = view.getContextValue(ProjectService.class); + Project project = view.getContextValue(Project.class); + CoserConfig config = view.getContextValue(CoserConfig.class); + + JFileChooser selectionChooser = new JFileChooser(config.getProjectsDirectory()); + selectionChooser.setFileFilter(new SelectionFileFilter()); + selectionChooser.setMultiSelectionEnabled(false); + + int result = selectionChooser.showOpenDialog(view); + if (result == JFileChooser.APPROVE_OPTION) { + File selectionFile = selectionChooser.getSelectedFile(); + + try { + Selection selection = projectService.initProjectSelectionFromFile(project, selectionFile); + + view.setContextValue(selection); + + SelectionView selectionView = new SelectionView(view); + selectionView.setSelection(selection); + // fix, binding not working ? + selectionView.getSelectionDetailsTab().getValidatorSelection().setBean(selection); + + SelectionHandler handler = new SelectionHandler(); + selectionView.setHandler(handler); + + // FIXME chatellier 20101126 il faut faire un mix de init && reload + handler.initSelection(selectionView); + + try { + File file = new File("/home/chatellier/tmp/coser/zones.png"); + selectionView.getSelectionDetailsTab().getZonesMap().setImage(file); + + } catch(Exception e) { + e.printStackTrace(); + }; + setMainComponent(selectionView); + } + catch (Exception ex) { + JOptionPane.showMessageDialog(view, ex.getMessage(), + _("coser.ui.selection.replayerror"), JOptionPane.ERROR_MESSAGE); + throw new CoserException("Can't replay selection", ex); + } + } + } + + /** * Called by {@link LookAndFeelViewMenuItem} when look and feel selection * change. * Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/SelectionsListMenuItem.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/SelectionsListMenuItem.java 2010-11-26 15:27:53 UTC (rev 298) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/SelectionsListMenuItem.java 2010-11-26 15:42:15 UTC (rev 299) @@ -123,10 +123,21 @@ add(new JSeparator()); // new selection - JMenuItem menuItem = new JMenuItem(_("coser.ui.mainframe.menu.data.newSelection")); - menuItem.setActionCommand(""); // peut pas etre null, c'est nul ! - menuItem.addActionListener(this); - add(menuItem); + JMenuItem newMenuItem = new JMenuItem(_("coser.ui.mainframe.menu.data.newSelection")); + // les chaines ne doivent pas poser pb, on ne peut pas + // avoir de selection avec espace + newMenuItem.setActionCommand("new selection"); + newMenuItem.addActionListener(this); + add(newMenuItem); + + // new selection + JMenuItem replayMenuItem = new JMenuItem(_("coser.ui.mainframe.menu.data.replaySelection")); + // les chaines ne doivent pas poser pb, on ne peut pas + // avoir de selection avec espace + replayMenuItem.setActionCommand("replay selection"); + replayMenuItem.addActionListener(this); + replayMenuItem.setEnabled(false); // FIXME chatellier 20101126 pas terminé + add(replayMenuItem); } } } @@ -139,9 +150,12 @@ String actionCommand = event.getActionCommand(); // new selection case - if (StringUtils.isEmpty(actionCommand)) { + if ("new selection".equals(actionCommand)) { view.getHandler().showSelectionView(); } + else if ("replay selection".equals(actionCommand)) { + view.getHandler().replaySelection(); + } else { view.getHandler().showSelectionView(actionCommand); } Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java 2010-11-26 15:27:53 UTC (rev 298) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java 2010-11-26 15:42:15 UTC (rev 299) @@ -591,10 +591,10 @@ * @param controlView */ protected void generateHTMLReport(ControlView controlView) { - + PublicationService publicationService = controlView.getContextValue(PublicationService.class); Project project = controlView.getContextValue(Project.class); - + // get error list from table model List<ControlError> controlErrors = controlView.getGlobalControlErrorModel().getControlErrors(); File htmlFile = null; @@ -605,13 +605,8 @@ } catch (CoserBusinessException ex) { throw new CoserException("Can't generate html report", ex); } catch (IOException ex) { - if (htmlFile != null) { - JOptionPane.showMessageDialog(controlView, _("coser.ui.control.htmlReportCantBeOpened", htmlFile.getAbsolutePath()), - _("coser.ui.control.htmlReportError"), JOptionPane.WARNING_MESSAGE); - } - else { - throw new CoserException("Can't open html report", ex); - } + JOptionPane.showMessageDialog(controlView, _("coser.ui.control.htmlReportCantBeOpened", htmlFile.getAbsolutePath()), + _("coser.ui.control.htmlReportError"), JOptionPane.WARNING_MESSAGE); } } 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-26 15:27:53 UTC (rev 298) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2010-11-26 15:42:15 UTC (rev 299) @@ -148,11 +148,9 @@ // initialize la liste de toutes les années // c'est normalement la seule initialisation a faire SelectionDetailsView detailView = view.getSelectionDetailsTab(); - List<String> allYears = projectService.getProjectYears(selection); - selection.setAllYears(allYears); - detailView.getDatesListModel().setYears(allYears); + detailView.getDatesListModel().setYears(selection.getAllYears()); // tout est selectionné par defaut - ((CoserListSelectionModel)detailView.getDatesList().getSelectionModel()).setSelectedObjects(allYears); + ((CoserListSelectionModel)detailView.getDatesList().getSelectionModel()).setSelectedObjects(selection.getSelectedYears()); view.setCreationState(true); Modified: trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties =================================================================== --- trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties 2010-11-26 15:27:53 UTC (rev 298) +++ trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties 2010-11-26 15:42:15 UTC (rev 299) @@ -63,6 +63,7 @@ coser.ui.mainframe.menu.data.newSelection=New selection coser.ui.mainframe.menu.data.noSelection=No selection coser.ui.mainframe.menu.data.noValidation=Control not validated +coser.ui.mainframe.menu.data.replaySelection=Replay selection coser.ui.mainframe.menu.data.selections=S\u00E9lections coser.ui.mainframe.menu.data.summary=Summary coser.ui.mainframe.menu.file=File @@ -150,9 +151,11 @@ coser.ui.selection.maturitySpecies=L4 \: Species with maturity coser.ui.selection.occurenceDensitySpecies=L2 \: Filtered species coser.ui.selection.occurrencedensityrenderer=<html>%s<span style\='font-size\:85%%;color\:gray;'>(Occ\=%.2f, Dens\=%.2f)</span></html> +coser.ui.selection.replayerror=Replay error coser.ui.selection.saveError=Save error coser.ui.selection.selection.requiredDescription=Selection description is required coser.ui.selection.selection.requiredName=Selection name is required +coser.ui.selection.selectionFilterDescription= coser.ui.selection.sizeAllYearSpecies=L3 \: Species with size all year coser.ui.selection.speciesMenuFusion=Merge coser.ui.selection.speciesMenuLabel=Species menu Modified: trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties =================================================================== --- trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties 2010-11-26 15:27:53 UTC (rev 298) +++ trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties 2010-11-26 15:42:15 UTC (rev 299) @@ -63,6 +63,7 @@ coser.ui.mainframe.menu.data.newSelection=Nouvelle s\u00E9lection coser.ui.mainframe.menu.data.noSelection=Aucune s\u00E9lection coser.ui.mainframe.menu.data.noValidation=Contr\u00F4le non valid\u00E9 +coser.ui.mainframe.menu.data.replaySelection=Rejouer une s\u00E9lection coser.ui.mainframe.menu.data.selections=S\u00E9lections coser.ui.mainframe.menu.data.summary=R\u00E9sum\u00E9 coser.ui.mainframe.menu.file=Fichier @@ -150,9 +151,11 @@ coser.ui.selection.maturitySpecies=L4 \: Esp\u00E8ces avec maturit\u00E9 coser.ui.selection.occurenceDensitySpecies=L2 \: Esp\u00E8ces filtr\u00E9es coser.ui.selection.occurrencedensityrenderer=<html>%s<span style\='font-size\:85%%;color\:gray;'>(Occ\=%.2f, Dens\=%.2f)</span></html> +coser.ui.selection.replayerror=Erreur de reapplication coser.ui.selection.saveError=Erreur de sauvegarde coser.ui.selection.selection.requiredDescription=La description de la s\u00E9lection est requise coser.ui.selection.selection.requiredName=Le nom de la s\u00E9lection est requis +coser.ui.selection.selectionFilterDescription= coser.ui.selection.sizeAllYearSpecies=L3 \: Esp\u00E8ces avec taille pour toutes les ann\u00E9es coser.ui.selection.speciesMenuFusion=Fusion coser.ui.selection.speciesMenuLabel=Menu esp\u00E8ces
participants (1)
-
chatellier@users.labs.libre-entreprise.org