package org.jabref.logic.journals;
import java.util.Objects;
import javafx.beans.property.SimpleStringProperty;
public class Abbreviation implements Comparable<Abbreviation> {
private static final String SPLITTER = ";"; // elements after SPLITTER are not used at the moment
private final SimpleStringProperty name = new SimpleStringProperty("");
private final SimpleStringProperty abbreviation = new SimpleStringProperty("");
public Abbreviation(String name, String abbreviation) {
this.name.set(Objects.requireNonNull(name).trim());
this.abbreviation.set(Objects.requireNonNull(abbreviation).trim());
}
public String getName() {
return name.get();
}
public void setName(String name) {
this.name.set(name);
}
public SimpleStringProperty nameProperty() {
return name;
}
public String getAbbreviation() {
return this.abbreviation.get();
}
public void setAbbreviation(String abbreviation) {
this.abbreviation.set(abbreviation);
}
public SimpleStringProperty abbreviationProperty() {
return abbreviation;
}
public String getIsoAbbreviation() {
if (getAbbreviation().contains(SPLITTER)) {
String[] restParts = getAbbreviation().split(SPLITTER);
return restParts[0].trim();
}
return getAbbreviation();
}
public String getMedlineAbbreviation() {
return getIsoAbbreviation().replace(".", " ").replace(" ", " ").trim();
}
@Override
public int compareTo(Abbreviation toCompare) {
return getName().compareTo(toCompare.getName());
}
public String getNext(String current) {
String currentTrimmed = current.trim();
if (getMedlineAbbreviation().equals(currentTrimmed)) {
return getName();
} else if (getName().equals(currentTrimmed)) {
return getIsoAbbreviation();
} else {
return getMedlineAbbreviation();
}
}
@Override
public String toString() {
return String.format("Abbreviation{name=%s, iso=%s, medline=%s}", getName(), getIsoAbbreviation(), getMedlineAbbreviation());
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o instanceof Abbreviation) {
Abbreviation that = (Abbreviation) o;
return Objects.equals(getName(), that.getName());
}
return false;
}
@Override
public int hashCode() {
return Objects.hashCode(getName());
}
}