1 58 package org.krysalis.barcode.output.bitmap; 59 60 import java.util.Iterator ; 61 import java.util.Set ; 62 63 68 public class BitmapEncoderRegistry { 69 70 private static Set encoders = new java.util.TreeSet (); 71 72 static { 73 register("org.krysalis.barcode.output.bitmap.SunJPEGBitmapEncoder", 0, false); 74 register("org.krysalis.barcode.output.bitmap.ImageIOBitmapEncoder", 50, false); 75 } 76 77 80 protected BitmapEncoderRegistry() { 81 throw new UnsupportedOperationException (); 82 } 83 84 private static class Entry implements Comparable { 85 private BitmapEncoder encoder; 86 private int priority; 87 88 public Entry(BitmapEncoder encoder, int priority) { 89 this.encoder = encoder; 90 this.priority = priority; 91 } 92 93 96 public int compareTo(Object o) { 97 Entry e = (Entry)o; 98 return e.priority - this.priority; } 100 } 101 102 private static void register(String classname, int priority, boolean complain) { 103 boolean failed = false; 104 try { 105 Class clazz = Class.forName(classname); 106 BitmapEncoder encoder = (BitmapEncoder)clazz.newInstance(); 107 encoders.add(new Entry(encoder, priority)); 108 } catch (Exception e) { 109 failed = true; 110 } catch (LinkageError le) { 111 failed = true; } 113 if (failed) { 114 if (complain) { 115 throw new IllegalArgumentException ( 116 "The implementation being registered is unavailable or " 117 + "cannot be instantiated: " + classname); 118 } else { 119 return; 120 } 121 } 122 } 123 124 131 public static void register(String classname, int priority) { 132 register(classname, priority, true); 133 } 134 135 142 public static boolean supports(BitmapEncoder encoder, String mime) { 143 String [] mimes = encoder.getSupportedMIMETypes(); 144 for (int i = 0; i < mimes.length; i++) { 145 if (mimes[i].equals(mime)) { 146 return true; 147 } 148 } 149 return false; 150 } 151 152 158 public static boolean supports(String mime) { 159 Iterator i = encoders.iterator(); 160 while (i.hasNext()) { 161 Entry entry = (Entry)i.next(); 162 BitmapEncoder encoder = entry.encoder; 163 if (supports(encoder, mime)) { 164 return true; 165 } 166 } 167 return false; 168 } 169 170 176 public static BitmapEncoder getInstance(String mime) { 177 Iterator i = encoders.iterator(); 178 while (i.hasNext()) { 179 Entry entry = (Entry)i.next(); 180 BitmapEncoder encoder = entry.encoder; 181 if (supports(encoder, mime)) { 182 return encoder; 183 } 184 } 185 throw new UnsupportedOperationException ( 186 "No BitmapEncoder available for " + mime); 187 } 188 189 194 public static Set getSupportedMIMETypes() { 195 Set mimes = new java.util.HashSet (); 196 Iterator i = encoders.iterator(); 197 while (i.hasNext()) { 198 Entry entry = (Entry)i.next(); 199 BitmapEncoder encoder = entry.encoder; 200 String [] s = encoder.getSupportedMIMETypes(); 201 for (int j = 0; j < s.length; j++) { 202 mimes.add(s[j]); 203 } 204 } 205 return mimes; 206 } 207 208 } 209 | Popular Tags |