OSDN Git Service

キャンセルボタンの処理実装
[coroid/inqubus.git] / frontend / src / yukihane / inqubus / model / TargetsTableModel.java
1 package yukihane.inqubus.model;
2
3 import java.util.ArrayList;
4 import java.util.Collection;
5 import java.util.List;
6 import java.util.logging.Level;
7 import java.util.logging.Logger;
8 import javax.swing.table.AbstractTableModel;
9 import yukihane.inqubus.manager.TaskKind;
10 import yukihane.inqubus.manager.TaskStatus;
11
12 /**
13  *
14  * @author yuki
15  */
16 public class TargetsTableModel extends AbstractTableModel {
17
18     private static final long serialVersionUID = 1L;
19     private static final Logger logger = Logger.getLogger(TargetsTableModel.class.getName());
20     private final List<Target> targets = new ArrayList<Target>();
21     private static final int STATUS_CLOMN = 4;
22     private final String[] columnNames = new String[]{"ID", "動画", "コメ", "変換", "状態"};
23     private final Class<?>[] columnClasses = new Class<?>[]{String.class, Boolean.class, Boolean.class, Boolean.class,
24         Progress.class};
25
26     @Override
27     public int getRowCount() {
28         return targets.size();
29     }
30
31     @Override
32     public int getColumnCount() {
33         return columnNames.length;
34     }
35
36     @Override
37     public String getColumnName(int columnIndex) {
38         return columnNames[columnIndex];
39     }
40
41     @Override
42     public Class<?> getColumnClass(int columnIndex) {
43         return columnClasses[columnIndex];
44     }
45
46     @Override
47     public Object getValueAt(int rowIndex, int columnIndex) {
48         Target t = targets.get(rowIndex);
49         Object res;
50         switch (columnIndex) {
51             case 0:
52                 res = t.getVideoId();
53                 break;
54             case 1:
55                 res = Boolean.valueOf(t.isVideoDownload());
56                 break;
57             case 2:
58                 res = Boolean.valueOf(t.isCommentDownload());
59                 break;
60             case 3:
61                 res = Boolean.valueOf(t.isConvert());
62                 break;
63             case 4:
64                 res = t.getProgress();
65                 break;
66             default:
67                 throw new IllegalArgumentException();
68         }
69         return res;
70     }
71
72     public void addTarget(Collection<Target> t) {
73         int before = targets.size();
74         targets.addAll(t);
75         int after = targets.size();
76         if (before < after) {
77             fireTableRowsInserted(before, after - 1);
78         }
79     }
80
81     public void addTarget(Target t) {
82         List<Target> list = new ArrayList<Target>(1);
83         list.add(t);
84         addTarget(list);
85     }
86
87     public Target getTarget(int rowIndex) {
88         return targets.get(rowIndex);
89     }
90
91     public void setStatus(int id, TaskKind taskKind, TaskStatus taskStatus, double percent, String status) {
92         int pos = -1;
93         for (int i = 0; i < targets.size(); i++) {
94             final Target t = targets.get(i);
95             final int ri = t.getRowId();
96             if (id == ri) {
97                 pos = i;
98                 break;
99             }
100         }
101         if (pos < 0) {
102             logger.log(Level.SEVERE, "本来存在すべきレコードが存在しません id:{0}", id);
103             return;
104         }
105
106         final Target t = targets.get(pos);
107         t.setProgress(taskKind, taskStatus, percent, status);
108         fireTableCellUpdated(pos, STATUS_CLOMN);
109     }
110 }