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

Last change on this file since 4153 was 4145, checked in by stoecker, 13 years ago

see #6213 - do more file closes hopefully fixing some update problems under windows

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