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

View differences:

PackagesTableModel.java
27 27

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

  
30
import java.util.ArrayList;
30
import java.io.File;
31
import java.util.Comparator;
31 32
import java.util.List;
33
import java.util.Set;
34
import java.util.TreeSet;
32 35

  
33
import javax.swing.event.TableModelListener;
34
import javax.swing.table.TableModel;
36
import javax.swing.table.AbstractTableModel;
35 37

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

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

  
45
    private DefaultSwingInstallerManager swingInstallerManager = null;
46
    private List<PackageInfo> installerInfos = null;
47
    private List<Boolean> selected = null;
50
    private static final long serialVersionUID = 5953623592122163923L;
51
    private TablePackageInfo[] installerInfos = null;
48 52

  
49
    public PackagesTableModel(
50
        DefaultSwingInstallerManager swingInstallerManager,
51
        InstallPackageService installerExecutionService, boolean isOfficial) {
52
        super();
53
        this.swingInstallerManager = swingInstallerManager;
53
    private final String[] columnNames;
54 54

  
55
        installerInfos = new ArrayList<PackageInfo>();
56
        selected = new ArrayList<Boolean>();
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());
57 64
        for (int i = 0; i < installerExecutionService.getPackageCount(); i++) {
58 65
            PackageInfo installerInfo =
59 66
                installerExecutionService.getPackageInfo(i);
60 67
            if (installerInfo.isOfficial() == isOfficial) {
61
                installerInfos.add(installerInfo);
62
                selected.add(false);
68
                TablePackageInfo info =
69
                    new TablePackageInfo(installerInfo, false, true);
70
                infoSet.add(info);
63 71
            }
64 72
        }
65
    }
73
        try {
74
            PackageInfo[] installedPackages =
75
                installerManager.getInstalledPackages(pluginsFolder);
66 76

  
67
    public void addTableModelListener(TableModelListener l) {
68
        // TODO Auto-generated method stub
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
        }
69 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") };
70 102
    }
71 103

  
72 104
    public Class<?> getColumnClass(int columnIndex) {
......
79 111
    }
80 112

  
81 113
    public int getColumnCount() {
82
        return 10;
114
        return columnNames.length;
83 115
    }
84 116

  
85 117
    public String getColumnName(int columnIndex) {
86
        switch (columnIndex) {
87
        case 0:
88
            return swingInstallerManager.getText("");
89
        case 1:
90
            return swingInstallerManager.getText("name");
91
        case 2:
92
            return swingInstallerManager.getText("type");
93
        case 3:
94
            return swingInstallerManager.getText("status");
95
        case 4:
96
            return swingInstallerManager.getText("version");
97
        case 5:
98
            return swingInstallerManager.getText("build");
99
        case 6:
100
            return swingInstallerManager.getText("operating_system");
101
        case 7:
102
            return swingInstallerManager.getText("architecture");
103
        case 8:
104
            return swingInstallerManager.getText("java_version");
105
        case 9:
106
            return swingInstallerManager.getText("gvSIG_version");
107
        default:
108
            return "";
109
        }
118
        return columnIndex >= columnNames.length ? ""
119
            : columnNames[columnIndex];
110 120
    }
111 121

  
112 122
    public int getRowCount() {
113
        return installerInfos.size();
123
        return installerInfos.length;
114 124
    }
115 125

  
116 126
    public Object getValueAt(int rowIndex, int columnIndex) {
117
        PackageInfo installerInfo = installerInfos.get(rowIndex);
127
        TablePackageInfo tableInfo = installerInfos[rowIndex];
128
        PackageInfo installerInfo = tableInfo.getPackageInfo();
118 129
        switch (columnIndex) {
119 130
        case 0:
120
            return selected.get(rowIndex);
131
            return tableInfo.isSelected();
121 132
        case 1:
122
            return installerInfo.getName();
133
            return installerInfo.getCode();
123 134
        case 2:
124 135
            return installerInfo.getType();
125 136
        case 3:
......
142 153
        }
143 154
    }
144 155

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

  
145 160
    public String getDescriptionAt(int rowIndex) {
146
        return installerInfos.get(rowIndex).getDescription();
161
        return getPackageInfoAt(rowIndex).getDescription();
147 162
    }
148 163

  
149 164
    public boolean isCellEditable(int rowIndex, int columnIndex) {
150
        if (columnIndex == 0) {
151
            return true;
152
        }
153
        return false;
165
        return (columnIndex == 0) && installerInfos[rowIndex].isInstallable();
154 166
    }
155 167

  
156
    public void removeTableModelListener(TableModelListener l) {
157
        // TODO Auto-generated method stub
158

  
159
    }
160

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

  
166 177
    public void addPackageInfosToInstall(List<PackageInfo> packageInfosToInstall) {
167
        for (int i = 0; i < installerInfos.size(); i++) {
168
            if (selected.get(i)) {
169
                packageInfosToInstall.add(installerInfos.get(i));
178
        for (int i = 0; i < installerInfos.length; i++) {
179
            TablePackageInfo tableInfo = installerInfos[i];
180
            if (tableInfo.isSelected()) {
181
                packageInfosToInstall.add(tableInfo.getPackageInfo());
170 182
            }
171 183
        }
172 184
    }
173 185

  
174
    public boolean isPackageSelected() {
175
        for (int i = 0; i < installerInfos.size(); i++) {
176
            if (selected.get(i)) {
186
    public boolean hasAnyPackageSelected() {
187
        for (int i = 0; i < installerInfos.length; i++) {
188
            if (installerInfos[i].isSelected) {
177 189
                return true;
178 190
            }
179 191
        }
180 192
        return false;
181 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
    }
182 291
}

Also available in: Unified diff