root / trunk / frameworks / _fwAndami / src / com / iver / andami / iconthemes2 / IconThemeZip.java @ 15633
History | View | Annotate | Download (2.88 KB)
1 | 15633 | jmvivo | package com.iver.andami.iconthemes2; |
---|---|---|---|
2 | |||
3 | import java.io.File; |
||
4 | import java.io.FilenameFilter; |
||
5 | import java.io.IOException; |
||
6 | import java.io.InputStream; |
||
7 | import java.util.Enumeration; |
||
8 | import java.util.zip.ZipEntry; |
||
9 | import java.util.zip.ZipFile; |
||
10 | |||
11 | import javax.swing.ImageIcon; |
||
12 | |||
13 | /**
|
||
14 | * This class extends AbstractIconTheme and implements the abstract methods of this
|
||
15 | * class. This methods are <code>loadIcon</code> and <code>load</code>. This methods
|
||
16 | * allows load one icon or all icons in the resource.
|
||
17 | */
|
||
18 | public class IconThemeZip extends AbstractIconTheme{ |
||
19 | |||
20 | /**
|
||
21 | * Constructor.Constructs an Icon Theme with a default one.
|
||
22 | * @param def. The default icon theme
|
||
23 | */
|
||
24 | public IconThemeZip(AbstractIconTheme def) {
|
||
25 | setDefault(def); |
||
26 | } |
||
27 | |||
28 | /**
|
||
29 | * Allows load a icon when this is inside in a Zip file. IconName is the name or
|
||
30 | * key of the icon and "resource"
|
||
31 | */
|
||
32 | @Override
|
||
33 | protected ImageIcon loadIcon(String iconName, Object resource) { |
||
34 | if (resource instanceof ZipEntry && getResource() instanceof ZipFile) { |
||
35 | ZipEntry entry = (ZipEntry) resource; |
||
36 | ZipFile file = (ZipFile) getResource(); |
||
37 | try {
|
||
38 | InputStream is = file.getInputStream(entry);
|
||
39 | int size=(int)entry.getSize(); |
||
40 | if (size==-1) return null; |
||
41 | byte[] b=new byte[size]; |
||
42 | int offset=0; |
||
43 | int chunk=0; |
||
44 | while ((size - offset) > 0) { |
||
45 | chunk=is.read(b, offset, size - offset); |
||
46 | if (chunk==-1) { |
||
47 | break;
|
||
48 | } |
||
49 | offset+=chunk; |
||
50 | } |
||
51 | return new ImageIcon(b); |
||
52 | } catch (IOException e) { |
||
53 | } |
||
54 | } |
||
55 | return null; |
||
56 | } |
||
57 | |||
58 | /**
|
||
59 | * Allows load all icons in the zip file.
|
||
60 | */
|
||
61 | @Override
|
||
62 | public void load() { |
||
63 | if (getResource() instanceof ZipFile) { |
||
64 | ZipFile zipFile = (ZipFile) getResource(); |
||
65 | ImageFileFilter filter = new ImageFileFilter();
|
||
66 | Enumeration entries = zipFile.entries();
|
||
67 | while (entries.hasMoreElements()) {
|
||
68 | ZipEntry entry = (ZipEntry) entries.nextElement(); |
||
69 | if (!entry.isDirectory() ) {
|
||
70 | if (filter.accept(new File(zipFile.getName()), entry.getName())) { |
||
71 | register(computeKey(entry.getName()), entry); |
||
72 | } |
||
73 | } |
||
74 | } |
||
75 | |||
76 | } |
||
77 | } |
||
78 | |||
79 | /**
|
||
80 | * This class allows filter the images in the zip file. Allows to load the images
|
||
81 | * with a apropiate extension.
|
||
82 | */
|
||
83 | class ImageFileFilter implements FilenameFilter { |
||
84 | public boolean accept(File dir, String fileName) { |
||
85 | String extension = ""; |
||
86 | int pointPos = fileName.lastIndexOf("."); |
||
87 | if (pointPos>0 && pointPos < (fileName.length()-1) ) |
||
88 | extension = fileName.substring(pointPos+1).toLowerCase();
|
||
89 | if ( extension.equals("jpg") || extension.equals("jpeg") |
||
90 | || extension.equals("png")
|
||
91 | || extension.equals("gif"))
|
||
92 | return true; |
||
93 | else
|
||
94 | return false; |
||
95 | } |
||
96 | } |
||
97 | |||
98 | /**
|
||
99 | * Returns the key of the image without extension
|
||
100 | * @param fileName
|
||
101 | * @return string
|
||
102 | */
|
||
103 | private String computeKey(String fileName) { |
||
104 | int pointPos = fileName.lastIndexOf("."); |
||
105 | if (pointPos!=-1) |
||
106 | return fileName.substring(0, pointPos); |
||
107 | else
|
||
108 | return fileName;
|
||
109 | } |
||
110 | } |