Package net.sf.jabref.imports

Source Code of net.sf.jabref.imports.SPIRESFetcher

package net.sf.jabref.imports;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;

import javax.swing.JOptionPane;
import javax.swing.JPanel;

import net.sf.jabref.BibtexDatabase;
import net.sf.jabref.BibtexEntry;
import net.sf.jabref.GUIGlobals;
import net.sf.jabref.Globals;
import net.sf.jabref.OutputPrinter;

/**
*
* This class allows to access the Slac SPIRES database.
*
* It can either be a GeneralFetcher to pose requests to the database or fetch
* individual entries.
*
* @author Fedor Bezrukov
*
* @version $Id$
*
*/
public class SPIRESFetcher implements EntryFetcher {

  private static String spiresHost = "www-spires.slac.stanford.edu";

  public SPIRESFetcher() {
  }

  /**
   * Construct the query URL
   *
   * @param key
   *            The key of the OAI2 entry that the url should poitn to.
   *
   * @return a String denoting the query URL
   */
  public String constructUrl(String key) {
    String identifier = "";
    try {
      identifier = URLEncoder.encode(key, "UTF-8");
    } catch (UnsupportedEncodingException e) {
      return "";
    }
    StringBuffer sb = new StringBuffer("http://").append(spiresHost)
        .append("/");
    sb.append("spires/find/hep/www").append("?");
    sb.append("rawcmd=find+");
    sb.append(identifier);
    sb.append("&FORMAT=WWWBRIEFBIBTEX&SEQUENCE=");
    return sb.toString();
  }

  /**
   * Constructs a SPIRES query url from slaccitation field
   *
   * @param slaccitation
   * @return query string
   */
  public static String constructUrlFromSlaccitation(String slaccitation) {
    String cmd = "j";
    String key = slaccitation.replaceAll("^%%CITATION = ", "").replaceAll(
        ";%%$", "");
    if (key.matches("^\\w*-\\w*[ /].*"))
      cmd = "eprint";
    try {
      key = URLEncoder.encode(key, "UTF-8");
    } catch (UnsupportedEncodingException e) {
    }
    StringBuffer sb = new StringBuffer("http://").append(spiresHost)
        .append("/");
    sb.append("spires/find/hep/www").append("?");
    sb.append("rawcmd=find+").append(cmd).append("+");
    sb.append(key);
    return sb.toString();
  }

  /**
   * Construct an SPIRES query url from eprint field
   *
   * @param eprint
   * @return query string
   */
  public static String constructUrlFromEprint(String eprint) {
    String key = eprint.replaceAll(" [.*]$", "");
    try {
      key = URLEncoder.encode(key, "UTF-8");
    } catch (UnsupportedEncodingException e) {
      return "";
    }
    StringBuffer sb = new StringBuffer("http://").append(spiresHost)
        .append("/");
    sb.append("spires/find/hep/www").append("?");
    sb.append("rawcmd=find+eprint+");
    sb.append(key);
    return sb.toString();
  }

  /**
   * Import an entry from an OAI2 archive. The BibtexEntry provided has to
   * have the field OAI2_IDENTIFIER_FIELD set to the search string.
   *
   * @param key
   *            The OAI2 key to fetch from ArXiv.
   * @return The imnported BibtexEntry or null if none.
   */
  private BibtexDatabase importSpiresEntries(String key, OutputPrinter frame) {
    String url = constructUrl(key);
    try {
      HttpURLConnection conn = (HttpURLConnection) (new URL(url)).openConnection();
      conn.setRequestProperty("User-Agent", "Jabref");
      InputStream inputStream = conn.getInputStream();

      SPIRESBibtexFilterReader reader = new SPIRESBibtexFilterReader(
          new InputStreamReader(inputStream));

      ParserResult pr = BibtexParser.parse(reader);

      return pr.getDatabase();
    } catch (IOException e) {
      frame.showMessage( Globals.lang(
          "An Exception ocurred while accessing '%0'", url)
          + "\n\n" + e.toString(), Globals.lang(getKeyName()),
          JOptionPane.ERROR_MESSAGE);
    } catch (RuntimeException e) {
      frame.showMessage( Globals.lang(
          "An Error occurred while fetching from SPIRES source (%0):",
          new String[] { url })
          + "\n\n" + e.getMessage(), Globals.lang(getKeyName()),
          JOptionPane.ERROR_MESSAGE);
    }
    return null;
  }

  // public void addSpiresURL(BibtexEntry entry) {
  // String url = "http://"+spiresHost+"/spires/find/hep/www?texkey+";
  // url = url+entry.getCiteKey();
  // entry.setField("url", url);
  // }
  //
  // public void addSpiresURLtoDatabase(BibtexDatabase db) {
  // Iterator<BibtexEntry> iter = db.getEntries().iterator();
  // while (iter.hasNext())
  // addSpiresURL(iter.next());
  // }

  /*
   * @see net.sf.jabref.imports.EntryFetcher
   */
  public String getHelpPage() {
    return "Spires.html";
  }

  public URL getIcon() {
    return GUIGlobals.getIconUrl("www");
  }

  public String getKeyName() {
    return "Fetch SPIRES";
  }

  public JPanel getOptionsPanel() {
    // we have no additional options
    return null;
  }

  public String getTitle() {
    return Globals.menuTitle(getKeyName());
  }

  /*
   * @see net.sf.jabref.gui.ImportInspectionDialog.CallBack
   */
  public void cancelled() {
  }

  public void done(int entriesImported) {
  }

  public void stopFetching() {
  }

  /*
   * @see java.lang.Runnable
   */
  public boolean processQuery(String query, ImportInspector dialog,
                OutputPrinter frame) {
    try {
      frame.setStatus("Fetching entries from Spires");
      /* query the archive and load the results into the BibtexEntry */
      BibtexDatabase bd = importSpiresEntries(query,frame);

      /* addSpiresURLtoDatabase(bd); */

      frame.setStatus("Adding fetched entries");
      /* add the entry to the inspection dialog */
      if (bd.getEntryCount() > 0)
            for (BibtexEntry entry : bd.getEntries())
              dialog.addEntry(entry);

      /* update the dialogs progress bar */
      // dialog.setProgress(i + 1, keys.length);
      /* inform the inspection dialog, that we're done */
    } catch (Exception e) {
      frame.showMessage(Globals.lang("Error while fetching from Spires: ")
          + e.getMessage());
      e.printStackTrace();
    }
    return true;
  }
}
TOP

Related Classes of net.sf.jabref.imports.SPIRESFetcher

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.