f9f30d2ec3a2dfe5a4a94af40489484c39c9e9b9
[scilab.git] / scilab / modules / gui / src / java / org / scilab / modules / gui / bridge / filechooser / FileMask.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2009 - INRIA - Sylvestre KOUMAR
4  * 
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at    
9  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12 package org.scilab.modules.gui.bridge.filechooser;
13
14 import java.io.File;
15 import java.util.Enumeration;
16 import java.util.Hashtable;
17 import javax.swing.filechooser.FileFilter;
18
19 /**
20  * This Class manage file mask for the graphic export filechooser
21  * @author Sylvestre KOUMAR
22  */
23 public class FileMask extends FileFilter {
24         
25         private Hashtable filters = null;
26         private String description = null;
27         private String fullDescription = null;
28         private boolean useExtensionsInDescription = true;      
29
30         /**
31          * Create a file filter
32          * If there is no filter added, display all files
33          */
34         public FileMask() {
35                 this.filters = new Hashtable();
36         }
37
38         /**
39          * Creates a file filter that accepts the given file type.
40          * Ex: "jpg", "JPEG Images"
41          */
42         public FileMask(String extension, String description) {
43                 this();
44                 if(extension!=null) addExtension(extension);
45                 if(description!=null) setDescription(description);
46         }
47
48         /**
49          * Allow the file to be display
50          * @param f a File
51          */
52         public boolean accept(File f) {
53                 if(f != null) {
54                         if(f.isDirectory() || filters.size()==0) {
55                                 return true;
56                         }
57                         String extension = getExtension(f);
58                         if(extension != null && filters.get(getExtension(f)) != null) {
59                                 return true;
60                         };
61                 }
62                 return false;
63         }
64         
65         /**
66          * Get the file's extension
67          * @param f a File
68          */
69         public String getExtension(File f) {
70                 if(f != null) {
71                         String filename = f.getName();
72                         int i = filename.lastIndexOf('.');
73                         if(i>0 && i<filename.length()-1) {
74                                 return filename.substring(i+1).toLowerCase();
75                         };
76                 }
77                 return null;
78         }
79         
80         /**
81          * Add a file type to the file mask
82          * @param extension the new type
83          */
84         public void addExtension(String extension) {
85                 if(filters == null) {
86                         filters = new Hashtable(5);
87                 }
88                 filters.put(extension.toLowerCase(), this);
89                 fullDescription = null;
90         }
91         
92         /**
93          * Get description of the mask
94          */
95         public String getDescription() {
96                 if(fullDescription == null) {
97                         if(description == null || isExtensionListInDescription()) {
98                                 fullDescription = description==null ? "(" : description + " ("; 
99                                 Enumeration extensions = filters.keys();
100                                 if(extensions != null) {
101                                         fullDescription += "." + (String) extensions.nextElement();
102                                         while (extensions.hasMoreElements()) {
103                                                 fullDescription += ", ." + (String) extensions.nextElement();
104                                         }
105                                 }
106                                 fullDescription += ")";
107                         }
108                         else {
109                                 fullDescription = description;
110                         }
111                 }
112                 return fullDescription;
113         }
114         
115         /**
116          * Set the description for the mask
117          */
118         public void setDescription(String description) {
119                 this.description = description;
120                 fullDescription = null;
121         }
122
123         /**
124          * Allow to display description
125          */
126         public boolean isExtensionListInDescription() {
127                 return useExtensionsInDescription;
128         }
129
130         public void clearExtensions() {
131                 filters.clear();
132         }
133
134
135