Ignore:
Timestamp:
2015-12-22T21:46:48+01:00 (9 years ago)
Author:
simon04
Message:

JOSM/wikipedia: show notification w/ not found articles - see #josm10148

File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/wikipedia/src/org/wikipedia/FetchWikidataAction.java

    r31852 r31853  
    1313import java.util.Set;
    1414
     15import javax.swing.JOptionPane;
     16
    1517import org.openstreetmap.josm.Main;
    1618import org.openstreetmap.josm.actions.JosmAction;
     
    1921import org.openstreetmap.josm.command.SequenceCommand;
    2022import org.openstreetmap.josm.data.osm.OsmPrimitive;
     23import org.openstreetmap.josm.gui.Notification;
    2124import org.openstreetmap.josm.gui.PleaseWaitRunnable;
    2225import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    2326import org.openstreetmap.josm.tools.MultiMap;
     27import org.openstreetmap.josm.tools.Utils;
    2428
    2529public class FetchWikidataAction extends JosmAction {
     
    4145        private final Collection<? extends OsmPrimitive> selection;
    4246        private boolean canceled = false;
    43         private List<Command> commands;
     47        private final List<Command> commands = new ArrayList<>();
     48        private final Collection<WikipediaApp.WikipediaLangArticle> notFound = new ArrayList<>();
    4449
    4550        public Fetcher(Collection<? extends OsmPrimitive> selection) {
     
    5661        protected void realRun() {
    5762            final Map<String, PrimitivesWithWikipedia> wikipediaByLanguage = getLanguageToArticlesMap(selection);
    58             commands = new ArrayList<>(wikipediaByLanguage.keySet().size());
    5963            getProgressMonitor().setTicksCount(wikipediaByLanguage.keySet().size());
    6064            for (final Map.Entry<String, PrimitivesWithWikipedia> i : wikipediaByLanguage.entrySet()) {
     
    6266                    break;
    6367                }
    64                 final Command command = i.getValue().updateWikidataIds(getProgressMonitor().createSubTaskMonitor(1, false));
     68                final PrimitivesWithWikipedia fetcher = i.getValue();
     69                fetcher.updateWikidataIds(getProgressMonitor().createSubTaskMonitor(1, false));
     70                final Command command = fetcher.getCommand();
    6571                if (command != null) {
    6672                    commands.add(command);
    6773                }
     74                notFound.addAll(fetcher.getNotFound());
    6875            }
    6976        }
     
    8895                Main.main.undoRedo.add(commands.size() == 1 ? commands.get(0) : new SequenceCommand(tr("Add Wikidata"), commands));
    8996            }
     97            if (!canceled && !notFound.isEmpty()) {
     98                new Notification(tr("No Wikidata ID found for: {0}", Utils.joinAsHtmlUnorderedList(notFound)))
     99                        .setIcon(JOptionPane.WARNING_MESSAGE)
     100                        .setDuration(Notification.TIME_LONG)
     101                        .show();
     102            }
    90103        }
    91104    }
     
    94107        final String lang;
    95108        final MultiMap<String, OsmPrimitive> byArticle = new MultiMap<>();
     109        final List<Command> commands = new ArrayList<>();
     110        final List<WikipediaApp.WikipediaLangArticle> notFound = new ArrayList<>();
    96111
    97112        public PrimitivesWithWikipedia(String lang) {
     
    103118        }
    104119
    105         protected Command updateWikidataIds(ProgressMonitor monitor) {
     120        protected void updateWikidataIds(ProgressMonitor monitor) {
    106121            final int size = byArticle.keySet().size();
    107122            monitor.beginTask(trn(
    108123                    "Fetching {0} Wikidata ID for language ''{1}''",
    109124                    "Fetching {0} Wikidata IDs for language ''{1}''", size, size, lang));
    110             final List<Command> commands = new ArrayList<>(size);
    111125            final Map<String, String> wikidataByWikipedia = WikipediaApp.getWikidataForArticles(lang, byArticle.keySet());
    112126            for (Map.Entry<String, Set<OsmPrimitive>> i : byArticle.entrySet()) {
     
    116130                    commands.add(new ChangePropertyCommand(i.getValue(), "wikidata", wikidata));
    117131                } else {
    118                     Main.warn(tr("No Wikidata ID found for {0}", lang + ":" + wikipedia));
     132                    final WikipediaApp.WikipediaLangArticle article = new WikipediaApp.WikipediaLangArticle(lang, wikipedia);
     133                    Main.warn(tr("No Wikidata ID found for: {0}", article));
     134                    notFound.add(article);
    119135                }
    120136            }
    121137            monitor.finishTask();
     138        }
     139
     140        public Command getCommand() {
    122141            return commands.isEmpty()
    123142                    ? null
    124143                    : new SequenceCommand(tr("Add Wikidata for language ''{0}''", lang), commands);
     144        }
     145
     146        public List<WikipediaApp.WikipediaLangArticle> getNotFound() {
     147            return notFound;
    125148        }
    126149    }
Note: See TracChangeset for help on using the changeset viewer.