Class |
Line # |
Actions |
|||
---|---|---|---|---|---|
UrlProvider | 38 | 66 | 24 |
1 | /* | |
2 | * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) | |
3 | * Copyright (C) $$Year-Rel$$ The Jalview Authors | |
4 | * | |
5 | * This file is part of Jalview. | |
6 | * | |
7 | * Jalview is free software: you can redistribute it and/or | |
8 | * modify it under the terms of the GNU General Public License | |
9 | * as published by the Free Software Foundation, either version 3 | |
10 | * of the License, or (at your option) any later version. | |
11 | * | |
12 | * Jalview is distributed in the hope that it will be useful, but | |
13 | * WITHOUT ANY WARRANTY; without even the implied warranty | |
14 | * of MERCHANTABILITY or FITNESS FOR A PARTICULAR | |
15 | * PURPOSE. See the GNU General Public License for more details. | |
16 | * | |
17 | * You should have received a copy of the GNU General Public License | |
18 | * along with Jalview. If not, see <http://www.gnu.org/licenses/>. | |
19 | * The Jalview Authors are detailed in the 'AUTHORS' file. | |
20 | */ | |
21 | package jalview.urls; | |
22 | ||
23 | import static jalview.util.UrlConstants.SEP; | |
24 | ||
25 | import jalview.urls.api.UrlProviderI; | |
26 | ||
27 | import java.util.ArrayList; | |
28 | import java.util.List; | |
29 | import java.util.Vector; | |
30 | ||
31 | /** | |
32 | * | |
33 | * Implements the UrlProviderI interface for a composite UrlProvider object | |
34 | * | |
35 | * @author $author$ | |
36 | * @version $Revision$ | |
37 | */ | |
38 | public class UrlProvider implements UrlProviderI | |
39 | { | |
40 | // List of actual URL link providers | |
41 | private List<UrlProviderI> providers; | |
42 | ||
43 | // Specific reference to custom URL link provider | |
44 | private UrlProviderI customProvider; | |
45 | ||
46 | /** | |
47 | * Constructor for UrlProvider composite | |
48 | * | |
49 | * @param defaultUrlString | |
50 | * id of default url | |
51 | * @param allProviders | |
52 | * list of UrlProviders this provider gives access to | |
53 | */ | |
54 | 38 | public UrlProvider(String defaultUrlString, |
55 | List<UrlProviderI> allProviders) | |
56 | { | |
57 | 38 | providers = allProviders; |
58 | ||
59 | 38 | customProvider = findCustomProvider(); |
60 | ||
61 | // check that the defaultUrl still exists | |
62 | 38 | if (!contains(defaultUrlString)) |
63 | { | |
64 | // if the defaultUrl can't be found in any of the providers | |
65 | // set up a custom default url | |
66 | 4 | choosePrimaryUrl(); |
67 | } | |
68 | else | |
69 | { | |
70 | 34 | setPrimaryUrl(defaultUrlString); |
71 | } | |
72 | } | |
73 | ||
74 | /* | |
75 | * Store ref to custom url provider | |
76 | */ | |
77 | 38 | private UrlProviderI findCustomProvider() |
78 | { | |
79 | 38 | for (UrlProviderI p : providers) |
80 | { | |
81 | 75 | if (p instanceof CustomUrlProvider) |
82 | { | |
83 | 38 | return p; |
84 | } | |
85 | } | |
86 | ||
87 | 0 | jalview.bin.Console.outPrintln( |
88 | "Error initialising UrlProvider - no custom url provider"); | |
89 | 0 | return null; |
90 | } | |
91 | ||
92 | 37 | @Override |
93 | public boolean setPrimaryUrl(String id) | |
94 | { | |
95 | 37 | boolean outcome = false; |
96 | 37 | for (UrlProviderI p : providers) |
97 | { | |
98 | 73 | if (p.setPrimaryUrl(id)) |
99 | { | |
100 | 36 | outcome = true; |
101 | } | |
102 | } | |
103 | 37 | if (!outcome) |
104 | { | |
105 | 1 | throw new IllegalArgumentException(); |
106 | } | |
107 | 36 | return outcome; |
108 | } | |
109 | ||
110 | 38 | @Override |
111 | public boolean contains(String id) | |
112 | { | |
113 | 38 | boolean outcome = false; |
114 | 38 | for (UrlProviderI p : providers) |
115 | { | |
116 | 75 | if (p.contains(id)) |
117 | { | |
118 | 34 | outcome = true; |
119 | } | |
120 | } | |
121 | 38 | return outcome; |
122 | } | |
123 | ||
124 | 3 | @Override |
125 | public String writeUrlsAsString(boolean selected) | |
126 | { | |
127 | 3 | String result = ""; |
128 | 3 | for (UrlProviderI p : providers) |
129 | { | |
130 | 6 | String next = p.writeUrlsAsString(selected); |
131 | 6 | if (!next.isEmpty()) |
132 | { | |
133 | 5 | result += next; |
134 | 5 | result += SEP; |
135 | } | |
136 | } | |
137 | // remove last sep | |
138 | 3 | if (!result.isEmpty()) |
139 | { | |
140 | 3 | result = result.substring(0, result.length() - 1); |
141 | } | |
142 | 3 | return result; |
143 | } | |
144 | ||
145 | 102 | @Override |
146 | public Vector<String> getLinksForMenu() | |
147 | { | |
148 | 102 | Vector<String> fullLinks = new Vector<String>(); |
149 | 102 | for (UrlProviderI p : providers) |
150 | { | |
151 | 204 | List<String> links = p.getLinksForMenu(); |
152 | 204 | if (links != null) |
153 | { | |
154 | // will obliterate links with same keys from different providers | |
155 | // must have checks in place to prevent user from duplicating ids | |
156 | 204 | fullLinks.addAll(links); |
157 | } | |
158 | } | |
159 | 102 | return fullLinks; |
160 | } | |
161 | ||
162 | 22 | @Override |
163 | public List<UrlLinkDisplay> getLinksForTable() | |
164 | { | |
165 | 22 | ArrayList<UrlLinkDisplay> displayLinks = new ArrayList<UrlLinkDisplay>(); |
166 | 22 | for (UrlProviderI p : providers) |
167 | { | |
168 | 43 | displayLinks.addAll(p.getLinksForTable()); |
169 | } | |
170 | 22 | return displayLinks; |
171 | } | |
172 | ||
173 | 9 | @Override |
174 | public void setUrlData(List<UrlLinkDisplay> links) | |
175 | { | |
176 | 9 | for (UrlProviderI p : providers) |
177 | { | |
178 | 18 | p.setUrlData(links); |
179 | } | |
180 | } | |
181 | ||
182 | 4 | @Override |
183 | public String getPrimaryUrl(String seqid) | |
184 | { | |
185 | 4 | String link = null; |
186 | 4 | for (UrlProviderI p : providers) |
187 | { | |
188 | 7 | if (p.getPrimaryUrl(seqid) == null) |
189 | { | |
190 | 3 | continue; |
191 | } | |
192 | else | |
193 | { | |
194 | 4 | link = p.getPrimaryUrl(seqid); |
195 | 4 | break; |
196 | } | |
197 | } | |
198 | 4 | return link; |
199 | } | |
200 | ||
201 | 5 | @Override |
202 | public String getPrimaryUrlId() | |
203 | { | |
204 | 5 | String id = null; |
205 | 5 | for (UrlProviderI p : providers) |
206 | { | |
207 | 8 | if (p.getPrimaryUrlId() == null) |
208 | { | |
209 | 3 | continue; |
210 | } | |
211 | else | |
212 | { | |
213 | 5 | id = p.getPrimaryUrlId(); |
214 | 5 | break; |
215 | } | |
216 | } | |
217 | 5 | return id; |
218 | } | |
219 | ||
220 | 0 | @Override |
221 | public String getPrimaryTarget(String seqid) | |
222 | { | |
223 | 0 | String target = null; |
224 | 0 | for (UrlProviderI p : providers) |
225 | { | |
226 | 0 | if (p.getPrimaryTarget(seqid) == null) |
227 | { | |
228 | 0 | continue; |
229 | } | |
230 | else | |
231 | { | |
232 | 0 | target = p.getPrimaryTarget(seqid); |
233 | 0 | break; |
234 | } | |
235 | } | |
236 | 0 | return target; |
237 | } | |
238 | ||
239 | 4 | @Override |
240 | public String choosePrimaryUrl() | |
241 | { | |
242 | // choose a custom url default | |
243 | 4 | return customProvider.choosePrimaryUrl(); |
244 | } | |
245 | ||
246 | 20 | @Override |
247 | public boolean isUserEntry(String id) | |
248 | { | |
249 | 20 | return customProvider.isUserEntry(id); |
250 | } | |
251 | } |