GRRRRR, you use code from a thirdparty editor, you write the right licence ...
[scilab.git] / scilab / modules / gui / src / java / org / scilab / modules / gui / bridge / filechooser / FileMask.java
1 /*
2  * Copyright (c) 2002 Sun Microsystems, Inc. All  Rights Reserved.
3  * Largely modified by Sylvestre Ledru - 2009 - Digiteo
4  * 
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 
9  * -Redistributions of source code must retain the above copyright
10  *  notice, this list of conditions and the following disclaimer.
11  * 
12  * -Redistribution in binary form must reproduct the above copyright
13  *  notice, this list of conditions and the following disclaimer in
14  *  the documentation and/or other materials provided with the distribution.
15  * 
16  * Neither the name of Sun Microsystems, Inc. or the names of contributors
17  * may be used to endorse or promote products derived from this software
18  * without specific prior written permission.
19  * 
20  * This software is provided "AS IS," without a warranty of any kind. ALL
21  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING
22  * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
23  * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT
24  * BE LIABLE FOR ANY DAMAGES OR LIABILITIES SUFFERED BY LICENSEE AS A RESULT
25  * OF OR RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR ITS
26  * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST
27  * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,
28  * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY
29  * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN
30  * IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
31  * 
32  * You acknowledge that Software is not designed, licensed or intended for
33  * use in the design, construction, operation or maintenance of any nuclear
34  * facility.
35  */
36 package org.scilab.modules.gui.bridge.filechooser;
37
38 import java.io.File;
39 import java.util.Enumeration;
40 import java.util.Hashtable;
41 import javax.swing.filechooser.FileFilter;
42
43 /**
44  * This Class manage file mask for the graphic export filechooser
45  * @author Sylvestre KOUMAR
46  */
47 public class FileMask extends FileFilter {
48         
49         private Hashtable filters = null;
50         private String description = null;
51         private String fullDescription = null;
52         private boolean useExtensionsInDescription = true;      
53
54         /**
55          * Create a file filter
56          * If there is no filter added, display all files
57          */
58         public FileMask() {
59                 this.filters = new Hashtable();
60         }
61
62         /**
63          * Creates a file filter that accepts the given file type.
64          * Ex: "jpg", "JPEG Images"
65          */
66         public FileMask(String extension, String description) {
67                 this();
68                 if(extension!=null) addExtension(extension);
69                 if(description!=null) setDescription(description);
70         }
71
72         /**
73          * Allow the file to be display
74          * @param f a File
75          */
76         public boolean accept(File f) {
77                 if(f != null) {
78                         if(f.isDirectory() || filters.size()==0) {
79                                 return true;
80                         }
81                         String extension = getExtension(f);
82                         if(extension != null && filters.get(getExtension(f)) != null) {
83                                 return true;
84                         };
85                 }
86                 return false;
87         }
88         
89         /**
90          * Get the file's extension
91          * @param f a File
92          */
93         public String getExtension(File f) {
94                 if(f != null) {
95                         String filename = f.getName();
96                         int i = filename.lastIndexOf('.');
97                         if(i>0 && i<filename.length()-1) {
98                                 return filename.substring(i+1).toLowerCase();
99                         };
100                 }
101                 return null;
102         }
103         
104         /**
105          * Add a file type to the file mask
106          * @param extension the new type
107          */
108         public void addExtension(String extension) {
109                 if(filters == null) {
110                         filters = new Hashtable(5);
111                 }
112                 filters.put(extension.toLowerCase(), this);
113                 fullDescription = null;
114         }
115         
116         /**
117          * Get description of the mask
118          */
119         public String getDescription() {
120                 if(fullDescription == null) {
121                         if(description == null || isExtensionListInDescription()) {
122                                 fullDescription = description==null ? "(" : description + " ("; 
123                                 Enumeration extensions = filters.keys();
124                                 if(extensions != null) {
125                                         fullDescription += "." + (String) extensions.nextElement();
126                                         while (extensions.hasMoreElements()) {
127                                                 fullDescription += ", ." + (String) extensions.nextElement();
128                                         }
129                                 }
130                                 fullDescription += ")";
131                         }
132                         else {
133                                 fullDescription = description;
134                         }
135                 }
136                 return fullDescription;
137         }
138         
139         /**
140          * Set the description for the mask
141          */
142         public void setDescription(String description) {
143                 this.description = description;
144                 fullDescription = null;
145         }
146
147         /**
148          * Allow to display description
149          */
150         public boolean isExtensionListInDescription() {
151                 return useExtensionsInDescription;
152         }
153
154         public void clearExtensions() {
155                 filters.clear();
156         }
157
158
159