/* 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.label; import net.sf.jabref.AuthorList; import net.sf.jabref.BibtexEntry; import net.sf.jabref.BibtexFields; public class ArticleLabelRule extends DefaultLabelRule { // this is the rule used handle articles // we try (first author last name)/(year)/(first unique journal word) public String applyRule(BibtexEntry oldEntry){ String oldLabel = (oldEntry.getField(BibtexFields.KEY_FIELD)) ; String newLabel = "" ; String author=""; //## to be done: i need to check if the key is unique else need to make another one with suffix try{ author=oldEntry.getField("author"); String[] tokens= author.split("\\band\\b"); if( tokens.length > 0){ // if author is empty if(tokens[0].indexOf(",") > 0) tokens[0] = AuthorList.fixAuthor_firstNameFirst( tokens[0] ); // convert lastname, firstname to firstname lastname String[] firstAuthor = tokens[0].replaceAll("\\s+"," ").split(" "); // lastname, firstname newLabel += firstAuthor[ firstAuthor.length-1]; } }catch(Throwable t){ System.out.println("error getting author: "+t) ; } // use the year token try{ if( ! newLabel.equals("")){ if( oldEntry.getField("year")!= null){ newLabel += String.valueOf( oldEntry.getField("year")) ; } }else newLabel=oldLabel; // don't make a key since there is no author }catch(Throwable t){ System.out.println("error getting year: "+t) ; } // now check for uniqueness // i need access to basepanes: checkForDuplicateKey //oldEntry.setField(Globals.KEY_FIELD,newLabel) ; return newLabel ; /* // use the journal name // return the first token 4 wrds or longer, that's not journal // , society, or the like (using the Keyword class) try{ if(oldEntry.getField("journal") != null) { authorTokens = new StringTokenizer( ((String) oldEntry.getField("journal")).replaceAll(","," ").replaceAll("/"," ")) ; String tempString = authorTokens.nextToken() ; tempString = tempString.replaceAll(",","") ; boolean done = false ; while(tempString!=null && !done ){ tempString = tempString.replaceAll(",","").trim() ; if(tempString.trim().length() > 3 && !KeyWord.isKeyWord(tempString)) { done = true ; } else{ if(authorTokens.hasMoreTokens()){ tempString = authorTokens.nextToken() ; }else{ done = true ; } } } if(tempString!=null && (tempString.indexOf("null")<0) ){ newLabel += String.valueOf( tempString.toLowerCase()) ; } } } catch(Throwable t){ System.err.println(t) ; } */ } // public static void main(String args[]){ // // System.out.println(args[0]) ; // BibtexEntry entry = new BibtexEntry("1",BibtexEntryType.ARTICLE) ; // entry.setField("journal",args[0]) ; // entry.setField("author","jones, b") ; // entry.setField("year","1984") ; // ArticleLabelRule rule = new ArticleLabelRule() ; // entry = rule.applyRule(entry) ; // System.out.println(entry.getField(BibtexBaseFrame.KEY_PROPERTY) ); // // } }