KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectstyle > cayenne > modeler > dialog > pref > PreferenceDialog


1 /* ====================================================================
2  *
3  * The ObjectStyle Group Software License, version 1.1
4  * ObjectStyle Group - http://objectstyle.org/
5  *
6  * Copyright (c) 2002-2005, Andrei (Andrus) Adamchik and individual authors
7  * of the software. All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. The end-user documentation included with the redistribution, if any,
22  * must include the following acknowlegement:
23  * "This product includes software developed by independent contributors
24  * and hosted on ObjectStyle Group web site (http://objectstyle.org/)."
25  * Alternately, this acknowlegement may appear in the software itself,
26  * if and wherever such third-party acknowlegements normally appear.
27  *
28  * 4. The names "ObjectStyle Group" and "Cayenne" must not be used to endorse
29  * or promote products derived from this software without prior written
30  * permission. For written permission, email
31  * "andrus at objectstyle dot org".
32  *
33  * 5. Products derived from this software may not be called "ObjectStyle"
34  * or "Cayenne", nor may "ObjectStyle" or "Cayenne" appear in their
35  * names without prior written permission.
36  *
37  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
38  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
39  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40  * DISCLAIMED. IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR
41  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
42  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
43  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
44  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
45  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
46  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
47  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
48  * SUCH DAMAGE.
49  * ====================================================================
50  *
51  * This software consists of voluntary contributions made by many
52  * individuals and hosted on ObjectStyle Group web site. For more
53  * information on the ObjectStyle Group, please see
54  * <http://objectstyle.org/>.
55  */

56 package org.objectstyle.cayenne.modeler.dialog.pref;
57
58 import java.awt.Component JavaDoc;
59 import java.awt.event.ActionEvent JavaDoc;
60 import java.awt.event.ActionListener JavaDoc;
61 import java.util.HashMap JavaDoc;
62 import java.util.Map JavaDoc;
63
64 import javax.swing.JDialog JavaDoc;
65 import javax.swing.JList JavaDoc;
66 import javax.swing.event.ListSelectionEvent JavaDoc;
67 import javax.swing.event.ListSelectionListener JavaDoc;
68
69 import org.objectstyle.cayenne.modeler.pref.ComponentGeometry;
70 import org.objectstyle.cayenne.modeler.util.CayenneController;
71 import org.objectstyle.cayenne.pref.Domain;
72 import org.objectstyle.cayenne.pref.PreferenceEditor;
73 import org.objectstyle.cayenne.pref.PreferenceException;
74
75 /**
76  * A controller for editing Modeler preferences.
77  *
78  * @author Andrei Adamchik
79  */

80 public class PreferenceDialog extends CayenneController {
81
82     public static final String JavaDoc GENERAL_KEY = "General";
83     public static final String JavaDoc DATA_SOURCES_KEY = "Local DataSources";
84     public static final String JavaDoc CLASS_PATH_KEY = "ClassPath";
85
86     private static final String JavaDoc[] preferenceMenus = new String JavaDoc[] {
87             GENERAL_KEY, DATA_SOURCES_KEY, CLASS_PATH_KEY
88     };
89
90     protected PreferenceDialogView view;
91     protected Map JavaDoc detailControllers;
92     protected PreferenceEditor editor;
93
94     public PreferenceDialog(CayenneController parent) {
95         super(parent);
96         this.view = new PreferenceDialogView();
97         this.detailControllers = new HashMap JavaDoc();
98
99         // editor must be configured before startup for "showDetailViewAction()" to work
100
this.editor = new CayenneModelerPreferenceEditor(application);
101
102         initBindings();
103     }
104
105     protected void initBindings() {
106         final JList JavaDoc list = view.getList();
107         list.setListData(preferenceMenus);
108         list.addListSelectionListener(new ListSelectionListener JavaDoc() {
109
110             public void valueChanged(ListSelectionEvent JavaDoc e) {
111                 Object JavaDoc selection = list.getSelectedValue();
112                 if (selection != null) {
113                     showDetailViewAction(selection.toString());
114                 }
115             }
116         });
117
118         view.getCancelButton().addActionListener(new ActionListener JavaDoc() {
119
120             public void actionPerformed(ActionEvent JavaDoc e) {
121                 cancelAction();
122             }
123         });
124
125         view.getSaveButton().addActionListener(new ActionListener JavaDoc() {
126
127             public void actionPerformed(ActionEvent JavaDoc e) {
128                 savePreferencesAction();
129             }
130         });
131     }
132
133     public void cancelAction() {
134         editor.revert();
135         view.dispose();
136     }
137
138     public void savePreferencesAction() {
139         editor.save();
140
141         // update
142

143         view.dispose();
144     }
145
146     /**
147      * Configures preferences dialog to display an editor for a local DataSource with
148      * specified name.
149      */

150     public void showDataSourceEditorAction(Object JavaDoc dataSourceKey) {
151         // this will install needed controller
152
showDetailViewAction(DATA_SOURCES_KEY);
153
154         DataSourcePreferences controller = (DataSourcePreferences) detailControllers
155                 .get(DATA_SOURCES_KEY);
156         controller.editDataSourceAction(dataSourceKey);
157     }
158
159     /**
160      * Switches preference detail view to the editor identified by provided name.
161      */

162     public void showDetailViewAction(String JavaDoc name) {
163
164         if (!detailControllers.containsKey(name)) {
165             CayenneController c;
166
167             if (GENERAL_KEY.equals(name)) {
168                 c = new GeneralPreferences(this);
169             }
170             else if (DATA_SOURCES_KEY.equals(name)) {
171                 c = new DataSourcePreferences(this);
172             }
173             else if (CLASS_PATH_KEY.equals(name)) {
174                 c = new ClasspathPreferences(this);
175             }
176             else {
177                 throw new PreferenceException("Unknown detail key: " + name);
178             }
179
180             detailControllers.put(name, c);
181             view.getDetailPanel().add(c.getView(), name);
182
183             // this is needed to display freshly added panel...
184
view.getDetailPanel().getParent().validate();
185         }
186
187         view.getDetailLayout().show(view.getDetailPanel(), name);
188     }
189
190     public void startupAction() {
191
192         // bind own view preferences
193
Domain prefDomain = application.getPreferenceDomain().getSubdomain(
194                 view.getClass());
195         ComponentGeometry geometry = ComponentGeometry.getPreference(prefDomain);
196         geometry.bind(view, 650, 350);
197         geometry.bindIntProperty(view.getSplit(), "dividerLocation", 220);
198
199         // show
200
centerView();
201         makeCloseableOnEscape();
202
203         view.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
204         view.setModal(true);
205         view.setVisible(true);
206
207     }
208
209     public Component JavaDoc getView() {
210         return view;
211     }
212
213     public PreferenceEditor getEditor() {
214         return editor;
215     }
216 }
Popular Tags