1 19 20 package org.jperdian.rss2; 21 22 import java.awt.Component ; 23 import java.awt.Dimension ; 24 import java.awt.Image ; 25 import java.awt.MediaTracker ; 26 import java.awt.Toolkit ; 27 import java.io.BufferedReader ; 28 import java.io.File ; 29 import java.io.IOException ; 30 import java.io.InputStreamReader ; 31 import java.net.URL ; 32 import java.text.DecimalFormat ; 33 import java.text.NumberFormat ; 34 35 import javax.swing.Action ; 36 import javax.swing.Icon ; 37 import javax.swing.ImageIcon ; 38 import javax.swing.JButton ; 39 import javax.swing.JLabel ; 40 import javax.swing.JMenuItem ; 41 42 47 48 public class RssHelper { 49 50 private static final NumberFormat DECIMAL_FORMAT = new DecimalFormat ("#,##0"); 51 private static final NumberFormat FLOAT_FORMAT = new DecimalFormat ("#,##0.0"); 52 private static final Component DUMMY_COMP = new JLabel (); 53 private static final String TEXT_START = "org/jperdian/rss2/res/texts/"; 54 private static final String RESOURCE_START = "org/jperdian/rss2/res/images/"; 55 56 61 public static String getResourceText(String imageName) { 62 ClassLoader loader = RssHelper.class.getClassLoader(); 63 URL resourceURL = loader.getResource(TEXT_START + imageName); 64 if(resourceURL == null) { 65 throw new IllegalArgumentException ("Cannot find text resource: " + TEXT_START + imageName); 66 } else { 67 try { 68 BufferedReader reader = new BufferedReader (new InputStreamReader (resourceURL.openStream())); 69 StringBuffer buffer = new StringBuffer (); 70 for(String line = reader.readLine(); line != null; line = reader.readLine()) { 71 buffer.append(line).append('\n'); 72 } 73 return buffer.toString(); 74 } catch(IOException e) { 75 return ""; 76 } 77 } 78 } 79 80 84 public static Icon getResourceImageIcon(String imageName) { 85 ClassLoader loader = RssHelper.class.getClassLoader(); 86 URL resourceURL = loader.getResource(RESOURCE_START + imageName); 87 if(resourceURL == null) { 88 throw new IllegalArgumentException ("Cannot find image resource: " + RESOURCE_START + imageName); 89 } else { 90 return new ImageIcon (resourceURL); 91 } 92 } 93 94 99 public static Image getResourceImage(String imageName) { 100 ClassLoader loader = RssHelper.class.getClassLoader(); 101 URL resourceURL = loader.getResource(RESOURCE_START + imageName); 102 if(resourceURL == null) { 103 throw new IllegalArgumentException ("Cannot find image resource: " + RESOURCE_START + imageName); 104 } else { 105 Image img = Toolkit.getDefaultToolkit().createImage(resourceURL); 106 MediaTracker imgTracker = new MediaTracker (DUMMY_COMP); 107 imgTracker.addImage(img, 0); 108 try { 109 imgTracker.waitForAll(); 110 } catch(Exception e) { 111 } 113 return img; 114 } 115 } 116 117 120 public static Image getImage(File file) throws IOException { 121 Image image = Toolkit.getDefaultToolkit().createImage(file.getAbsolutePath()); 122 return RssHelper.waitFor(image); 123 } 124 125 public static Image scaleImageProportional(Image sourceImage, Dimension maxDimension, boolean highQuality) { 126 127 double targetWidth = maxDimension.width; 128 double targetHeight = maxDimension.height; 129 double currentWidth = sourceImage.getWidth(DUMMY_COMP); 130 double currentHeight = sourceImage.getHeight(DUMMY_COMP); 131 if(currentWidth > targetWidth || currentHeight > targetHeight) { 132 133 double scaleX = 1 / currentWidth * targetWidth; 134 double scaleY = 1 / currentHeight * targetHeight; 135 double scale = Math.min(scaleX, scaleY); 136 int newWidth = (int)(currentWidth * scale); 137 int newHeight = (int)(currentHeight * scale); 138 Image newImage = sourceImage.getScaledInstance(newWidth, newHeight, highQuality ? Image.SCALE_SMOOTH : Image.SCALE_FAST); 139 return RssHelper.waitFor(newImage); 140 141 } else { 142 return sourceImage; 143 } 144 } 145 146 149 public static Image waitFor(Image image) { 150 try { 151 MediaTracker tracker = new MediaTracker (DUMMY_COMP); 152 tracker.addImage(image, 0); 153 tracker.waitForAll(); 154 } catch(InterruptedException e) { 155 } 157 return image; 158 } 159 160 163 public static String computeFileSizeString(long bytes) { 164 if(bytes < 1024) { 165 return DECIMAL_FORMAT.format(bytes) + " B"; 166 } else if(bytes < 1024 * 1024) { 167 return DECIMAL_FORMAT.format(bytes / 1024) + " KB"; 168 } else { 169 return FLOAT_FORMAT.format(bytes / (1024 * 1024)) + " MB"; 170 } 171 } 172 173 176 public static String computeTimeString(long time) { 177 if(time < 1000) { 178 return "0sec"; 179 } else if(time < 1000 * 60) { 180 return (time/1000) + "sec"; 181 } else { 182 long minutes = time / (1000 * 60); 183 long seconds = (time / 1000) % 60; 184 return minutes + "min" + seconds + "sec"; 185 } 186 } 187 188 195 public static JMenuItem createMenuItem(Action action, Icon icon) { 196 JMenuItem item = new JMenuItem (action); 197 if(icon != null) { 198 item.setIcon(icon); 199 } 200 return item; 201 } 202 203 210 public static JButton createButton(char mnemonic, Action action, Icon icon) { 211 JButton button = new JButton (action); 212 if(icon != null) { 213 button.setIcon(icon); 214 } 215 button.setMnemonic(mnemonic); 216 return button; 217 } 218 219 } | Popular Tags |