/* Copyright (C) 2003-2011 JabRef contributors. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package net.sf.jabref; import java.lang.Integer; import java.lang.Math; import java.util.Hashtable; import java.util.Iterator; import java.util.Collection; import java.util.Vector; import net.sf.jabref.search.*; import net.sf.jabref.imports.*; /** * * @author Silberer, Zirn */ public class SearchManagerNoGUI { private String searchTerm; private BibtexDatabase database, base=null; Hashtable searchOptions = new Hashtable(); public SearchManagerNoGUI(String term, BibtexDatabase dataBase) { searchTerm = term; database = dataBase; } public BibtexDatabase getDBfromMatches() { int hits = 0; System.out.println("search term: "+searchTerm); if(specifiedYears()) { searchTerm = fieldYear(); } searchOptions.put("option", searchTerm); SearchRuleSet searchRules = new SearchRuleSet(); SearchRule rule1; rule1 = new BasicSearch(Globals.prefs.getBoolean("caseSensitiveSearch"), Globals.prefs.getBoolean("regExpSearch")); try { rule1 = new SearchExpression(Globals.prefs, searchOptions); } catch (Exception e) { } searchRules.addRule(rule1); if (!searchRules.validateSearchStrings(searchOptions)) { System.out.println(Globals.lang("Search failed: illegal search expression")); return base; } Collection entries = database.getEntries(); Vector matchEntries = new Vector(); for (Iterator i=entries.iterator(); i.hasNext();) { BibtexEntry entry = (BibtexEntry) i.next(); boolean hit = searchRules.applyRule(searchOptions, entry) > 0; entry.setSearchHit(hit); if(hit) { hits++; matchEntries.add(entry); } } if (matchEntries != null) { base = ImportFormatReader.createDatabase(matchEntries); } return base; }//end getDBfromMatches() private boolean specifiedYears() { if (searchTerm.matches("year=[0-9]{4}-[0-9]{4}")) return true; return false; } private String fieldYear() { String regPt1="",regPt2=""; String completeReg=null; boolean reg1Set=false, reg2Set=false; //if beginning of timeframe is BEFORE and end of timeframe is AFTER turn of the century String[] searchTermsToPr = searchTerm.split("="); String field = searchTermsToPr[0]; String[] years = searchTermsToPr[1].split("-"); int year1 = Integer.parseInt(years[0]); int year2 = Integer.parseInt(years[1]); if (year1 < 2000 && year2>=2000) { //for 199. regPt1 = "199+["+years[0].substring(3,4)+"-9]"; reg1Set=true; } else { if (year1<2000) { regPt1 = "199+["+years[0].substring(3,4)+"-" +Math.min(Integer.parseInt(years[1].substring(3,4)),9)+"]"; reg1Set=true; } } if (Integer.parseInt(years[1]) >=2000 && year1<2000) { //for 200. regPt2 = "200+[0-"+years[1].substring(3,4)+"]"; reg2Set = true; } else { if (year2 >=2000) { regPt2 = "200+["+years[0].substring(3,4)+"-" +Math.min(Integer.parseInt(years[1].substring(3,4)),9)+"]"; reg2Set = true; } } if(reg1Set&®2Set) { completeReg = field+"="+regPt1+"|"+regPt2; } else { if (reg1Set) { completeReg=field+"="+regPt1; } if (reg2Set) { completeReg=field+"="+regPt2; } } return completeReg; } }