d05b251c88b31ae7347b88a250515b16059c66e4
[debian/jabref.git] / src / java / net / sf / jabref / export / layout / format / FileLink.java
1 package net.sf.jabref.export.layout.format;
2
3 import net.sf.jabref.export.layout.LayoutFormatter;
4 import net.sf.jabref.export.layout.ParamLayoutFormatter;
5 import net.sf.jabref.gui.FileListTableModel;
6 import net.sf.jabref.gui.FileListEntry;
7 import net.sf.jabref.Globals;
8 import net.sf.jabref.Util;
9 import net.sf.jabref.GUIGlobals;
10
11 import java.io.File;
12
13 /**
14  * Export formatter that handles the file link list of JabRef 2.3 and later, by
15  * selecting the first file link, if any, specified by the field.
16  */
17 public class FileLink implements ParamLayoutFormatter {
18
19     String fileType = null;
20
21     public String format(String field) {
22         FileListTableModel tableModel = new FileListTableModel();
23         if (field == null)
24             return "";
25
26         tableModel.setContent(field);
27         String link = null;
28         if (fileType == null) {
29             // No file type specified. Simply take the first link.
30             if (tableModel.getRowCount() > 0)
31                 link = tableModel.getEntry(0).getLink();
32             else
33                 link = null;
34         }
35         else {
36             // A file type is specified:
37             for (int i=0; i< tableModel.getRowCount(); i++) {
38                 FileListEntry flEntry = tableModel.getEntry(i);
39                 if (flEntry.getType().getName().toLowerCase().equals(fileType)) {
40                     link = flEntry.getLink();
41                     break;
42                 }
43             }
44         }
45         
46         if (link == null)
47             return "";
48         // Search in the standard file directory:
49         /* TODO: oops, this part is not sufficient. We need access to the
50          database's metadata in order to check if the database overrides
51          the standard file directory */
52         String dir = Globals.prefs.get(GUIGlobals.FILE_FIELD+"Directory");
53                 File f = Util.expandFilename(link, new String[] { dir, "." });
54
55         /*
56                  * Stumbled over this while investigating
57                  *
58                  * https://sourceforge.net/tracker/index.php?func=detail&aid=1469903&group_id=92314&atid=600306
59                  */
60                 if (f != null) {
61                         return f.getPath();//f.toURI().toString();
62                 } else {
63                         return link;
64                 }
65
66
67     }
68
69     /**
70      * This method is called if the layout file specifies an argument for this
71      * formatter. We use it as an indicator of which file type we should look for.
72      * @param arg The file type.
73      */
74     public void setArgument(String arg) {
75         fileType = arg;
76     }
77 }