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 @ 33743

History | View | Annotate | Download (9.41 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.util.Comparator;
32
import java.util.List;
33
import java.util.Set;
34
import java.util.TreeSet;
35

    
36
import javax.swing.table.AbstractTableModel;
37

    
38
import org.gvsig.installer.lib.api.InstallerLocator;
39
import org.gvsig.installer.lib.api.InstallerManager;
40
import org.gvsig.installer.lib.api.PackageInfo;
41
import org.gvsig.installer.lib.api.creation.MakePluginPackageServiceException;
42
import org.gvsig.installer.lib.api.execution.InstallPackageService;
43
import org.gvsig.installer.swing.api.SwingInstallerManager;
44

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

    
50
    private static final long serialVersionUID = 5953623592122163923L;
51
    private TablePackageInfo[] installerInfos = null;
52

    
53
    private final String[] columnNames;
54

    
55
    private InstallerManager installerManager = InstallerLocator
56
        .getInstallerManager();
57

    
58
    public PackagesTableModel(SwingInstallerManager swingInstallerManager,
59
        InstallPackageService installerExecutionService, boolean isOfficial,
60
        File pluginsFolder) {
61

    
62
        Set<TablePackageInfo> infoSet =
63
            new TreeSet<TablePackageInfo>(new TablePackageInfoComparator());
64
        for (int i = 0; i < installerExecutionService.getPackageCount(); i++) {
65
            PackageInfo installerInfo =
66
                installerExecutionService.getPackageInfo(i);
67
            if (installerInfo.isOfficial() == isOfficial) {
68
                TablePackageInfo info =
69
                    new TablePackageInfo(installerInfo, false, true);
70
                infoSet.add(info);
71
            }
72
        }
73
        try {
74
            PackageInfo[] installedPackages =
75
                installerManager.getInstalledPackages(pluginsFolder);
76

    
77
            for (int i = 0; i < installedPackages.length; i++) {
78
                if (installedPackages[i].isOfficial() == isOfficial) {
79
                    TablePackageInfo info =
80
                        new TablePackageInfo(installedPackages[i], true, false);
81
                    infoSet.add(info);
82
                }
83
            }
84
        } catch (MakePluginPackageServiceException e) {
85
            throw new RuntimeException(e);
86
        }
87

    
88
        installerInfos = infoSet.toArray(new TablePackageInfo[infoSet.size()]);
89

    
90
        columnNames =
91
            new String[] {
92
                "", // Check column
93
                swingInstallerManager.getText("id"),
94
                swingInstallerManager.getText("type"),
95
                swingInstallerManager.getText("status"),
96
                swingInstallerManager.getText("version"),
97
                swingInstallerManager.getText("build"),
98
                swingInstallerManager.getText("operating_system"),
99
                swingInstallerManager.getText("architecture"),
100
                swingInstallerManager.getText("java_version"),
101
                swingInstallerManager.getText("gvSIG_version") };
102
    }
103

    
104
    public Class<?> getColumnClass(int columnIndex) {
105
        switch (columnIndex) {
106
        case 0:
107
            return Boolean.class;
108
        default:
109
            return String.class;
110
        }
111
    }
112

    
113
    public int getColumnCount() {
114
        return columnNames.length;
115
    }
116

    
117
    public String getColumnName(int columnIndex) {
118
        return columnIndex >= columnNames.length ? ""
119
            : columnNames[columnIndex];
120
    }
121

    
122
    public int getRowCount() {
123
        return installerInfos.length;
124
    }
125

    
126
    public Object getValueAt(int rowIndex, int columnIndex) {
127
        TablePackageInfo tableInfo = installerInfos[rowIndex];
128
        PackageInfo installerInfo = tableInfo.getPackageInfo();
129
        switch (columnIndex) {
130
        case 0:
131
            return tableInfo.isSelected();
132
        case 1:
133
            return installerInfo.getCode();
134
        case 2:
135
            return installerInfo.getType();
136
        case 3:
137
            return installerInfo.getState();
138
        case 4:
139
            return installerInfo.getVersion();
140
        case 5:
141
            return installerInfo.getBuild();
142
        case 6:
143
            return installerInfo.getOperatingSystem();
144
        case 7:
145
            return installerInfo.getArchitecture();
146
        case 8:
147
            return installerInfo.getJavaVM();
148
        case 9:
149
            return installerInfo.getGvSIGVersion();
150
        default:
151
            return "";
152

    
153
        }
154
    }
155

    
156
    private PackageInfo getPackageInfoAt(int rowIndex) {
157
        return installerInfos[rowIndex].getPackageInfo();
158
    }
159

    
160
    public String getDescriptionAt(int rowIndex) {
161
        return getPackageInfoAt(rowIndex).getDescription();
162
    }
163

    
164
    public boolean isCellEditable(int rowIndex, int columnIndex) {
165
        return (columnIndex == 0) && installerInfos[rowIndex].isInstallable();
166
    }
167

    
168
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
169
        if (columnIndex == 0) {
170
            TablePackageInfo tableInfo = installerInfos[rowIndex];
171
            if (tableInfo.isInstallable()) {
172
                tableInfo.setSelected(Boolean.TRUE.equals(aValue));
173
            }
174
        }
175
    }
