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

Last change on this file since 3720 was 3720, checked in by bastiK, 13 years ago

added missing svn:eol-style

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