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 final String[] columnNames = new String[]{"ID", "動画", "コメ", "変換", "状態"};
22     private final Class<?>[] columnClasses = new Class<?>[]{String.class, Boolean.class, Boolean.class, Boolean.class,
23         Progress.class};
24
25     @Override
26     public int getRowCount() {
27         return targets.size();
28     }
29
30     @Override
31     public int getColumnCount() {
32         return columnNames.length;
33     }
34
35     @Override
36     public String getColumnName(int columnIndex) {
37         return columnNames[columnIndex];
38     }
39
40     @Override
41     public Class<?> getColumnClass(int columnIndex) {
42         return columnClasses[columnIndex];
43     }
44
45     @Override
46     public Object getValueAt(int rowIndex, int columnIndex) {
47         Target t = targets.get(rowIndex);
48         Object res;
49         switch (columnIndex) {
50             case 0:
51                 res = t.getVideoId();
52                 break;
53             case 1:
54                 res = Boolean.valueOf(t.isVideoDownload());
55                 break;
56             case 2:
57                 res = Boolean.valueOf(t.isCommentDownload());
58                 break;
59             case 3:
60                 res = Boolean.valueOf(t.isConvert());
61                 break;
62             case 4:
63                 res = t.getProgress();
64             default:
65                 throw new IllegalArgumentException();
66         }
67         return res;
68     }
69
70     @Override
71     public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
72         throw new UnsupportedOperationException("Not supported yet.");
73     }
74
75     public void addTarget(Collection<Target> t) {
76         int before = targets.size();
77         targets.addAll(t);
78         int after = targets.size();
79         if (before < after) {
80             fireTableRowsInserted(before, after - 1);
81         }
82     }
83
84     public void addTarget(Target t) {
85         List<Target> list = new ArrayList<Target>(1);
86         list.add(t);
87         addTarget(list);
88     }
89
90     public void setStatus(int id, TaskKind taskKind, TaskStatus taskStatus, double percent, String status) {
91         int pos = -1;
92         for (int i = 0; i < targets.size(); i++) {
93             final Target t = targets.get(i);
94             final int ri = t.getRequestProcess().getRowId();
95             if (id == ri) {
96                 pos = i;
97                 break;
98             }
99         }
100         if (pos < 0) {
101             logger.log(Level.SEVERE, "本来存在すべきレコードが存在しません id:{0}", id);
102             return;
103         }
104
105         final Target t = targets.get(pos);
106         t.setProgress(taskKind, taskStatus, percent, status);
107
108     }
109 }