1eef98e542f50f30a7b79b2905abf921edd84b4d
[debian/jabref.git] / src / main / java / net / sf / jabref / imports / DBLPHelper.java
1 /*  Copyright (C) 2011 Sascha Hunold.
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 2 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 along
13     with this program; if not, write to the Free Software Foundation, Inc.,
14     51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
15  */
16 package net.sf.jabref.imports;
17
18 import java.util.ArrayList;
19 import java.util.List;
20
21 import net.sf.jabref.BibtexEntry;
22
23 public class DBLPHelper {
24
25         private final DBLPQueryCleaner cleaner = new DBLPQueryCleaner();
26
27         /*
28          * This is a small helper class that cleans the user submitted query. Right
29          * now, we cannot search for ":" on dblp.org. So, we remove colons from the
30          * user submitted search string. Also, the search is case sensitive if we
31          * use capitals. So, we better change the text to lower case.
32          */
33
34         class DBLPQueryCleaner {
35
36                 public String cleanQuery(final String query) {
37                         String cleaned = query;
38
39                         cleaned = cleaned.replaceAll("-", " ");
40                         cleaned = cleaned.replaceAll(" ", "%20");
41                         cleaned = cleaned.replaceAll(":", "");
42                         cleaned = cleaned.toLowerCase();
43
44                         return cleaned;
45                 }
46         }
47
48         /**
49          *
50          * @param query
51          *            string with the user query
52          * @return a string with the user query, but compatible with dblp.org
53          */
54         public String cleanDBLPQuery(String query) {
55                 return cleaner.cleanQuery(query);
56         }
57
58         /**
59          * Takes an HTML file (as String) as input and extracts the bibtex
60          * information. After that, it will convert it into a BibtexEntry and return
61          * it (them).
62          *
63          * @param page
64          *            page as String
65          * @return list of BibtexEntry
66          */
67         public List<BibtexEntry> getBibTexFromPage(final String page) {
68                 final List<BibtexEntry> bibtexList = new ArrayList<BibtexEntry>();
69                 final String startPattern = "<pre class=\"verbatim select-on-click\">";
70                 final String endPattern = "</pre>";
71
72                 String tmpStr = page;
73                 int startIdx = tmpStr.indexOf(startPattern);
74                 int endIdx = tmpStr.indexOf(endPattern);
75
76                 // this entry exists for sure
77                 String entry1 = tmpStr.substring(startIdx + startPattern.length(),
78                                 endIdx);
79                 entry1 = cleanEntry(entry1);
80                 bibtexList.add(BibtexParser.singleFromString(entry1));
81                 //System.out.println("'" + entry1 + "'");
82
83                 // let's see whether there is another entry (crossref)
84                 tmpStr = tmpStr
85                                 .substring(endIdx + endPattern.length(), tmpStr.length());
86                 startIdx = tmpStr.indexOf(startPattern);
87                 if (startIdx != -1) {
88                         endIdx = tmpStr.indexOf(endPattern);
89                         // this entry exists for sure
90                         String entry2 = tmpStr.substring(startIdx + startPattern.length(),
91                                         endIdx);
92                         entry2 = cleanEntry(entry2);
93                         bibtexList.add(BibtexParser.singleFromString(entry2));
94                 }
95
96                 return bibtexList;
97         }
98
99         private String cleanEntry(final String bibEntry) {
100         return bibEntry.replaceFirst("<a href=\".*\">DBLP</a>", "DBLP");
101         }
102
103 }