7
7
8
8
import a2geek .apple2 .image .encoder .A2Image ;
9
9
import a2geek .apple2 .image .encoder .encode .A2Encoder ;
10
- import a2geek .apple2 .image .encoder .encode .BitPack1 ;
11
- import a2geek .apple2 .image .encoder .encode .BitPack2 ;
12
- import a2geek .apple2 .image .encoder .encode .BitPack3 ;
13
- import a2geek .apple2 .image .encoder .encode .GZipEncoder ;
14
- import a2geek .apple2 .image .encoder .encode .PackBitsEncoder ;
15
- import a2geek .apple2 .image .encoder .encode .RleEncoder ;
16
- import a2geek .apple2 .image .encoder .encode .VariableRleEncoder ;
17
- import a2geek .apple2 .image .encoder .encode .ZipEncoder ;
10
+ import a2geek .apple2 .image .encoder .encode .A2EncoderFactory ;
18
11
import a2geek .apple2 .image .encoder .util .ProgressListener ;
19
12
20
13
/**
25
18
*/
26
19
@ SuppressWarnings ("serial" )
27
20
public class EncoderTableModel extends AbstractTableModel {
28
- private List <A2Encoder > encoders = new ArrayList <A2Encoder >();
21
+ private final List <A2Encoder > results = new ArrayList <>();
29
22
private byte [] data = null ;
30
23
private String [] headers = new String [] { "Type" , "Original" , "Compressed" , "%" };
31
24
/**
32
25
* Construct the TableModel and setup all the A2Encoders.
33
26
*/
34
27
public EncoderTableModel (A2Image image , int maxSize , ProgressListener listener ) {
35
28
this .data = image .getBytes ();
36
-
37
- Class [] encoderClasses = new Class [] {
38
- RleEncoder .class ,
39
- VariableRleEncoder .class ,
40
- PackBitsEncoder .class ,
41
- BitPack1 .class ,
42
- BitPack2 .class ,
43
- BitPack3 .class ,
44
- GZipEncoder .class ,
45
- ZipEncoder .class
46
- };
29
+
47
30
int count = 0 ;
48
- for (Class encoderClass : encoderClasses ) {
49
- if (listener != null && listener .isCancelled ()) return ;
50
- A2Encoder a2encoder = null ;
31
+ int size = A2EncoderFactory .getEncoders ().size ();
32
+ for (A2Encoder encoder : A2EncoderFactory .getEncoders ()) {
51
33
try {
52
- a2encoder = ( A2Encoder ) encoderClass . newInstance () ;
34
+ if ( listener != null && listener . isCancelled ()) return ;
53
35
count ++;
54
- if (listener != null ) listener .update (count , encoderClasses . length , a2encoder .getTitle ());
55
- a2encoder .encode (image , maxSize );
56
- encoders .add (a2encoder );
36
+ if (listener != null ) listener .update (count , size , encoder .getTitle ());
37
+ encoder .encode (image , maxSize );
38
+ results .add (encoder );
57
39
} catch (Throwable t ) {
58
- // FIXME ignore errors...
59
- //ImageEncoderApp.showErrorDialog(a2encoder.getTitle(), t);
40
+ // Ignoring these as some are expected to throw errors if boundaries are missed
60
41
}
61
42
}
62
43
}
@@ -70,7 +51,7 @@ public String getColumnName(int column) {
70
51
* Answer with the number of rows.
71
52
*/
72
53
public int getRowCount () {
73
- return encoders .size ();
54
+ return results .size ();
74
55
}
75
56
/**
76
57
* Answer with the number of columns.
@@ -84,13 +65,13 @@ public int getColumnCount() {
84
65
public Object getValueAt (int rowIndex , int columnIndex ) {
85
66
switch (columnIndex ) {
86
67
case 0 :
87
- return encoders .get (rowIndex ).getTitle ();
68
+ return results .get (rowIndex ).getTitle ();
88
69
case 1 :
89
70
return data .length ;
90
71
case 2 :
91
- return encoders .get (rowIndex ).getSize ();
72
+ return results .get (rowIndex ).getSize ();
92
73
case 3 :
93
- return (encoders .get (rowIndex ).getSize () * 100 ) / data .length ;
74
+ return (results .get (rowIndex ).getSize () * 100 ) / data .length ;
94
75
default :
95
76
return "Unknown" ;
96
77
}
@@ -116,6 +97,6 @@ public Class<?> getColumnClass(int columnIndex) {
116
97
* Answer with the specific A2Encoder.
117
98
*/
118
99
public A2Encoder getSelectedEncoder (int rowIndex ) {
119
- return encoders .get (rowIndex );
100
+ return results .get (rowIndex );
120
101
}
121
102
}
0 commit comments