Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / extensions / org.gvsig.installer / org.gvsig.installer.swing / org.gvsig.installer.swing.impl / src / main / java / org / gvsig / installer / swing / impl / execution / panel / model / PackagesTableModel.java @ 37601

History | View | Annotate | Download (14.9 KB)

1 37538 nfrancisco
/* 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
23
/*
24
 * AUTHORS (In addition to CIT):
25
 * 2010 {Prodevelop}   {Task}
26
 */
27
28 37541 nfrancisco
package org.gvsig.installer.swing.impl.execution.panel.model;
29 37538 nfrancisco
30
import java.io.File;
31
import java.net.URL;
32
import java.util.ArrayList;
33
import java.util.Arrays;
34
import java.util.Comparator;
35
import java.util.HashMap;
36
import java.util.List;
37
import java.util.Map;
38
39
import javax.swing.table.AbstractTableModel;
40
41
import org.gvsig.installer.lib.api.InstallerLocator;
42
import org.gvsig.installer.lib.api.InstallerManager;
43
import org.gvsig.installer.lib.api.PackageInfo;
44
import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
45
import org.gvsig.installer.lib.api.execution.InstallPackageService;
46
import org.gvsig.installer.swing.api.SwingInstallerManager;
47 37585 nfrancisco
import org.gvsig.installer.swing.impl.execution.panel.filters.NameDescriptionOrCodeFilter;
48 37541 nfrancisco
import org.gvsig.installer.swing.impl.execution.panel.filters.PackageFilter;
49 37538 nfrancisco
50
public class PackagesTableModel extends AbstractTableModel {
51
52 37584 nfrancisco
        private static final long serialVersionUID = -454014676003979512L;
53 37538 nfrancisco
54 37584 nfrancisco
        public enum PackageStatus {
55
                INSTALLED, NOT_INSTALLED, TO_REINSTALL, TO_INSTALL, INSTALLED_NOT_INSTALLABLE;
56
        }
57 37538 nfrancisco
58 37584 nfrancisco
        public enum PackageOfficialRecommended {
59
                OFFICIAL_NOT_RECOMMENDED, OFFICIAL_RECOMMENDED, NOT_OFFICIAL_RECOMMENDED, NOT_OFFICIAL_NOT_RECOMMENDED
60
        }
61 37538 nfrancisco
62 37584 nfrancisco
        public enum PackageOsAndArchitecture {
63
                WINDOLS_32, WINDOLS_64, LINUX_32, LINUX_64, ALL, OTHER
64
        }
65 37538 nfrancisco
66 37584 nfrancisco
        private TablePackageInfo[] installerInfos = null;
67 37538 nfrancisco
68 37584 nfrancisco
        private final String[] columnNames;
69 37538 nfrancisco
70 37584 nfrancisco
        private InstallerManager installerManager = InstallerLocator
71
                        .getInstallerManager();
72
        private InstallPackageService installerExecutionService;
73 37538 nfrancisco
74 37584 nfrancisco
        boolean isOfficial;
75
        private File pluginsFolder;
76 37585 nfrancisco
        private NameDescriptionOrCodeFilter packageFastFilter = null;
77 37584 nfrancisco
        private PackageFilter packageFilter = null;
78 37538 nfrancisco
79 37584 nfrancisco
        public PackagesTableModel(SwingInstallerManager swingInstallerManager,
80
                        InstallPackageService installerExecutionService,
81
                        boolean isOfficial, File pluginsFolder) {
82 37538 nfrancisco
83 37584 nfrancisco
                this.installerExecutionService = installerExecutionService;
84
                this.isOfficial = isOfficial;
85
                this.pluginsFolder = pluginsFolder;
86
                Map<String, TablePackageInfo> infos = getDefaultPackages();
87 37538 nfrancisco
88 37584 nfrancisco
                installerInfos = infos.values().toArray(
89
                                new TablePackageInfo[infos.size()]);
90
                sortInstallerInfos();
91 37538 nfrancisco
92 37584 nfrancisco
                columnNames = new String[] {
93
                                "", // Check column
94 37585 nfrancisco
                                "", "", swingInstallerManager.getText("_name"),
95
                                swingInstallerManager.getText("_version"),
96
                                swingInstallerManager.getText("_type") };
97 37538 nfrancisco
98 37584 nfrancisco
        }
99 37538 nfrancisco
100 37584 nfrancisco
        private void sortInstallerInfos() {
101
                Arrays.sort(this.installerInfos, new Comparator<TablePackageInfo>() {
102 37538 nfrancisco
103 37584 nfrancisco
                        public int compare(TablePackageInfo o1, TablePackageInfo o2) {
104
                                return o1.getPackageInfo().getName().compareToIgnoreCase(
105
                                                o2.getPackageInfo().getName());
106
                        }
107
                });
108
        }
109 37538 nfrancisco
110 37584 nfrancisco
        private Map<String, TablePackageInfo> getDefaultPackages() {
111 37538 nfrancisco
112 37584 nfrancisco
                List<String> defaultIDs = installerExecutionService
113
                                .getDefaultSelectedPackagesIDs();
114 37538 nfrancisco
115 37584 nfrancisco
                Map<String, TablePackageInfo> infos = new HashMap<String, TablePackageInfo>();
116
                // Add installable package infos
117
                for (int i = 0; i < installerExecutionService.getPackageCount(); i++) {
118
                        PackageInfo installerInfo = installerExecutionService
119
                                        .getPackageInfo(i);
120 37587 nfrancisco
                        TablePackageInfo info = new TablePackageInfo(installerInfo, false,
121
                                        true);
122
                        if (defaultIDs != null) {
123
                                for (int j = 0; j < defaultIDs.size(); j++) {
124
                                        if (info.getPackageInfo().matchID(defaultIDs.get(j))) {
125
                                                if (info.getPackageInfo().getOperatingSystem().equals(
126
                                                                installerManager.getOperatingSystem())
127
                                                                || info.getPackageInfo().getOperatingSystem()
128
                                                                                .equals("all")) {
129
                                                        info.setDefault(true);
130
                                                        break;
131 37584 nfrancisco
                                                }
132 37538 nfrancisco
133 37587 nfrancisco
                                        }
134 37584 nfrancisco
                                }
135
                                infos.put(info.getID(), info);
136
                        }
137
                }
138
                // Add already installed package infos
139
                try {
140
                        PackageInfo[] installedPackages = installerManager
141
                                        .getInstalledPackages(pluginsFolder);
142 37538 nfrancisco
143 37584 nfrancisco
                        for (int i = 0; i < installedPackages.length; i++) {
144 37587 nfrancisco
                                TablePackageInfo info = new TablePackageInfo(
145
                                                installedPackages[i], true, false);
146
                                TablePackageInfo x = infos.get(info.getID());
147
                                if (x == null) {
148
                                        infos.put(info.getID(), info);
149
                                } else {
150
                                        x.setInstalled(true);
151 37584 nfrancisco
                                }
152
                        }
153
                } catch (MakePluginPackageServiceException e) {
154
                        throw new RuntimeException(e);
155
                }
156 37538 nfrancisco
157 37584 nfrancisco
                return infos;
158
        }
159 37538 nfrancisco
160 37584 nfrancisco
        // get filtered packages
161
        private Map<String, TablePackageInfo> getFilteredPackages(
162
                        Map<String, TablePackageInfo> packageInfos) {
163 37538 nfrancisco
164 37584 nfrancisco
                Map<String, TablePackageInfo> infos = new HashMap<String, TablePackageInfo>();
165 37538 nfrancisco
166 37584 nfrancisco
                TablePackageInfo[] packs = packageInfos.values().toArray(
167
                                new TablePackageInfo[infos.size()]);
168 37538 nfrancisco
169 37584 nfrancisco
                for (int i = 0; i < packs.length; i++) {
170
                        PackageInfo installerInfo = packs[i].getPackageInfo();
171 37538 nfrancisco
172 37584 nfrancisco
                        if (packageFilter.match(installerInfo)) {
173
                                TablePackageInfo info = packs[i];
174
                                infos.put(installerInfo.getID(), info);
175
                        }
176
                }
177
                return infos;
178
        }
179 37538 nfrancisco
180 37584 nfrancisco
        // get fast filtered packages (by name or description)
181
        private Map<String, TablePackageInfo> getFastFilteredPackages(
182
                        Map<String, TablePackageInfo> packageInfos) {
183 37538 nfrancisco
184 37584 nfrancisco
                Map<String, TablePackageInfo> infos = new HashMap<String, TablePackageInfo>();
185 37538 nfrancisco
186 37584 nfrancisco
                TablePackageInfo[] packs = packageInfos.values().toArray(
187
                                new TablePackageInfo[infos.size()]);
188 37538 nfrancisco
189 37584 nfrancisco
                for (int i = 0; i < packs.length; i++) {
190
                        PackageInfo installerInfo = packs[i].getPackageInfo();
191 37538 nfrancisco
192 37584 nfrancisco
                        if (packageFastFilter.match(installerInfo)) {
193
                                TablePackageInfo info = packs[i];
194
                                infos.put(installerInfo.getID(), info);
195
                        }
196
                }
197
                return infos;
198
        }
199 37538 nfrancisco
200 37584 nfrancisco
        public void updatePackages() {
201 37538 nfrancisco
202 37584 nfrancisco
                Map<String, TablePackageInfo> infos = getDefaultPackages();
203 37538 nfrancisco
204 37584 nfrancisco
                // check if there is a filter set (category, type, etc)
205
                if (isPackageFilterSet()) {
206
                        infos = getFilteredPackages(infos);
207
                }
208 37538 nfrancisco
209 37584 nfrancisco
                // check if there is any filter set (fastFilter)
210
                if (isFastFilterSet()) {
211
                        infos = getFastFilteredPackages(infos);
212
                }
213 37538 nfrancisco
214 37584 nfrancisco
                for (int i = 0; i < installerInfos.length; i++) {
215
                        TablePackageInfo installerInfo = infos.get(installerInfos[i]
216
                                        .getID());
217
                        if (installerInfo != null) {
218
                                installerInfo.setSelected(installerInfos[i].isSelected());
219
                        }
220
                }
221 37538 nfrancisco
222 37584 nfrancisco
                installerInfos = infos.values().toArray(
223
                                new TablePackageInfo[infos.size()]);
224
                sortInstallerInfos();
225 37538 nfrancisco
226 37584 nfrancisco
                List<String> idList = installerExecutionService
227
                                .getDefaultSelectedPackagesIDs();
228 37538 nfrancisco
229 37584 nfrancisco
                if (idList != null) {
230
                        for (int i = 0; i < installerInfos.length; i++) {
231
                                for (int j = 0; j < idList.size(); j++) {
232
                                        if (installerInfos[i].getPackageInfo().matchID(
233
                                                        idList.get(j))) {
234
                                                if (installerInfos[i].getPackageInfo()
235
                                                                .getOperatingSystem().equals(
236
                                                                                installerManager.getOperatingSystem())
237
                                                                || installerInfos[i].getPackageInfo()
238
                                                                                .getOperatingSystem().equals("all")) {
239
                                                        installerInfos[i].setDefault(true);
240
                                                }
241
                                        }
242
                                }
243
                        }
244
                }
245
        }
246 37538 nfrancisco
247 37584 nfrancisco
        // selects default packages
248
        public void selectDefaultPackages() {
249
                for (int i = 0; i < installerInfos.length; i++) {
250
                        if (installerInfos[i].isDefault()) {
251
                                installerInfos[i].setSelected(true);
252
                        } else {
253
                                installerInfos[i].setSelected(false);
254
                        }
255
                }
256
        }
257 37538 nfrancisco
258 37584 nfrancisco
        public void selectPackage(PackageInfo pkg) {
259
                for (int i = 0; i < installerInfos.length; i++) {
260
                        if (pkg.equals(installerInfos[i].getPackageInfo())) {
261
                                installerInfos[i].setSelected(true);
262
                                return;
263
                        }
264
                }
265
        }
266 37538 nfrancisco
267 37593 nfrancisco
        @Override
268 37584 nfrancisco
        public Class<?> getColumnClass(int columnIndex) {
269
                switch (columnIndex) {
270
                case 0:
271
                        return PackageStatus.class;
272
                case 1:
273
                        return PackageOfficialRecommended.class;
274
                case 2:
275
                        return PackageOsAndArchitecture.class;
276
                default:
277
                        return String.class;
278
                }
279
        }
280 37538 nfrancisco
281 37584 nfrancisco
        public int getColumnCount() {
282
                return columnNames.length;
283
        }
284 37538 nfrancisco
285 37593 nfrancisco
        @Override
286 37584 nfrancisco
        public String getColumnName(int columnIndex) {
287
                return columnIndex >= columnNames.length ? ""
288
                                : columnNames[columnIndex];
289
        }
290 37538 nfrancisco
291 37584 nfrancisco
        public int getRowCount() {
292
                return installerInfos.length;
293
        }
294 37538 nfrancisco
295 37584 nfrancisco
        public Object getValueAt(int rowIndex, int columnIndex) {
296
                TablePackageInfo tableInfo = installerInfos[rowIndex];
297
                PackageInfo installerInfo = tableInfo.getPackageInfo();
298 37538 nfrancisco
299 37584 nfrancisco
                switch (columnIndex) {
300
                case 0:
301
                        PackageStatus installStatus = checkStatus(rowIndex);
302
                        return installStatus;
303
                case 1:
304
                        PackageOfficialRecommended officialRecommended = checkOfficialRecommended(rowIndex);
305
                        return officialRecommended;
306
                case 2:
307
                        PackageOsAndArchitecture packageSystem = checkPackageSystem(rowIndex);
308
                        return packageSystem;
309
                case 3:
310
                        return installerInfo.getName();
311
                case 4:
312
                        return installerInfo.getVersion();
313
                case 5:
314
                        return installerInfo.getType();
315
                default:
316
                        return "";
317 37538 nfrancisco
318 37584 nfrancisco
                }
319
        }
320 37538 nfrancisco
321 37584 nfrancisco
        /**
322
         * @param rowIndex
323
         * @return
324
         */
325
        private PackageOsAndArchitecture checkPackageSystem(int rowIndex) {
326
                TablePackageInfo tableInfo = installerInfos[rowIndex];
327
                PackageInfo installerInfo = tableInfo.getPackageInfo();
328
                PackageOsAndArchitecture oSArch;
329 37538 nfrancisco
330 37584 nfrancisco
                if (installerInfo.getOperatingSystem().equals(
331
                                installerInfo.getArchitecture())) {
332
                        oSArch = PackageOsAndArchitecture.ALL;
333
                } else if ((installerInfo.getOperatingSystem().equals("lin"))) {
334
                        if (installerInfo.getArchitecture().equals("x86")) {
335
                                oSArch = PackageOsAndArchitecture.LINUX_32;
336
                        } else {
337
                                oSArch = PackageOsAndArchitecture.LINUX_64;
338
                        }
339
                } else if ((installerInfo.getOperatingSystem().equals("win"))) {
340
                        if (installerInfo.getArchitecture().equals("x86")) {
341
                                oSArch = PackageOsAndArchitecture.WINDOLS_32;
342
                        } else {
343
                                oSArch = PackageOsAndArchitecture.WINDOLS_64;
344
                        }
345
                } else {
346
                        oSArch = PackageOsAndArchitecture.OTHER;
347
                }
348
                return oSArch;
349
        }
350 37538 nfrancisco
351 37584 nfrancisco
        /**
352
         * @return
353
         */
354
        private PackageStatus checkStatus(int rowIndex) {
355
                TablePackageInfo tableInfo = installerInfos[rowIndex];
356 37538 nfrancisco
357 37584 nfrancisco
                if (tableInfo.isInstalled()) {
358
                        if (tableInfo.isInstallable()) {
359
                                if (tableInfo.isSelected()) {
360
                                        return PackageStatus.TO_REINSTALL;
361
                                } else {
362
                                        return PackageStatus.INSTALLED;
363
                                }
364
                        } else {
365
                                return PackageStatus.INSTALLED_NOT_INSTALLABLE;
366
                        }
367 37538 nfrancisco
368 37584 nfrancisco
                } else {
369
                        if (tableInfo.isSelected()) {
370
                                return PackageStatus.TO_INSTALL;
371
                        } else {
372
                                return PackageStatus.NOT_INSTALLED;
373
                        }
374
                }
375
        }
376 37538 nfrancisco
377 37584 nfrancisco
        private PackageOfficialRecommended checkOfficialRecommended(int rowIndex) {
378
                TablePackageInfo tableInfo = installerInfos[rowIndex];
379
                PackageInfo packageInfo = tableInfo.getPackageInfo();
380 37538 nfrancisco
381 37584 nfrancisco
                if (packageInfo.isOfficial()) {
382
                        if (installerInfos[rowIndex].isDefault()) {
383
                                return PackageOfficialRecommended.OFFICIAL_RECOMMENDED;
384
                        } else {
385
                                return PackageOfficialRecommended.OFFICIAL_NOT_RECOMMENDED;
386
                        }
387
                } else {
388
                        if (installerInfos[rowIndex].isDefault()) {
389
                                return PackageOfficialRecommended.NOT_OFFICIAL_RECOMMENDED;
390
                        } else {
391
                                return PackageOfficialRecommended.NOT_OFFICIAL_NOT_RECOMMENDED;
392
                        }
393
                }
394
        }
395 37538 nfrancisco
396 37584 nfrancisco
        public PackageInfo getPackageInfoAt(int rowIndex) {
397
                return installerInfos[rowIndex].getPackageInfo();
398
        }
399 37538 nfrancisco
400 37584 nfrancisco
        public String getDescriptionAt(int rowIndex) {
401
                return getPackageInfoAt(rowIndex).getDescription();
402
        }
403 37538 nfrancisco
404 37584 nfrancisco
        public URL getSourcesAt(int rowIndex) {
405
                return getPackageInfoAt(rowIndex).getSourcesURL();
406
        }
407 37601 nfrancisco
408
        public URL getOwnerUrlAt(int rowIndex) {
409
                return getPackageInfoAt(rowIndex).getOwnerURL();
410
        }
411 37538 nfrancisco
412 37584 nfrancisco
        public String getOwnerAt(int rowIndex) {
413
                return getPackageInfoAt(rowIndex).getOwner();
414
        }
415 37538 nfrancisco
416 37593 nfrancisco
        @Override
417 37584 nfrancisco
        public boolean isCellEditable(int rowIndex, int columnIndex) {
418
                return (columnIndex == 0) && installerInfos[rowIndex].isInstallable();
419
        }
420 37538 nfrancisco
421 37593 nfrancisco
        @Override
422 37584 nfrancisco
        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
423 37538 nfrancisco
424 37584 nfrancisco
                if (columnIndex == 0) {
425
                        PackageStatus status = (PackageStatus) aValue;
426
                        TablePackageInfo tableInfo = installerInfos[rowIndex];
427
                        switch (status) {
428
                        case INSTALLED:
429
                        case NOT_INSTALLED:
430
                                tableInfo.setSelected(false);
431
                                break;
432 37538 nfrancisco
433 37584 nfrancisco
                        case TO_REINSTALL:
434
                        case TO_INSTALL:
435
                                tableInfo.setSelected(true);
436
                                break;
437
                        }
438
                }
439
        }
