package org.jabref.collab;
import javax.swing.JComponent;
import javax.swing.JLabel;
import org.jabref.gui.BasePanel;
import org.jabref.gui.groups.GroupTreeNodeViewModel;
import org.jabref.gui.groups.UndoableModifySubtree;
import org.jabref.gui.undo.NamedCompound;
import org.jabref.logic.groups.DefaultGroupsFactory;
import org.jabref.logic.l10n.Localization;
import org.jabref.model.database.BibDatabase;
import org.jabref.model.groups.GroupTreeNode;
class GroupChange extends Change {
private final GroupTreeNode changedGroups;
private final GroupTreeNode tmpGroupRoot;
public GroupChange(GroupTreeNode changedGroups, GroupTreeNode tmpGroupRoot) {
super(changedGroups == null ? Localization.lang("Removed all groups") : Localization
.lang("Modified groups tree"));
this.changedGroups = changedGroups;
this.tmpGroupRoot = tmpGroupRoot;
}
@Override
public boolean makeChange(BasePanel panel, BibDatabase secondary, NamedCompound undoEdit) {
final GroupTreeNode root = panel.getBibDatabaseContext().getMetaData().getGroups().orElse(null);
final UndoableModifySubtree undo = new UndoableModifySubtree(
new GroupTreeNodeViewModel(panel.getBibDatabaseContext().getMetaData().getGroups().orElse(null)),
new GroupTreeNodeViewModel(root), Localization.lang("Modified groups"));
root.removeAllChildren();
if (changedGroups == null) {
// I think setting root to null is not possible
root.setGroup(DefaultGroupsFactory.getAllEntriesGroup());
} else {
// change root group, even though it'll be AllEntries anyway
root.setGroup(changedGroups.getGroup());
for (GroupTreeNode child : changedGroups.getChildren()) {
child.copySubtree().moveTo(root);
}
}
undoEdit.addEdit(undo);
// Update tmp database:
tmpGroupRoot.removeAllChildren();
if (changedGroups != null) {
GroupTreeNode copied = changedGroups.copySubtree();
tmpGroupRoot.setGroup(copied.getGroup());
for (GroupTreeNode child : copied.getChildren()) {
child.copySubtree().moveTo(tmpGroupRoot);
}
}
return true;
}
@Override
public JComponent description() {
return new JLabel("<html>" + toString() + '.'
+ (changedGroups == null ? "" : ' ' + Localization
.lang("Accepting the change replaces the complete groups tree with the externally modified groups tree."))
+ "</html>");
}
}