Skip to content

Commit e6998d6

Browse files
committed
Remove deprecated Observer and Observable usage
With this the RupsEvent and its package was removed. Usages were replaced with the following: 1. Somewhat global events (like document opened/closed) are now handled by IRupsEventListener. Implementers of this interface handle the global events and may forward them further in any way they like. 2. Events from PdfObjectPanel were extracted to IPdfObjectPanelEventListener interface and now only PdfReaderController explicitly handles them. Not quite sure, why they were on a somewhat global level originally. 3. Events, like _requests_ (not the aftermath) of stuff, like open/close were replaced with direct calls or individual functional listener interfaces. FileCloseAction was inlined into a lambda. There is no real need to have a full class, when the handler just calls one methods on an object. FileCompareAction was removed, since it is currently unused and we would want to reuse PdfFileOpenAction for it in the future, so that MRU also works there.
1 parent 0f0bbc6 commit e6998d6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+593
-1927
lines changed

src/main/java/com/itextpdf/rups/Rups.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,6 @@ static IRupsController initApplication(JFrame frame) {
141141
final RupsTabbedPane rupsTabbedPane = new RupsTabbedPane();
142142
final RupsController rupsController = new RupsController(screen, rupsTabbedPane);
143143
final RupsMenuBar rupsMenuBar = new RupsMenuBar(rupsController);
144-
rupsController.addObserver(rupsMenuBar);
145144

146145
frame.setDropTarget(new RupsDropTarget(rupsController));
147146
frame.setJMenuBar(rupsMenuBar);

src/main/java/com/itextpdf/rups/controller/IRupsController.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ This file is part of the iText (R) project.
4343
package com.itextpdf.rups.controller;
4444

4545
import com.itextpdf.rups.model.IPdfFile;
46+
import com.itextpdf.rups.model.IRupsEventListener;
4647

4748
import java.awt.Component;
4849
import java.io.File;
@@ -51,7 +52,7 @@ This file is part of the iText (R) project.
5152
* The controller in charge of the application. To view the specific tab controllers, look at the RupsInstanceController
5253
* class.
5354
*/
54-
public interface IRupsController {
55+
public interface IRupsController extends IRupsEventListener {
5556

5657
/**
5758
* Returns the main component of RUPS.

src/main/java/com/itextpdf/rups/controller/PdfReaderController.java

Lines changed: 82 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -48,31 +48,25 @@ This file is part of the iText (R) project.
4848
import com.itextpdf.kernel.pdf.PdfObject;
4949
import com.itextpdf.kernel.pdf.PdfStream;
5050
import com.itextpdf.kernel.utils.CompareTool;
51+
import com.itextpdf.kernel.utils.CompareTool.CompareResult;
5152
import com.itextpdf.kernel.utils.objectpathitems.ArrayPathItem;
5253
import com.itextpdf.kernel.utils.objectpathitems.DictPathItem;
5354
import com.itextpdf.kernel.utils.objectpathitems.IndirectPathItem;
5455
import com.itextpdf.kernel.utils.objectpathitems.LocalPathItem;
5556
import com.itextpdf.kernel.utils.objectpathitems.ObjectPath;
56-
import com.itextpdf.rups.event.NodeAddArrayChildEvent;
57-
import com.itextpdf.rups.event.NodeAddDictChildEvent;
58-
import com.itextpdf.rups.event.NodeDeleteArrayChildEvent;
59-
import com.itextpdf.rups.event.NodeDeleteDictChildEvent;
60-
import com.itextpdf.rups.event.OpenPlainTextEvent;
61-
import com.itextpdf.rups.event.OpenStructureEvent;
62-
import com.itextpdf.rups.event.RupsEvent;
6357
import com.itextpdf.rups.io.listeners.PdfTreeNavigationListener;
64-
import com.itextpdf.rups.model.IPdfFile;
6558
import com.itextpdf.rups.model.ObjectLoader;
6659
import com.itextpdf.rups.model.PdfSyntaxParser;
6760
import com.itextpdf.rups.model.TreeNodeFactory;
6861
import com.itextpdf.rups.view.DebugView;
69-
import com.itextpdf.rups.view.IRupsEventHandler;
62+
import com.itextpdf.rups.model.IRupsEventListener;
7063
import com.itextpdf.rups.view.Language;
7164
import com.itextpdf.rups.view.PageSelectionListener;
7265
import com.itextpdf.rups.view.contextmenu.PdfTreeContextMenu;
7366
import com.itextpdf.rups.view.contextmenu.PdfTreeContextMenuMouseListener;
7467
import com.itextpdf.rups.view.icons.IconTreeNode;
7568
import com.itextpdf.rups.view.itext.FormTree;
69+
import com.itextpdf.rups.view.itext.IPdfObjectPanelEventListener;
7670
import com.itextpdf.rups.view.itext.OutlineTree;
7771
import com.itextpdf.rups.view.itext.PagesTable;
7872
import com.itextpdf.rups.view.itext.PdfObjectPanel;
@@ -82,27 +76,23 @@ This file is part of the iText (R) project.
8276
import com.itextpdf.rups.view.itext.SyntaxHighlightedStreamPane;
8377
import com.itextpdf.rups.view.itext.XRefTable;
8478
import com.itextpdf.rups.view.itext.treenodes.PdfObjectTreeNode;
85-
import com.itextpdf.rups.view.itext.treenodes.PdfTrailerTreeNode;
8679

8780
import java.awt.Color;
8881
import java.awt.event.KeyListener;
89-
import java.util.Observable;
90-
import java.util.Observer;
9182
import java.util.Stack;
9283
import java.util.function.Consumer;
9384
import javax.swing.JPanel;
9485
import javax.swing.JScrollPane;
9586
import javax.swing.JTabbedPane;
9687
import javax.swing.event.ChangeEvent;
97-
import javax.swing.event.ChangeListener;
9888
import javax.swing.event.TreeSelectionListener;
9989
import javax.swing.tree.DefaultTreeModel;
10090
import javax.swing.tree.TreePath;
10191

10292
/**
10393
* Controls the components that get their content from iText's PdfReader.
10494
*/
105-
public class PdfReaderController extends Observable implements Observer {
95+
public class PdfReaderController implements IPdfObjectPanelEventListener, IRupsEventListener {
10696

10797
/**
10898
* Treeview of the PDF file.
@@ -155,9 +145,9 @@ public class PdfReaderController extends Observable implements Observer {
155145
*/
156146
protected PlainText text;
157147

158-
private Stack<IconTreeNode> highlights = new Stack<>();
148+
private final Stack<IconTreeNode> highlights = new Stack<>();
159149

160-
private PdfSyntaxParser parser = new PdfSyntaxParser();
150+
private final PdfSyntaxParser parser = new PdfSyntaxParser();
161151

162152
/**
163153
* Constructs the PdfReaderController.
@@ -175,20 +165,13 @@ public PdfReaderController(TreeSelectionListener treeSelectionListener,
175165
final PdfTreeContextMenu menu = new PdfTreeContextMenu(pdfTree);
176166
pdfTree.setComponentPopupMenu(menu);
177167
pdfTree.addMouseListener(new PdfTreeContextMenuMouseListener(menu, pdfTree));
178-
addObserver(pdfTree);
179168

180169
pages = new PagesTable(this, pageSelectionListener);
181-
addObserver(pages);
182170
outlines = new OutlineTree(this);
183-
addObserver(outlines);
184171
structure = new StructureTree(this);
185-
addObserver(structure);
186172
form = new FormTree(this);
187-
addObserver(form);
188173
xref = new XRefTable(this);
189-
addObserver(xref);
190174
text = new PlainText();
191-
addObserver(text);
192175

193176
navigationTabs = new JTabbedPane();
194177
final String pagesString = Language.PAGES.getString();
@@ -205,27 +188,22 @@ public PdfReaderController(TreeSelectionListener treeSelectionListener,
205188
Language.XREF_DESCRIPTION.getString());
206189
navigationTabs.addTab(Language.PLAINTEXT.getString(), null, new JScrollPane(text),
207190
Language.PLAINTEXT_DESCRIPTION.getString());
208-
navigationTabs.addChangeListener(new ChangeListener() {
209-
public void stateChanged(ChangeEvent e) {
210-
if (navigationTabs.getSelectedIndex() != -1) {
211-
final String title = navigationTabs.getTitleAt(navigationTabs.getSelectedIndex());
212-
213-
if (Language.STRUCTURE.getString().equals(title)) {
214-
structure.update(PdfReaderController.this, new OpenStructureEvent());
215-
} else if (Language.PLAINTEXT.getString().equals(title)) {
216-
text.update(PdfReaderController.this, new OpenPlainTextEvent());
217-
} else {
218-
// Intentionally empty
219-
}
191+
navigationTabs.addChangeListener((ChangeEvent e) -> {
192+
if (navigationTabs.getSelectedIndex() != -1) {
193+
final String title = navigationTabs.getTitleAt(navigationTabs.getSelectedIndex());
194+
195+
if (Language.STRUCTURE.getString().equals(title)) {
196+
structure.openStructure();
197+
} else if (Language.PLAINTEXT.getString().equals(title)) {
198+
text.openPlainText();
220199
}
200+
// No special handling for other tabs
221201
}
222202
});
223203

224204
objectPanel = new PdfObjectPanel();
225-
addObserver(objectPanel);
226-
objectPanel.addObserver(this);
205+
objectPanel.addEventListener(this);
227206
streamPane = new SyntaxHighlightedStreamPane(this);
228-
addObserver(streamPane);
229207
JScrollPane debug = new JScrollPane(DebugView.getInstance().getTextArea());
230208
editorTabs = new JTabbedPane();
231209
editorTabs.addTab(Language.STREAM.getString(), null, streamPane, Language.STREAM.getString());
@@ -289,79 +267,6 @@ public PdfSyntaxParser getParser() {
289267
return parser;
290268
}
291269

292-
/**
293-
* @see java.util.Observer#update(java.util.Observable, java.lang.Object)
294-
*/
295-
public void update(Observable observable, Object obj) {
296-
if (observable != null && obj instanceof RupsEvent) {
297-
RupsEvent event = (RupsEvent) obj;
298-
switch (event.getType()) {
299-
case RupsEvent.COMPARE_POST_EVENT:
300-
highlightChanges((CompareTool.CompareResult) event.getContent());
301-
pdfTree.repaint();
302-
break;
303-
case RupsEvent.OPEN_DOCUMENT_POST_EVENT:
304-
final ObjectLoader loader = (ObjectLoader) event.getContent();
305-
final IPdfFile pdfFile = loader.getFile();
306-
nodes = loader.getNodes();
307-
final PdfTrailerTreeNode root = pdfTree.getRoot();
308-
root.setTrailer(pdfFile.getPdfDocument().getTrailer());
309-
root.setUserObject(String.format(Language.PDF_OBJECT_TREE.getString(), loader.getLoaderName()));
310-
nodes.expandNode(root);
311-
navigationTabs.setSelectedIndex(0);
312-
streamPane.setEditable(pdfFile.isOpenedAsOwner());
313-
objectPanel.setEditable(pdfFile.isOpenedAsOwner());
314-
setChanged();
315-
super.notifyObservers(event);
316-
break;
317-
case RupsEvent.TREE_NODE_CLICKED_EVENT:
318-
PdfObjectTreeNode node = (PdfObjectTreeNode) event.getContent();
319-
nodes.expandNode(node);
320-
321-
if (node.isRecursive()) {
322-
boolean keyboardNav = false;
323-
324-
KeyListener[] listeners = pdfTree.getKeyListeners();
325-
326-
for (KeyListener listener : listeners) {
327-
if (listener instanceof PdfTreeNavigationListener) {
328-
keyboardNav = ((PdfTreeNavigationListener) listener).isLastActionKeyboardNavigation();
329-
}
330-
}
331-
332-
if (!keyboardNav) {
333-
pdfTree.selectNode(node.getAncestor());
334-
return;
335-
}
336-
}
337-
render(node);
338-
break;
339-
case RupsEvent.NODE_DELETE_DICT_CHILD_EVENT:
340-
deleteTreeNodeDictChild(((NodeDeleteDictChildEvent.Content) event.getContent()).parent,
341-
((NodeDeleteDictChildEvent.Content) event.getContent()).key);
342-
break;
343-
case RupsEvent.NODE_ADD_DICT_CHILD_EVENT:
344-
addTreeNodeDictChild(((NodeAddDictChildEvent.Content) event.getContent()).parent,
345-
((NodeAddDictChildEvent.Content) event.getContent()).key,
346-
((NodeAddDictChildEvent.Content) event.getContent()).index);
347-
break;
348-
case RupsEvent.NODE_ADD_ARRAY_CHILD_EVENT:
349-
addTreeNodeArrayChild(((NodeAddArrayChildEvent.Content) event.getContent()).parent,
350-
((NodeAddArrayChildEvent.Content) event.getContent()).index);
351-
break;
352-
case RupsEvent.NODE_DELETE_ARRAY_CHILD_EVENT:
353-
deleteTreeChild(((NodeDeleteArrayChildEvent.Content) event.getContent()).parent,
354-
((NodeDeleteArrayChildEvent.Content) event.getContent()).index);
355-
break;
356-
case RupsEvent.POST_NEW_INDIRECT_OBJECT_EVENT:
357-
nodes.addNewIndirectObject((PdfObject) event.getContent());
358-
setChanged();
359-
notifyObservers(event);
360-
break;
361-
}
362-
}
363-
}
364-
365270
/**
366271
* Selects a node in the PdfTree.
367272
*
@@ -491,13 +396,75 @@ public int addTreeNodeChild(PdfObjectTreeNode parent, PdfObjectTreeNode child, i
491396
return index;
492397
}
493398

494-
public void reset() {
399+
@Override
400+
public void handleCloseDocument() {
495401
nodes = null;
496-
setChanged();
497-
forAllComponents(IRupsEventHandler::handleCloseDocument);
402+
forAllComponents(IRupsEventListener::handleCloseDocument);
403+
}
404+
405+
@Override
406+
public void handleOpenDocument(ObjectLoader loader) {
407+
nodes = loader.getNodes();
408+
navigationTabs.setSelectedIndex(0);
409+
forAllComponents(c -> c.handleOpenDocument(loader));
410+
}
411+
412+
@Override
413+
public void handleNewIndirectObject(PdfObject object) {
414+
nodes.addNewIndirectObject(object);
415+
forAllComponents(c -> c.handleNewIndirectObject(object));
416+
}
417+
418+
@Override
419+
public void handleCompare(CompareResult result) {
420+
highlightChanges(result);
421+
pdfTree.repaint();
422+
}
423+
424+
@Override
425+
public void handlePdfTreeNodeClicked(PdfObjectTreeNode node) {
426+
nodes.expandNode(node);
427+
428+
if (node.isRecursive()) {
429+
boolean keyboardNav = false;
430+
431+
KeyListener[] listeners = pdfTree.getKeyListeners();
432+
433+
for (KeyListener listener : listeners) {
434+
if (listener instanceof PdfTreeNavigationListener) {
435+
keyboardNav = ((PdfTreeNavigationListener) listener).isLastActionKeyboardNavigation();
436+
}
437+
}
438+
439+
if (!keyboardNav) {
440+
pdfTree.selectNode(node.getAncestor());
441+
return;
442+
}
443+
}
444+
render(node);
445+
}
446+
447+
@Override
448+
public void handleArrayChildAdded(PdfObject value, PdfObjectTreeNode parent, int index) {
449+
addTreeNodeArrayChild(parent, index);
450+
}
451+
452+
@Override
453+
public void handleArrayChildDeleted(PdfObjectTreeNode parent, int index) {
454+
deleteTreeChild(parent, index);
455+
}
456+
457+
@Override
458+
public void handleDictChildAdded(PdfObject value, PdfObjectTreeNode parent, PdfName key, int index) {
459+
addTreeNodeDictChild(parent, key, index);
460+
}
461+
462+
@Override
463+
public void handleDictChildDeleted(PdfObjectTreeNode parent, PdfName key) {
464+
deleteTreeNodeDictChild(parent, key);
498465
}
499466

500-
private void forAllComponents(Consumer<IRupsEventHandler> func) {
467+
private void forAllComponents(Consumer<IRupsEventListener> func) {
501468
func.accept(pdfTree);
502469
func.accept(pages);
503470
func.accept(outlines);

0 commit comments

Comments
 (0)