001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.actions.downloadtasks;
003
004import java.util.ArrayList;
005import java.util.List;
006import org.openstreetmap.josm.io.XmlWriter;
007
008/**
009 * Common abstract implementation of other download tasks
010 * @since 2322
011 */
012public abstract class AbstractDownloadTask implements DownloadTask {
013    private List<Object> errorMessages;
014    private boolean canceled = false;
015    private boolean failed = false;
016
017    public AbstractDownloadTask() {
018        errorMessages = new ArrayList<>();
019    }
020
021    public boolean isCanceled() {
022        return canceled;
023    }
024
025    public void setCanceled(boolean canceled) {
026        this.canceled = canceled;
027    }
028
029    public boolean isFailed() {
030        return failed;
031    }
032
033    public void setFailed(boolean failed) {
034        this.failed = failed;
035    }
036
037    protected void rememberErrorMessage(String message) {
038        errorMessages.add(message);
039    }
040
041    protected void rememberException(Exception exception) {
042        errorMessages.add(exception);
043    }
044
045    @Override
046    public List<Object> getErrorObjects() {
047        return errorMessages;
048    }
049
050    @Override
051    public String acceptsDocumentationSummary() {
052        StringBuilder buf = new StringBuilder("<tr><td>");
053        buf.append(getTitle());
054        buf.append(":</td><td>");
055        String[] patterns = getPatterns();
056        if (patterns.length>0) {
057            buf.append("<ul>");
058            for (String pattern: patterns) {
059                buf.append("<li>");
060                buf.append(XmlWriter.encode(pattern));
061                buf.append("</li>");
062            }
063            buf.append("</ul>");
064        }
065        buf.append("</td></tr>");
066        return buf.toString();
067    }
068
069    // Can be overridden for more complex checking logic
070    @Override
071    public boolean acceptsUrl(String url) {
072        if (url==null) return false;
073        for (String p: getPatterns()) {
074            if (url.matches(p)) {
075                return true;
076            }
077        }
078        return false;
079    }
080
081    // Default name to keep old plugins compatible
082    @Override
083    public String getTitle() {
084        return getClass().getName();
085    }
086
087    // Default pattern to keep old plugins compatible
088    @Override
089    public String[] getPatterns() {
090        return new String[]{};
091    }
092
093}