org.apache.cayenne.modeler.dialog.pref.PreferenceDialog Maven / Gradle / Ivy
/*****************************************************************
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
****************************************************************/
package org.apache.cayenne.modeler.dialog.pref;
import java.awt.Component;
import java.awt.Dialog;
import java.awt.Frame;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JDialog;
import javax.swing.JList;
import javax.swing.SwingUtilities;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import org.apache.cayenne.modeler.util.CayenneController;
import org.apache.cayenne.pref.PreferenceEditor;
/**
* A controller for editing Modeler preferences.
*
*/
public class PreferenceDialog extends CayenneController {
public static final String GENERAL_KEY = "General";
public static final String DATA_SOURCES_KEY = "Local DataSources";
public static final String CLASS_PATH_KEY = "ClassPath";
public static final String TEMPLATES_KEY = "Templates";
private static final String[] preferenceMenus = new String[] {
GENERAL_KEY, DATA_SOURCES_KEY, CLASS_PATH_KEY, TEMPLATES_KEY
};
protected PreferenceDialogView view;
protected Map detailControllers;
protected PreferenceEditor editor;
public PreferenceDialog(CayenneController parent) {
super(parent);
Window parentView = parent.getView() instanceof Window ? (Window) parent.getView() :
SwingUtilities.getWindowAncestor(parent.getView());
this.view = (parentView instanceof Dialog) ? new PreferenceDialogView(
(Dialog) parentView) : new PreferenceDialogView((Frame) parentView);
this.detailControllers = new HashMap();
// editor must be configured before startup for "showDetailViewAction()" to work
this.editor = new CayenneModelerPreferenceEditor(application);
initBindings();
}
protected void initBindings() {
final JList list = view.getList();
list.setListData(preferenceMenus);
list.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
Object selection = list.getSelectedValue();
if (selection != null) {
view.getDetailLayout().show(
view.getDetailPanel(),
selection.toString());
}
}
});
view.getCancelButton().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cancelAction();
}
});
view.getSaveButton().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
savePreferencesAction();
}
});
}
public void cancelAction() {
editor.revert();
view.dispose();
}
public void savePreferencesAction() {
editor.save();
// update
view.dispose();
}
/**
* Configures preferences dialog to display an editor for a local DataSource with
* specified name.
*/
public void showDataSourceEditorAction(Object dataSourceKey) {
configure();
// this will install needed controller
view.getDetailLayout().show(view.getDetailPanel(), DATA_SOURCES_KEY);
DataSourcePreferences controller = (DataSourcePreferences) detailControllers
.get(DATA_SOURCES_KEY);
controller.editDataSourceAction(dataSourceKey);
view.setVisible(true);
}
public void startupAction(String key) {
if (key == null) {
key = GENERAL_KEY;
}
configure();
view.getList().setSelectedValue(key, true);
view.setVisible(true);
}
protected void configure() {
// init known panels
registerPanel(GENERAL_KEY, new GeneralPreferences(this));
registerPanel(DATA_SOURCES_KEY, new DataSourcePreferences(this));
registerPanel(CLASS_PATH_KEY, new ClasspathPreferences(this));
registerPanel(TEMPLATES_KEY, new TemplatePreferences(this));
view.getDetailLayout().show(view.getDetailPanel(), GENERAL_KEY);
// view.getSplit().setDividerLocation(150);
view.pack();
// show
centerView();
makeCloseableOnEscape();
view.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
view.setModal(true);
}
protected void registerPanel(String name, CayenneController panelController) {
detailControllers.put(name, panelController);
view.getDetailPanel().add(panelController.getView(), name);
}
public Component getView() {
return view;
}
public PreferenceEditor getEditor() {
return editor;
}
}