001 package com.sptci.rwt.webui;
002
003 import java.util.Collection;
004 import java.util.Map;
005
006 import echopointng.Menu;
007 import echopointng.MenuBar;
008 import echopointng.MenuItem;
009
010 import com.sptci.echo2.Configuration;
011 import com.sptci.epng.Logout;
012 import com.sptci.rwt.Category;
013 import com.sptci.rwt.DatabaseType;
014
015 /**
016 * The component that displays the application menu.
017 *
018 * <p>© Copyright 2007 <a href='http://sptci.com/' target='_new'>Sans Pareil Technologies, Inc.</a></p>
019 * @author Rakesh Vidyadharan 2007-09-29
020 * @version $Id: MenuComponent.java 4123 2008-05-25 21:49:01Z rakesh $
021 */
022 public class MenuComponent extends MenuBar
023 {
024 /** The main application controller to use for this component. */
025 private final MainController controller;
026
027 /** The menu used to store saved JDBC connections. */
028 private Menu savedConnections;
029
030 /** The menu used to store saved SQL statements. */
031 private Menu savedQueries;
032
033 /**
034 * Default constructor. Initialises the menu bar.
035 *
036 * @see #createConnections
037 * @see #createQueries
038 */
039 public MenuComponent( final MainController controller )
040 {
041 this.controller = controller;
042 createConnectionsMenu();
043 createQueries();
044 }
045
046 /**
047 * Create the menu that displays the connection options.
048 *
049 * @see #createDataSources
050 * @see #createConnections
051 * @see #createConnection
052 */
053 private void createConnectionsMenu()
054 {
055 Menu menu = new Menu(
056 Configuration.getString( this, "connectionMenu.text" ) );
057
058 menu.add( createDataSources() );
059 menu.add( createConnections() );
060 menu.add( createConnection() );
061 menu.add( new Logout() );
062
063 add( menu );
064 }
065
066 /**
067 * Create the menu used to display all available {@link
068 * javax.sql.DataSource}s configured for the application.
069 *
070 * @return The menu with all available datasources as menu items.
071 */
072 private Menu createDataSources()
073 {
074 final Menu menu = new Menu( Configuration.getString(
075 this, "connectionMenu.dataSources.text" ) );
076
077 final DataSourceListener listener = new DataSourceListener( controller );
078 for ( String name : controller.getDataSources() )
079 {
080 final MenuItem item = new MenuItem( name );
081 item.setActionCommand( name );
082 item.addActionListener( listener );
083 menu.add( item );
084 }
085
086 return menu;
087 }
088
089 /**
090 * Create the menu used to display all the saved JDBC {@link
091 * java.sql.Connection}s for the application user.
092 *
093 * @return The menu with all available saved connections.
094 */
095 private Menu createConnections()
096 {
097 savedConnections = new Menu( Configuration.getString(
098 this, "connectionMenu.connections.text" ) );
099
100 final MenuItem manage = new MenuItem( Configuration.getString(
101 this, "manageConnections" ) );
102 manage.addActionListener(
103 new ManageSavedConnectionsListener( controller ) );
104 savedConnections.add( manage );
105
106 for ( Map.Entry<String,Collection<String>> entry :
107 controller.getSavedConnections().entrySet() )
108 {
109 final Menu sub = new Menu( entry.getKey() );
110
111 for ( String name : entry.getValue() )
112 {
113 final MenuItem item = new MenuItem( name );
114 final DatabaseType databaseType =
115 controller.getConnections().getDatabaseType( entry.getKey() );
116 item.addActionListener(
117 new SavedConnectionListener( databaseType, name, controller ) );
118 sub.add( item );
119 }
120
121 savedConnections.add( sub );
122 }
123
124 return savedConnections;
125 }
126
127 /**
128 * Create the menu item used to display the connection dialogue.
129 *
130 * @return The menu item to launch the connection dialogue.
131 */
132 private MenuItem createConnection()
133 {
134 MenuItem item = new MenuItem( Configuration.getString(
135 this, "connectionMenu.createConnection.text" ) );
136 item.setToolTipText( Configuration.getString(
137 this, "connectionMenu.createConnection.tooltip" ) );
138 item.addActionListener( new ConnectionDialogueListener( controller ) );
139 return item;
140 }
141
142 /**
143 * Create the menu that displays query windows and saved queries.
144 *
145 * @see #createQueryExecutor
146 * @see #createBatchQueryExecutor
147 * @see #createSavedQueries()
148 */
149 private void createQueries()
150 {
151 Menu menu = new Menu(
152 Configuration.getString( this, "queryMenu.text" ) );
153
154 menu.add( createQueryExecutor() );
155 menu.add( createBatchQueryExecutor() );
156 menu.add( createSavedQueries() );
157
158 add( menu );
159 }
160
161 /**
162 * Create the menu item that is used to launch the {@link
163 * QueryExecutorView} component.
164 *
165 * @return The menu item to launch the query executor component.
166 */
167 private MenuItem createQueryExecutor()
168 {
169 MenuItem item = new MenuItem( Configuration.getString(
170 this, "queryMenu.queryExecutor.text" ) );
171 item.setToolTipText( Configuration.getString(
172 this, "queryMenu.queryExecutor.tooltip" ) );
173 item.addActionListener( new QueryExecutorListener( controller ) );
174 return item;
175 }
176
177 /**
178 * Create the menu item that is used to launch the {@link
179 * BatchQueryExecutorView} component.
180 *
181 * @return The menu item to launch the batch query executor component.
182 */
183 private MenuItem createBatchQueryExecutor()
184 {
185 MenuItem item = new MenuItem( Configuration.getString(
186 this, "queryMenu.batchQueryExecutor.text" ) );
187 item.setToolTipText( Configuration.getString(
188 this, "queryMenu.batchQueryExecutor.tooltip" ) );
189 item.addActionListener( new BatchQueryExecutorListener( controller ) );
190 return item;
191 }
192
193 /**
194 * Create the menu used to display all the saved queries for the user
195 * and application.
196 *
197 * @see #createSavedQueries( Category )
198 * @return The menu used to organise the saved queries.
199 */
200 private Menu createSavedQueries()
201 {
202 savedQueries = new Menu(
203 Configuration.getString( this, "savedQueriesMenu.text" ) );
204
205 final MenuItem item =
206 new MenuItem( Configuration.getString( this, "manageQueries" ) );
207 item.addActionListener( new ManageSavedQueriesListener( controller ) );
208 savedQueries.add( item );
209
210 for ( Category category : controller.getCategories() )
211 {
212 savedQueries.add( createSavedQueries( category ) );
213 }
214
215 return savedQueries;
216 }
217
218 /**
219 * Create the necessary menu's to display the saved queries under the
220 * specified category.
221 *
222 * @param category The category under which saved queries are stored.
223 */
224 private Menu createSavedQueries( final Category category )
225 {
226 final Menu menu = new Menu( category.getName() );
227 for ( String name : category.getNames() )
228 {
229 final MenuItem item = new MenuItem( name );
230 item.addActionListener( new SavedQueryExecutorListener(
231 category.getQuery( name ).getValue(), controller ) );
232 menu.add( item );
233 }
234
235 return menu;
236 }
237 }