Skip to content

Commit

Permalink
Stop using event bus in EditFieldContentTabView
Browse files Browse the repository at this point in the history
  • Loading branch information
HoussemNasri committed Jul 29, 2022
1 parent f80232a commit 96c7ea8
Show file tree
Hide file tree
Showing 7 changed files with 113 additions and 22 deletions.
17 changes: 17 additions & 0 deletions src/main/java/org/jabref/gui/StateManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,19 @@
import javafx.beans.Observable;
import javafx.beans.binding.Bindings;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.ReadOnlyListProperty;
import javafx.beans.property.ReadOnlyListWrapper;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.collections.ObservableMap;
import javafx.concurrent.Task;
import javafx.scene.Node;
import javafx.util.Pair;

import org.jabref.gui.edit.automaticfiededitor.LastAutomaticFieldEditorEdit;
import org.jabref.gui.sidepane.SidePaneType;
import org.jabref.gui.util.BackgroundTask;
import org.jabref.gui.util.CustomLocalDragboard;
Expand Down Expand Up @@ -62,6 +65,8 @@ public class StateManager {
private final ObservableMap<String, DialogWindowState> dialogWindowStates = FXCollections.observableHashMap();
private final ObservableList<SidePaneType> visibleSidePanes = FXCollections.observableArrayList();

private final ObjectProperty<LastAutomaticFieldEditorEdit> lastAutomaticFieldEditorEdit = new SimpleObjectProperty<>();

public StateManager() {
activeGroups.bind(Bindings.valueAt(selectedGroups, activeDatabase.orElse(null)));
}
Expand Down Expand Up @@ -172,4 +177,16 @@ public DialogWindowState getDialogWindowState(String className) {
public void setDialogWindowState(String className, DialogWindowState state) {
dialogWindowStates.put(className, state);
}

public ObjectProperty<LastAutomaticFieldEditorEdit> lastAutomaticFieldEditorEditProperty() {
return lastAutomaticFieldEditorEdit;
}

public LastAutomaticFieldEditorEdit getLastAutomaticFieldEditorEdit() {
return lastAutomaticFieldEditorEditProperty().get();
}

public void setLastAutomaticFieldEditorEdit(LastAutomaticFieldEditorEdit automaticFieldEditorEdit) {
lastAutomaticFieldEditorEditProperty().set(automaticFieldEditorEdit);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,6 @@ public AutomaticFieldEditorAction(StateManager stateManager, DialogService dialo
@Override
public void execute() {
dialogService.showCustomDialogAndWait(new AutomaticFieldEditorDialog(stateManager.getSelectedEntries(),
stateManager.getActiveDatabase().map(BibDatabaseContext::getDatabase).orElseThrow()));
stateManager.getActiveDatabase().map(BibDatabaseContext::getDatabase).orElseThrow(), stateManager));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,15 @@
import javafx.scene.control.TabPane;

import org.jabref.gui.Globals;
import org.jabref.gui.StateManager;
import org.jabref.gui.util.BaseDialog;
import org.jabref.logic.l10n.Localization;
import org.jabref.model.database.BibDatabase;
import org.jabref.model.entry.BibEntry;

import com.airhacks.afterburner.views.ViewLoader;
import com.google.common.eventbus.Subscribe;
import com.tobiasdiez.easybind.EasyBind;

public class AutomaticFieldEditorDialog extends BaseDialog<String> {
@FXML
Expand All @@ -27,13 +29,17 @@ public class AutomaticFieldEditorDialog extends BaseDialog<String> {

private final BibDatabase database;
private final List<BibEntry> selectedEntries;

private final StateManager stateManager;

private AutomaticFieldEditorViewModel viewModel;

private List<NotificationPaneAdapter> notificationPanes = new ArrayList<>();

public AutomaticFieldEditorDialog(List<BibEntry> selectedEntries, BibDatabase database) {
public AutomaticFieldEditorDialog(List<BibEntry> selectedEntries, BibDatabase database, StateManager stateManager) {
this.selectedEntries = selectedEntries;
this.database = database;
this.stateManager = stateManager;
this.undoManager = Globals.undoManager;

this.setTitle(Localization.lang("Automatic field editor"));
Expand All @@ -60,14 +66,20 @@ public AutomaticFieldEditorDialog(List<BibEntry> selectedEntries, BibDatabase da

@FXML
public void initialize() {
viewModel = new AutomaticFieldEditorViewModel(selectedEntries, database, undoManager);
viewModel = new AutomaticFieldEditorViewModel(selectedEntries, database, undoManager, stateManager);

for (AutomaticFieldEditorTab tabModel : viewModel.getFieldEditorTabs()) {
NotificationPaneAdapter notificationPane = new NotificationPaneAdapter(tabModel.getContent());
notificationPanes.add(notificationPane);
tabModel.registerListener(this);
tabPane.getTabs().add(new Tab(tabModel.getTabName(), notificationPane));
}

EasyBind.listen(stateManager.lastAutomaticFieldEditorEditProperty(), (obs, old, lastEdit) -> {
viewModel.getDialogEdits().addEdit(lastEdit.getEdit());
notificationPanes.get(lastEdit.getTabIndex())
.notify(lastEdit.getAffectedEntries(), selectedEntries.size());
});
}

@Subscribe
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import javafx.collections.ObservableList;

import org.jabref.gui.AbstractViewModel;
import org.jabref.gui.StateManager;
import org.jabref.gui.edit.automaticfiededitor.copyormovecontent.CopyOrMoveFieldContentTabView;
import org.jabref.gui.edit.automaticfiededitor.editfieldcontent.EditFieldContentTabView;
import org.jabref.gui.edit.automaticfiededitor.renamefield.RenameFieldTabView;
Expand All @@ -19,15 +20,22 @@ public class AutomaticFieldEditorViewModel extends AbstractViewModel {
public static final String NAMED_COMPOUND_EDITS = "EDIT_FIELDS";
private final ObservableList<AutomaticFieldEditorTab> fieldEditorTabs = FXCollections.observableArrayList();
private final NamedCompound dialogEdits = new NamedCompound(NAMED_COMPOUND_EDITS);

private final StateManager stateManager;
private final UndoManager undoManager;

public AutomaticFieldEditorViewModel(List<BibEntry> selectedEntries, BibDatabase database, UndoManager undoManager) {
public AutomaticFieldEditorViewModel(List<BibEntry> selectedEntries, BibDatabase database, UndoManager undoManager, StateManager stateManager) {
this.undoManager = undoManager;
this.stateManager = stateManager;
fieldEditorTabs.addAll(
new EditFieldContentTabView(selectedEntries, database, dialogEdits),
new EditFieldContentTabView(selectedEntries, database, stateManager),
new CopyOrMoveFieldContentTabView(selectedEntries, database, dialogEdits),
new RenameFieldTabView(selectedEntries, database, dialogEdits)
);
this.undoManager = undoManager;
}

public NamedCompound getDialogEdits() {
return dialogEdits;
}

public ObservableList<AutomaticFieldEditorTab> getFieldEditorTabs() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package org.jabref.gui.edit.automaticfiededitor;

import javax.swing.undo.AbstractUndoableEdit;
import javax.swing.undo.CannotRedoException;
import javax.swing.undo.CannotUndoException;

import org.jabref.gui.undo.NamedCompound;

public class LastAutomaticFieldEditorEdit extends AbstractUndoableEdit {
private final Integer affectedEntries;
private final NamedCompound edit;

private final Integer tabIndex;

public LastAutomaticFieldEditorEdit(Integer affectedEntries, Integer tabIndex, NamedCompound edit) {
this.affectedEntries = affectedEntries;
this.edit = edit;
this.tabIndex = tabIndex;
}

public Integer getAffectedEntries() {
return affectedEntries;
}

public NamedCompound getEdit() {
return edit;
}

public Integer getTabIndex() {
return tabIndex;
}

@Override
public void undo() throws CannotUndoException {
super.undo();
edit.undo();
}

@Override
public void redo() throws CannotRedoException {
super.redo();
edit.redo();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;

import org.jabref.gui.StateManager;
import org.jabref.gui.edit.automaticfiededitor.AbstractAutomaticFieldEditorTabView;
import org.jabref.gui.undo.NamedCompound;
import org.jabref.logic.l10n.Localization;
import org.jabref.model.database.BibDatabase;
import org.jabref.model.entry.BibEntry;
Expand Down Expand Up @@ -40,14 +40,14 @@ public class EditFieldContentTabView extends AbstractAutomaticFieldEditorTabView

private EditFieldContentViewModel viewModel;

private final NamedCompound dialogEdits;
private final StateManager stateManager;

private final ControlsFxVisualizer visualizer = new ControlsFxVisualizer();

public EditFieldContentTabView(List<BibEntry> selectedEntries, BibDatabase database, NamedCompound dialogEdits) {
public EditFieldContentTabView(List<BibEntry> selectedEntries, BibDatabase database, StateManager stateManager) {
this.selectedEntries = selectedEntries;
this.database = database;
this.dialogEdits = dialogEdits;
this.stateManager = stateManager;

ViewLoader.view(this)
.root(this)
Expand All @@ -56,7 +56,7 @@ public EditFieldContentTabView(List<BibEntry> selectedEntries, BibDatabase datab

@FXML
public void initialize() {
viewModel = new EditFieldContentViewModel(database, selectedEntries, dialogEdits);
viewModel = new EditFieldContentViewModel(database, selectedEntries, stateManager);
fieldComboBox.setConverter(FIELD_STRING_CONVERTER);

fieldComboBox.getItems().setAll(viewModel.getAllFields());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;

import org.jabref.gui.StateManager;
import org.jabref.gui.edit.automaticfiededitor.AbstractAutomaticFieldEditorTabViewModel;
import org.jabref.gui.edit.automaticfiededitor.AutomaticFieldEditorEvent;
import org.jabref.gui.edit.automaticfiededitor.LastAutomaticFieldEditorEdit;
import org.jabref.gui.undo.NamedCompound;
import org.jabref.gui.undo.UndoableFieldChange;
import org.jabref.model.database.BibDatabase;
Expand All @@ -39,15 +40,15 @@ public class EditFieldContentViewModel extends AbstractAutomaticFieldEditorTabVi

private final BooleanProperty overwriteFieldContent = new SimpleBooleanProperty(Boolean.FALSE);

private final NamedCompound dialogEdits;
private final StateManager stateManager;

private final Validator fieldValidator;
private final BooleanBinding canAppend;

public EditFieldContentViewModel(BibDatabase database, List<BibEntry> selectedEntries, NamedCompound dialogEdits) {
public EditFieldContentViewModel(BibDatabase database, List<BibEntry> selectedEntries, StateManager stateManager) {
super(database);
this.selectedEntries = new ArrayList<>(selectedEntries);
this.dialogEdits = dialogEdits;
this.stateManager = stateManager;

fieldValidator = new FunctionBasedValidator<>(selectedField, field -> {
if (StringUtil.isBlank(field.getName())) {
Expand Down Expand Up @@ -83,9 +84,12 @@ public void clearSelectedField() {

if (clearFieldEdit.hasEdits()) {
clearFieldEdit.end();
dialogEdits.addEdit(clearFieldEdit);
}
eventBus.post(new AutomaticFieldEditorEvent(TAB_INDEX, affectedEntriesCount));
stateManager.setLastAutomaticFieldEditorEdit(new LastAutomaticFieldEditorEdit(
affectedEntriesCount,
TAB_INDEX,
clearFieldEdit
));
}

public void setFieldValue() {
Expand All @@ -96,7 +100,7 @@ public void setFieldValue() {
Optional<String> oldFieldValue = entry.getField(selectedField.get());
if (oldFieldValue.isEmpty() || overwriteFieldContent.get()) {
entry.setField(selectedField.get(), toSetFieldValue)
.ifPresent(fieldChange -> setFieldEdit.addEdit(new UndoableFieldChange(fieldChange)));
.ifPresent(fieldChange -> setFieldEdit.addEdit(new UndoableFieldChange(fieldChange)));
fieldValue.set("");
// TODO: increment affected entries only when UndoableFieldChange.isPresent()
affectedEntriesCount++;
Expand All @@ -105,9 +109,12 @@ public void setFieldValue() {

if (setFieldEdit.hasEdits()) {
setFieldEdit.end();
dialogEdits.addEdit(setFieldEdit);
}
eventBus.post(new AutomaticFieldEditorEvent(TAB_INDEX, affectedEntriesCount));
stateManager.setLastAutomaticFieldEditorEdit(new LastAutomaticFieldEditorEdit(
affectedEntriesCount,
TAB_INDEX,
setFieldEdit
));
}

public void appendToFieldValue() {
Expand All @@ -130,9 +137,12 @@ public void appendToFieldValue() {

if (appendToFieldEdit.hasEdits()) {
appendToFieldEdit.end();
dialogEdits.addEdit(appendToFieldEdit);
}
eventBus.post(new AutomaticFieldEditorEvent(TAB_INDEX, affectedEntriesCount));
stateManager.setLastAutomaticFieldEditorEdit(new LastAutomaticFieldEditorEdit(
affectedEntriesCount,
TAB_INDEX,
appendToFieldEdit
));
}

public ObjectProperty<Field> selectedFieldProperty() {
Expand Down

0 comments on commit 96c7ea8

Please sign in to comment.