/* 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.mods;
import java.util.Vector;
import net.sf.jabref.export.layout.WSITools;
import net.sf.jabref.export.layout.format.XMLChars;
import net.sf.jabref.AuthorList;
/**
* @author Michael Wrighton, S M Mahbub Murshed
*
* S M Mahbub Murshed : added few functions for convenience. May 15, 2007
*
* History
* Dec 16, 2011 - Changed parseName(String) to export authorname with
* more than 3 names correctly
*
*/
public class PersonName {
protected String givenName = null;
protected String surname = null;
protected String middleName = null;
public PersonName() {
}
public PersonName(String name) {
parseName(name);
}
public PersonName(String firstName, String _middleName, String lastName) {
givenName = firstName;
middleName = _middleName;
surname = lastName;
}
protected void parseName(String author) {
Vector<String> v = new Vector<String>();
String authorMod = AuthorList.fixAuthor_lastNameFirst(author, false);
//Formating names and replacing escape Char for ',' back to a comma
// XMLChars xmlChars = new XMLChars();
// authorMod = xmlChars.format(authorMod).replace(",", ",");
int endOfLastName = authorMod.indexOf(",");
// Tokenize just the firstName and middleNames as we have the surname
// before the comma.
WSITools.tokenize(v, authorMod.substring(endOfLastName+1).trim(), " \n\r");
if (endOfLastName>=0) // comma is found
v.add(authorMod.substring(0, endOfLastName));
int amountOfNames = v.size();
if (amountOfNames == 1)
surname = v.get(0);
else if (amountOfNames == 2) {
givenName = v.get(0);
surname = v.get(1);
}
else {
givenName = v.get(0);
middleName = "";
for (int i = 1; i < amountOfNames - 1 ; i++)
middleName += " " + v.get(i);
middleName = middleName.trim();
surname = v.get(amountOfNames-1);
}
}
public String getGivenNames() {
String result = "";
if (givenName != null)
result += givenName;
if (middleName != null)
result += " " + middleName;
return result;
}
public String getSurname()
{
return surname;
}
public void setSurname(String lastName)
{
surname = lastName;
}
public String getFirstname()
{
return givenName;
}
public void setFirstname(String firstName)
{
givenName = firstName;
}
public String getMiddlename()
{
return middleName;
}
public void setMiddlename(String _middleName)
{
middleName = _middleName;
}
public String getFullname()
{
String fullName = "";
if(givenName != null && givenName != "")
fullName += givenName + " ";
if(middleName != null && middleName != "")
fullName += middleName + " ";
if(surname != null && surname != "")
fullName += surname;
return fullName.trim();
}
public String toString() {
return surname;
}
}