a6a0ca67e734b67ab342caba63a27a4c05160d03
[debian/jabref.git] / src / java / net / sf / jabref / imports / DOItoBibTeXFetcher.java
1 /*  Copyright (C) 2012 JabRef contributors.
2     This program is free software: you can redistribute it and/or modify
3     it under the terms of the GNU General Public License as published by
4     the Free Software Foundation, either version 3 of the License, or
5     (at your option) any later version.
6
7     This program is distributed in the hope that it will be useful,
8     but WITHOUT ANY WARRANTY; without even the implied warranty of
9     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10     GNU General Public License for more details.
11
12     You should have received a copy of the GNU General Public License
13     along with this program.  If not, see <http://www.gnu.org/licenses/>.
14 */
15 package net.sf.jabref.imports;
16
17 import java.io.IOException;
18 import java.io.FileNotFoundException;
19 import java.io.UnsupportedEncodingException;
20 import java.net.MalformedURLException;
21 import java.net.URL;
22 import java.net.URLConnection;
23 import java.net.URLEncoder;
24 import javax.swing.JOptionPane;
25
26 import javax.swing.JPanel;
27
28 import net.sf.jabref.BibtexEntry;
29 import net.sf.jabref.GUIGlobals;
30 import net.sf.jabref.Globals;
31 import net.sf.jabref.OutputPrinter;
32 import net.sf.jabref.Util;
33
34
35 public class DOItoBibTeXFetcher implements EntryFetcher {
36         
37     private static final String URL_PATTERN = "http://dx.doi.org/%s"; 
38     final CaseKeeper caseKeeper = new CaseKeeper();
39     
40         @Override
41     public void stopFetching() {
42                 // nothing needed as the fetching is a single HTTP GET
43     }
44
45         @Override
46     public boolean processQuery(String query, ImportInspector inspector, OutputPrinter status) {
47                 String q;
48                 try {
49                 q = URLEncoder.encode(query, "UTF-8");
50         } catch (UnsupportedEncodingException e) {
51                 // this should never happen
52                 status.setStatus(Globals.lang("Error"));
53                 e.printStackTrace();
54                 return false;
55         }
56                 
57         String urlString = String.format(URL_PATTERN, q);
58
59         // Send the request
60         URL url;
61         try {
62             url = new URL(urlString);
63         } catch (MalformedURLException e) {
64             e.printStackTrace();
65             return false;
66         }
67
68         URLConnection conn;
69         try {
70                 conn = url.openConnection();
71         } catch (IOException e) {
72                 e.printStackTrace();
73                 return false;
74         }
75         
76         conn.setRequestProperty("Accept", "text/bibliography; style=bibtex");
77         
78         
79        String bibtexString;
80         try {
81                 bibtexString = Util.getResults(conn);
82         } catch (FileNotFoundException e) {
83                status.showMessage(Globals.lang("Unknown DOI: '%0'.",
84                         query),
85                         Globals.lang("Get BibTeX entry from DOI"), JOptionPane.INFORMATION_MESSAGE);
86                 return false;
87         }
88         catch (IOException e) {
89                 e.printStackTrace();
90                 return false;
91         }
92         
93        
94         
95         BibtexEntry entry = BibtexParser.singleFromString(bibtexString);
96         
97         // Optionally add curly brackets around key words to keep the case
98         String title = (String)entry.getField("title");
99         if (title != null) {
100             if (Globals.prefs.getBoolean("useCaseKeeperOnSearch")) {
101                 title = caseKeeper.format(title);
102             }
103             entry.setField("title", title);
104         }
105         // Do not use the provided key
106         // entry.setField(BibtexFields.KEY_FIELD,null);
107         inspector.addEntry(entry);
108             return true;
109     }
110
111         @Override
112     public String getTitle() {
113             return "DOI to BibTeX";
114     }
115
116         @Override
117     public String getKeyName() {
118             return "DOItoBibTeX";
119     }
120
121         @Override
122     public URL getIcon() {
123                 // no special icon for this fetcher available.
124                 // Therefore, we return some kind of default icon
125             return GUIGlobals.getIconUrl("www");
126     }
127
128         @Override
129     public String getHelpPage() {
130             return "DOItoBibTeXHelp.html";
131     }
132
133         @Override
134     public JPanel getOptionsPanel() {
135                 // no additional options available
136             return null;
137     }
138
139
140 }