package org.jabref.logic.cleanup;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.Objects;
import java.util.Set;
import org.jabref.logic.util.OS;
import org.jabref.model.cleanup.FieldFormatterCleanups;
import org.jabref.preferences.JabRefPreferences;
public class CleanupPreset {
private final Set<CleanupStep> activeJobs;
private final FieldFormatterCleanups formatterCleanups;
public CleanupPreset(Set<CleanupStep> activeJobs) {
this(activeJobs, new FieldFormatterCleanups(false, new ArrayList<>()));
}
public CleanupPreset(CleanupStep activeJob) {
this(EnumSet.of(activeJob));
}
public CleanupPreset(FieldFormatterCleanups formatterCleanups) {
this(EnumSet.noneOf(CleanupStep.class), formatterCleanups);
}
public CleanupPreset(Set<CleanupStep> activeJobs, FieldFormatterCleanups formatterCleanups) {
this.activeJobs = activeJobs;
this.formatterCleanups = Objects.requireNonNull(formatterCleanups);
}
public static CleanupPreset loadFromPreferences(JabRefPreferences preferences) {
Set<CleanupStep> activeJobs = EnumSet.noneOf(CleanupStep.class);
if (preferences.getBoolean(JabRefPreferences.CLEANUP_DOI)) {
activeJobs.add(CleanupStep.CLEAN_UP_DOI);
}
if (preferences.getBoolean(JabRefPreferences.CLEANUP_ISSN)) {
activeJobs.add(CleanupStep.CLEAN_UP_ISSN);
}
if (preferences.getBoolean(JabRefPreferences.CLEANUP_MOVE_PDF)) {
activeJobs.add(CleanupStep.MOVE_PDF);
}
if (preferences.getBoolean(JabRefPreferences.CLEANUP_MAKE_PATHS_RELATIVE)) {
activeJobs.add(CleanupStep.MAKE_PATHS_RELATIVE);
}
if (preferences.getBoolean(JabRefPreferences.CLEANUP_RENAME_PDF)) {
activeJobs.add(CleanupStep.RENAME_PDF);
}
if (preferences.getBoolean(JabRefPreferences.CLEANUP_RENAME_PDF_ONLY_RELATIVE_PATHS)) {
activeJobs.add(CleanupStep.RENAME_PDF_ONLY_RELATIVE_PATHS);
}
if (preferences.getBoolean(JabRefPreferences.CLEANUP_UPGRADE_EXTERNAL_LINKS)) {
activeJobs.add(CleanupStep.CLEAN_UP_UPGRADE_EXTERNAL_LINKS);
}
if (preferences.getBoolean(JabRefPreferences.CLEANUP_CONVERT_TO_BIBLATEX)) {
activeJobs.add(CleanupStep.CONVERT_TO_BIBLATEX);
}
if (preferences.getBoolean(JabRefPreferences.CLEANUP_FIX_FILE_LINKS)) {
activeJobs.add(CleanupStep.FIX_FILE_LINKS);
}
FieldFormatterCleanups formatterCleanups = Cleanups.parse(
preferences.getStringList(JabRefPreferences.CLEANUP_FORMATTERS));
return new CleanupPreset(activeJobs, formatterCleanups);
}
public boolean isCleanUpUpgradeExternalLinks() {
return isActive(CleanupStep.CLEAN_UP_UPGRADE_EXTERNAL_LINKS);
}
public boolean isCleanUpDOI() {
return isActive(CleanupStep.CLEAN_UP_DOI);
}
public boolean isCleanUpISSN() {
return isActive(CleanupStep.CLEAN_UP_ISSN);
}
public boolean isFixFileLinks() {
return isActive(CleanupStep.FIX_FILE_LINKS);
}
public boolean isMovePDF() {
return isActive(CleanupStep.MOVE_PDF);
}
public boolean isMakePathsRelative() {
return isActive(CleanupStep.MAKE_PATHS_RELATIVE);
}
public boolean isRenamePDF() {
return isActive(CleanupStep.RENAME_PDF) || isActive(CleanupStep.RENAME_PDF_ONLY_RELATIVE_PATHS);
}
public boolean isConvertToBiblatex() {
return isActive(CleanupStep.CONVERT_TO_BIBLATEX);
}
public boolean isRenamePdfOnlyRelativePaths() {
return isActive(CleanupStep.RENAME_PDF_ONLY_RELATIVE_PATHS);
}
public void storeInPreferences(JabRefPreferences preferences) {
preferences.putBoolean(JabRefPreferences.CLEANUP_DOI, isActive(CleanupStep.CLEAN_UP_DOI));
preferences.putBoolean(JabRefPreferences.CLEANUP_ISSN, isActive(CleanupStep.CLEAN_UP_ISSN));
preferences.putBoolean(JabRefPreferences.CLEANUP_MOVE_PDF, isActive(CleanupStep.MOVE_PDF));
preferences.putBoolean(JabRefPreferences.CLEANUP_MAKE_PATHS_RELATIVE, isActive(CleanupStep.MAKE_PATHS_RELATIVE));
preferences.putBoolean(JabRefPreferences.CLEANUP_RENAME_PDF, isActive(CleanupStep.RENAME_PDF));
preferences.putBoolean(JabRefPreferences.CLEANUP_RENAME_PDF_ONLY_RELATIVE_PATHS,
isActive(CleanupStep.RENAME_PDF_ONLY_RELATIVE_PATHS));
preferences.putBoolean(JabRefPreferences.CLEANUP_UPGRADE_EXTERNAL_LINKS,
isActive(CleanupStep.CLEAN_UP_UPGRADE_EXTERNAL_LINKS));
preferences.putBoolean(JabRefPreferences.CLEANUP_CONVERT_TO_BIBLATEX, isActive(CleanupStep.CONVERT_TO_BIBLATEX));
preferences.putBoolean(JabRefPreferences.CLEANUP_FIX_FILE_LINKS, isActive(CleanupStep.FIX_FILE_LINKS));
preferences.putStringList(JabRefPreferences.CLEANUP_FORMATTERS, formatterCleanups.getAsStringList(OS.NEWLINE));
}
private Boolean isActive(CleanupStep step) {
return activeJobs.contains(step);
}
public FieldFormatterCleanups getFormatterCleanups() {
return formatterCleanups;
}
public enum CleanupStep {
/**
* Removes the http://... for each DOI. Moves DOIs from URL and NOTE filed to DOI field.
*/
CLEAN_UP_DOI,
MAKE_PATHS_RELATIVE,
RENAME_PDF,
RENAME_PDF_ONLY_RELATIVE_PATHS,
/**
* Collects file links from the pdf or ps field, and adds them to the list contained in the file field.
*/
CLEAN_UP_UPGRADE_EXTERNAL_LINKS,
/**
* Converts to biblatex format
*/
CONVERT_TO_BIBLATEX,
MOVE_PDF,
FIX_FILE_LINKS,
CLEAN_UP_ISSN
}
}