blob: 422ec1dffcb9668614b5994a8f223b8b4589a240 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 1998, 2013 Oracle and/or its affiliates. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Oracle - initial API and implementation from Oracle TopLink
******************************************************************************/
package org.eclipse.persistence.tools.workbench.test.uitools;
import java.awt.Point;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.Collection;
import java.util.prefs.Preferences;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
import org.eclipse.persistence.tools.workbench.utility.ClassTools;
import org.eclipse.persistence.tools.workbench.utility.HashBag;
/**
* Browse the Java preferences, both "system" and "current user".
* Optionally, a command-line argument can specify a particular
* set of user preferences to browse.
*/
public class PreferencesBrowser {
private Preferences preferences;
Collection windows;
private Point windowLocation;
private static final int INIT_X = 300;
private static final int INIT_Y = 300;
public static void main(String[] args) throws Exception {
new PreferencesBrowser().exec(args);
}
private PreferencesBrowser() {
super();
this.windows = new HashBag();
this.windowLocation = this.calculateNewWindowLocation();
}
private Point calculateNewWindowLocation() {
if ((this.windowLocation == null) || (this.windowLocation.x == INIT_X + 100)) {
return new Point(INIT_X, INIT_Y);
}
return new Point(this.windowLocation.x + 20, this.windowLocation.y + 20);
}
private void exec(String[] args) throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
if ((args == null) || (args.length == 0)) {
this.preferences = null;
} else {
this.preferences = Preferences.userRoot().node(args[0]);
}
this.openWindow();
}
void openWindow() {
JFrame window = this.buildWindow();
this.windows.add(window);
window.setVisible(true);
}
private JFrame buildWindow() {
JFrame frame = new JFrame(ClassTools.shortClassNameForObject(this));
frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(this.buildWindowListener());
frame.getContentPane().add(this.buildPreferencesPanel(), "Center");
frame.setLocation(this.windowLocation);
this.windowLocation = this.calculateNewWindowLocation();
frame.setSize(400, 400);
return frame;
}
private WindowListener buildWindowListener() {
return new WindowAdapter() {
public void windowClosing(WindowEvent e) {
Window window = e.getWindow();
window.setVisible(false);
window.dispose();
PreferencesBrowser.this.windows.remove(window);
if (PreferencesBrowser.this.windows.isEmpty()) {
System.exit(0);
}
}
};
}
private JPanel buildPreferencesPanel() {
PreferencesPanel panel = new PreferencesPanel(this.preferences);
panel.addAction(this.buildNewWindowAction());
return panel;
}
private Action buildNewWindowAction() {
return new AbstractAction("New Window") {
public void actionPerformed(ActionEvent event) {
PreferencesBrowser.this.openWindow();
}
};
}
}