176

    
177
    public void addPackageInfosToInstall(List<PackageInfo> packageInfosToInstall) {
178
        for (int i = 0; i < installerInfos.length; i++) {
179
            TablePackageInfo tableInfo = installerInfos[i];
180
            if (tableInfo.isSelected()) {
181
                packageInfosToInstall.add(tableInfo.getPackageInfo());
182
            }
183
        }
184
    }
185

    
186
    public boolean hasAnyPackageSelected() {
187
        for (int i = 0; i < installerInfos.length; i++) {
188
            if (installerInfos[i].isSelected) {
189
                return true;
190
            }
191
        }
192
        return false;
193
    }
194

    
195
    public static final class TablePackageInfo {
196

    
197
        private final PackageInfo packageInfo;
198
        private final boolean isInstalled;
199
        private final boolean isInstallable;
200
        private boolean isSelected;
201

    
202
        public TablePackageInfo(PackageInfo packageInfo, boolean isInstalled,
203
            boolean isInstallable) {
204
            this(packageInfo, isInstalled, isInstallable, false);
205
        }
206

    
207
        public TablePackageInfo(PackageInfo packageInfo, boolean isInstalled,
208
            boolean isInstallable, boolean isSelected) {
209
            this.packageInfo = packageInfo;
210
            this.isInstalled = isInstalled;
211
            this.isInstallable = isInstallable;
212
            this.isSelected = isSelected;
213
        }
214

    
215
        public PackageInfo getPackageInfo() {
216
            return packageInfo;
217
        }
218

    
219
        public boolean isInstalled() {
220
            return isInstalled;
221
        }
222

    
223
        public boolean isInstallable() {
224
            return isInstallable;
225
        }
226

    
227
        public boolean isSelected() {
228
            return isSelected;
229
        }
230

    
231
        public void setSelected(boolean isSelected) {
232
            this.isSelected = isSelected;
233
        }
234
    }
235

    
236
    private static final class TablePackageInfoComparator implements
237
        Comparator<TablePackageInfo> {
238

    
239
        public int compare(TablePackageInfo info1, TablePackageInfo info2) {
240
            if (info1 == null) {
241
                if (info2 == null) {
242
                    return 0;
243
                }
244
                return -1;
245
            }
246
            if (info2 == null) {
247
                return 1;
248
            }
249

    
250
            PackageInfo packageInfo1 = info1.getPackageInfo();
251
            PackageInfo packageInfo2 = info2.getPackageInfo();
252

    
253
            int comparison = compareCode(packageInfo1, packageInfo2);
254

    
255
            if (comparison == 0) {
256
                comparison = compareVersion(packageInfo1, packageInfo2);
257
                if (comparison == 0) {
258
                    comparison = compareBuild(packageInfo1, packageInfo2);
259
                }
260
            }
261

    
262
            return comparison;
263
        }
264

    
265
        private int compareBuild(PackageInfo packageInfo1,
266
            PackageInfo packageInfo2) {
267
            return packageInfo1.getBuild() - packageInfo2.getBuild();
268
        }
269

    
270
        private int compareCode(PackageInfo packageInfo1,
271
            PackageInfo packageInfo2) {
272
            return packageInfo1.getCode().compareTo(packageInfo2.getCode());
273
        }
274

    
275
        private int compareVersion(PackageInfo packageInfo1,
276
            PackageInfo packageInfo2) {
277
            return packageInfo1.getVersion().compareTo(
278
                packageInfo2.getVersion());
279
        }
280
    }
281

    
282
    /**
283
     * Returns the TablePackageInfo located in the given row.
284
     * 
285
     * @param row
286
     *            the TablePackageInfo located in the given row
287
     */
288
    public TablePackageInfo getPackageInfo(int row) {
289
        return installerInfos[row];
290
    }
291
}