Skip to content

Pull Request to create/update 'rebased/refactoring/observer-pattern' branch #79

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 12 additions & 9 deletions src/main/java/com/itextpdf/rups/Rups.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,7 @@ This file is part of the iText (R) project.
import com.itextpdf.rups.controller.IRupsController;
import com.itextpdf.rups.controller.RupsController;
import com.itextpdf.rups.model.LoggerHelper;
import com.itextpdf.rups.view.Language;
import com.itextpdf.rups.view.RupsDropTarget;
import com.itextpdf.rups.view.RupsMenuBar;
import com.itextpdf.rups.view.RupsTabbedPane;
import com.itextpdf.rups.view.*;
import com.itextpdf.rups.view.icons.FrameIconUtil;

import java.awt.BorderLayout;
Expand Down Expand Up @@ -87,7 +84,7 @@ static void setLookandFeel() {
UIManager.setLookAndFeel(RupsConfiguration.INSTANCE.getLookAndFeel());
} catch (
ClassNotFoundException | InstantiationException |
IllegalAccessException | UnsupportedLookAndFeelException e) {
IllegalAccessException | UnsupportedLookAndFeelException e) {
LoggerHelper.error(Language.ERROR_LOOK_AND_FEEL.getString(), e, Rups.class);
}
}
Expand All @@ -100,21 +97,27 @@ static IRupsController initApplication(JFrame frame) {

// title bar
frame.setTitle(
String.format(Language.TITLE.getString(), ITextCoreProductData.getInstance().getVersion()));
String.format(Language.TITLE.getString(), ITextCoreProductData.getInstance().getVersion())
);
frame.setIconImages(FrameIconUtil.loadFrameIcons());
frame.setDefaultCloseOperation(RupsConfiguration.INSTANCE.getCloseOperation());

final RupsTabbedPane rupsTabbedPane = new RupsTabbedPane();
final RupsController rupsController = new RupsController(screen, rupsTabbedPane);
final RupsMenuBar rupsMenuBar = new RupsMenuBar(rupsController);
rupsController.addObserver(rupsMenuBar);
configureMenuBar(rupsController, frame);

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

frame.getContentPane().add(rupsController.getMasterComponent(), BorderLayout.CENTER);
frame.setVisible(true);

return rupsController;
}

private static void configureMenuBar(final RupsController rupsController, JFrame frame) {
final RupsMenuBar rupsMenuBar = new RupsMenuBar(rupsController);
final RupsMenuBarChangeListener rupsMenuBarChangeListener = new RupsMenuBarChangeListener(rupsMenuBar);
rupsController.addPropertyChangeListener(rupsMenuBarChangeListener);
frame.setJMenuBar(rupsMenuBar);
}
}
57 changes: 27 additions & 30 deletions src/main/java/com/itextpdf/rups/controller/RupsController.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,11 @@ This file is part of the iText (R) project.
import com.itextpdf.rups.view.Language;
import com.itextpdf.rups.view.RupsTabbedPane;

