Skip to content

Commit

Permalink
Add combox for entry type
Browse files Browse the repository at this point in the history
  • Loading branch information
priyanshu16095 committed Jan 30, 2025
1 parent 7d7a7f8 commit 77150ba
Show file tree
Hide file tree
Showing 6 changed files with 132 additions and 86 deletions.
Original file line number Diff line number Diff line change
@@ -1,67 +1,35 @@
package org.jabref.gui.consistency;

import java.util.Collection;
import java.util.List;
import java.util.Map;

import org.jabref.gui.DialogService;
import org.jabref.gui.StateManager;
import org.jabref.gui.actions.SimpleCommand;
import org.jabref.gui.preferences.GuiPreferences;
import org.jabref.logic.quality.consistency.BibliographyConsistencyCheck;
import org.jabref.model.database.BibDatabaseContext;
import org.jabref.model.entry.BibEntry;
import org.jabref.model.entry.field.Field;
import org.jabref.model.entry.types.EntryType;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ConsistencyCheckAction extends SimpleCommand {

private final DialogService dialogService;
private final StateManager stateManager;
private final GuiPreferences preferences;

private final Logger LOGGER = LoggerFactory.getLogger(ConsistencyCheckDialog.class);

public ConsistencyCheckAction(DialogService dialogService, StateManager stateManager) {
public ConsistencyCheckAction(DialogService dialogService, StateManager stateManager, GuiPreferences preferences) {
this.dialogService = dialogService;
this.stateManager = stateManager;
this.preferences = preferences;
}

@Override
public void execute() {
BibDatabaseContext database = stateManager.getActiveDatabase().orElseThrow(() -> new NullPointerException("Database null"));
List<BibEntry> entries = database.getDatabase().getEntries();

/* BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck().check(entries);
String homeDir = System.getProperty("user.home");
Path tempDir = Paths.get(homeDir, "downloads");
Path txtFile = tempDir.resolve("consistency-check.txt");
try (Writer writer = new OutputStreamWriter(Files.newOutputStream(txtFile))) {
BibliographyConsistencyCheckResultTxtWriter bibliographyConsistencyCheckResultTxtWriter = new BibliographyConsistencyCheckResultTxtWriter(result, writer);
bibliographyConsistencyCheckResultTxtWriter.writeFindings();
dialogService.notify("File created!");
} catch (IOException e) {
dialogService.notify("Exception occured!");
}*/
BibDatabaseContext databaseContext = stateManager.getActiveDatabase().orElseThrow(() -> new NullPointerException("Database null"));
List<BibEntry> entries = databaseContext.getDatabase().getEntries();

BibliographyConsistencyCheck consistencyCheck = new BibliographyConsistencyCheck();
BibliographyConsistencyCheck.Result result = consistencyCheck.check(entries);

Map<EntryType, BibliographyConsistencyCheck.EntryTypeResult> entryTypeToResultMap = result.entryTypeToResultMap();

entryTypeToResultMap.forEach((entryType, entryTypeResult) -> {
LOGGER.info("Entry Type: " + entryType);

Collection<Field> uniqueFields = entryTypeResult.fields();
LOGGER.info("Unique Fields: " + uniqueFields);

Collection<BibEntry> sortedEntries = entryTypeResult.sortedEntries();
LOGGER.info("Sorted Entries: " + sortedEntries);
});

dialogService.showCustomDialogAndWait(new ConsistencyCheckDialog());
dialogService.showCustomDialogAndWait(new ConsistencyCheckDialog(result, dialogService, preferences));
}
}
Original file line number Diff line number Diff line change
@@ -1,24 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ButtonType?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.DialogPane?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.Tooltip?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Button?>
<DialogPane xmlns:fx="http://javafx.com/fxml/1" prefHeight="600.0" prefWidth="700.0"
<DialogPane xmlns:fx="http://javafx.com/fxml/1" prefHeight="600.0" prefWidth="1200.0"
xmlns="http://javafx.com/javafx/8.0.121" fx:controller="org.jabref.gui.consistency.ConsistencyCheckDialog">
<content>
<VBox spacing="4.0">
<TableView fx:id="tableView" prefHeight="550" prefWidth="700.0" VBox.vgrow="ALWAYS" HBox.hgrow="ALWAYS">
<VBox spacing="10.0">
<TableView fx:id="tableView" prefHeight="550" prefWidth="1200.0" VBox.vgrow="ALWAYS" HBox.hgrow="ALWAYS">
<columns>
</columns>
<columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY_FLEX_LAST_COLUMN"/>
</columnResizePolicy>
</TableView>
<HBox spacing="4.0" alignment="CENTER">
<Label text="%Entry type"/>
<ComboBox fx:id="entryTypeCombo" maxWidth="Infinity" HBox.hgrow="ALWAYS" />
<Button onAction="#selectEntry" text="%Select">
<tooltip>
<Tooltip text="%Shows results for the selected entry type."/>
</tooltip>
</Button>
</HBox>
<HBox spacing="4.0">
<Button text="%Export as csv file" alignment="CENTER_LEFT" />
<Button text="%Export as txt file" alignment="CENTER_LEFT" />
<Button onAction="#exportAsCsv" text="%Export as csv file" />
<Button onAction="#exportAsTxt" text="%Export as txt file" alignment="CENTER_LEFT" />
</HBox>
</VBox>
</content>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,31 +1,41 @@
package org.jabref.gui.consistency;

import java.util.Arrays;
import java.util.List;
import java.util.Collection;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Modality;

import org.jabref.gui.DialogService;
import org.jabref.gui.preferences.GuiPreferences;
import org.jabref.gui.util.BaseDialog;
import org.jabref.logic.l10n.Localization;
import org.jabref.logic.quality.consistency.BibliographyConsistencyCheck;
import org.jabref.logic.quality.consistency.ConsistencyMessage;
import org.jabref.model.entry.field.Field;

import com.airhacks.afterburner.views.ViewLoader;

public class ConsistencyCheckDialog extends BaseDialog<Void> {

@FXML private TableView<ConsistencyMessage> tableView;
/* @FXML private TableColumn<ConsistencyMessage, String> entryTypeColumn;
@FXML private TableColumn<ConsistencyMessage, String> keyColumn;*/
@FXML private ComboBox<String> entryTypeCombo;

private final BibliographyConsistencyCheck.Result result;
private final DialogService dialogService;
private final GuiPreferences preferences;
private String selectedEntry;

private ConsistencyCheckDialogViewModel viewModel;

public ConsistencyCheckDialog() {
public ConsistencyCheckDialog(BibliographyConsistencyCheck.Result result, DialogService dialogService, GuiPreferences preferences) {
this.result = result;
this.dialogService = dialogService;
this.preferences = preferences;

this.setTitle(Localization.lang("Check consistency"));
this.initModality(Modality.NONE);

Expand All @@ -38,42 +48,34 @@ public ConsistencyCheckDialogViewModel getViewModel() {
return viewModel;
}

/* @FXML
private void initialize() {
viewModel = new ConsistencyCheckDialogViewModel();
ObservableList<ConsistencyMessage> data = FXCollections.observableArrayList(
new ConsistencyMessage("Article", "Key1"),
new ConsistencyMessage("Book", "Key2"),
new ConsistencyMessage("Conference Paper", "Key3"),
new ConsistencyMessage("Thesis", "Key4")
);
@FXML
public void initialize() {
viewModel = new ConsistencyCheckDialogViewModel(result, dialogService, preferences);

entryTypeColumn.setCellValueFactory(new PropertyValueFactory<>("entryType"));
keyColumn.setCellValueFactory(new PropertyValueFactory<>("key"));
result.entryTypeToResultMap().forEach((entrySet, entryTypeResult) -> {
entryTypeCombo.getItems().add(entrySet.toString());

tableView.setItems(data);
}*/
Collection<Field> fields = entryTypeResult.fields();
for (Field field: fields) {
TableColumn<ConsistencyMessage, String> tableColumn = new TableColumn<>(field.toString());
tableColumn.setCellValueFactory(new PropertyValueFactory<>(field.toString()));
tableView.getColumns().add(tableColumn);
}
});

@FXML
public void initialize() {
List<String> columns = Arrays.asList("Entrytype", "Citationkey", "Address", "Booktitle", "Crossref", "DOI", "Pages", "Ranking", "Series", "URL", "Urldate", "Volume", "Year");
entryTypeCombo.getSelectionModel().select(entryTypeCombo.getItems().getFirst());
}

for (String column : columns) {
TableColumn<ConsistencyMessage, String> tableColumn = new TableColumn<>(column);
tableColumn.setCellValueFactory(new PropertyValueFactory<>(column.replace(" ", "").toLowerCase())); // Assuming properties in the data class match the column names
// tableColumn.setCellValueFactory(new PropertyValueFactory<>("entryType")); // Assuming properties in the data class match the column names
tableView.getColumns().add(tableColumn);
}
public void selectEntry() {
selectedEntry = entryTypeCombo.getSelectionModel().getSelectedItem();
}

tableView.getItems().addAll(getSampleData());
public void exportAsCsv() {
viewModel.startExportAsCsv();
}

private ObservableList<ConsistencyMessage> getSampleData() {
return FXCollections.observableArrayList(
new ConsistencyMessage("Article", "Beck1988", "-", "-", "-", "?", "o", "-", "-", "-", "-", "-", "x"),
new ConsistencyMessage("Article", "Duranton2016", "-", "-", "-", "-", "o", "?", "-", "?", "?", "o", "x")
);
public void exportAsTxt() {
viewModel.startExportAsTxt();
}
}

Original file line number Diff line number Diff line change
@@ -1,6 +1,66 @@
package org.jabref.gui.consistency;

import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Optional;

import org.jabref.gui.AbstractViewModel;
import org.jabref.gui.DialogService;
import org.jabref.gui.preferences.GuiPreferences;
import org.jabref.gui.util.FileDialogConfiguration;
import org.jabref.logic.l10n.Localization;
import org.jabref.logic.quality.consistency.BibliographyConsistencyCheck;
import org.jabref.logic.quality.consistency.BibliographyConsistencyCheckResultCsvWriter;
import org.jabref.logic.quality.consistency.BibliographyConsistencyCheckResultTxtWriter;
import org.jabref.logic.util.StandardFileType;

public class ConsistencyCheckDialogViewModel extends AbstractViewModel {
private final DialogService dialogService;
private final GuiPreferences preferences;
private final BibliographyConsistencyCheck.Result result;

public ConsistencyCheckDialogViewModel(BibliographyConsistencyCheck.Result result, DialogService dialogService, GuiPreferences preferences) {
this.result = result;
this.dialogService = dialogService;
this.preferences = preferences;
}

public void startExportAsTxt() {
FileDialogConfiguration fileDialogConfiguration = new FileDialogConfiguration.Builder()
.withInitialDirectory(preferences.getFilePreferences().getWorkingDirectory())
.addExtensionFilter(StandardFileType.TXT)
.withDefaultExtension(StandardFileType.TXT)
.build();
Optional<Path> exportPath = dialogService.showFileSaveDialog(fileDialogConfiguration);

if (exportPath.isEmpty()) {
return;
}

try (Writer writer = new OutputStreamWriter(Files.newOutputStream(exportPath.get()))) {
BibliographyConsistencyCheckResultTxtWriter bibliographyConsistencyCheckResultTxtWriter = new BibliographyConsistencyCheckResultTxtWriter(result, writer);
bibliographyConsistencyCheckResultTxtWriter.writeFindings();
} catch (IOException e) {
dialogService.notify(Localization.lang("Failed to export file!"));
}
}

public void startExportAsCsv() {
FileDialogConfiguration fileDialogConfiguration = new FileDialogConfiguration.Builder()
.withInitialDirectory(preferences.getFilePreferences().getWorkingDirectory())
.addExtensionFilter(StandardFileType.TXT)
.withDefaultExtension(StandardFileType.TXT)
.build();
Optional<Path> exportPath = dialogService.showFileSaveDialog(fileDialogConfiguration);

try (Writer writer = new OutputStreamWriter(Files.newOutputStream(exportPath.get()))) {
BibliographyConsistencyCheckResultCsvWriter bibliographyConsistencyCheckResultTxtWriter = new BibliographyConsistencyCheckResultCsvWriter(result, writer);
bibliographyConsistencyCheckResultTxtWriter.writeFindings();
} catch (IOException e) {
dialogService.notify(Localization.lang("Failed to export file!"));
}
}
}
2 changes: 1 addition & 1 deletion src/main/java/org/jabref/gui/frame/MainMenu.java
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ private void createMenu() {
factory.createMenuItem(StandardActions.FIND_DUPLICATES, new DuplicateSearch(frame::getCurrentLibraryTab, dialogService, stateManager, preferences, entryTypesManager, taskExecutor)),
factory.createMenuItem(StandardActions.MERGE_ENTRIES, new MergeEntriesAction(dialogService, stateManager, undoManager, preferences)),
factory.createMenuItem(StandardActions.CHECK_INTEGRITY, new IntegrityCheckAction(frame::getCurrentLibraryTab, preferences, dialogService, stateManager, (UiTaskExecutor) taskExecutor, abbreviationRepository)),
factory.createMenuItem(StandardActions.CHECK_CONSISTENCY, new ConsistencyCheckAction(dialogService, stateManager)),
factory.createMenuItem(StandardActions.CHECK_CONSISTENCY, new ConsistencyCheckAction(dialogService, stateManager, preferences)),
factory.createMenuItem(StandardActions.CLEANUP_ENTRIES, new CleanupAction(frame::getCurrentLibraryTab, preferences, dialogService, stateManager, taskExecutor, undoManager)),

new SeparatorMenuItem(),
Expand Down
12 changes: 8 additions & 4 deletions src/main/resources/l10n/JabRef_en.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1023,6 +1023,14 @@ Line\ %0\:\ Found\ corrupted\ citation\ key\ %1\ (comma\ missing).=Line %0: Foun
Check\ integrity=Check integrity
Checking\ integrity...=Checking integrity...

Check\ consistency=Check consistency
Select=Select
Entry\ type=Entry type
Export\ as\ csv\ file =Export as csv file
Export\ as\ txt\ file =Export as txt file
Shows\ results\ for\ the\ selected\ entry\ type.=Show results for the selected entry type.
Failed\ to\ export\ file!=Failed to export file!

Field\ Presence\ Consistency\ Check\ Result=Field Presence Consistency Check Result
required\ field\ is\ present=required field is present
optional\ field\ is\ present=optional field is present
Expand Down Expand Up @@ -2820,7 +2828,3 @@ Citation\ Entry=Citation Entry
File\ Move\ Errors=File Move Errors
Could\ not\ move\ file\ %0.\ Please\ close\ this\ file\ and\ retry.=Could not move file %0. Please close this file and retry.
Entry\ type=Entry type
Export\ as\ csv\ file =Export as csv file
Export\ as\ txt\ file =Export as txt file

0 comments on commit 77150ba

Please sign in to comment.