Package net.sf.jabref.export.layout.format

Source Code of net.sf.jabref.export.layout.format.FileLink

package net.sf.jabref.export.layout.format;

import java.io.File;

import net.sf.jabref.GUIGlobals;
import net.sf.jabref.Globals;
import net.sf.jabref.Util;
import net.sf.jabref.export.layout.ParamLayoutFormatter;
import net.sf.jabref.gui.FileListEntry;
import net.sf.jabref.gui.FileListTableModel;
import java.io.IOException;

/**
* Export formatter that handles the file link list of JabRef 2.3 and later, by
* selecting the first file link, if any, specified by the field.
*/
public class FileLink implements ParamLayoutFormatter {

    String fileType = null;

    public String format(String field) {
        FileListTableModel tableModel = new FileListTableModel();
        if (field == null)
            return "";

        tableModel.setContent(field);
        String link = null;
        if (fileType == null) {
            // No file type specified. Simply take the first link.
            if (tableModel.getRowCount() > 0)
                link = tableModel.getEntry(0).getLink();
        }
        else {
            // A file type is specified:
            for (int i=0; i< tableModel.getRowCount(); i++) {
                FileListEntry flEntry = tableModel.getEntry(i);
                if (flEntry.getType().getName().toLowerCase().equals(fileType)) {
                    link = flEntry.getLink();
                    break;
                }
            }
        }
       
        if (link == null)
            return "";


        String dir;
        // We need to resolve the file directory from the database's metadata,
        // but that is not available from a formatter. Therefore, as an
        // ugly hack, the export routine has set a global variable before
        // starting the export, which contains the database's file directory:
        if (Globals.prefs.fileDirForDatabase != null)
            dir = Globals.prefs.fileDirForDatabase;
        else
            dir = Globals.prefs.get(GUIGlobals.FILE_FIELD + "Directory");
       
    File f = Util.expandFilename(link, new String[] { dir });

        /*
     * Stumbled over this while investigating
     *
     * https://sourceforge.net/tracker/index.php?func=detail&aid=1469903&group_id=92314&atid=600306
     */
    if (f != null) {
            try {
                return f.getCanonicalPath();//f.toURI().toString();
            } catch (IOException e) {
                e.printStackTrace();
                return f.getPath();
            }
        } else {
      return link;
    }


    }

    /**
     * This method is called if the layout file specifies an argument for this
     * formatter. We use it as an indicator of which file type we should look for.
     * @param arg The file type.
     */
    public void setArgument(String arg) {
        fileType = arg;
    }
}
TOP

Related Classes of net.sf.jabref.export.layout.format.FileLink

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.