001: /*
002: * ImageCacheTest.java
003: *
004: * Created on February 17, 2004, 12:25 AM
005: */
006:
007: package org.netbeans.imagecache;
008:
009: import java.awt.Dimension;
010: import java.awt.FileDialog;
011: import java.awt.Graphics;
012: import java.awt.Graphics2D;
013: import java.awt.Image;
014: import java.awt.geom.AffineTransform;
015: import java.awt.image.BufferedImage;
016: import java.io.File;
017: import java.io.IOException;
018: import java.util.ArrayList;
019: import java.util.HashSet;
020: import javax.imageio.ImageIO;
021: import javax.swing.JFileChooser;
022: import javax.swing.JPanel;
023: import javax.swing.JScrollPane;
024:
025: /**
026: *
027: * @author tim
028: */
029: public class ImageCacheTest extends javax.swing.JFrame {
030: private CacheReader reader = null;
031: private CacheWriter writer = new CacheWriter();
032: private HashSet imgs = new HashSet();
033: private String CACHE = "/tmp/cachetest/";
034:
035: /** Creates new form ImageCacheTest */
036: public ImageCacheTest() {
037: initComponents();
038: jSplitPane1.setRightComponent(jTabbedPane2);
039: jSplitPane1.setDividerLocation(0.5d);
040: setBounds(0, 0, 600, 600);
041: }
042:
043: private CacheReader getReader() {
044: if (reader != null) {
045: return reader;
046: }
047: try {
048: reader = new CacheReader(new File(CACHE));
049: } catch (IOException ioe) {
050: ioe.printStackTrace();
051: System.exit(1);
052: }
053: return reader;
054: }
055:
056: private void recreateCacheDir() throws IOException {
057: File f = new File(CACHE);
058: if (f.exists()) {
059: File[] files = f.listFiles();
060: for (int i = 0; i < files.length; i++) {
061: files[i].delete();
062: }
063: f.delete();
064: }
065: f.mkdir();
066: }
067:
068: /** This method is called from within the constructor to
069: * initialize the form.
070: * WARNING: Do NOT modify this code. The content of this method is
071: * always regenerated by the Form Editor.
072: */
073: private void initComponents() {//GEN-BEGIN:initComponents
074: jTabbedPane2 = new javax.swing.JTabbedPane();
075: jSplitPane1 = new javax.swing.JSplitPane();
076: jTabbedPane1 = new javax.swing.JTabbedPane();
077: jButton2 = new javax.swing.JButton();
078: jPanel1 = new javax.swing.JPanel();
079: jButton1 = new javax.swing.JButton();
080: jButton3 = new javax.swing.JButton();
081:
082: addWindowListener(new java.awt.event.WindowAdapter() {
083: public void windowClosing(java.awt.event.WindowEvent evt) {
084: exitForm(evt);
085: }
086: });
087:
088: jSplitPane1.setLeftComponent(jTabbedPane1);
089:
090: getContentPane().add(jSplitPane1, java.awt.BorderLayout.CENTER);
091:
092: jButton2.setText("Build and load cache");
093: jButton2.addActionListener(new java.awt.event.ActionListener() {
094: public void actionPerformed(java.awt.event.ActionEvent evt) {
095: jButton2ActionPerformed(evt);
096: }
097: });
098:
099: getContentPane().add(jButton2, java.awt.BorderLayout.SOUTH);
100:
101: jButton1.setText("Load image");
102: jButton1.addActionListener(new java.awt.event.ActionListener() {
103: public void actionPerformed(java.awt.event.ActionEvent evt) {
104: jButton1ActionPerformed(evt);
105: }
106: });
107:
108: jPanel1.add(jButton1);
109:
110: jButton3.setText("Load cache dir");
111: jButton3.addActionListener(new java.awt.event.ActionListener() {
112: public void actionPerformed(java.awt.event.ActionEvent evt) {
113: jButton3ActionPerformed(evt);
114: }
115: });
116:
117: jPanel1.add(jButton3);
118:
119: getContentPane().add(jPanel1, java.awt.BorderLayout.NORTH);
120:
121: pack();
122: }//GEN-END:initComponents
123:
124: private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed
125: JFileChooser jfc = new JFileChooser();
126: jfc.setFileSelectionMode(jfc.DIRECTORIES_ONLY);
127: jfc.showDialog(this , "Choose a directory with cache files");
128:
129: File fi = jfc.getSelectedFile();
130:
131: try {
132: if (fi == null || (!fi.exists() && !fi.isDirectory())) {
133: System.err.println("I can't do that: " + fi);
134: return;
135: }
136: CacheReader r = new CacheReader(fi);
137: String[] s = r.getIDs();
138: for (int i = 0; i < s.length; i++) {
139: File f = new File(s[i]);
140: BufferedImage img = (BufferedImage) r.find(s[i]);
141: ImagePanel ip = new ImagePanel(img);
142: ip.setName("c-" + s[i]);
143: jTabbedPane2.insertTab(f.getName(), null,
144: new JScrollPane(ip), f.toString(), 0);
145: }
146: } catch (Exception e) {
147: e.printStackTrace();
148: }
149:
150: }//GEN-LAST:event_jButton3ActionPerformed
151:
152: private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
153: // TODO add your handling code here:
154: try {
155: jTabbedPane2.removeAll();
156: recreateCacheDir();
157:
158: writer.setDir(CACHE, true);
159: String[] s = new String[imgs.size()];
160: s = (String[]) imgs.toArray(s);
161: for (int i = 0; i < s.length; i++) {
162: writer.write(s[i], true);
163: }
164:
165: CacheReader r = getReader();
166: for (int i = 0; i < s.length; i++) {
167: File f = new File(s[i]);
168: BufferedImage img = (BufferedImage) r.find(s[i]);
169: ImagePanel ip = new ImagePanel(img);
170: ip.setName("c-" + s[i]);
171: jTabbedPane2.insertTab(f.getName(), null,
172: new JScrollPane(ip), f.toString(), 0);
173: }
174:
175: } catch (Exception e) {
176: e.printStackTrace();
177: }
178:
179: }//GEN-LAST:event_jButton2ActionPerformed
180:
181: private FileDialog fd = new FileDialog(this , "Add image");
182:
183: private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
184:
185: fd.show(true);
186: if (fd.getDirectory() != null && fd.getFile() != null) {
187: String filename = fd.getDirectory() + fd.getFile();
188: try {
189: File f = new File(filename);
190: BufferedImage img = ImageIO.read(f);
191: imgs.add(filename);
192: ImagePanel ip = new ImagePanel(img);
193: ip.setName(filename);
194: System.err.println("Created " + ip);
195: jTabbedPane1.insertTab(f.getName(), null,
196: new JScrollPane(ip), filename, 0);
197: } catch (Exception e) {
198: e.printStackTrace();
199: }
200: }
201: }//GEN-LAST:event_jButton1ActionPerformed
202:
203: /** Exit the Application */
204: private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm
205: System.exit(0);
206: }//GEN-LAST:event_exitForm
207:
208: /**
209: * @param args the command line arguments
210: */
211: public static void main(String args[]) {
212: new ImageCacheTest().show();
213: }
214:
215: private class ImagePanel extends JPanel {
216: private BufferedImage img;
217:
218: public ImagePanel(BufferedImage img) {
219: this .img = img;
220: }
221:
222: public Dimension getPreferredSize() {
223: if (img != null) {
224: return new Dimension(img.getWidth(), img.getHeight());
225: } else {
226: return super .getPreferredSize();
227: }
228: }
229:
230: public void paintComponent(Graphics g) {
231: long time = perf.highResCounter();
232: ((Graphics2D) g).drawRenderedImage(img, AffineTransform
233: .getTranslateInstance(0, 0));
234: long dur = perf.highResCounter() - time;
235: System.err.println(getName() + " " + dur);
236: }
237: }
238:
239: private static final sun.misc.Perf perf = sun.misc.Perf.getPerf();
240:
241: // Variables declaration - do not modify//GEN-BEGIN:variables
242: private javax.swing.JButton jButton1;
243: private javax.swing.JButton jButton2;
244: private javax.swing.JButton jButton3;
245: private javax.swing.JPanel jPanel1;
246: private javax.swing.JSplitPane jSplitPane1;
247: private javax.swing.JTabbedPane jTabbedPane1;
248: private javax.swing.JTabbedPane jTabbedPane2;
249: // End of variables declaration//GEN-END:variables
250:
251: }
|