Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.installer / org.gvsig.installer.swing / org.gvsig.installer.swing.impl / src / main / java / org / gvsig / installer / swing / impl / DefaultSwingInstallerManager.java @ 43126

History | View | Annotate | Download (15.9 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
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 3
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
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
/*
25
 * AUTHORS (In addition to CIT):
26
 * 2010 {Prodevelop}   {Task}
27
 */
28

    
29
package org.gvsig.installer.swing.impl;
30

    
31
import java.io.BufferedReader;
32
import java.io.File;
33
import java.io.FileInputStream;
34
import java.io.FileNotFoundException;
35
import java.io.IOException;
36
import java.io.InputStream;
37
import java.io.InputStreamReader;
38
import java.net.MalformedURLException;
39
import java.net.URL;
40
import java.util.ArrayList;
41
import java.util.Collection;
42
import java.util.Iterator;
43
import java.util.List;
44
import java.util.ListIterator;
45

    
46
import org.gvsig.i18n.Messages;
47
import org.gvsig.installer.lib.api.Dependencies;
48
import org.gvsig.installer.lib.api.InstallerLocator;
49
import org.gvsig.installer.lib.api.InstallerManager;
50
import org.gvsig.installer.lib.api.PackageInfo;
51
import org.gvsig.installer.lib.api.Version;
52
import org.gvsig.installer.swing.api.JProgressPanel;
53
import org.gvsig.installer.swing.api.SwingInstallerManager;
54
import org.gvsig.installer.swing.api.creation.JOutputPanel;
55
import org.gvsig.installer.swing.api.creation.JPackageInfoPanel;
56
import org.gvsig.installer.swing.api.creation.MakePluginPackageWizard;
57
import org.gvsig.installer.swing.api.creation.MakePluginPackageWizardException;
58
import org.gvsig.installer.swing.api.execution.InstallPackageWizardException;
59
import org.gvsig.installer.swing.api.execution.InstallWizardPanel;
60
import org.gvsig.installer.swing.api.execution.JShowPackageStatusAndAskContinuePanel;
61
import org.gvsig.installer.swing.api.execution.JShowPackagesAndAskContinuePanel;
62
import org.gvsig.installer.swing.api.execution.JShowRequiredPackagesAndAskContinuePanel;
63
import org.gvsig.installer.swing.api.execution.JShowUnresolvedDependenciesAndAskContinuePanel;
64
import org.gvsig.installer.swing.api.execution.PackageFilter;
65
import org.gvsig.installer.swing.api.packagebuilder.PackageBuildder;
66
import org.gvsig.installer.swing.api.wizard.InstallerWizardPanel;
67
import org.gvsig.installer.swing.impl.creation.panel.DefaultOutputPanel;
68
import org.gvsig.installer.swing.impl.creation.panel.DefaultPackageInfoPanel;
69
import org.gvsig.installer.swing.impl.execution.panel.filters.TypeFilter;
70
import org.gvsig.installer.swing.impl.packagebuilder.BasePackageWizard;
71
import org.gvsig.installer.swing.impl.panel.DefaultProgressPanel;
72
import org.gvsig.tools.ToolsLocator;
73
import org.gvsig.tools.extensionpoint.ExtensionPoint;
74
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
75
import org.slf4j.Logger;
76
import org.slf4j.LoggerFactory;
77

    
78
/**
79
 * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
80
 */
81
public class DefaultSwingInstallerManager implements SwingInstallerManager {
82

    
83
        public class DefaultUrlAndLabel implements UrlAndLabel {
84

    
85
                private URL url;
86
                private String label;
87

    
88
                public DefaultUrlAndLabel(URL url, String label) {
89
                        this.url = url;
90
                        this.label = label;
91
                }
92
                public URL getURL() {
93
                        return this.url;
94
                }
95

    
96
                public String getLabel() {
97
                        return this.label;
98
                }
99
                
100
                public void setLabel(String label) {
101
                        this.label = label;
102
                }
103
                @Override
104
                public String toString() {
105
                        if( label == null ) {
106
                                return this.url.toString();
107
                        }
108
                        return this.label + " - " + this.url.toString();
109
                }
110
        }
111

    
112
        /**
113
         * 
114
         * This class is for compatibility with deprecated method 
115
         * List<URL> getDefaultDownloadURLs()
116
         *  
117
         * @author jjdelcerro
118
         *
119
         */
120
        public class DefaultDownloadURLsIterator<URL> implements ListIterator<URL> {
121
                private List<UrlAndLabel> urlAndLabels;
122
                private ListIterator<UrlAndLabel> it;
123
                
124
                DefaultDownloadURLsIterator(List<UrlAndLabel> urlAndLabels, int index) {
125
                        this.urlAndLabels = urlAndLabels;
126
                        this.it = this.urlAndLabels.listIterator(index);
127
                }
128

    
129
                DefaultDownloadURLsIterator(List<UrlAndLabel> urlAndLabels) {
130
                        this.urlAndLabels = urlAndLabels;
131
                        this.it = this.urlAndLabels.listIterator();
132
                }
133

    
134
                public boolean hasNext() {
135
                        return this.it.hasNext();
136
                }
137

    
138
                public URL next() {
139
                        UrlAndLabel value = this.it.next();
140
                        if( value == null ) {
141
                                return null;
142
                        }
143
                        return (URL) value.getURL();
144
                }
145

    
146
                public boolean hasPrevious() {
147
                        return it.hasPrevious();
148
                }
149

    
150
                public int nextIndex() {
151
                        return it.nextIndex();
152
                }
153

    
154
                public URL previous() {
155
                        UrlAndLabel value = this.it.previous();
156
                        if( value == null ) {
157
                                return null;
158
                        }
159
                        return (URL) value.getURL();
160
                }
161

    
162
                public int previousIndex() {
163
                        return it.previousIndex();
164
                }
165

    
166
                public void remove() {
167
                        throw new UnsupportedOperationException("This is read-only");
168
                }
169

    
170
                public void add(Object arg0) {
171
                        throw new UnsupportedOperationException("This is read-only");
172
                }
173

    
174
                public void set(Object arg0) {
175
                        throw new UnsupportedOperationException("This is read-only");
176
                }
177
        }
178
        
179
        /**
180
         * 
181
         * This class is for compatibility with deprecated method 
182
         * List<URL> getDefaultDownloadURLs()
183
         *  
184
         * @author jjdelcerro
185
         *
186
         */
187
        public class DefaultDownloadURLs<URL> implements List<URL> {
188

    
189
                private List<UrlAndLabel> urlAndLabels;
190

    
191
                DefaultDownloadURLs(List<UrlAndLabel> urlAndLabels) {
192
                        this.urlAndLabels = urlAndLabels;
193
                }
194
                
195
                public boolean add(Object url) {
196
                        throw new UnsupportedOperationException("This is a read-only list");
197
                }
198

    
199
                public void add(int arg0, Object url) {
200
                        throw new UnsupportedOperationException("This is a read-only list");
201
                }
202

    
203
                public boolean addAll(Collection arg0) {
204
                        throw new UnsupportedOperationException("This is a read-only list");
205
                }
206

    
207
                public boolean addAll(int arg0, Collection arg1) {
208
                        throw new UnsupportedOperationException("This is a read-only list");
209
                }
210

    
211
                public void clear() {
212
                        throw new UnsupportedOperationException("This is a read-only list");
213
                }
214

    
215
                public boolean contains(Object arg0) {
216
                        Iterator<UrlAndLabel> it = this.urlAndLabels.iterator();
217
                        while( it.hasNext() ) {
218
                                UrlAndLabel x = it.next();
219
                                if( x.getURL().equals(arg0) ) {
220
                                        return true;
221
                                }
222
                        }
223
                        return false;
224
                }
225

    
226
                public boolean containsAll(Collection arg0) {
227
                        throw new UnsupportedOperationException("This method is not supported");
228
                }
229

    
230
                public URL get(int arg0) {
231
                        return (URL) this.urlAndLabels.get(arg0).getURL();
232
                }
233

    
234
                public int indexOf(Object arg0) {
235
                        for( int i=0; i<this.urlAndLabels.size(); i++) {
236
                                if( this.urlAndLabels.get(i).getURL().equals(arg0) ) {
237
                                        return i;
238
                                }
239
                        }
240
                        return -1;
241
                }
242

    
243
                public boolean isEmpty() {
244
                        return this.urlAndLabels.isEmpty();
245
                }
246

    
247
                public Iterator iterator() {
248
                        return new DefaultDownloadURLsIterator(this.urlAndLabels);
249
                }
250

    
251
                public int lastIndexOf(Object arg0) {
252
                        for( int i=this.urlAndLabels.size()-1; i>=0; i--) {
253
                                if( this.urlAndLabels.get(i).getURL().equals(arg0) ) {
254
                                        return i;
255
                                }
256
                        }
257
                        return -1;
258
                }
259

    
260
                public ListIterator listIterator() {
261
                        return new DefaultDownloadURLsIterator(this.urlAndLabels);
262
                }
263

    
264
                public ListIterator listIterator(int arg0) {
265
                        return new DefaultDownloadURLsIterator(this.urlAndLabels, arg0);
266
                }
267

    
268
                public boolean remove(Object arg0) {
269
                        throw new UnsupportedOperationException("This is a read-only list");
270
                }
271

    
272
                public URL remove(int arg0) {
273
                        throw new UnsupportedOperationException("This is a read-only list");
274
                }
275

    
276
                public boolean removeAll(Collection arg0) {
277
                        throw new UnsupportedOperationException("This is a read-only list");
278
                }
279

    
280
                public boolean retainAll(Collection arg0) {
281
                        throw new UnsupportedOperationException("This is a read-only list");
282
                }
283

    
284
                public Object set(int arg0, Object arg1) {
285
                        throw new UnsupportedOperationException("This is a read-only list");
286
                }
287

    
288
                public int size() {
289
                        return this.urlAndLabels.size();
290
                }
291

    
292
                public List subList(int arg0, int arg1) {
293
                        throw new UnsupportedOperationException("This method is not supported");
294
                }
295

    
296
                public Object[] toArray() {
297
                        throw new UnsupportedOperationException("This method is not supported");
298
                }
299

    
300
                public Object[] toArray(Object[] arg0) {
301
                        throw new UnsupportedOperationException("This method is not supported");
302
                }
303
                
304
        }
305
        
306
        private static Logger logger = LoggerFactory
307
                        .getLogger(DefaultSwingInstallerManager.class);
308

    
309
        private static final String SWING_INSTALLER_MANAGER_EXTENSION_POINT = "SwingInstallerManagerExtensionPoint";
310
        private static final String CREATE_INSTALLER_WIZARD_NAME = "CreateInstallerWizard";
311
        private static final String EXECUTE_INSTALLER_WIZARD_NAME = "ExecuteInstallerWizard";
312
        private ExtensionPointManager extensionPoints = ToolsLocator
313
                        .getExtensionPointManager();
314

    
315
        private String applicationVersion = "1.0.0";
316
        private List<UrlAndLabel> defaultDownloadURLs = new ArrayList<UrlAndLabel>();
317

    
318
        public String getText(String key) {
319
                return Messages.translate(key);
320
        }
321

    
322
        public void registerMakePluginPackageWizardInstallerCreationWizard(
323
                        Class<? extends MakePluginPackageWizard> clazz) {
324
                ExtensionPoint extensionPoint = extensionPoints.add(
325
                                SWING_INSTALLER_MANAGER_EXTENSION_POINT, "");
326
                extensionPoint.append(CREATE_INSTALLER_WIZARD_NAME, "", clazz);
327
        }
328

    
329
        public void registerInstallPackageWizard(
330
                        Class<? extends InstallerWizardPanel> clazz) {
331
                ExtensionPoint extensionPoint = extensionPoints.add(
332
                                SWING_INSTALLER_MANAGER_EXTENSION_POINT, "");
333
                extensionPoint.append(EXECUTE_INSTALLER_WIZARD_NAME, "", clazz);
334
        }
335

    
336
        public String getApplicationVersion() {
337
                return applicationVersion;
338
        }
339

    
340
        public void setApplicationVersion(String gvSIGVersion) {
341
                this.applicationVersion = gvSIGVersion;
342
        }
343

    
344
        public URL getDefaultDownloadURL() {
345
                if (defaultDownloadURLs.size() < 1) {
346
                        return null;
347
                }
348
                return defaultDownloadURLs.get(0).getURL();
349
        }
350

    
351
        public List<URL> getDefaultDownloadURLs() {
352
                return new DefaultDownloadURLs(this.defaultDownloadURLs);
353
        }
354

    
355
    public List<UrlAndLabel> getDefaultDownloadUrlAndLabels() {
356
            return this.defaultDownloadURLs;
357
    }
358
    
359
        public void setDefaultDownloadURL(String defaultDownloadURLs) {
360
                String[] urls = defaultDownloadURLs.split(";");
361
                for (int i = 0; i < urls.length; i++) {
362
                        try {
363
                                this.addDefaultDownloadURL(urls[i]);
364
                        } catch (MalformedURLException e) {
365
                                logger.info("Malformed URL ("+urls[i]+").", e);
366
                        }
367
                }
368
        }
369

    
370
        public void setDefaultDownloadURL(URL defaultDownloadURL) {
371
                this.defaultDownloadURLs.clear();
372
                this.addDefaultDownloadURL(defaultDownloadURL);
373
        }
374

    
375
        public void setDefaultDownloadURL(File defaultDownloadURLs) {
376
                if( defaultDownloadURLs == null || !defaultDownloadURLs.exists() ) {
377
                    return;
378
                }
379
                InputStream is;
380
                try {
381
                        is = new FileInputStream(defaultDownloadURLs);
382
                } catch (FileNotFoundException e1) {
383
                        logger.warn("Can't open the file " + defaultDownloadURLs.getName(), e1);
384
                        return;
385
                }
386
                BufferedReader in = new BufferedReader(new InputStreamReader(is));
387
                String line = null;
388
                try {
389
                        for (line = in.readLine(); line != null; line = in.readLine()) {
390
                                try {
391
                                        this.addDefaultDownloadURL(line);
392
                                } catch (MalformedURLException e) {
393
                                        logger.warn(
394
                                                        "Error creating the default packages download URL pointing to "
395
                                                                        + line, e);
396
                                }
397
                        }
398
                } catch (IOException e) {
399
                        logger.warn("Error reading the file "
400
                                        + defaultDownloadURLs.getName(), e);
401
                }
402
        }
403

    
404
        public void addDefaultDownloadURL(URL url) {
405
                addDefaultDownloadURL(url,null);
406
        }
407
        
408
        public void addDefaultDownloadURL(URL url, String label) {
409
                Iterator<UrlAndLabel> it = this.defaultDownloadURLs.iterator();
410
                while( it.hasNext() ) {
411
                        DefaultUrlAndLabel value = (DefaultUrlAndLabel) it.next();
412
                        // Hacket by jbadia ;)
413
                        if( value.getURL().toString().equals(url.toString()) ) {
414
                                if( value.getLabel() == null ) {
415
                                        value.setLabel(label);
416
                                }
417
                                // Already exists the url, don't duplicate.
418
                                return;
419
                        }
420
                }
421
                this.defaultDownloadURLs.add( new DefaultUrlAndLabel(url, label));
422
        }
423
        
424
        public void addDefaultDownloadURL(String url) throws MalformedURLException {
425
                String label = null;
426
                
427
                if( url.startsWith("#") ) {
428
                        return;
429
                }
430
                Version version = getInstallerManager().createVersion();
431
                String versionFormat = version.getMajor() + "." + version.getMinor()
432
                                + "." + version.getRevision();
433
                int n = url.indexOf("##");
434
                if( n>0 ) {
435
                        label = url.substring(n+2);
436
                        url = url.substring(0, n-1);
437
                }
438
                url = url.replace("$version", versionFormat);
439
                url = url.replace("<%Version%>", versionFormat);
440
                url = url.replace("$build", Integer.toString(version.getBuild()));
441
                url = url.replace("<%Build%>", Integer.toString(version.getBuild()));
442
                addDefaultDownloadURL(new URL(url), label);
443
        }
444

    
445
        public InstallerManager getInstallerManager() {
446
                return InstallerLocator.getInstallerManager();
447
        }
448

    
449
        public JShowPackageStatusAndAskContinuePanel createJShowPackageStatusAndAskContinuePanel(
450
                        List<PackageInfo> packages, String message) {
451
                return new DefaultJShowPackageStatusAndAskContinuePanel(this, packages,
452
                                message);
453
        }
454

    
455
        public JShowPackagesAndAskContinuePanel createJShowTroubledPackagesAndAskContinuePanel(
456
                        List<PackageInfo> packages, String message) {
457
                return new DefaultJShowTroubledPackagesAndAskContinuePanel(this, packages,
458
                                message);
459
        }
460
        
461
        public JShowRequiredPackagesAndAskContinuePanel createJShowRequiredPackagesAndAskContinuePanel(
462
                        List<PackageInfo> packages, String message) {
463
                return new DefaultJShowRequiredPackagesAndAskContinuePanel(this,
464
                                packages, message);
465
        }
466

    
467
        public JShowUnresolvedDependenciesAndAskContinuePanel createJShowUnresolvedDependenciesAndAskContinuePanel(
468
                        Dependencies dependencies, String message) {
469
                return new DefaultJShowUnresolvedDependenciesAndAskContinuePanel(this,
470
                                dependencies, message);
471
        }
472

    
473
        public JPackageInfoPanel createPackageInfoPanel() {
474
                return new DefaultPackageInfoPanel();
475
        }
476

    
477
        public JPackageInfoPanel createPackageInfoPanel(String packageType) {
478
                return new DefaultPackageInfoPanel(packageType);
479
        }
480

    
481
        public JOutputPanel createOutputPanel() {
482
                return new DefaultOutputPanel();
483
        }
484

    
485
        public JProgressPanel createProgressPanel() {
486
                return new DefaultProgressPanel();
487
        }
488

    
489
        public InstallWizardPanel createInstallPackageWizard(
490
                        File applicationDirectory, File installFolder)
491
                        throws InstallPackageWizardException {
492
                ExtensionPoint ep = extensionPoints
493
                                .add(SWING_INSTALLER_MANAGER_EXTENSION_POINT);
494
                try {
495
                        Object[] args = new Object[2];
496
                        args[0] = applicationDirectory;
497
                        args[1] = installFolder;
498
                        return (InstallWizardPanel) ep.create(
499
                                        EXECUTE_INSTALLER_WIZARD_NAME, args);
500

    
501
                } catch (Exception e) {
502
                        throw new InstallPackageWizardException(
503
                                        "Error creating the wizard", e);
504
                }
505
        }
506

    
507
        @Override
508
        public MakePluginPackageWizard createMakePluginPackageWizard(
509
                        File applicationDirectory, File installFolder)
510
                        throws MakePluginPackageWizardException {
511
                ExtensionPoint ep = extensionPoints
512
                                .add(SWING_INSTALLER_MANAGER_EXTENSION_POINT);
513
                try {
514
                        Object[] args = new Object[2];
515
                        args[0] = applicationDirectory;
516
                        args[1] = installFolder;
517
                        return (MakePluginPackageWizard) ep.create(
518
                                        CREATE_INSTALLER_WIZARD_NAME, args);
519
                } catch (Exception e) {
520
                        throw new MakePluginPackageWizardException(
521
                                        "Error creating the wizard", e);
522
                }
523
        }
524

    
525
        @Override
526
        public PackageBuildder createPackagerPanel(String packageType, File selectionFolder, File outputFolder) {
527
            PackageBuildder packager = new BasePackageWizard(packageType, selectionFolder, outputFolder);
528
            return packager;
529
        }
530
        
531
        public PackageFilter createPackageTypeFilter(String type) {
532
            return new TypeFilter(type);
533
        }
534
}