440 37538 nfrancisco
441 37584 nfrancisco
        public List<PackageInfo> getPackagesToInstall() {
442
                List<PackageInfo> packageInfosToInstall = new ArrayList<PackageInfo>();
443
                for (int i = 0; i < installerInfos.length; i++) {
444
                        TablePackageInfo tableInfo = installerInfos[i];
445
                        if (tableInfo.isSelected()) {
446
                                packageInfosToInstall.add(tableInfo.getPackageInfo());
447
                        }
448
                }
449
                return packageInfosToInstall;
450
        }
451 37538 nfrancisco
452 37584 nfrancisco
        public boolean hasAnyPackageSelected() {
453
                for (int i = 0; i < installerInfos.length; i++) {
454
                        if (installerInfos[i].isSelected) {
455
                                return true;
456
                        }
457
                }
458
                return false;
459
        }
460 37538 nfrancisco
461 37584 nfrancisco
        public static final class TablePackageInfo {
462 37538 nfrancisco
463 37584 nfrancisco
                private final PackageInfo packageInfo;
464
                private boolean isInstalled;
465
                private final boolean isInstallable;
466
                private boolean isSelected;
467
                private boolean isDefault;
468 37538 nfrancisco
469 37584 nfrancisco
                public TablePackageInfo(PackageInfo packageInfo, boolean isInstalled,
470
                                boolean isInstallable) {
471
                        this(packageInfo, isInstalled, isInstallable, false, false);
472
                }
473 37538 nfrancisco
474 37584 nfrancisco
                public void setInstalled(boolean installed) {
475
                        this.isInstalled = installed;
476
                }
477 37538 nfrancisco
478 37584 nfrancisco
                public TablePackageInfo(PackageInfo packageInfo, boolean isInstalled,
479
                                boolean isInstallable, boolean isSelected, boolean isDefault) {
480
                        this.packageInfo = packageInfo;
481
                        this.isInstalled = isInstalled;
482
                        this.isInstallable = isInstallable;
483
                        this.isSelected = isSelected;
484
                        this.isDefault = isDefault;
485
                }
486 37538 nfrancisco
487 37584 nfrancisco
                public String getID() {
488
                        PackageInfo pkg = this.getPackageInfo();
489
                        return pkg.getID();
490
                }
491 37538 nfrancisco
492 37584 nfrancisco
                public PackageInfo getPackageInfo() {
493
                        return packageInfo;
494
                }
495 37538 nfrancisco
496 37584 nfrancisco
                public boolean isInstalled() {
497
                        return isInstalled;
498
                }
499 37538 nfrancisco
500 37584 nfrancisco
                public boolean isInstallable() {
501
                        return isInstallable;
502
                }
503 37538 nfrancisco
504 37584 nfrancisco
                public boolean isSelected() {
505
                        return isSelected;
506
                }
507 37538 nfrancisco
508 37584 nfrancisco
                public void setSelected(boolean isSelected) {
509
                        this.isSelected = isSelected;
510
                }
511 37538 nfrancisco
512 37584 nfrancisco
                public void setDefault(boolean isDefault) {
513
                        this.isDefault = isDefault;
514
                }
515 37538 nfrancisco
516 37584 nfrancisco
                public boolean isDefault() {
517
                        return isDefault;
518
                }
519 37550 nfrancisco
520 37584 nfrancisco
        }
521
522
        /**
523
         * Returns the TablePackageInfo located in the given row.
524
         *
525
         * @param row
526
         *            the TablePackageInfo located in the given row
527
         */
528
        public TablePackageInfo getPackageInfo(int row) {
529
                return installerInfos[row];
530
        }
531
532
        public void setFilter(PackageFilter filter) {
533
                this.packageFilter = filter;
534
        }
535
536 37585 nfrancisco
        public void setFilter(NameDescriptionOrCodeFilter filter) {
537 37584 nfrancisco
                this.packageFastFilter = filter;
538
        }
539
540
        private Boolean isFastFilterSet() {
541
                return this.packageFastFilter != null;
542
        }
543
544
        private Boolean isPackageFilterSet() {
545
                return this.packageFilter != null;
546
        }
547
548
        public PackageFilter getFilter() {
549
                return this.packageFastFilter;
550
        }
551
552
        public InstallPackageService getInstallPackageService() {
553
                return this.installerExecutionService;
554
        }
555 37538 nfrancisco
}