package org.jabref.model.entry; import java.util.EnumSet; import java.util.Set; /** * Class for keeping properties of a single BibTeX/biblatex field */ public class BibtexSingleField { // some field constants public static final double DEFAULT_FIELD_WEIGHT = 1; public static final double MAX_FIELD_WEIGHT = 2; public static final double SMALL_W = 0.30; public static final double MEDIUM_W = 0.5; public static final double LARGE_W = 1.5; public static final int DEFAULT_FIELD_LENGTH = 100; private enum Flag { STANDARD, PRIVATE, DISPLAYABLE, WRITEABLE } // the field name private String name; // contains the standard, private, displayable, writable infos // default is: not standard, public, displayable and writable private final Set<Flag> flags = EnumSet.of(Flag.DISPLAYABLE, Flag.WRITEABLE); private int length = DEFAULT_FIELD_LENGTH; private double weight = DEFAULT_FIELD_WEIGHT; // properties contains a set of FieldProperty to e.g. tell the EntryEditor to add a specific // function to this field, to format names, or to control the integrity checks. private Set<FieldProperty> properties = EnumSet.noneOf(FieldProperty.class); // a comma separated list of alternative bibtex-fieldnames, e.g. // "LCCN" is the same like "lib-congress" // private String otherNames = null ; public BibtexSingleField(String fieldName, boolean pStandard) { name = fieldName; setFlag(pStandard, Flag.STANDARD); } public BibtexSingleField(String fieldName, boolean pStandard, double pWeight) { name = fieldName; setFlag(pStandard, Flag.STANDARD); weight = pWeight; } public BibtexSingleField(String fieldName, boolean pStandard, int pLength) { name = fieldName; setFlag(pStandard, Flag.STANDARD); length = pLength; } public BibtexSingleField(String fieldName, boolean pStandard, double pWeight, int pLength) { name = fieldName; setFlag(pStandard, Flag.STANDARD); weight = pWeight; length = pLength; } /** * Sets or onsets the given flag * @param setToOn if true, set the flag; if false, unset the flat * @param flagID, the id of the flag */ private void setFlag(boolean setToOn, Flag flagID) { if (setToOn) { // set the flag flags.add(flagID); } else { // unset the flag flags.remove(flagID); } } public boolean isStandard() { return flags.contains(Flag.STANDARD); } public void setPrivate() { flags.add(Flag.PRIVATE); } public void setPublic() { flags.remove(Flag.PRIVATE); } public boolean isPrivate() { return flags.contains(Flag.PRIVATE); } public void setDisplayable(boolean value) { setFlag(value, Flag.DISPLAYABLE); } public boolean isDisplayable() { return flags.contains(Flag.DISPLAYABLE); } public void setWriteable(boolean value) { setFlag(value, Flag.WRITEABLE); } public boolean isWriteable() { return flags.contains(Flag.WRITEABLE); } public void setExtras(Set<FieldProperty> pExtras) { properties = pExtras; } // fieldExtras contains mappings to tell the EntryEditor to add a specific // function to this field, for instance a "browse" button for the "pdf" field. public Set<FieldProperty> getFieldProperties() { return properties; } public void setWeight(double value) { this.weight = value; } public double getWeight() { return this.weight; } /** * @return The maximum (expected) length of the field value; <em>not</em> the length of the field name */ public int getLength() { return this.length; } public String getFieldName() { return name; } /** * Set this field's numeric property * * @param numeric true to indicate that this is a numeric field. * @return this BibtexSingleField instance. Makes it easier to call this * method on the fly while initializing without using a local variable. */ public BibtexSingleField setNumeric(boolean numeric) { if (numeric) { properties.add(FieldProperty.NUMERIC); } else { properties.remove(FieldProperty.NUMERIC); } return this; } public boolean isNumeric() { return properties.contains(FieldProperty.NUMERIC); } public void setName(String fieldName) { name = fieldName; } }