/*
* ImageReaderWriterPreferences.java
*
* Created on October 8, 2004, 11:56 AM
*/
package kiyut.imageio;
import java.io.IOException;
import java.util.*;
import javax.imageio.*;
import javax.imageio.spi.*;
/** ImageReaderWriterPreferences
*
* @author Kiyut
*/
public class ImageReaderWriterPreferences {
protected Map<String,String> suffixMap;
protected Map<String,ImageReaderSpi> readerSpiMap;
/** Creates a new instance of ImageReaderWriterPreferences */
public ImageReaderWriterPreferences() {
init();
}
/** initialize */
private void init() {
// using TreeMap to get sortedMap based on the key
suffixMap = new TreeMap<String,String>();
readerSpiMap = new TreeMap<String,ImageReaderSpi>();
///////////////////
// Init suffix
//////////////////
String[] formatNames = ImageIO.getReaderFormatNames();
for (int i=0; i<formatNames.length; i++) {
Iterator it = ImageIO.getImageReadersByFormatName(formatNames[i]);
while (it.hasNext()) {
ImageReader reader = (ImageReader)it.next();
javax.imageio.spi.ImageReaderSpi spi = reader.getOriginatingProvider();
if (spi == null) { continue; }
String[] suffixes = spi.getFileSuffixes();
for (int j=0; j<suffixes.length; j++) {
suffixMap.put(suffixes[j],formatNames[i]);
}
}
}
////////////////////
// init reader
///////////////////
Iterator it = suffixMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = (Map.Entry)it.next();
Iterator<ImageReader> readerIt = ImageIO.getImageReadersByFormatName((String)entry.getValue());
if (readerIt.hasNext()) {
ImageReader reader = readerIt.next();
readerSpiMap.put((String)entry.getValue(),reader.getOriginatingProvider());
}
}
}
/** Return ImageReaderSpiMap.
* The key=formatName value=ImageReaderSpi
* @return ImageReaderSpiMap
*/
public Map<String,ImageReaderSpi> getPreferredImageReaderSpi() {
return readerSpiMap;
}
/** Return preferred ImageReader
* @param formatName the Format Name
* @return preferred ImageReader
* @see javax.imageio.ImageIO
*/
public synchronized ImageReader getPreferredImageReaderByFormatName(String formatName) {
ImageReader reader = null;
ImageReaderSpi spi = readerSpiMap.get(formatName);
if (spi != null) {
try {
reader = spi.createReaderInstance();
} catch (IOException ex) {}
}
return reader;
}
/** Return preferred ImageReader
* @param suffix the file suffix
* @return preferred ImageReader
* @see javax.imageio.ImageIO
*/
public synchronized ImageReader getPreferredImageReaderBySuffix(String suffix) {
ImageReader reader = null;
String format = suffixMap.get(suffix);
if (format != null) {
reader = getPreferredImageReaderByFormatName(format);
}
return reader;
}
/** TODO: not implemented yet, return null*/
public synchronized ImageWriter getPreferredImageWriterByFormatName(String formatName) {
//throw new RuntimeException("TODO: not implemented yet");
return null;
}
/** TODO not implemented yet, return null */
public synchronized ImageWriter getPreferredImageWriterBySuffix(String suffix) {
//throw new RuntimeException("TODO: not implemented yet");
return null;
}
}