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 / model / PackagesTableModel.java @ 37513

History | View | Annotate | Download (10.4 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

    
23
/*
24
 * AUTHORS (In addition to CIT):
25
 * 2010 {Prodevelop}   {Task}
26
 */
27

    
28
package org.gvsig.installer.swing.impl.execution.model;
29

    
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

    
48
/**
49
 * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
50
 */
51
public class PackagesTableModel extends AbstractTableModel {
52

    
53
        private static final long serialVersionUID = 5953623592122163923L;
54
        private TablePackageInfo[] installerInfos = null;
55

    
56
        private final String[] columnNames;
57

    
58
        private InstallerManager installerManager = InstallerLocator
59
                        .getInstallerManager();
60

    
61
        boolean isOfficial;
62
        File pluginsFolder;
63
        InstallPackageService installerExecutionService;
64

    
65
        public PackagesTableModel(SwingInstallerManager swingInstallerManager,
66
                        InstallPackageService installerExecutionService,
67
                        boolean isOfficial, File pluginsFolder) {
68

    
69
                this.installerExecutionService = installerExecutionService;
70
                this.isOfficial = isOfficial;
71
                this.pluginsFolder = pluginsFolder;
72
                Map<String, TablePackageInfo> infos = getDefaultPackages();
73

    
74
                installerInfos = infos.values().toArray(
75
                                new TablePackageInfo[infos.size()]);
76
                sortInstallerInfos();
77

    
78
                columnNames = new String[] {
79
                                "", // Check column
80
                                swingInstallerManager.getText("name"),
81
                                swingInstallerManager.getText("type"),
82
                                swingInstallerManager.getText("status"),
83
                                swingInstallerManager.getText("version"),
84
                                swingInstallerManager.getText("build"),
85
                                swingInstallerManager.getText("operating_system"),
86
                                swingInstallerManager.getText("architecture"),
87
                                swingInstallerManager.getText("java_version"),
88
                                swingInstallerManager.getText("gvSIG_version") };
89

    
90
        }
91

    
92
        private void sortInstallerInfos() {
93
                Arrays.sort(this.installerInfos, new Comparator<TablePackageInfo>() {
94

    
95
                        public int compare(TablePackageInfo o1, TablePackageInfo o2) {
96
                                return o1.getPackageInfo().getName()
97
                                                .compareToIgnoreCase(o2.getPackageInfo().getName());
98
                        }
99
                });
100
        }
101

    
102
        private Map<String, TablePackageInfo> getDefaultPackages() {
103

    
104
                List<String> defaultIDs = installerExecutionService
105
                                .getDefaultSelectedPackagesIDs();
106

    
107
                Map<String, TablePackageInfo> infos = new HashMap<String, TablePackageInfo>();
108
                // Add installable package infos
109
                for (int i = 0; i < installerExecutionService.getPackageCount(); i++) {
110
                        PackageInfo installerInfo = installerExecutionService
111
                                        .getPackageInfo(i);
112
                        if (installerInfo.isOfficial() == isOfficial) {
113
                                TablePackageInfo info = new TablePackageInfo(installerInfo,
114
                                                false, true);
115
                                if (defaultIDs != null) {
116

    
117
                                        for (int j = 0; j < defaultIDs.size(); j++) {
118
                                                if (info.getPackageInfo().matchID(defaultIDs.get(j))) {
119
                                                        if (info.getPackageInfo()
120
                                                                        .getOperatingSystem()
121
                                                                        .equals(installerManager
122
                                                                                        .getOperatingSystem())
123
                                                                        || info.getPackageInfo()
124
                                                                                        .getOperatingSystem().equals("all")) {
125
                                                                info.setDefault(true);
126
                                                                break;
127
                                                        }
128

    
129
                                                }
130
                                        }
131

    
132
                                }
133
                                infos.put(info.getID(), info);
134
                        }
135
                }
136
                // Add already installed package infos
137
                try {
138
                        PackageInfo[] installedPackages = installerManager
139
                                        .getInstalledPackages(pluginsFolder);
140

    
141
                        for (int i = 0; i < installedPackages.length; i++) {
142
                                if (installedPackages[i].isOfficial() == isOfficial) {
143
                                        TablePackageInfo info = new TablePackageInfo(
144
                                                        installedPackages[i], true, false);
145
                                        TablePackageInfo x = infos.get(info.getID());
146
                                        if (x == null) {
147
                                                infos.put(info.getID(), info);
148
                                        } else {
149
                                                x.setInstalled(true);
150
                                        }
151
                                }
152
                        }
153
                } catch (MakePluginPackageServiceException e) {
154
                        throw new RuntimeException(e);
155
                }
156

    
157
                return infos;
158
        }
159

    
160
        // selects default packages
161
        public void selectDefaultPackages() {
162
                for (int i = 0; i < installerInfos.length; i++) {
163
                        if (installerInfos[i].isDefault()) {
164
                                installerInfos[i].setSelected(true);
165
                        } else {
166
                                installerInfos[i].setSelected(false);
167
                        }
168
                }
169
        }
170

    
171
        public void selectPackage(PackageInfo pkg) {
172
                for (int i = 0; i < installerInfos.length; i++) {
173
                        if (pkg.equals(installerInfos[i].getPackageInfo())) {
174
                                installerInfos[i].setSelected(true);
175
                                return;
176
                        }
177
                }
178
        }
179

    
180
        public void updatePackages() {
181

    
182
                Map<String, TablePackageInfo> infos = getDefaultPackages();
183
                for (int i = 0; i < installerInfos.length; i++) {
184
                        TablePackageInfo installerInfo = infos.get(installerInfos[i]
185
                                        .getID());
186
                        if (installerInfo != null) {
187
                                installerInfo.setSelected(installerInfos[i].isSelected());
188
                        }
189
                }
190
                installerInfos = infos.values().toArray(
191
                                new TablePackageInfo[infos.size()]);
192
                sortInstallerInfos();
193

    
194
                List<String> idList = installerExecutionService
195
                                .getDefaultSelectedPackagesIDs();
196

    
197
                if (idList != null) {
198
                        for (int i = 0; i < installerInfos.length; i++) {
199
                                for (int j = 0; j < idList.size(); j++) {
200
                                        if (installerInfos[i].getPackageInfo().matchID(
201
                                                        idList.get(j))) {
202
                                                if (installerInfos[i].getPackageInfo()
203
                                                                .getOperatingSystem()
204
                                                                .equals(installerManager.getOperatingSystem())
205
                                                                || installerInfos[i].getPackageInfo()
206
                                                                                .getOperatingSystem().equals("all")) {
207
                                                        installerInfos[i].setDefault(true);
208
                                                }
209
                                        }
210
                                }
211
                        }
212
                }
213
        }
214

    
215
        public Class<?> getColumnClass(int columnIndex) {
216
                switch (columnIndex) {
217
                case 0:
218
                        return Boolean.class;
219
                default:
220
                        return String.class;
221
                }
222
        }
223

    
224
        public int getColumnCount() {
225
                return columnNames.length;
226
        }
227

    
228
        public String getColumnName(int columnIndex) {
229
                return columnIndex >= columnNames.length ? ""
230
                                : columnNames[columnIndex];
231
        }
232

    
233
        public int getRowCount() {
234
                return installerInfos.length;
235
        }
236

    
237
        public Object getValueAt(int rowIndex, int columnIndex) {
238
                TablePackageInfo tableInfo = installerInfos[rowIndex];
239
                PackageInfo installerInfo = tableInfo.getPackageInfo();
240
                switch (columnIndex) {
241
                case 0:
242
                        return tableInfo.isSelected();
243
                case 1:
244
                        return installerInfo.getName();
245
                case 2:
246
                        return installerInfo.getType();
247
                case 3:
248
                        return installerInfo.getState();
249
                case 4:
250
                        return installerInfo.getVersion();
251
                case 5:
252
                        return installerInfo.getBuild();
253
                case 6:
254
                        return installerInfo.getOperatingSystem();
255
                case 7:
256
                        return installerInfo.getArchitecture();
257
                case 8:
258
                        return installerInfo.getJavaVM();
259
                case 9:
260
                        return installerInfo.getGvSIGVersion();
261
                default:
262
                        return "";
263

    
264
                }
265
        }
266

    
267
        public PackageInfo getPackageInfoAt(int rowIndex) {
268
                return installerInfos[rowIndex].getPackageInfo();
269
        }
270

    
271
        public String getDescriptionAt(int rowIndex) {
272
                return getPackageInfoAt(rowIndex).getDescription();
273
        }
274

    
275
        public URL getSourcesAt(int rowIndex) {
276
                return getPackageInfoAt(rowIndex).getSourcesURL();
277
        }
278

    
279
        public String getOwnerAt(int rowIndex) {
280
                return getPackageInfoAt(rowIndex).getOwner();
281
        }
282

    
283
        public boolean isCellEditable(int rowIndex, int columnIndex) {
284
                return (columnIndex == 0) && installerInfos[rowIndex].isInstallable();
285
        }
286

    
287
        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
288
                if (columnIndex == 0) {
289
                        TablePackageInfo tableInfo = installerInfos[rowIndex];
290
                        if (tableInfo.isInstallable()) {
291
                                tableInfo.setSelected(Boolean.TRUE.equals(aValue));
292
                        }
293
                }
294
        }
295

    
296
        public List<PackageInfo> getPackagesToInstall() {
297
                List<PackageInfo> packageInfosToInstall = new ArrayList<PackageInfo>();
298
                for (int i = 0; i < installerInfos.length; i++) {
299
                        TablePackageInfo tableInfo = installerInfos[i];
300
                        if (tableInfo.isSelected()) {
301
                                packageInfosToInstall.add(tableInfo.getPackageInfo());
302
                        }
303
                }
304
                return packageInfosToInstall;
305
        }
306

    
307
        public boolean hasAnyPackageSelected() {
308
                for (int i = 0; i < installerInfos.length; i++) {
309
                        if (installerInfos[i].isSelected) {
310
                                return true;
311
                        }
312
                }
313
                return false;
314
        }
315

    
316
        public static final class TablePackageInfo {
317

    
318
                private final PackageInfo packageInfo;
319
                private boolean isInstalled;
320
                private final boolean isInstallable;
321
                private boolean isSelected;
322
                private boolean isDefault;
323

    
324
                public TablePackageInfo(PackageInfo packageInfo, boolean isInstalled,
325
                                boolean isInstallable) {
326
                        this(packageInfo, isInstalled, isInstallable, false, false);
327
                }
328

    
329
                public void setInstalled(boolean installed) {
330
                        this.isInstalled = installed;
331
                }
332

    
333
                public TablePackageInfo(PackageInfo packageInfo, boolean isInstalled,
334
                                boolean isInstallable, boolean isSelected, boolean isDefault) {
335
                        this.packageInfo = packageInfo;
336
                        this.isInstalled = isInstalled;
337
                        this.isInstallable = isInstallable;
338
                        this.isSelected = isSelected;
339
                        this.isDefault = isDefault;
340
                }
341

    
342
                public String getID() {
343
                        PackageInfo pkg = this.getPackageInfo();
344
                        return pkg.getID();
345
                }
346

    
347
                public PackageInfo getPackageInfo() {
348
                        return packageInfo;
349
                }
350

    
351
                public boolean isInstalled() {
352
                        return isInstalled;
353
                }
354

    
355
                public boolean isInstallable() {
356
                        return isInstallable;
357
                }
358

    
359
                public boolean isSelected() {
360
                        return isSelected;
361
                }
362

    
363
                public void setSelected(boolean isSelected) {
364
                        this.isSelected = isSelected;
365
                }
366

    
367
                public void setDefault(boolean isDefault) {
368
                        this.isDefault = isDefault;
369
                }
370

    
371
                public boolean isDefault() {
372
                        return isDefault;
373
                }
374

    
375
        }
376

    
377
        /**
378
         * Returns the TablePackageInfo located in the given row.
379
         * 
380
         * @param row
381
         *            the TablePackageInfo located in the given row
382
         */
383
        public TablePackageInfo getPackageInfo(int row) {
384
                return installerInfos[row];
385
        }
386
}