
org.biojavax.SimpleDocRefAuthor Maven / Gradle / Ivy
/*
* BioJava development code
*
* This code may be freely distributed and modified under the
* terms of the GNU Lesser General Public Licence. This should
* be distributed with the code. If you do not have a copy,
* see:
*
* http://www.gnu.org/copyleft/lesser.html
*
* Copyright for this code is held jointly by the individual
* authors. These should be listed in @author doc comments.
*
* For more information on the BioJava project and its aims,
* or to join the biojava-l mailing list, visit the home page
* at:
*
* http://www.biojava.orDocRef
*/
package org.biojavax;
import org.biojava.utils.Unchangeable;
/**
* Represents an author of a documentary reference.
* @author Richard Holland
* @author George Waldon
* @see DocRef
* @since 1.5
*/
public class SimpleDocRefAuthor extends Unchangeable implements DocRefAuthor {
private String name;
private boolean editor;
private boolean consortium;
/**
* Constructs a new author instance.
* @param name the author name
* @param consortium are they a consortium?
* @param editor are they an editor?
*/
public SimpleDocRefAuthor(String name, boolean consortium, boolean editor) {
if (name==null) throw new IllegalArgumentException("Name cannot be null");
this.name = name;
this.editor = editor;
if(editor==true) {
int idx = name.lastIndexOf(" (ed.)");
if(idx!=-1 && idx==(name.length()-6))
this.name = name.substring(0,name.length()-6);
}
this.consortium = consortium;
if(consortium==true) {
int idx = name.lastIndexOf(" (consortium)");
if(idx!=-1 && idx==(name.length()-13))
this.name = name.substring(0,name.length()-13);
}
}
/**
* Constructs a new author instance from a string.
* @param s the input string (author name with (ed.) and (consortium) suffixes).
*/
public SimpleDocRefAuthor(String s) {
if (s==null) throw new IllegalArgumentException("Name cannot be null");
String[] parts = s.split("\\(");
this.name = parts[0].trim();
if (parts.length ==3) {
parts[1] = parts[1].trim();
parts[2] = parts[2].trim();
parts[1] = parts[1].substring(0,parts[1].length()-1); // chomp bracket
parts[2] = parts[2].substring(0,parts[2].length()-1); // chomp bracket
if (parts[1].equals("ed.") || parts[2].equals("ed.")) this.editor=true;
else this.editor = false;
if (parts[1].equals("consortium") || parts[2].equals("consortium")) this.consortium = true;
else this.consortium = false;
} else if (parts.length ==2) {
parts[1] = parts[1].trim();
parts[1] = parts[1].substring(0,parts[1].length()-1); // chomp bracket
if (parts[1].equals("ed.")) this.editor=true;
else this.editor = false;
if (parts[1].equals("consortium")) this.consortium = true;
else this.consortium = false;
} else {
this.editor = false;
this.consortium = false;
}
if(editor==true) {
int idx = this.name.lastIndexOf(" (ed.)");
if(idx!=-1 && idx==(this.name.length()-6))
this.name = this.name.substring(0,this.name.length()-6);
}
if(consortium==true) {
int idx = this.name.lastIndexOf(" (consortium)");
if(idx!=-1 && idx==(this.name.length()-13))
this.name = this.name.substring(0,this.name.length()-13);
}
}
/**
* {@inheritDoc}
*/
public String getName() {
return this.name;
}
/**
* {@inheritDoc}
*/
public String getExtendedName() {
StringBuffer result = new StringBuffer();
result.append(this.name);
if (this.consortium) result.append(" (consortium)");
if (this.editor) result.append(" (ed.)");
return result.toString();
}
/**
* {@inheritDoc}
*/
public boolean isEditor() {
return this.editor;
}
/**
* {@inheritDoc}
*/
public boolean isConsortium() {
return this.consortium;
}
/**
* {@inheritDoc}
* Document authors are compared first by name, then consortium status, then editor status.
*/
public int compareTo(Object o) {
if (o==this) return 0;
DocRefAuthor them = (DocRefAuthor)o;
if (!this.name.equals(them.getName())) return this.name.compareTo(them.getName());
if (this.consortium!=them.isConsortium()) return this.consortium?-1:1;
if (this.editor!=them.isEditor()) return this.editor?-1:1;
return 0;
}
/**
* {@inheritDoc}
* Document references are equal if they have all fields the same.
*/
public boolean equals(Object obj) {
if(this == obj) return true;
if (obj==null || !(obj instanceof DocRefAuthor)) return false;
DocRefAuthor them = (DocRefAuthor)obj;
return (this.name.equals(them.getName()) &&
this.consortium==them.isConsortium() &&
this.editor==them.isEditor());
}
/**
* {@inheritDoc}
*/
public int hashCode() {
int code = 17;
code = 37*code + this.name.hashCode();
code = 37*code + (this.consortium?1:0);
code = 37*code + (this.editor?1:0);
return code;
}
/**
* {@inheritDoc}
* Form: "name (consortium) (ed.)" where sections in brackets are optional.
*/
public String toString() {
return this.getExtendedName();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy