dcd54ec5c2ca8915a18790201086e8f92ae7de27
[debian/jabref.git] / src / java / net / sf / jabref / imports / fetcher / ISBNtoBibTeXFetcher.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.fetcher;
16
17 import java.io.IOException;
18 import java.io.InputStream;
19 import java.io.OutputStreamWriter;
20 import java.io.UnsupportedEncodingException;
21 import java.net.MalformedURLException;
22 import java.net.URL;
23 import java.net.URLConnection;
24 import java.net.URLEncoder;
25 import java.util.Scanner;
26
27 import javax.swing.JPanel;
28
29 import net.sf.jabref.BibtexEntry;
30 import net.sf.jabref.BibtexEntryType;
31 import net.sf.jabref.GUIGlobals;
32 import net.sf.jabref.Globals;
33 import net.sf.jabref.JabRef;
34 import net.sf.jabref.OutputPrinter;
35 import net.sf.jabref.imports.BibtexParser;
36 import net.sf.jabref.imports.EntryFetcher;
37 import net.sf.jabref.imports.ImportInspector;
38
39 /**
40  * This class uses Manas Tungare's ISBN to BibTeX Converter to convert an ISBN to a BibTeX entry <br />
41  * The online version of the converter is available at http://manas.tungare.name/software/isbn-to-bibtex/
42  */
43 public class ISBNtoBibTeXFetcher implements EntryFetcher {
44         
45         private static final String URL_PATTERN = "http://manas.tungare.name/software/isbn-to-bibtex/isbn-service?isbn=%s"; 
46
47         @Override
48     public void stopFetching() {
49                 // nothing needed as the fetching is a single HTTP GET
50     }
51
52         @Override
53     public boolean processQuery(String query, ImportInspector inspector, OutputPrinter status) {
54                 String q;
55                 try {
56                 q = URLEncoder.encode(query, "UTF-8");
57         } catch (UnsupportedEncodingException e) {
58                 // this should never happen
59                 status.setStatus(Globals.lang("Error"));
60                 e.printStackTrace();
61                 return false;
62         }
63                 
64         String urlString = String.format(URL_PATTERN, q);
65
66         // Send the request
67         URL url;
68         URLConnection conn;
69         try {
70             url = new URL(urlString);
71         } catch (MalformedURLException e) {
72             e.printStackTrace();
73             return false;
74         } catch (IOException e) {
75             e.printStackTrace();
76             return false;
77         }
78
79         InputStream source;
80         try {
81                 source = url.openStream();
82         } catch (IOException e) {
83                 e.printStackTrace();
84                 return false;
85         }
86         
87         String bibtexString = new Scanner(source).useDelimiter("\\A").next();
88         if (bibtexString.startsWith("@comment")) {
89                 // an error occured
90                 // the error is nested in @comment{...}
91                 String errorMsg = bibtexString.substring("@comment{".length());
92                 errorMsg = errorMsg.substring(0, errorMsg.length()-1);
93                 status.showMessage(errorMsg); // showMessage does not work -> NPE
94                 return false;
95         }
96         
97         BibtexEntry entry = BibtexParser.singleFromString(bibtexString);
98         inspector.addEntry(entry);
99             return true;
100     }
101
102         @Override
103     public String getTitle() {
104             return "ISBN to BibTeX";
105     }
106
107         @Override
108     public String getKeyName() {
109             return "ISBNtoBibTeX";
110     }
111
112         @Override
113     public URL getIcon() {
114                 // no special icon for this fetcher available.
115                 // Therefore, we return some kind of default icon
116             return GUIGlobals.getIconUrl("www");
117     }
118
119         @Override
120     public String getHelpPage() {
121             return "ISBNtoBibTeXHelp.html";
122     }
123
124         @Override
125     public JPanel getOptionsPanel() {
126                 // no additional options available
127             return null;
128     }
129
130 }