package org.jabref.logic.exporter;
import java.nio.charset.Charset;
import java.util.Collections;
import org.jabref.logic.bibtex.LatexFieldFormatterPreferences;
import org.jabref.model.bibtexkeypattern.GlobalBibtexKeyPattern;
import org.jabref.model.metadata.SaveOrderConfig;
import org.jabref.preferences.JabRefPreferences;
public class SavePreferences {
// Encoding written at the top of the .bib file.
public static final String ENCODING_PREFIX = "Encoding: ";
private final boolean reformatFile;
private final boolean saveInOriginalOrder;
private final SaveOrderConfig saveOrder;
private final Charset encoding;
private final boolean makeBackup;
private final DatabaseSaveType saveType;
private final boolean takeMetadataSaveOrderInAccount;
private final LatexFieldFormatterPreferences latexFieldFormatterPreferences;
private final GlobalBibtexKeyPattern globalCiteKeyPattern;
public SavePreferences() {
this(true, null, null, false, DatabaseSaveType.ALL, true, false, new LatexFieldFormatterPreferences(),
new GlobalBibtexKeyPattern(Collections.emptyList()));
}
public SavePreferences(Boolean saveInOriginalOrder, SaveOrderConfig saveOrder, Charset encoding, Boolean makeBackup,
DatabaseSaveType saveType, Boolean takeMetadataSaveOrderInAccount, Boolean reformatFile,
LatexFieldFormatterPreferences latexFieldFormatterPreferences, GlobalBibtexKeyPattern globalCiteKeyPattern) {
this.saveInOriginalOrder = saveInOriginalOrder;
this.saveOrder = saveOrder;
this.encoding = encoding;
this.makeBackup = makeBackup;
this.saveType = saveType;
this.takeMetadataSaveOrderInAccount = takeMetadataSaveOrderInAccount;
this.reformatFile = reformatFile;
this.latexFieldFormatterPreferences = latexFieldFormatterPreferences;
this.globalCiteKeyPattern = globalCiteKeyPattern;
}
public static SavePreferences loadForExportFromPreferences(JabRefPreferences preferences) {
Boolean saveInOriginalOrder = preferences.getBoolean(JabRefPreferences.EXPORT_IN_ORIGINAL_ORDER);
SaveOrderConfig saveOrder = null;
if (!saveInOriginalOrder) {
if (preferences.getBoolean(JabRefPreferences.EXPORT_IN_SPECIFIED_ORDER)) {
saveOrder = preferences.loadExportSaveOrder();
} else {
saveOrder = preferences.loadTableSaveOrder();
}
}
Charset encoding = preferences.getDefaultEncoding();
Boolean makeBackup = preferences.getBoolean(JabRefPreferences.BACKUP);
DatabaseSaveType saveType = DatabaseSaveType.ALL;
Boolean takeMetadataSaveOrderInAccount = false;
Boolean reformatFile = preferences.getBoolean(JabRefPreferences.REFORMAT_FILE_ON_SAVE_AND_EXPORT);
LatexFieldFormatterPreferences latexFieldFormatterPreferences = preferences.getLatexFieldFormatterPreferences();
GlobalBibtexKeyPattern globalCiteKeyPattern = preferences.getKeyPattern();
return new SavePreferences(saveInOriginalOrder, saveOrder, encoding, makeBackup, saveType,
takeMetadataSaveOrderInAccount, reformatFile, latexFieldFormatterPreferences, globalCiteKeyPattern);
}
public static SavePreferences loadForSaveFromPreferences(JabRefPreferences preferences) {
Boolean saveInOriginalOrder = false;
SaveOrderConfig saveOrder = null;
Charset encoding = preferences.getDefaultEncoding();
Boolean makeBackup = preferences.getBoolean(JabRefPreferences.BACKUP);
DatabaseSaveType saveType = DatabaseSaveType.ALL;
Boolean takeMetadataSaveOrderInAccount = true;
Boolean reformatFile = preferences.getBoolean(JabRefPreferences.REFORMAT_FILE_ON_SAVE_AND_EXPORT);
LatexFieldFormatterPreferences latexFieldFormatterPreferences = preferences.getLatexFieldFormatterPreferences();
GlobalBibtexKeyPattern globalCiteKeyPattern = preferences.getKeyPattern();
return new SavePreferences(saveInOriginalOrder, saveOrder, encoding, makeBackup, saveType,
takeMetadataSaveOrderInAccount, reformatFile, latexFieldFormatterPreferences, globalCiteKeyPattern);
}
public Boolean getTakeMetadataSaveOrderInAccount() {
return takeMetadataSaveOrderInAccount;
}
public SaveOrderConfig getSaveOrder() {
return saveOrder;
}
public boolean isSaveInOriginalOrder() {
return saveInOriginalOrder;
}
public SavePreferences withSaveInOriginalOrder(Boolean newSaveInOriginalOrder) {
return new SavePreferences(newSaveInOriginalOrder, this.saveOrder, this.encoding, this.makeBackup, this.saveType,
this.takeMetadataSaveOrderInAccount, this.reformatFile, this.latexFieldFormatterPreferences,
globalCiteKeyPattern);
}
public boolean getMakeBackup() {
return makeBackup;
}
public SavePreferences withMakeBackup(Boolean newMakeBackup) {
return new SavePreferences(this.saveInOriginalOrder, this.saveOrder, this.encoding, newMakeBackup, this.saveType,
this.takeMetadataSaveOrderInAccount, this.reformatFile, this.latexFieldFormatterPreferences,
globalCiteKeyPattern);
}
public Charset getEncoding() {
return encoding;
}
public SavePreferences withEncoding(Charset newEncoding) {
return new SavePreferences(this.saveInOriginalOrder, this.saveOrder, newEncoding, this.makeBackup, this.saveType,
this.takeMetadataSaveOrderInAccount, this.reformatFile, this.latexFieldFormatterPreferences,
globalCiteKeyPattern);
}
public DatabaseSaveType getSaveType() {
return saveType;
}
public SavePreferences withSaveType(DatabaseSaveType newSaveType) {
return new SavePreferences(this.saveInOriginalOrder, this.saveOrder, this.encoding, this.makeBackup, newSaveType,
this.takeMetadataSaveOrderInAccount, this.reformatFile, this.latexFieldFormatterPreferences,
globalCiteKeyPattern);
}
public Boolean isReformatFile() {
return reformatFile;
}
public SavePreferences withReformatFile(boolean newReformatFile) {
return new SavePreferences(this.saveInOriginalOrder, this.saveOrder, this.encoding, this.makeBackup,
this.saveType, this.takeMetadataSaveOrderInAccount, newReformatFile, this.latexFieldFormatterPreferences,
globalCiteKeyPattern);
}
public Charset getEncodingOrDefault() {
return encoding == null ? Charset.defaultCharset() : encoding;
}
public LatexFieldFormatterPreferences getLatexFieldFormatterPreferences() {
return latexFieldFormatterPreferences;
}
public GlobalBibtexKeyPattern getGlobalCiteKeyPattern() {
return globalCiteKeyPattern;
}
public enum DatabaseSaveType {
ALL,
PLAIN_BIBTEX
}
}