Ignore:
Timestamp:
2007-05-06T19:51:19+02:00 (18 years ago)
Author:
frsantos
Message:

Perform data validation on upload

Location:
applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/ErrorLayer.java

    r2673 r2792  
    88import javax.swing.tree.DefaultMutableTreeNode;
    99
     10import org.openstreetmap.josm.Main;
    1011import org.openstreetmap.josm.actions.RenameLayerAction;
    1112import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
    1213import org.openstreetmap.josm.gui.MapView;
     14import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
    1315import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
    1416import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
     
    2123 * @author frsantos
    2224 */
    23 public class ErrorLayer extends Layer
     25public class ErrorLayer extends Layer implements LayerChangeListener
    2426{
    2527        /**
     
    3032    {
    3133                super(name);
     34        Main.map.mapView.addLayerChangeListener(this);
    3235        }
    3336
     
    4851    public void paint(final Graphics g, final MapView mv)
    4952    {
    50         DefaultMutableTreeNode root = (DefaultMutableTreeNode) OSMValidatorPlugin.getPlugin().validationDialog.treeModel.getRoot();
     53        DefaultMutableTreeNode root = OSMValidatorPlugin.getPlugin().validationDialog.tree.getRoot();
    5154        if( root == null || root.getChildCount() == 0)
    5255            return;
     
    113116
    114117        @Override public void destroy() { }
     118
     119    public void activeLayerChange(Layer oldLayer, Layer newLayer) { }
     120
     121    public void layerAdded(Layer newLayer) { }
     122
     123    /**
     124     * If layer is the OSM Data layer, remove all errors
     125     */
     126    public void layerRemoved(Layer oldLayer)
     127    {
     128        if(oldLayer == Main.map.mapView.editLayer )
     129        {
     130            Main.map.mapView.removeLayer(this);
     131        }
     132    }
    115133}
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/OSMValidatorPlugin.java

    r2672 r2792  
    1010
    1111import org.openstreetmap.josm.Main;
     12import org.openstreetmap.josm.actions.UploadAction;
    1213import org.openstreetmap.josm.gui.MapFrame;
    1314import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
     
    7273                newFrame.addToggleDialog(validationDialog);
    7374            Main.main.addLayer(new ErrorLayer(tr("Validation errors")));
     75            try
     76            {
     77                ((UploadAction)Main.main.menu.upload).uploadHooks.add( new ValidateUploadHook() );
     78            }
     79            catch(Throwable t)
     80            {
     81                // JOSM has no upload hooks in older versions
     82            }
    7483                }
    7584        }
     
    107116                        }
    108117                        test.enabled = true;
    109                         enabledTests.put(testClass.getSimpleName(), test);
     118           
     119            String simpleName = testClass.getSimpleName();
     120            test.testBeforeUpload = Main.pref.getBoolean( "tests." + simpleName + ".checkBeforeUpload");           
     121                        enabledTests.put(simpleName, test);
    110122                }
    111123
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/PreferenceEditor.java

    r2453 r2792  
    3232                testPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
    3333               
     34        testPanel.add( new JLabel(), GBC.std() );
     35        testPanel.add( new JLabel("On upload"), GBC.eop() );
     36       
    3437                allTests = OSMValidatorPlugin.getTests(false);
    3538                for(final Test test: allTests)
     
    3740                        final JCheckBox testCheck = new JCheckBox(test.name, test.enabled);
    3841                        testCheck.setToolTipText(test.description);
    39                         testPanel.add(testCheck, GBC.eop().insets(20,0,0,0));
    40                         test.addGui(testPanel);
     42                        testPanel.add(testCheck, GBC.std().insets(20,0,0,0));
    4143
    42                         testCheck.addActionListener(new ActionListener(){
    43                                 public void actionPerformed(ActionEvent e) {
    44                                         test.enabled = testCheck.isSelected();
    45                                 }
    46                         });
     44            testCheck.addActionListener(new ActionListener(){
     45                public void actionPerformed(ActionEvent e) {
     46                    boolean selected = testCheck.isSelected();
     47                    test.enabled = selected;
     48                    test.setGuiEnabled(selected );
     49                }
     50            });
     51           
     52            test.addGui(testPanel);
     53            test.setGuiEnabled(test.enabled);
    4754                }
    4855               
    49                 JScrollPane testPane = new JScrollPane(testPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
     56                JScrollPane testPane = new JScrollPane(testPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    5057                testPane.setBorder(null);
    5158
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/Test.java

    r2672 r2792  
    11package org.openstreetmap.josm.plugins.validator;
    22
    3 import java.util.ArrayList;
    4 import java.util.Collection;
    5 import java.util.List;
     3import java.util.*;
    64
     5import javax.swing.JCheckBox;
    76import javax.swing.JPanel;
    87
     8import org.openstreetmap.josm.Main;
    99import org.openstreetmap.josm.command.Command;
    1010import org.openstreetmap.josm.data.osm.*;
    1111import org.openstreetmap.josm.data.osm.visitor.Visitor;
     12import org.openstreetmap.josm.tools.GBC;
    1213
    1314/**
     
    2829        protected String description;
    2930       
    30         /** Whether this test is enabled. Used by peferences */
    31         protected boolean enabled;
     31    /** Whether this test is enabled. Used by peferences */
     32    protected boolean enabled;
     33
     34    /** The preferences check for validation on upload */
     35    protected JCheckBox checkBeforeUpload;
     36   
     37    /** Whether this test must check before upload. Used by peferences */
     38    protected boolean testBeforeUpload;
     39
     40    /** Whether this test is performing just before an upload */
     41    protected boolean isBeforeUpload;
    3242
    3343        /** The list of errors */
     
    124134        public void addGui(@SuppressWarnings("unused") JPanel testPanel)
    125135        {
     136        checkBeforeUpload = new JCheckBox();
     137        checkBeforeUpload.setSelected(testBeforeUpload);
     138        testPanel.add(checkBeforeUpload, GBC.eop().insets(20,0,0,0));
    126139        }
     140
     141    /**
     142     * Enables or disables the test in the preferences gui
     143     * @param enabled
     144     */
     145    public void setGuiEnabled(boolean enabled)
     146    {
     147        checkBeforeUpload.setEnabled(enabled);
     148    }   
    127149
    128150        /**
     
    131153        public void ok()
    132154        {
     155        String simpleName = getClass().getSimpleName();
     156        Main.pref.put("tests." + simpleName + ".checkBeforeUpload", checkBeforeUpload.isSelected() );
    133157        }
    134158       
     
    153177        {
    154178                return false;
    155         }       
     179        }
     180
     181    /**
     182     * Returns true if this plugin must check the uploaded data before uploading
     183     * @return true if this plugin must check the uploaded data before uploading
     184     */
     185    public boolean testBeforeUpload()
     186    {
     187        return testBeforeUpload;
     188    }
     189
     190    /**
     191     * Sets the flag that marks an upload check
     192     * @param isUpload if true, the test is before upload
     193     */
     194    public void setBeforeUpload(boolean isUpload)
     195    {
     196        this.isBeforeUpload = isUpload;
     197    }
    156198}
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/ValidateAction.java

    r2672 r2792  
    5353        {
    5454                OSMValidatorPlugin plugin = OSMValidatorPlugin.getPlugin();
     55        if( plugin.validateAction == null || Main.map == null || !Main.map.isVisible() )
     56            return;
     57       
    5558                plugin.errors = new ArrayList<TestError>();
    5659                plugin.validationDialog.setVisible(true);
     
    9497                tests = null;
    9598               
    96                 plugin.validationDialog.refresh();
     99                plugin.validationDialog.refresh(plugin.errors);
    97100        Main.map.repaint();
    98101        Main.ds.fireSelectionChanged(Main.ds.getSelected());
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/ValidatorDialog.java

    r2672 r2792  
    2323
    2424/**
    25  * A small tool dialog for displaying the current selection. The selection manager
     25 * A small tool dialog for displaying the current errors. The selection manager
    2626 * respects clicks into the selection list. Ctrl-click will remove entries from
    2727 * the list while single click will make the clicked entry the only selection.
    2828 *
    29  * @author imi
     29 * @author frsantos
    3030 */
    3131public class ValidatorDialog extends ToggleDialog implements ActionListener
     
    3434    private static final long serialVersionUID = 2952292777351992696L;
    3535
    36     /**
    37      * The validation data.
    38      */
    39         protected DefaultTreeModel treeModel = new DefaultTreeModel(new DefaultMutableTreeNode());
    40 
    4136        /**
    4237     * The display tree.
    4338     */
    44     protected JTree tree = new JTree(treeModel);
     39    protected ErrorTreePanel tree;
    4540
    4641    /**
     
    5449    private JButton selectButton;
    5550   
    56     /** Last selected truee element */
     51    /** Last selected element */
    5752    private DefaultMutableTreeNode lastSelectedNode = null;
    5853
     
    6459        super(tr("Validation errors"), "validator", tr("Open the validation window."), KeyEvent.VK_V, 150);
    6560       
    66                 tree.setRootVisible(false);
    67                 tree.setShowsRootHandles(true);
    68                 tree.expandRow(0);
    69                 tree.setVisibleRowCount(8);
     61        tree = new ErrorTreePanel();
    7062                tree.addMouseListener(new ClickWatch());
    7163                tree.addTreeSelectionListener(new SelectionWatch());
    72                 tree.setCellRenderer(new ErrorTreeRenderer());
    73                 tree.getSelectionModel().setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
    7464
    7565                add(new JScrollPane(tree), BorderLayout.CENTER);
     
    9080
    9181    @Override
    92     public void setVisible(boolean v) {
    93                 if (v)
    94                         buildTree();
    95                 else if (tree != null)
    96                         treeModel.setRoot(new DefaultMutableTreeNode());
     82    public void setVisible(boolean v)
     83    {
     84        if( tree != null )
     85            tree.setVisible(v);
    9786                if( action != null && action.button != null )
    9887                        action.button.setSelected(v);
     
    10190   
    10291   
    103         /**
    104          * Builds the errors tree
    105          */
    106         private void buildTree()
    107         {
    108                 DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode();
    109 
    110                 List<TestError> errorList = OSMValidatorPlugin.getPlugin().errors;
    111                 if( errorList == null || errorList.isEmpty() )
    112                 {
    113                         treeModel.setRoot(rootNode);
    114                         return;
    115                 }
    116                
    117                 Map<Severity, Bag<String, TestError>> errorTree = new HashMap<Severity, Bag<String, TestError>>();
    118                 for(Severity s : Severity.values())
    119                 {
    120                         errorTree.put(s, new Bag<String, TestError>(20));
    121                 }
    122                
    123                 for(TestError e : errorList)
    124                 {
    125                         errorTree.get(e.getSeverity()).add(e.getMessage(), e);
    126                 }
    127                
    128                 for(Severity s : Severity.values())
    129                 {
    130                         Bag<String,     TestError> severityErrors = errorTree.get(s);
    131                         if( severityErrors.isEmpty() )
    132                                 continue;
    133                        
    134                         // Severity node
    135                         DefaultMutableTreeNode severityNode = new DefaultMutableTreeNode(s);
    136                         rootNode.add(severityNode);
    137                        
    138                         for(Entry<String, List<TestError>> msgErrors : severityErrors.entrySet()  )
    139                         {
    140                                 // Message node
    141                                 List<TestError> errors = msgErrors.getValue();
    142                                 String msg = msgErrors.getKey() + " (" + errors.size() + ")";
    143                                 DefaultMutableTreeNode messageNode = new DefaultMutableTreeNode(msg);
    144                                 severityNode.add(messageNode);
    145                                
    146                                 for (TestError error : errors)
    147                                 {
    148                                         // Error node
    149                                         DefaultMutableTreeNode errorNode = new DefaultMutableTreeNode(error);
    150                                         messageNode.add(errorNode);
    151                                 }
    152                         }
    153                 }
    154 
    155                 treeModel.setRoot(rootNode);
    156                 tree.scrollRowToVisible(treeModel.getChildCount(rootNode)-1);
    157         }
    158        
    15992        /**
    16093         * Fix selected errors
     
    216149                       
    217150        OSMValidatorPlugin.getPlugin().validateAction.doValidate(e, false);
     151        // TODO keep the tree open as it was before the fix
    218152        }       
    219153       
     
    265199        /**
    266200         * Refresh the error messages display
     201         * @param errors The errors to display
    267202         */
    268         public void refresh()
    269         {
    270                 buildTree();
     203        public void refresh(List<TestError> errors)
     204        {
     205        tree.setErrors(errors);
     206                tree.buildTree();
    271207        }
    272208       
     
    332268                public void mouseClicked(MouseEvent e)
    333269                {
    334             System.out.println("mouseClicked " + e.getClickCount() + " " + e.getSource());
    335270            fixButton.setEnabled(false);
    336271            selectButton.setEnabled(false);
     
    357292                public void valueChanged(TreeSelectionEvent e)
    358293                {
    359             System.out.println("valueChanged");
    360294                fixButton.setEnabled(false);
    361295            selectButton.setEnabled(false);
Note: See TracChangeset for help on using the changeset viewer.