import javax.swing.event.SwingPropertyChangeSupport;
import java.awt.Component;
import java.awt.Dimension;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.File;
import java.util.Observable;
import java.util.Observer;
Expand All @@ -62,12 +65,14 @@ This file is part of the iText (R) project.
* the RUPS application: the menu bar, the panels,...
*/
public class RupsController extends Observable
implements Observer, IRupsController {
implements IRupsController {

private final RupsTabbedPane rupsTabbedPane;

private final Dimension dimension;

private final PropertyChangeSupport propertyChangeSupport;

/**
* Constructs the GUI components of the RUPS application.
*
Expand All @@ -78,6 +83,8 @@ public RupsController(Dimension dimension, RupsTabbedPane rupsTabbedPane) {
this.rupsTabbedPane = rupsTabbedPane;

this.dimension = dimension;

this.propertyChangeSupport = new SwingPropertyChangeSupport(this);
}

/**
Expand All @@ -90,43 +97,24 @@ public Component getMasterComponent() {
return rupsTabbedPane.getJTabbedPane();
}

@Override
public final void update(Observable o, Object arg) {
//Events that have come from non observable classes: ObjectLoader and FileChooserAction
if (o == null && arg instanceof RupsEvent) {
RupsEvent event = (RupsEvent) arg;
switch (event.getType()) {
case RupsEvent.CLOSE_DOCUMENT_EVENT:
this.closeCurrentFile();
break;
case RupsEvent.OPEN_FILE_EVENT:
this.openNewFile((File) event.getContent());
break;
case RupsEvent.COMPARE_WITH_FILE_EVENT:
break;
case RupsEvent.SAVE_TO_FILE_EVENT:
this.rupsTabbedPane.saveCurrentFile((File) event.getContent());
break;
case RupsEvent.OPEN_DOCUMENT_POST_EVENT:
default:
setChanged();
super.notifyObservers(event);
break;
}
} else {
setChanged();
super.notifyObservers(arg);
}
public final void update(Object arg) {
setChanged();
super.notifyObservers(arg);
}

@Override
public final void closeCurrentFile() {
PdfFile lastFile = this.rupsTabbedPane.getCurrentFile();
final boolean lastOne = this.rupsTabbedPane.closeCurrentFile();
if (lastOne) {
this.update(this, new AllFilesClosedEvent());
this.propertyChangeSupport.firePropertyChange("ALL_FILES_CLOSED", lastFile, null);
}
}

public final void saveCurrentFile(File saveLocation) {
this.rupsTabbedPane.saveCurrentFile(saveLocation);
}

@Override
public final PdfFile getCurrentFile() {
return this.rupsTabbedPane.getCurrentFile();
Expand All @@ -141,7 +129,16 @@ public final void openNewFile(File file) {
}

this.rupsTabbedPane.openNewFile(file, this.dimension, false);
this.update(this, new OpenFileEvent(file));
this.propertyChangeSupport.firePropertyChange("FILE_OPEN", null, file);
this.propertyChangeSupport.firePropertyChange("FILE_LOADED", null, file);
}
}

public void addPropertyChangeListener(PropertyChangeListener propertyChangeListener) {
this.propertyChangeSupport.addPropertyChangeListener(propertyChangeListener);
}

public void removePropertyChangeListener(PropertyChangeListener propertyChangeListener) {
this.propertyChangeSupport.removePropertyChangeListener(propertyChangeListener);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -345,7 +345,7 @@ public void run() {
}
});
loader = new ObjectLoader(this, pdfFile, pdfFile.getFilename(), dialog);
loader.start();
loader.execute();
}

// tree selection
Expand Down
13 changes: 4 additions & 9 deletions src/main/java/com/itextpdf/rups/io/FileChooserAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,6 @@ This file is part of the iText (R) project.
*/
public abstract class FileChooserAction extends AbstractAction {

/**
* An object that is expecting the result of the file chooser action.
*/
protected Observer observer;
/**
* A file filter to apply when browsing for a file.
*/
Expand All @@ -83,14 +79,12 @@ public abstract class FileChooserAction extends AbstractAction {
/**
* Creates a new file chooser action.
*
* @param observer the object waiting for you to select file
* @param caption a description for the action
* @param filter a filter to apply when browsing
* @param parent a parent Component for chooser dialog
*/
public FileChooserAction(Observer observer, String caption, FileFilter filter, Component parent) {
public FileChooserAction(String caption, FileFilter filter, Component parent) {
super(caption);
this.observer = observer;
this.filter = filter;
this.parent = parent;
}
Expand Down Expand Up @@ -119,11 +113,12 @@ public void actionPerformed(ActionEvent evt) {
if (okCancel == JFileChooser.APPROVE_OPTION) {
file = fileChooser.getSelectedFile();
lastSelectedFolder = fileChooser.getCurrentDirectory();
observer.update(null, getEvent());
// observer.update(null, getEvent());
firePropertyChange(getEvent(), null, getFile());
}
}

protected abstract int showDialog();

protected abstract RupsEvent getEvent();
protected abstract String getEvent();
}
23 changes: 4 additions & 19 deletions src/main/java/com/itextpdf/rups/io/FileCloseAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ This file is part of the iText (R) project.

import com.itextpdf.rups.event.CloseDocumentEvent;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Observer;
Expand All @@ -52,27 +53,11 @@ This file is part of the iText (R) project.
* Action that tells an observer to close a file and/or releases
* resources relevant for the file that is being closed.
*/
public class FileCloseAction implements ActionListener {
public class FileCloseAction extends AbstractAction {

/**
* An object that allows you to close a file.
*/
protected Observer observer;

/**
* Creates the close action.
*
* @param observer the object that expects you to close a file.
*/
public FileCloseAction(Observer observer) {
this.observer = observer;
}

/**
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
@Override
public void actionPerformed(ActionEvent evt) {
observer.update(null, new CloseDocumentEvent());
firePropertyChange("FILE_CLOSE", null, null);
}

}
9 changes: 4 additions & 5 deletions src/main/java/com/itextpdf/rups/io/FileCompareAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,11 @@ public class FileCompareAction extends FileChooserAction {
/**
* Creates a new file chooser action.
*
* @param observer the object waiting for you to select file
* @param filter a filter to apply when browsing
* @param parent a parent Component for chooser dialog
*/
public FileCompareAction(Observer observer, FileFilter filter, Component parent) {
super(observer, Language.COMPARE_WITH.getString(), filter, parent);
public FileCompareAction(FileFilter filter, Component parent) {
super(Language.COMPARE_WITH.getString(), filter, parent);
}

@Override
Expand All @@ -70,7 +69,7 @@ protected int showDialog() {
}

@Override
protected RupsEvent getEvent() {
return new CompareWithFileEvent(getFile());
protected String getEvent() {
return "FILE_COMPARE";
}
}
9 changes: 4 additions & 5 deletions src/main/java/com/itextpdf/rups/io/FileOpenAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -54,12 +54,11 @@ public class FileOpenAction extends FileChooserAction {
/**
* Creates a new file chooser action.
*
* @param observer the object waiting for you to select file
* @param filter a filter to apply when browsing
* @param parent a parent Component for chooser dialog
*/
public FileOpenAction(Observer observer, FileFilter filter, Component parent) {
super(observer, Language.OPEN.getString(), filter, parent);
public FileOpenAction(FileFilter filter, Component parent) {
super(Language.OPEN.getString(), filter, parent);
}

@Override
Expand All @@ -68,7 +67,7 @@ protected int showDialog() {
}

@Override
protected RupsEvent getEvent() {
return new OpenFileEvent(getFile());
protected String getEvent() {
return "FILE_OPEN";
}
}
9 changes: 4 additions & 5 deletions src/main/java/com/itextpdf/rups/io/FileSaveAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,11 @@ public class FileSaveAction extends FileChooserAction {
/**
* Creates a new file chooser action.
*
* @param observer the object waiting for you to select file
* @param filter a filter to apply when browsing
* @param parent a parent Component for chooser dialog
*/
public FileSaveAction(Observer observer, FileFilter filter, Component parent) {
super(observer, Language.MENU_BAR_SAVE_AS.getString(), filter, parent);
public FileSaveAction(FileFilter filter, Component parent) {
super(Language.MENU_BAR_SAVE_AS.getString(), filter, parent);
}

@Override
Expand All @@ -69,7 +68,7 @@ protected int showDialog() {
}

@Override
protected RupsEvent getEvent() {
return new SaveToFileEvent(getFile());
protected String getEvent() {
return "FILE_SAVED";
}
}
Loading