Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.about / org.gvsig.about.impl / src / main / java / org / gvsig / about / impl / DefaultAboutManager.java @ 42024

History | View | Annotate | Download (16.1 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 */
22
package org.gvsig.about.impl;
23

    
24
import java.io.BufferedReader;
25
import java.io.FileNotFoundException;
26
import java.io.FileReader;
27
import java.io.IOException;
28
import java.io.InputStream;
29
import java.io.InputStreamReader;
30
import java.net.URL;
31
import java.util.ArrayList;
32
import java.util.Collections;
33
import java.util.Comparator;
34
import java.util.Iterator;
35
import java.util.List;
36
import java.util.Map;
37

    
38
import javax.swing.ImageIcon;
39
import javax.swing.JPanel;
40

    
41
import org.gvsig.about.AboutContribution;
42
import org.gvsig.about.AboutDeveloper;
43
import org.gvsig.about.AboutManager;
44
import org.gvsig.about.AboutParticipant;
45
import org.gvsig.about.AboutProject;
46
import org.gvsig.about.AboutSponsor;
47
import org.gvsig.about.AboutTranslator;
48
import org.gvsig.about.swing.JAboutPanel;
49

    
50
/**
51
 * @author gvSIG Team
52
 * @version $Id$
53
 * 
54
 */
55
public class DefaultAboutManager implements AboutManager {
56

    
57
    protected List<AboutDeveloper> developers;
58
    protected List<AboutTranslator> translators;
59
    protected List<AboutSponsor> sponsors;
60

    
61
    protected DefaultAboutProject root;
62

    
63
    protected int ICON_SIZE = 16;
64

    
65
    public DefaultAboutManager() {
66
        developers = new ArrayList<AboutDeveloper>();
67
        sponsors = new ArrayList<AboutSponsor>();
68
        translators = new ArrayList<AboutTranslator>();
69
    }
70

    
71
    public void setProject(String name, URL description, URL icon) {
72
        root = new DefaultAboutProject(this, name, description, icon);
73
    }
74

    
75
    public void setProject(String name, URL description, URL icon,
76
        Map<String, String> vars) {
77
        root = new DefaultAboutProject(this, name, description, icon, vars);
78

    
79
    }
80

    
81
    // public AboutContribution addContribution(AboutParticipant participant,
82
    // String title, String description) {
83
    // return participant.addContribution(title, description, null, null);
84
    // }
85
    //
86
    // public AboutContribution addContribution(AboutParticipant participant,
87
    // String title, String description, Date begin) {
88
    // return participant.addContribution(title, description, begin, null);
89
    // }
90
    //
91
    // public AboutContribution addContribution(AboutParticipant participant,
92
    // String title, String description, Date begin, Date end) {
93
    // return participant.addContribution(title, description, begin, end);
94
    // }
95

    
96
    public AboutParticipant addDeveloper(String name, URL description,
97
        int priority) {
98
        return addDeveloper(name, description, priority, null);
99
    }
100

    
101
    public AboutParticipant addDeveloper(String name, URL description,
102
        int priority, URL icon) {
103

    
104
        AboutDeveloper participant = this.getDeveloper(name);
105

    
106
        if (participant == null) {
107
            participant =
108
                new DefaultAboutDeveloper(this, name, description, priority,
109
                    icon);
110
            // Añadimos a la lista de contribuciones
111
            this.developers.add(participant);
112
            // Ordenamos por prioridad creciente
113
            Collections.sort(this.developers, new Comparator<AboutDeveloper>() {
114

    
115
                public int compare(AboutDeveloper p1, AboutDeveloper p2) {
116
                    return p1.getPriority() < p2.getPriority() ? -1 : (p1
117
                        .getPriority() > p2.getPriority() ? +1 : 0);
118
                }
119
            });
120
        }
121

    
122
        return participant;
123
    }
124

    
125
    public AboutParticipant addSponsor(String name, URL description,
126
        int priority) {
127
        return addSponsor(name, description, priority, null);
128
    }
129

    
130
    public AboutParticipant addSponsor(String name, URL description,
131
        int priority, URL icon) {
132

    
133
        AboutSponsor participant = this.getSponsor(name);
134

    
135
        if (participant == null) {
136
            participant =
137
                new DefaultAboutSponsor(this, name, description, priority, icon);
138
            // Añadimos a la lista de contribuciones
139
            this.sponsors.add(participant);
140
            // Ordenamos por prioridad creciente
141
            Collections.sort(this.sponsors, new Comparator<AboutSponsor>() {
142

    
143
                public int compare(AboutSponsor p1, AboutSponsor p2) {
144
                    return p1.getPriority() < p2.getPriority() ? -1 : (p1
145
                        .getPriority() > p2.getPriority() ? +1 : 0);
146
                }
147
            });
148
        }
149

    
150
        return participant;
151
    }
152

    
153
    public AboutParticipant addTranslator(String name, URL description,
154
        int priority) {
155
        return addTranslator(name, description, priority, null);
156
    }
157

    
158
    public AboutParticipant addTranslator(String name, URL description,
159
        int priority, URL icon) {
160

    
161
        AboutTranslator participant = this.getTranslator(name);
162

    
163
        if (participant == null) {
164
            participant =
165
                new DefaultAboutTranslator(this, name, description, priority,
166
                    icon);
167
            // Añadimos a la lista de contribuciones
168
            this.translators.add(participant);
169
            // Ordenamos por prioridad creciente
170
            Collections.sort(this.translators,
171
                new Comparator<AboutTranslator>() {
172

    
173
                    public int compare(AboutTranslator p1, AboutTranslator p2) {
174
                        return p1.getPriority() < p2.getPriority() ? -1 : (p1
175
                            .getPriority() > p2.getPriority() ? +1 : 0);
176
                    }
177
                });
178
        }
179

    
180
        return participant;
181
    }
182

    
183
    public JPanel getAboutPanel() {
184
        JPanel panel = new JAboutPanel(this);
185
        return panel;
186
    }
187

    
188
    public List<AboutContribution> getContributions(AboutParticipant participant) {
189
        return participant.getContributions();
190
    }
191

    
192
    public ImageIcon getImageIcon(String name) {
193
        return this.getImageIcon(name, null);
194
    }
195

    
196
    public ImageIcon getImageIcon(URL url) {
197
        return this.getImageIcon(url, null);
198
    }
199

    
200
    public ImageIcon getImageIcon(String name, String defaultName) {
201
        URL url =
202
            this.getClass().getClassLoader()
203
                .getResource("org/gvsig/about/images/i16x16/" + name);
204
        return this.getImageIcon(url, defaultName);
205
    }
206

    
207
    public ImageIcon getImageIcon(URL url, String defaultName) {
208
        if (url == null) {
209
            url =
210
                this.getClass()
211
                    .getClassLoader()
212
                    .getResource("org/gvsig/about/images/i16x16/" + defaultName);
213
        }
214
        if (url == null) {
215
            url =
216
                this.getClass()
217
                    .getClassLoader()
218
                    .getResource(
219
                        "org/gvsig/about/images/i16x16/image-missing.png");
220
        }
221
        if (url == null) {
222
            url =
223
                this.getClass()
224
                    .getClassLoader()
225
                    .getResource("org/gvsig/about/images/i16x16/" + defaultName);
226
        }
227
        if (url == null) {
228
            return new ImageIcon();
229
        }
230
        return new ImageIcon(url);
231
    }
232

    
233
    public AboutProject getProject() {
234
        return this.root;
235
    }
236

    
237
    public List<AboutDeveloper> getDevelopers() {
238
        return this.developers;
239
    }
240

    
241
    public List<AboutSponsor> getSponsors() {
242
        return this.sponsors;
243
    }
244

    
245
    public List<AboutTranslator> getTranslators() {
246
        return this.translators;
247
    }
248

    
249
    // public ImageIcon validIconFormat(URL iconUrl){
250
    // // comprobar si existe y comprobar si es imagen
251
    // if(iconUrl!=null){
252
    //
253
    // File f = new File(iconUrl.getFile());
254
    // String mimeType=null;
255
    //
256
    // try {
257
    // mimeType = iconUrl.openConnection().getContentType();
258
    // } catch (IOException e) {
259
    // // TODO Auto-generated catch block
260
    // e.printStackTrace();
261
    // }
262
    // boolean isImage = false;
263
    // String[] formatNames = ImageIO.getWriterMIMETypes();
264
    // for(int i=0;i<formatNames.length;i++){
265
    // if(formatNames[i].equals(mimeType)){
266
    // isImage = true;
267
    // }
268
    // }
269
    //
270
    // if(f.exists() && isImage){
271
    // ImageIcon image = new ImageIcon(iconUrl);
272
    // // Escalamos, si corresponde, el tamaño del icono
273
    // if(image.getIconHeight()>ICON_SIZE || image.getIconWidth()>ICON_SIZE){
274
    // float height = image.getIconHeight();
275
    // float width = image.getIconWidth();
276
    // if(height>=width && height>ICON_SIZE){
277
    // width = (width/height*ICON_SIZE);
278
    // height = ICON_SIZE;
279
    // }else if(width>height && width>ICON_SIZE){
280
    // height = (height/width*ICON_SIZE);
281
    // width = ICON_SIZE;
282
    // }
283
    // Image im = image.getImage();
284
    // image.setImage(im.getScaledInstance((int)width,(int)height, 0));
285
    // }
286
    // return image;
287
    // }
288
    // }
289
    //
290
    // return null;
291
    // }
292

    
293
    @SuppressWarnings("rawtypes")
294
    private AboutParticipant getParticipantByName(List l, String name) {
295
        Iterator it = l.iterator();
296
        while (it.hasNext()) {
297
            AboutParticipant ap = (AboutParticipant) it.next();
298
            if (ap.getName().equals(name)) {
299
                return ap;
300
            }
301
        }
302
        return null;
303
    }
304

    
305
    public AboutDeveloper getDeveloper(String name) {
306
        AboutDeveloper ap =
307
            (AboutDeveloper) this.getParticipantByName(this.developers, name);
308
        if (ap != null) {
309
            return ap;
310
        }
311
        return null;
312
    }
313

    
314
    public AboutSponsor getSponsor(String name) {
315
        AboutSponsor ap =
316
            (AboutSponsor) this.getParticipantByName(this.sponsors, name);
317
        if (ap != null) {
318
            return ap;
319
        }
320
        return null;
321
    }
322

    
323
    public AboutTranslator getTranslator(String name) {
324
        AboutTranslator ap =
325
            (AboutTranslator) this.getParticipantByName(this.translators, name);
326
        if (ap != null) {
327
            return ap;
328
        }
329
        return null;
330
    }
331

    
332
    public String getStringFromFile(String filename)
333
        throws FileNotFoundException, IOException {
334

    
335
        BufferedReader b = new BufferedReader(new FileReader(filename));
336
        StringBuffer sb = new StringBuffer();
337
        String str;
338
        while ((str = b.readLine()) != null) {
339
            sb.append(str);
340
            sb.append('\n');
341
        }
342
        return sb.toString();
343

    
344
    }
345

    
346
    public String getStringFromUrl(URL url) {
347
        InputStream imp = null;
348
        try {
349
            imp = url.openStream();
350
        } catch (IOException e) {
351
            return null;
352
        }
353
        BufferedReader b = new BufferedReader(new InputStreamReader(imp));
354
        StringBuffer sb = new StringBuffer();
355
        String str;
356
        try {
357
            while ((str = b.readLine()) != null) {
358
                sb.append(str);
359
                sb.append('\n');
360
            }
361
            b.close();
362
        } catch (IOException e) {
363
            // Ignore it
364
        }
365
        String data = sb.toString();
366

    
367
        return addBaseURLTag(url, data);
368
    }
369

    
370
    /**
371
     * Add an HTML base tag to the document.
372
     */
373
    private String addBaseURLTag(URL url, String data) {
374
        String baseTag = "<base href=\"" + getURLBase(url) + "\"/>";
375
        int index = data.indexOf("<head>");
376
        // Document contains a head section
377
        if (index > -1) {
378
            data =
379
                data.substring(0, index) // HTML init
380
                    + "<head>"
381
                    + baseTag
382
                    + data.substring(index + "<head>".length());
383
        } else {
384
            index = data.indexOf("<html>");
385
            // Document contains an html section
386
            if (index > -1) {
387
                data = data.substring(0, index + "<html>".length()) // HTML init
388
                    + "<head>" + baseTag + "</head>" // Head
389
                    + data.substring(index + "<html>".length());
390
            } else {
391
                // Document doesn't contain nor a head nor an html section
392
                data = "<head>" + baseTag + "</head>" // Head
393
                    + data;
394
            }
395
        }
396
        return data;
397
    }
398

    
399
    public String getStringFromUrl(URL url, Map<String, String> vars) {
400
        String data = this.getStringFromUrl(url);
401
        return this.expandVars(data, vars);
402
    }
403

    
404
    public String expandVars(String data, Map<String, String> vars) {
405
        Iterator<Map.Entry<String, String>> it = vars.entrySet().iterator();
406
        while (it.hasNext()) {
407
            Map.Entry<String, String> entry = it.next();
408
            data = replaceVariable(data, entry.getKey(), entry.getValue());
409
        }
410
        return data;
411
    }
412

    
413
    private String replaceVariable(String text, String varName,
414
        String replacementString) {
415
        String searchString = "%(".concat(varName).concat(")");
416
        StringBuffer sBuffer = new StringBuffer();
417
        int pos = 0;
418
        while ((pos = text.indexOf(searchString)) != -1) {
419
            sBuffer.append(text.substring(0, pos) + replacementString);
420
            text = text.substring(pos + searchString.length());
421
        }
422
        sBuffer.append(text);
423
        return sBuffer.toString();
424
    }
425

    
426
    public String getURLBase(URL fileURL) {
427
        if (fileURL != null) {
428
            String urlStr = fileURL.toString();
429
            int index = urlStr.lastIndexOf('/');
430
            if (index == urlStr.length() - 1) {
431
                // It is a / ending the URL, get the previous one
432
                index = urlStr.substring(0, index).lastIndexOf('/');
433
            }
434
            return urlStr.substring(0, index + 1);
435
        }
436
        return null;
437
    }
438

    
439
    // public String generateContributorsPage(AboutParticipant participant) {
440
    // String fileString=null;
441
    //
442
    // String page=null;
443
    //
444
    // URL resource = participant.getDescription();
445
    // if( resource!=null ) {
446
    // page = this.getStringFromUrl(resource);
447
    // }
448
    //
449
    // if( page != null ) {
450
    // String[] s = fileString.split("</body>");
451
    // String result = "";
452
    // for(int i=0;i<s.length-1;i++){
453
    // result = result + s[i];
454
    // if(i<s.length-2){
455
    // result = result + "</body>";
456
    // }
457
    // }
458
    // }
459
    //
460
    // //Si tiene contribuciones
461
    // List contributions = participant.getContributions();
462
    // if(contributions.size()>0){
463
    // String table = "\t<div style=\"padding-top:5px\">\n" +
464
    // "\t\t<div style=\"background-color: white;padding-top: 5px\">\n" +
465
    // "\t\t\t<center><h3>Contribuciones realizadas</h3></center>\n" +
466
    // "\t\t\t<br>\n" +
467
    // "\t\t\t<table width=\"100%\" border=\"1\">\n" +
468
    // "\t\t\t\t<tr>\n" +
469
    // "\t\t\t\t\t<td valign=\"top\" align=\"center\">Nombre</td>\n" +
470
    // "\t\t\t\t\t<td valign=\"top\" align=\"center\">Descripcion</td>\n" +
471
    // "\t\t\t\t\t<td valign=\"top\" colspan=\"2\" align=\"center\">Periodo</td>\n"
472
    // +
473
    // "\t\t\t\t</tr>\n";
474
    // Iterator it = contributions.iterator();
475
    // SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
476
    // while(it.hasNext()){
477
    // AboutContribution ap = (AboutContribution)it.next();
478
    // String cont = "";
479
    // if(ap.getDescription()!=null){
480
    // cont=ap.getDescription();
481
    // }
482
    //
483
    // table = table +
484
    // "\t\t\t\t<tr>\n" +
485
    // "\t\t\t\t\t <td valign=\"top\">"+ap.getTitle()+"</td>\n" +
486
    // "\t\t\t\t\t <td valign=\"top\">"+cont+"</td>\n" +
487
    // "\t\t\t\t\t  <td valign=\"top\">"+formatter.format(ap.getBegin().getTime())+"</td>\n"
488
    // +
489
    // "\t\t\t\t\t  <td valign=\"top\">"+formatter.format(ap.getEnd().getTime())+"</td>\n"
490
    // +
491
    // "\t\t\t\t</tr>\n" ;
492
    // }
493
    // table = table + "\t\t\t</table>\n\t\t</div>\n\t</div>\n";
494
    // result = result + table+"</body>\n";
495
    // }
496
    //
497
    //
498
    // result = result+s[s.length-1];
499
    // return result;
500
    // }
501

    
502
}