package org.jabref.logic.layout.format;
import java.util.Locale;
import org.jabref.logic.layout.LayoutFormatter;
/**
*
* @author Usuario
*/
public class Iso690NamesAuthors implements LayoutFormatter {
@Override
public String format(String s) {
if (s == null || s.trim().isEmpty()) {
return "";
}
StringBuilder sb = new StringBuilder();
String[] authors = s.split("and");
//parte el string en los distintos autores
for (int i = 0; i < authors.length; i++) {
//parte el string author en varios campos, según el separador ","
String[] author = authors[i].split(",");
// No separa apellidos y nombre con coma (,)
if (author.length < 2) { // Caso 1: Nombre Apellidos
//parte el string author en varios campos, según el separador " "
author = authors[i].split(" ");
//declaramos y damos un valor para evitar problemas
String name;
String surname;
if (author.length == 1) { // Caso 1.0: Sólo un campo
sb.append(author[0].trim().toUpperCase(Locale.ROOT));
} else if (author.length == 2) { // Caso 1.1: Nombre Apellido
//primer campo Nombre
name = author[0].trim();
//Segundo campo Apellido
surname = author[1].trim().toUpperCase(Locale.ROOT);
//añadimos los campos modificados al string final
sb.append(surname);
sb.append(", ");
sb.append(name);
} else if (author.length == 3) { // Caso 1.2: Nombre Apellido1 Apellido2
//primer campo Nombre
name = author[0].trim();
//Segundo y tercer campo Apellido1 Apellido2
surname = author[1].trim().toUpperCase(Locale.ROOT) + ' ' + author[2].trim().toUpperCase(Locale.ROOT);
//añadimos los campos modificados al string final
sb.append(surname);
sb.append(", ");
sb.append(name);
} else if (author.length == 4) { // Caso 1.3: Nombre SegundoNombre Apellido1 Apellido2
//primer y segundo campo Nombre SegundoNombre
name = author[0].trim() + ' ' + author[1].trim();
//tercer y cuarto campo Apellido1 Apellido2
surname = author[2].trim().toUpperCase(Locale.ROOT) + ' ' + author[3].trim().toUpperCase(Locale.ROOT);
//añadimos los campos modificados al string final
sb.append(surname);
sb.append(", ");
sb.append(name);
}
} else { // Caso 2: Apellidos, Nombre
// Campo 1 apellidos, lo pasamos a mayusculas
String surname = author[0].trim().toUpperCase(Locale.ROOT);
// campo 2 nombre
String name = author[1].trim();
//añadimos los campos modificados al string final
sb.append(surname);
sb.append(", ");
sb.append(name);
}
if (i < authors.length - 2) { //si hay mas de 2 autores, lo separamos por ", "
sb.append(", ");
} else if (i == authors.length - 2) { // si hay 2 autores, lo separamos por " y "
sb.append(" y ");
}
}
return sb.toString();//retorna el string creado de autores.
}
}