7009e70ee844c9c3caecf1c57de6bad10c9d81fc
[jalview.git] / src / jalview / urls / UrlProvider.java
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 java.util.ArrayList;
26 import java.util.List;
27 import java.util.Vector;
28
29 /**
30  * 
31  * Implements the UrlProviderI interface for a composite UrlProvider object
32  * 
33  * @author $author$
34  * @version $Revision$
35  */
36 public class UrlProvider implements UrlProviderI
37 {
38   // List of actual URL link providers
39   private List<UrlProviderI> providers;
40
41   // Specific reference to custom URL link provider
42   private UrlProviderI customProvider;
43
44   /**
45    * Constructor for UrlProvider composite
46    * 
47    * @param defaultUrlString
48    *          id of default url
49    * @param allProviders
50    *          list of UrlProviders this provider gives access to
51    */
52   public UrlProvider(String defaultUrlString,
53           List<UrlProviderI> allProviders)
54   {
55     providers = allProviders;
56
57     customProvider = findCustomProvider();
58
59     // check that the defaultUrl still exists
60     if (!setDefaultUrl(defaultUrlString))
61     {
62       // if the defaultUrl can't be found in any of the providers
63       // set up a custom default url
64       chooseDefaultUrl();
65     }
66   }
67
68   /*
69    * Store ref to custom url provider
70    */
71   private UrlProviderI findCustomProvider()
72   {
73     for (UrlProviderI p : providers)
74     {
75       if (p.getClass().equals(CustomUrlProvider.class))
76       {
77         return p;
78       }
79     }
80
81     System.out
82             .println("Error initialising UrlProvider - no custom url provider");
83     return null;
84   }
85   
86   @Override
87   public boolean setDefaultUrl(String id)
88   {
89     boolean outcome = false;
90     for (UrlProviderI p : providers)
91     {
92       if (p.setDefaultUrl(id))
93       {
94         outcome = true;
95       }
96     }
97     return outcome;
98   }
99   
100   @Override
101   public String writeUrlsAsString(boolean selected)
102   {
103     String result = "";
104     for (UrlProviderI p : providers)
105     {
106       String next = p.writeUrlsAsString(selected);
107       if (!next.isEmpty())
108       {
109         result += next;
110         result += SEP;
111       }
112     }
113     // remove last sep
114     if (!result.isEmpty())
115     {
116       result = result.substring(0, result.length() - 1);
117     }
118     return result;
119   }
120
121   @Override
122   public Vector<String> getLinksForMenu()
123   {
124     Vector<String> fullLinks = new Vector<String>();
125     for (UrlProviderI p : providers)
126     {
127       List<String> links = p.getLinksForMenu();
128       if (links != null)
129       {
130         // will obliterate links with same keys from different providers
131         // must have checks in place to prevent user from duplicating ids
132         fullLinks.addAll(links);
133       }
134     }
135     return fullLinks;
136   }
137
138   @Override
139   public List<UrlLinkDisplay> getLinksForTable()
140   {
141     ArrayList<UrlLinkDisplay> displayLinks = new ArrayList<UrlLinkDisplay>();
142     for (UrlProviderI p : providers)
143     {
144       displayLinks.addAll(p.getLinksForTable());
145     }
146     return displayLinks;
147   }
148
149   @Override
150   public void setUrlData(List<UrlLinkDisplay> links)
151   {
152     for (UrlProviderI p : providers)
153     {
154       p.setDefaultUrl(null);
155       p.setUrlData(links);
156     }
157   }
158
159   @Override
160   public String getDefaultUrl(String seqid)
161   {
162     String link = null;
163     for (UrlProviderI p : providers)
164     {
165       if (p.getDefaultUrl(seqid) == null)
166       {
167         continue;
168       }
169       else
170       {
171         link = p.getDefaultUrl(seqid);
172         break;
173       }
174     }
175     return link;
176   }
177
178   @Override
179   public String getDefaultUrlId()
180   {
181     String id = null;
182     for (UrlProviderI p : providers)
183     {
184       if (p.getDefaultUrlId() == null)
185       {
186         continue;
187       }
188       else
189       {
190         id = p.getDefaultUrlId();
191         break;
192       }
193     }
194     return id;
195   }
196
197   @Override
198   public String getDefaultTarget(String seqid)
199   {
200     String target = null;
201     for (UrlProviderI p : providers)
202     {
203       if (p.getDefaultTarget(seqid) == null)
204       {
205         continue;
206       }
207       else
208       {
209         target = p.getDefaultTarget(seqid);
210         break;
211       }
212     }
213     return target;
214   }
215   
216   @Override
217   public String chooseDefaultUrl()
218   {
219     // choose a custom url default
220     return customProvider.chooseDefaultUrl();
221   }
222
223   @Override
224   public boolean isUserEntry(String id)
225   {
226     return customProvider.isUserEntry(id);
227   }
228 }