package net.sf.jabref.collab; import javax.swing.JComponent; import javax.swing.JLabel; import net.sf.jabref.BasePanel; import net.sf.jabref.Globals; import net.sf.jabref.BibtexDatabase; import net.sf.jabref.groups.AllEntriesGroup; import net.sf.jabref.groups.GroupTreeNode; import net.sf.jabref.groups.UndoableModifySubtree; import net.sf.jabref.undo.NamedCompound; public class GroupChange extends Change { private final GroupTreeNode m_changedGroups; private GroupTreeNode tmpGroupRoot; public GroupChange(GroupTreeNode changedGroups, GroupTreeNode tmpGroupRoot) { super(changedGroups != null ? "Modified groups tree" : "Removed all groups"); // JZTODO lyrics m_changedGroups = changedGroups; this.tmpGroupRoot = tmpGroupRoot; } public boolean makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) { final GroupTreeNode root = panel.getGroupSelector().getGroupTreeRoot(); final UndoableModifySubtree undo = new UndoableModifySubtree( panel.getGroupSelector(), root, Globals.lang("Modified groups")); // JZTODO lyrics root.removeAllChildren(); if (m_changedGroups == null) { // I think setting root to null is not possible root.setGroup(new AllEntriesGroup()); } else { // change root group, even though it'll be AllEntries anyway root.setGroup(m_changedGroups.getGroup()); for (int i = 0; i < m_changedGroups.getChildCount(); ++i) root.add(((GroupTreeNode) m_changedGroups.getChildAt(i)).deepCopy()); // the group tree is now appled to a different BibtexDatabase than it was created // for, which affects groups such as ExplicitGroup (which links to BibtexEntry objects). // We must traverse the tree and refresh all groups: root.refreshGroupsForNewDatabase(panel.database()); } panel.getGroupSelector().revalidateGroups(); undoEdit.addEdit(undo); // Update tmp database: GroupTreeNode copied = m_changedGroups.deepCopy(); tmpGroupRoot.removeAllChildren(); tmpGroupRoot.setGroup(copied.getGroup()); for (int i = 0; i < copied.getChildCount(); ++i) tmpGroupRoot.add(((GroupTreeNode) copied.getChildAt(i)).deepCopy()); tmpGroupRoot.refreshGroupsForNewDatabase(secondary); return true; } JComponent description() { return new JLabel("<html>" + name + "." + (m_changedGroups != null ? " " + "Accepting the change replaces the complete " + "groups tree with the externally modified groups tree." : "") + "</html>"); // JZTODO lyrics } }