Changeset 7100 in josm for trunk


Ignore:
Timestamp:
2014-05-11T01:01:33+02:00 (6 years ago)
Author:
Don-vip
Message:

refactor tagging presets to allow presets-dependent unit tests to update them correctly at runtime

Location:
trunk
Files:
2 added
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/Main.java

    r7083 r7100  
    8282import org.openstreetmap.josm.gui.preferences.imagery.ImageryPreference;
    8383import org.openstreetmap.josm.gui.preferences.map.MapPaintPreference;
    84 import org.openstreetmap.josm.gui.preferences.map.TaggingPresetPreference;
    8584import org.openstreetmap.josm.gui.preferences.projection.ProjectionPreference;
    8685import org.openstreetmap.josm.gui.progress.PleaseWaitProgressMonitor;
    8786import org.openstreetmap.josm.gui.progress.ProgressMonitorExecutor;
     87import org.openstreetmap.josm.gui.tagging.TaggingPresets;
    8888import org.openstreetmap.josm.gui.util.RedirectInputMap;
    8989import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
     
    535535            @Override
    536536            public void initialize() throws Exception {
    537                 TaggingPresetPreference.initialize();
     537                TaggingPresets.initialize();
    538538            }
    539539        });
  • trunk/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java

    r7061 r7100  
    2424import org.openstreetmap.josm.data.validation.Test;
    2525import org.openstreetmap.josm.data.validation.TestError;
    26 import org.openstreetmap.josm.gui.preferences.map.TaggingPresetPreference;
    2726import org.openstreetmap.josm.gui.tagging.TaggingPreset;
    2827import org.openstreetmap.josm.gui.tagging.TaggingPresetItem;
     28import org.openstreetmap.josm.gui.tagging.TaggingPresetItems.Key;
    2929import org.openstreetmap.josm.gui.tagging.TaggingPresetItems.Role;
    30 import org.openstreetmap.josm.gui.tagging.TaggingPresetItems.Key;
    3130import org.openstreetmap.josm.gui.tagging.TaggingPresetItems.Roles;
    3231import org.openstreetmap.josm.gui.tagging.TaggingPresetType;
     32import org.openstreetmap.josm.gui.tagging.TaggingPresets;
    3333
    3434/**
     
    4646    protected static final int RELATION_UNKNOWN  = 1707;
    4747    protected static final int RELATION_EMPTY    = 1708;
    48    
    49     /** 
     48
     49    /**
    5050     * Error message used to group errors related to role problems.
    5151     * @since 6731
     
    7373     */
    7474    public void initializePresets() {
    75         Collection<TaggingPreset> presets = TaggingPresetPreference.taggingPresets;
    76         if (presets != null) {
    77             for (TaggingPreset p : presets) {
    78                 for (TaggingPresetItem i : p.data) {
    79                     if (i instanceof Roles) {
    80                         relationpresets.add(p);
    81                         break;
    82                     }
     75        for (TaggingPreset p : TaggingPresets.getTaggingPresets()) {
     76            for (TaggingPresetItem i : p.data) {
     77                if (i instanceof Roles) {
     78                    relationpresets.add(p);
     79                    break;
    8380                }
    8481            }
  • trunk/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java

    r7033 r7100  
    4141import org.openstreetmap.josm.data.validation.TestError;
    4242import org.openstreetmap.josm.data.validation.util.Entities;
    43 import org.openstreetmap.josm.gui.preferences.map.TaggingPresetPreference;
    4443import org.openstreetmap.josm.gui.preferences.validator.ValidatorPreference;
    4544import org.openstreetmap.josm.gui.progress.ProgressMonitor;
     
    4948import org.openstreetmap.josm.gui.tagging.TaggingPresetItems.CheckGroup;
    5049import org.openstreetmap.josm.gui.tagging.TaggingPresetItems.KeyedItem;
     50import org.openstreetmap.josm.gui.tagging.TaggingPresets;
    5151import org.openstreetmap.josm.gui.widgets.EditableList;
    5252import org.openstreetmap.josm.io.MirroredInputStream;
     
    6161 */
    6262public class TagChecker extends Test.TagTest {
    63    
     63
    6464    /** The default data file of tagchecker rules */
    6565    public static final String DATA_FILE = "resource://data/validator/tagchecker.cfg";
     
    161161
    162162        spellCheckKeyData = new HashMap<>();
    163        
     163
    164164        String errorSources = "";
    165165        for (String source : Main.pref.getCollection(PREF_SOURCES, DEFAULT_SOURCES)) {
     
    256256            return;
    257257
    258         Collection<TaggingPreset> presets = TaggingPresetPreference.taggingPresets;
    259         if (presets != null) {
     258        Collection<TaggingPreset> presets = TaggingPresets.getTaggingPresets();
     259        if (!presets.isEmpty()) {
    260260            presetsValueData = new MultiMap<>();
    261261            for (String a : OsmPrimitive.getUninterestingKeys()) {
  • trunk/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java

    r7005 r7100  
    1717import javax.swing.JCheckBox;
    1818import javax.swing.JLabel;
    19 import javax.swing.JMenu;
    20 import javax.swing.JMenuItem;
    2119import javax.swing.JOptionPane;
    2220import javax.swing.JPanel;
    23 import javax.swing.JSeparator;
    2421
    2522import org.openstreetmap.josm.Main;
     
    3633import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
    3734import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
    38 import org.openstreetmap.josm.gui.tagging.TaggingPreset;
    39 import org.openstreetmap.josm.gui.tagging.TaggingPresetMenu;
    4035import org.openstreetmap.josm.gui.tagging.TaggingPresetReader;
    41 import org.openstreetmap.josm.gui.tagging.TaggingPresetSeparator;
    42 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager;
    4336import org.openstreetmap.josm.tools.GBC;
    4437import org.xml.sax.SAXException;
     
    6558
    6659    private static final List<SourceProvider> presetSourceProviders = new ArrayList<>();
    67    
    68     /**
    69      * The collection of tagging presets.
    70      */
    71     public static Collection<TaggingPreset> taggingPresets;
     60
    7261    private SourceEditor sources;
    7362    private JCheckBox sortMenu;
     
    274263
    275264    /**
    276      * Initializes tagging presets from preferences.
    277      */
    278     public static void readFromPreferences() {
    279         taggingPresets = TaggingPresetReader.readFromPreferences(false, false);
    280     }
    281 
    282     /**
    283      * Initialize the tagging presets (load and may display error)
    284      */
    285     public static void initialize() {
    286         readFromPreferences();
    287         for (TaggingPreset tp: taggingPresets) {
    288             if (!(tp instanceof TaggingPresetSeparator)) {
    289                 Main.toolbar.register(tp);
    290             }
    291         }
    292         if (taggingPresets.isEmpty()) {
    293             Main.main.menu.presetsMenu.setVisible(false);
    294         } else {
    295             AutoCompletionManager.cachePresets(taggingPresets);
    296             HashMap<TaggingPresetMenu,JMenu> submenus = new HashMap<>();
    297             for (final TaggingPreset p : taggingPresets) {
    298                 JMenu m = p.group != null ? submenus.get(p.group) : Main.main.menu.presetsMenu;
    299                 if (p instanceof TaggingPresetSeparator) {
    300                     m.add(new JSeparator());
    301                 } else if (p instanceof TaggingPresetMenu) {
    302                     JMenu submenu = new JMenu(p);
    303                     submenu.setText(p.getLocaleName());
    304                     ((TaggingPresetMenu)p).menu = submenu;
    305                     submenus.put((TaggingPresetMenu)p, submenu);
    306                     m.add(submenu);
    307                 } else {
    308                     JMenuItem mi = new JMenuItem(p);
    309                     mi.setText(p.getLocaleName());
    310                     m.add(mi);
    311                 }
    312             }
    313         }
    314         if (Main.pref.getBoolean("taggingpreset.sortmenu")) {
    315             TaggingPresetMenu.sortMenu(Main.main.menu.presetsMenu);
    316         }
    317     }
    318 
    319     /**
    320265     * Helper class for tagging presets preferences.
    321266     */
  • trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java

    r7090 r7100  
    4444import org.openstreetmap.josm.gui.layer.Layer;
    4545import org.openstreetmap.josm.gui.preferences.ToolbarPreferences;
    46 import org.openstreetmap.josm.gui.preferences.map.TaggingPresetPreference;
    4746import org.openstreetmap.josm.gui.tagging.TaggingPresetItems.Link;
    4847import org.openstreetmap.josm.gui.tagging.TaggingPresetItems.Role;
     
    199198    private static class PresetPanel extends JPanel {
    200199        boolean hasElements = false;
    201         PresetPanel()
    202         {
     200        PresetPanel() {
    203201            super(new GridBagLayout());
    204202        }
     
    262260    }
    263261
    264     public boolean isShowable()
    265     {
    266         for(TaggingPresetItem i : data)
    267         {
     262    public boolean isShowable() {
     263        for(TaggingPresetItem i : data) {
    268264            if(!(i instanceof TaggingPresetItems.Optional || i instanceof TaggingPresetItems.Space || i instanceof TaggingPresetItems.Key))
    269265                return true;
     
    495491
    496492    public static Collection<TaggingPreset> getMatchingPresets(final Collection<TaggingPresetType> t, final Map<String, String> tags, final boolean onlyShowable) {
    497         return Utils.filter(TaggingPresetPreference.taggingPresets, new Predicate<TaggingPreset>() {
     493        return Utils.filter(TaggingPresets.getTaggingPresets(), new Predicate<TaggingPreset>() {
    498494            @Override
    499495            public boolean evaluate(TaggingPreset object) {
     
    508504    public class ToolbarButtonAction extends AbstractAction {
    509505        private final int toolbarIndex;
     506
     507        /**
     508         * Constructs a new {@code ToolbarButtonAction}.
     509         */
    510510        public ToolbarButtonAction() {
    511511            super("", ImageProvider.get("styles/standard/waypoint","pin"));
     
    524524
    525525    public String getToolbarString() {
    526         ToolbarPreferences.ActionDefinition aDef
    527             = new ToolbarPreferences.ActionDefinition(this);
    528526        ToolbarPreferences.ActionParser actionParser = new ToolbarPreferences.ActionParser(null);
    529         return actionParser.saveAction(aDef);
     527        return actionParser.saveAction(new ToolbarPreferences.ActionDefinition(this));
    530528    }
    531529}
  • trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java

    r7015 r7100  
    5050import org.openstreetmap.josm.data.preferences.BooleanProperty;
    5151import org.openstreetmap.josm.gui.dialogs.properties.PresetListPanel;
    52 import org.openstreetmap.josm.gui.preferences.map.TaggingPresetPreference;
    5352import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingTextField;
    5453import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionItemPriority;
     
    402401        boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel, boolean presetInitiallyMatches) {
    403402            final String presetName = preset_name;
    404             final TaggingPreset t = Utils.filter(TaggingPresetPreference.taggingPresets, new Predicate<TaggingPreset>() {
     403            final TaggingPreset t = Utils.filter(TaggingPresets.getTaggingPresets(), new Predicate<TaggingPreset>() {
    405404                @Override
    406405                public boolean evaluate(TaggingPreset object) {
  • trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSelector.java

    r7022 r7100  
    4747import org.openstreetmap.josm.data.osm.Way;
    4848import org.openstreetmap.josm.data.preferences.BooleanProperty;
    49 import org.openstreetmap.josm.gui.preferences.map.TaggingPresetPreference;
    5049import org.openstreetmap.josm.gui.tagging.TaggingPresetItems.Key;
    5150import org.openstreetmap.josm.gui.tagging.TaggingPresetItems.KeyedItem;
     
    6059 */
    6160public class TaggingPresetSelector extends JPanel implements SelectionChangedListener {
    62    
     61
    6362    private static final int CLASSIFICATION_IN_FAVORITES = 300;
    6463    private static final int CLASSIFICATION_NAME_MATCH = 300;
     
    6867    private static final BooleanProperty SEARCH_IN_TAGS = new BooleanProperty("taggingpreset.dialog.search-in-tags", true);
    6968    private static final BooleanProperty ONLY_APPLICABLE  = new BooleanProperty("taggingpreset.dialog.only-applicable-to-selection", true);
    70    
     69
    7170    private JosmTextField edSearchText;
    7271    private JList<TaggingPreset> lsResult;
     
    208207    public TaggingPresetSelector(boolean displayOnlyApplicable, boolean displaySearchInTags) {
    209208        super(new BorderLayout());
    210         if (TaggingPresetPreference.taggingPresets!=null) {
    211             loadPresets(TaggingPresetPreference.taggingPresets);
    212         }
    213        
     209        loadPresets(TaggingPresets.getTaggingPresets());
     210
    214211        edSearchText = new JosmTextField();
    215212        edSearchText.getDocument().addDocumentListener(new DocumentListener() {
     
    304301        lsResult.addMouseListener(new PopupMenuLauncher(popupMenu));
    305302    }
    306    
     303
    307304    private void selectPreset(int newIndex) {
    308305        if (newIndex < 0) {
     
    389386
    390387    }
    391    
     388
    392389    private EnumSet<TaggingPresetType> getTypesInSelection() {
    393390        if (typesInSelectionDirty) {
     
    412409        return typesInSelection;
    413410    }
    414    
     411
    415412    @Override
    416413    public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
     
    426423        filterPresets();
    427424    }
    428    
     425
    429426    public void init(Collection<TaggingPreset> presets) {
    430427        classifications.clear();
     
    432429        init();
    433430    }
    434    
     431
    435432    public void clearSelection() {
    436433        lsResult.getSelectionModel().clearSelection();
    437434    }
    438    
     435
    439436    /**
    440437     * Save checkbox values in preferences for future reuse
     
    448445        }
    449446    }
    450    
     447
    451448    /**
    452449     * Determines, which preset is selected at the current moment
     
    483480        lsResult.setSelectedValue(p, true);
    484481    }
    485    
     482
    486483    public int getItemCount() {
    487484        return lsResultModel.getSize();
    488485    }
    489    
     486
    490487    public void setDblClickListener(ActionListener dblClickListener) {
    491488        this.dblClickListener = dblClickListener;
    492489    }
    493    
     490
    494491    public void setClickListener(ActionListener clickListener) {
    495492        this.clickListener = clickListener;
    496493    }
    497    
     494
    498495    public void addSelectionListener(final ActionListener selectListener) {
    499496        lsResult.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
  • trunk/src/org/openstreetmap/josm/tools/TaggingPresetNameTemplateList.java

    r7005 r7100  
    77import java.util.List;
    88
     9import org.openstreetmap.josm.Main;
    910import org.openstreetmap.josm.data.osm.OsmPrimitive;
    10 import org.openstreetmap.josm.gui.preferences.map.TaggingPresetPreference;
    1111import org.openstreetmap.josm.gui.tagging.TaggingPreset;
     12import org.openstreetmap.josm.gui.tagging.TaggingPresetListener;
    1213import org.openstreetmap.josm.gui.tagging.TaggingPresetType;
     14import org.openstreetmap.josm.gui.tagging.TaggingPresets;
    1315
    1416/**
    1517 * List of tagging presets with name templates, allows to find appropriate template based on existing primitive
    1618 */
    17 public final class TaggingPresetNameTemplateList {
     19public final class TaggingPresetNameTemplateList implements TaggingPresetListener {
    1820
    1921    private static TaggingPresetNameTemplateList instance;
    2022
     23    /**
     24     * Replies the unique instance.
     25     * @return the unique instance
     26     */
    2127    public static TaggingPresetNameTemplateList getInstance() {
    2228        if (instance == null) {
    2329            instance = new TaggingPresetNameTemplateList();
     30            TaggingPresets.addListener(instance);
    2431        }
    2532        return instance;
    2633    }
     34
    2735    private final List<TaggingPreset> presetsWithPattern = new LinkedList<>();
    2836
    2937    private TaggingPresetNameTemplateList() {
    30         if (TaggingPresetPreference.taggingPresets != null) {
    31             for (TaggingPreset tp : TaggingPresetPreference.taggingPresets) {
     38        buildPresetsWithPattern();
     39    }
     40
     41    private void buildPresetsWithPattern() {
     42        synchronized(this) {
     43            Main.debug("Building list of presets with name template");
     44            presetsWithPattern.clear();
     45            for (TaggingPreset tp : TaggingPresets.getTaggingPresets()) {
    3246                if (tp.nameTemplate != null) {
    3347                    presetsWithPattern.add(tp);
     
    3751    }
    3852
     53    /**
     54     * Finds and returns the first occurence of preset with template name matching the given primitive
     55     * @param primitive The primitive to match
     56     * @return the first occurence of preset with template name matching the primitive
     57     */
    3958    public TaggingPreset findPresetTemplate(OsmPrimitive primitive) {
    40 
    41         for (TaggingPreset t : presetsWithPattern) {
    42             Collection<TaggingPresetType> type = Collections.singleton(TaggingPresetType.forPrimitive(primitive));
    43             if (t.typeMatches(type)) {
    44                 if (t.nameTemplateFilter != null) {
    45                     if (t.nameTemplateFilter.match(primitive))
     59        synchronized(this) {
     60            for (TaggingPreset t : presetsWithPattern) {
     61                Collection<TaggingPresetType> type = Collections.singleton(TaggingPresetType.forPrimitive(primitive));
     62                if (t.typeMatches(type)) {
     63                    if (t.nameTemplateFilter != null) {
     64                        if (t.nameTemplateFilter.match(primitive))
     65                            return t;
     66                        else {
     67                            continue;
     68                        }
     69                    } else if (t.matches(type, primitive.getKeys(), false)) {
    4670                        return t;
    47                     else {
    48                         continue;
    4971                    }
    50                 } else if (t.matches(type, primitive.getKeys(), false)) {
    51                     return t;
    5272                }
    5373            }
     
    5575        return null;
    5676    }
     77
     78    @Override
     79    public void taggingPresetsModified() {
     80        buildPresetsWithPattern();
     81    }
    5782}
  • trunk/test/unit/org/openstreetmap/josm/gui/DefaultNameFormatterTest.java

    r7098 r7100  
    1919import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    2020import org.openstreetmap.josm.data.osm.Relation;
    21 import org.openstreetmap.josm.gui.preferences.map.TaggingPresetPreference;
    2221import org.openstreetmap.josm.gui.tagging.TaggingPresetReader;
     22import org.openstreetmap.josm.gui.tagging.TaggingPresets;
    2323import org.openstreetmap.josm.io.Compression;
    2424import org.openstreetmap.josm.io.IllegalDataException;
     
    4949    public void testTicket9632() throws IllegalDataException, IOException, SAXException {
    5050        String source = "http://josm.openstreetmap.de/josmfile?page=Presets/BicycleJunction&amp;preset";
    51         TaggingPresetPreference.taggingPresets = TaggingPresetReader.readAll(source, true);
     51        TaggingPresets.addTaggingPresets(TaggingPresetReader.readAll(source, true));
    5252
    5353        Comparator<Relation> comparator = DefaultNameFormatter.getInstance().getRelationComparator();
Note: See TracChangeset for help on using the changeset viewer.