2ba4c3c31d8122baccb241c717e7dc86329b2a8e
[debian/jabref.git] / src / java / net / sf / jabref / external / ExternalFileType.java
1 package net.sf.jabref.external;
2
3 import net.sf.jabref.GUIGlobals;
4
5 import javax.swing.*;
6
7 /**
8  * This class defines a type of external files that can be linked to from JabRef.
9  * The class contains enough information to provide an icon, a standard extension
10  * and a link to which application handles files of this type.
11  */
12 public class ExternalFileType implements Comparable {
13
14     protected String name, extension, openWith, iconName;
15     protected ImageIcon icon;
16     protected JLabel label = new JLabel();
17
18     public ExternalFileType(String name, String extension, String openWith,
19                             String iconName) {
20         label.setText(null);
21         this.name = name;
22         label.setToolTipText(this.name);
23         this.extension = extension;
24         this.openWith = openWith;
25         setIconName(iconName);
26     }
27
28     /**
29      * Construct an ExternalFileType from a String array. This constructor is used when
30      * reading file type definitions from Preferences, where the available data types are
31      * limited. We assume that the array contains the same values as the main constructor,
32      * in the same order.
33      *
34      * TODO: The icon argument needs special treatment. At the moment, we assume that the fourth
35      * element of the array contains the icon keyword to be looked up in the current icon theme.
36      * To support icons found elsewhere on the file system we simply need to prefix the icon name
37      * with a marker. 
38      *
39      * @param val Constructor arguments.
40      */
41     public ExternalFileType(String[] val) {
42         if ((val == null) || (val.length < 4))
43             throw new IllegalArgumentException("Cannot contruct ExternalFileType without four elements in String[] argument.");
44         this.name = val[0];
45         label.setToolTipText(this.name);
46         this.extension = val[1];
47         this.openWith = val[2];
48         label.setText(null);
49         setIconName(val[3]);
50     }
51
52     /**
53      * Return a String array representing this file type. This is used for storage into
54      * Preferences, and the same array can be used to construct the file type later,
55      * using the String[] constructor.
56      *
57      * @return A String[] containing all information about this file type.
58      */
59     public String[] getStringArrayRepresentation() {
60         return new String[] {name, extension, openWith, iconName};
61     }
62
63     public String getName() {
64         return name;
65     }
66
67     public void setName(String name) {
68         this.name = name;
69         label.setToolTipText(this.name);
70     }
71
72     public String getExtension() {
73         return extension;
74     }
75
76     public void setExtension(String extension) {
77         this.extension = extension;
78     }
79
80     /**
81      * Get the bibtex field name used to extension to this file type.
82      * Currently we assume that field name equals filename extension.
83      * @return The field name.
84      */
85     public String getFieldName() {
86         return extension;
87     }
88
89     public String getOpenWith() {
90         return openWith;
91     }
92
93     public void setOpenWith(String openWith) {
94         this.openWith = openWith;
95     }
96
97     /**
98      * Set the string associated with this file type's icon. The string is used
99      * to get the actual icon by the method GUIGlobals.getIcon(String)
100      * @param name The icon name to use.
101      */
102     public void setIconName(String name) {
103         this.iconName = name;
104         this.icon = GUIGlobals.getImage(iconName);
105         label.setIcon(this.icon);
106     }
107
108     /**
109      * Obtain a JLabel instance set with this file type's icon. The same JLabel
110      * is returned from each call of this method.
111      * @return the label.
112      */
113     public JLabel getIconLabel() {
114         return label;
115     }
116
117     /**
118      * Get the string associated with this file type's icon. The string is used
119      * to get the actual icon by the method GUIGlobals.getIcon(String)
120      * @return The icon name.
121      */
122     public String getIconName() {
123         return iconName;
124     }
125
126     public ImageIcon getIcon() {
127         return icon;
128     }
129
130     public void setIcon(ImageIcon icon) {
131         this.icon = icon;
132     }
133
134     public String toString() {
135         return getName();
136     }
137
138     public int compareTo(Object o) {
139         return getName().compareTo(((ExternalFileType)o).getName());
140     }
141
142     public ExternalFileType copy() {
143         return new ExternalFileType(name, extension, openWith, iconName);
144     }
145 }