source: josm/trunk/src/org/openstreetmap/josm/data/imagery/ImageryLayerInfo.java@ 3966

Last change on this file since 3966 was 3961, checked in by mjulius, 13 years ago

fix issue of default list of imagery providers being duplicated when hitting "reload defaults"
sort default list when reloading

  • Property svn:eol-style set to native
File size: 4.6 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.data.imagery;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.io.BufferedReader;
7import java.io.IOException;
8import java.io.InputStreamReader;
9import java.io.UnsupportedEncodingException;
10import java.util.ArrayList;
11import java.util.Arrays;
12import java.util.Collection;
13import java.util.Collections;
14import java.util.LinkedList;
15import java.util.List;
16
17import org.openstreetmap.josm.Main;
18import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType;
19import org.openstreetmap.josm.io.MirroredInputStream;
20
21public class ImageryLayerInfo {
22
23 public static final ImageryLayerInfo instance = new ImageryLayerInfo();
24 ArrayList<ImageryInfo> layers = new ArrayList<ImageryInfo>();
25 ArrayList<ImageryInfo> defaultLayers = new ArrayList<ImageryInfo>();
26
27 private final static String[] DEFAULT_LAYER_SITES = {
28 "http://josm.openstreetmap.de/maps"
29 };
30
31 public void load() {
32 layers.clear();
33 defaultLayers.clear();
34 Collection<String> defaults = Main.pref.getCollection(
35 "imagery.layers.default", Collections.<String>emptySet());
36 for(Collection<String> c : Main.pref.getArray("imagery.layers",
37 Collections.<Collection<String>>emptySet())) {
38 add(new ImageryInfo(c));
39 }
40
41 ArrayList<String> defaultsSave = new ArrayList<String>();
42 for(String source : Main.pref.getCollection("imagery.layers.sites", Arrays.asList(DEFAULT_LAYER_SITES)))
43 {
44 try
45 {
46 MirroredInputStream s = new MirroredInputStream(source, -1);
47 InputStreamReader r;
48 try
49 {
50 r = new InputStreamReader(s, "UTF-8");
51 }
52 catch (UnsupportedEncodingException e)
53 {
54 r = new InputStreamReader(s);
55 }
56 BufferedReader reader = new BufferedReader(r);
57 String line;
58 while((line = reader.readLine()) != null)
59 {
60 String val[] = line.split(";");
61 if(!line.startsWith("#") && (val.length == 3 || val.length == 4)) {
62 boolean force = "true".equals(val[0]);
63 String name = tr(val[1]);
64 String url = val[2];
65 String eulaAcceptanceRequired = null;
66
67 if (val.length == 4) {
68 // 4th parameter optional for license agreement (EULA)
69 eulaAcceptanceRequired = val[3];
70 }
71
72 defaultLayers.add(new ImageryInfo(name, url, eulaAcceptanceRequired));
73
74 if (force) {
75 defaultsSave.add(url);
76 if (!defaults.contains(url)) {
77 for (ImageryInfo i : layers) {
78 if ((i.getImageryType() == ImageryType.WMS && url.equals(i.getUrl()))
79 || url.equals(i.getFullUrl())) {
80 force = false;
81 }
82 }
83 if (force) {
84 add(new ImageryInfo(name, url));
85 }
86 }
87 }
88 }
89 }
90 }
91 catch (IOException e)
92 {
93 }
94 }
95
96 Main.pref.putCollection("imagery.layers.default", defaultsSave.size() > 0
97 ? defaultsSave : defaults);
98 Collections.sort(layers);
99 Collections.sort(defaultLayers);
100 save();
101 }
102
103 public void add(ImageryInfo info) {
104 layers.add(info);
105 }
106
107 public void remove(ImageryInfo info) {
108 layers.remove(info);
109 }
110
111 public void save() {
112 LinkedList<Collection<String>> coll = new LinkedList<Collection<String>>();
113 for (ImageryInfo info : layers) {
114 coll.add(info.getInfoArray());
115 }
116 Main.pref.putArray("imagery.layers", coll);
117 }
118
119 public List<ImageryInfo> getLayers() {
120 return Collections.unmodifiableList(layers);
121 }
122
123 public List<ImageryInfo> getDefaultLayers() {
124 return Collections.unmodifiableList(defaultLayers);
125 }
126
127 public static void addLayer(ImageryInfo info) {
128 instance.add(info);
129 instance.save();
130 Main.main.menu.imageryMenu.refreshImageryMenu();
131 }
132}
Note: See TracBrowser for help on using the repository browser.