package org.jabref.logic.cleanup;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import org.jabref.logic.layout.LayoutFormatterPreferences;
import org.jabref.model.FieldChange;
import org.jabref.model.cleanup.CleanupJob;
import org.jabref.model.database.BibDatabaseContext;
import org.jabref.model.entry.BibEntry;
import org.jabref.model.metadata.FileDirectoryPreferences;
public class CleanupWorker {
private final BibDatabaseContext databaseContext;
private final String fileNamePattern;
private final String fileDirPattern;
private final LayoutFormatterPreferences layoutPrefs;
private final FileDirectoryPreferences fileDirectoryPreferences;
private int unsuccessfulRenames;
public CleanupWorker(BibDatabaseContext databaseContext, CleanupPreferences cleanupPreferences) {
this.databaseContext = databaseContext;
this.fileNamePattern = cleanupPreferences.getFileNamePattern();
this.fileDirPattern = cleanupPreferences.getFileDirPattern();
this.layoutPrefs = cleanupPreferences.getLayoutFormatterPreferences();
this.fileDirectoryPreferences = cleanupPreferences.getFileDirectoryPreferences();
}
public int getUnsuccessfulRenames() {
return unsuccessfulRenames;
}
public List<FieldChange> cleanup(CleanupPreset preset, BibEntry entry) {
Objects.requireNonNull(preset);
Objects.requireNonNull(entry);
List<CleanupJob> jobs = determineCleanupActions(preset);
List<FieldChange> changes = new ArrayList<>();
for (CleanupJob job : jobs) {
changes.addAll(job.cleanup(entry));
}
return changes;
}
private List<CleanupJob> determineCleanupActions(CleanupPreset preset) {
List<CleanupJob> jobs = new ArrayList<>();
if (preset.isConvertToBiblatex()) {
jobs.add(new BiblatexCleanup());
}
if (preset.getFormatterCleanups().isEnabled()) {
jobs.addAll(preset.getFormatterCleanups().getConfiguredActions());
}
if (preset.isCleanUpUpgradeExternalLinks()) {
jobs.add(new UpgradePdfPsToFileCleanup());
}
if (preset.isCleanUpDOI()) {
jobs.add(new DoiCleanup());
}
if (preset.isCleanUpISSN()) {
jobs.add(new ISSNCleanup());
}
if (preset.isFixFileLinks()) {
jobs.add(new FileLinksCleanup());
}
if (preset.isMovePDF()) {
jobs.add(new MoveFilesCleanup(databaseContext, fileDirPattern, fileDirectoryPreferences, layoutPrefs));
}
if (preset.isMakePathsRelative()) {
jobs.add(new RelativePathsCleanup(databaseContext, fileDirectoryPreferences));
}
if (preset.isRenamePDF()) {
RenamePdfCleanup cleaner = new RenamePdfCleanup(preset.isRenamePdfOnlyRelativePaths(), databaseContext,
fileNamePattern, layoutPrefs, fileDirectoryPreferences);
jobs.add(cleaner);
unsuccessfulRenames += cleaner.getUnsuccessfulRenames();
}
return jobs;
}
}