source: josm/trunk/src/org/openstreetmap/josm/gui/GettingStarted.java @ 1290

Last change on this file since 1290 was 1290, checked in by stoecker, 10 years ago

close #2035 and #1910. Patch by xeen

  • Property svn:eol-style set to native
File size: 6.0 KB
Line 
1// License: GPL. See LICENSE file for details.
2
3package org.openstreetmap.josm.gui;
4
5import static org.openstreetmap.josm.tools.I18n.tr;
6
7import java.io.IOException;
8import java.util.ArrayList;
9import java.util.regex.Matcher;
10import java.util.regex.Pattern;
11
12import java.awt.BorderLayout;
13import java.awt.Component;
14
15import javax.swing.JScrollPane;
16import javax.swing.JEditorPane;
17import javax.swing.JPanel;
18import javax.swing.event.HyperlinkEvent;
19import javax.swing.event.HyperlinkListener;
20import javax.swing.border.EmptyBorder;
21
22import org.openstreetmap.josm.Main;
23import org.openstreetmap.josm.tools.OpenBrowser;
24import org.openstreetmap.josm.tools.WikiReader;
25import org.openstreetmap.josm.actions.AboutAction;
26
27public class GettingStarted extends JPanel {
28
29    static private String content = "";
30
31    public class LinkGeneral extends JEditorPane implements HyperlinkListener {
32        public LinkGeneral(String text) {
33            setContentType("text/html");
34            setText(text);
35            setEditable(false);
36            setOpaque(false);
37            addHyperlinkListener(this);
38        }
39        public void hyperlinkUpdate(HyperlinkEvent e) {
40            if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
41                OpenBrowser.displayUrl(e.getDescription());
42            }
43        }
44    }
45
46    private void assignContent() {
47        if (content.length() > 0 && Main.pref.getBoolean("help.displaymotd", true)) return;
48
49        String baseurl = Main.pref.get("help.baseurl", "http://josm.openstreetmap.de");
50        WikiReader wr = new WikiReader(baseurl);
51        String motdcontent = "";
52        try {
53            motdcontent = wr.read(baseurl + "/wiki/MessageOfTheDay?format=txt");
54        } catch (IOException ioe) {
55            motdcontent = "<html><body>\n<h1>" +
56                "JOSM - " + tr("Java OpenStreetMap Editor") +
57                "</h1>\n<h2 align=\"center\">(" +
58                tr ("Message of the day not available") +
59                ")</h2>";
60        }
61
62        int myVersion = AboutAction.getVersionNumber();
63        String languageCode = Main.getLanguageCodeU();
64
65        // Finds wiki links like (underscores inserted for readability): [wiki:LANGCODE:messageoftheday_CONDITON_REVISION LANGCODE]
66        // Langcode usually consists of two letters describing the language and may be omitted
67        // Condition may be one of the following: >  <  <=  =>
68        // Revision is the JOSM version
69        Pattern versionPattern = Pattern.compile("\\[wiki:(?:[A-Z]+:)?MessageOfTheDay(\\>\\=|\\<\\=|\\<|\\>)([0-9]+)\\s*([A-Z]*)\\]", Pattern.CASE_INSENSITIVE);
70        // 1=condition, 2=targetVersion, 3=lang
71        Matcher matcher = versionPattern.matcher(motdcontent);
72        matcher.reset();
73
74        ArrayList<Object> links = new ArrayList<Object>();
75        String linksList="";
76        while (matcher.find()) {
77            // Discards all but the selected locale and non-localized links
78            if(!(matcher.group(3)+":").equals(languageCode) && !matcher.group(3).equals(""))
79                continue;
80
81            links.add(new String[] {matcher.group(1), matcher.group(2), matcher.group(3)});
82            linksList += matcher.group(1)+matcher.group(2)+matcher.group(3)+": ";
83        }
84
85        for(int i=0; i < links.size(); i++) {
86            String[] obj = (String[])links.get(i);
87            int targetVersion = Integer.parseInt(obj[1]);
88            String condition = obj[0];
89            Boolean isLocalized = !obj[2].equals("");
90
91            // Prefer localized over non-localized links, if they're otherwise the same
92            if(!isLocalized && linksList.indexOf(condition+obj[1]+languageCode+" ") >= 0)
93                continue;
94
95            boolean included = false;
96
97            if(myVersion == 0)
98              included = true;
99            else if(condition.equals(">="))
100              included=myVersion >= targetVersion;
101            else if(condition.equals(">"))
102              included = myVersion > targetVersion;
103            else if(condition.equals("<"))
104              included=myVersion < targetVersion;
105            else
106              included = myVersion <= targetVersion;
107
108            if(!included) continue;
109
110            Boolean isHelp = targetVersion == 1;
111
112            String urlStart = baseurl + "/wiki/";
113            String urlEnd = "MessageOfTheDay" + condition + targetVersion + (isHelp ? "" : "?format=txt");
114
115            try {
116                // If we hit a non-localized link here, we already know there's no translated version available
117                String message = isLocalized ? wr.read(urlStart + languageCode + urlEnd) : "";
118                // Look for non-localized version
119                if (message.equals(""))
120                    message = wr.read(urlStart + urlEnd);
121
122                if (!message.equals(""))
123                    if(isHelp)
124                        content += message;
125                    else
126                        content += "<ul><li>"+ message.substring(8)+"</li></ul>";
127            } catch (IOException ioe) {
128                try {
129                    if(isHelp)
130                        content += wr.read(urlStart + urlEnd);
131                    else
132                        content += "<ul><li>"+wr.read(urlStart + urlEnd).substring(8)+"</li></ul>";
133                } catch (IOException ioe2) {
134                }
135            }
136        }
137
138        content = "<html>\n"+
139            "<style type=\"text/css\">\n"+
140            "body { font-family: sans-serif; font-weight: bold; }\n"+
141            "h1 {text-align: center;}\n"+
142            "</style>\n"+
143            "<h1>JOSM - " + tr("Java OpenStreetMap Editor") + "</h1>\n"+
144            content+"\n"+
145            "</html>";
146    }
147
148    public GettingStarted() {
149        super(new BorderLayout());
150        assignContent();
151
152        // panel.add(GBC.glue(0,1), GBC.eol());
153        //panel.setMinimumSize(new Dimension(400, 600));
154        Component linkGeneral = new LinkGeneral(content);
155        JScrollPane scroller = new JScrollPane(linkGeneral);
156        scroller.setViewportBorder(new EmptyBorder(10,100,10,100));
157        add(scroller, BorderLayout.CENTER);
158
159        new FileDrop(linkGeneral);
160    }
161}
Note: See TracBrowser for help on using the repository browser.