001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing,
013 * software distributed under the License is distributed on an
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 * KIND, either express or implied. See the License for the
016 * specific language governing permissions and limitations
017 * under the License.
018 *
019 */
020 package org.apache.directory.studio.apacheds.prefs;
021
022
023 import org.apache.directory.studio.apacheds.ApacheDsPlugin;
024 import org.apache.directory.studio.apacheds.ApacheDsPluginConstants;
025 import org.apache.log4j.Level;
026 import org.apache.log4j.Logger;
027 import org.apache.log4j.PatternLayout;
028 import org.apache.log4j.spi.LoggingEvent;
029 import org.eclipse.jface.preference.IPreferenceStore;
030 import org.eclipse.jface.preference.PreferencePage;
031 import org.eclipse.swt.SWT;
032 import org.eclipse.swt.events.ModifyEvent;
033 import org.eclipse.swt.events.ModifyListener;
034 import org.eclipse.swt.events.SelectionAdapter;
035 import org.eclipse.swt.events.SelectionEvent;
036 import org.eclipse.swt.layout.GridData;
037 import org.eclipse.swt.layout.GridLayout;
038 import org.eclipse.swt.widgets.Combo;
039 import org.eclipse.swt.widgets.Composite;
040 import org.eclipse.swt.widgets.Control;
041 import org.eclipse.swt.widgets.Group;
042 import org.eclipse.swt.widgets.Label;
043 import org.eclipse.swt.widgets.Link;
044 import org.eclipse.swt.widgets.Text;
045 import org.eclipse.ui.IWorkbench;
046 import org.eclipse.ui.IWorkbenchPreferencePage;
047 import org.eclipse.ui.dialogs.PreferencesUtil;
048
049
050 /**
051 * This class implements the Servers Logs preference page for the Apache DS plugin.
052 *
053 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
054 * @version $Rev$, $Date$
055 */
056 public class ServerLogsPage extends PreferencePage implements IWorkbenchPreferencePage
057 {
058 // UI fields
059 private Combo levelCombo;
060 private Text patternText;
061 private Label previewLabel;
062 private Group conversionPatternGroup;
063
064
065 /**
066 * Creates a new instance of ServerLogsPage.
067 */
068 public ServerLogsPage()
069 {
070 super( Messages.getString( "ServerLogsPage.ServerLogs" ) ); //$NON-NLS-1$
071 setPreferenceStore( ApacheDsPlugin.getDefault().getPreferenceStore() );
072 }
073
074
075 /* (non-Javadoc)
076 * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
077 */
078 protected Control createContents( Composite parent )
079 {
080 // Composite
081 Composite composite = new Composite( parent, SWT.NONE );
082 composite.setLayout( new GridLayout() );
083 composite.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
084
085 // Colors And Fonts Link
086 Link colorsAndFontsLink = new Link( composite, SWT.NONE );
087 GridData gd = new GridData( SWT.FILL, SWT.BEGINNING, true, false );
088 gd.widthHint = 150;
089 colorsAndFontsLink.setLayoutData( gd );
090 colorsAndFontsLink.setText( Messages.getString( "ServerLogsPage.DefaultColorsAndFontsSettings" ) ); //$NON-NLS-1$
091 colorsAndFontsLink.addSelectionListener( new SelectionAdapter()
092 {
093 public void widgetSelected( SelectionEvent e )
094 {
095 PreferencesUtil.createPreferenceDialogOn( getShell(), ApacheDsPlugin.getDefault().getPluginProperties()
096 .getString( "Pref_ColorsAndFontsPage_id" ), null, null ); //$NON-NLS-1$
097 }
098 } );
099
100 // Log Level Group
101 Group logLevelGroup = new Group( composite, SWT.NONE );
102 logLevelGroup.setText( Messages.getString( "ServerLogsPage.LogLevel" ) ); //$NON-NLS-1$
103 logLevelGroup.setLayout( new GridLayout( 2, false ) );
104 logLevelGroup.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
105
106 // Level Label
107 Label levelLabel = new Label( logLevelGroup, SWT.NONE );
108 levelLabel.setText( Messages.getString( "ServerLogsPage.Level" ) ); //$NON-NLS-1$
109
110 // Level Combo
111 levelCombo = new Combo( logLevelGroup, SWT.DROP_DOWN | SWT.READ_ONLY | SWT.SIMPLE );
112 levelCombo.add( Messages.getString( "ServerLogsPage.Debug" ), 0 ); //$NON-NLS-1$
113 levelCombo.add( Messages.getString( "ServerLogsPage.Info" ), 1 ); //$NON-NLS-1$
114 levelCombo.add( Messages.getString( "ServerLogsPage.Warning" ), 2 ); //$NON-NLS-1$
115 levelCombo.add( Messages.getString( "ServerLogsPage.Error" ), 3 ); //$NON-NLS-1$
116 levelCombo.add( Messages.getString( "ServerLogsPage.Fatal" ), 4 ); //$NON-NLS-1$
117
118 // Warning Label
119 new Label( logLevelGroup, SWT.NONE ); // Filler
120 Label warningLabel = new Label( logLevelGroup, SWT.WRAP );
121 warningLabel.setText( Messages.getString( "ServerLogsPage.WarnLogLevel" ) ); //$NON-NLS-1$
122 warningLabel.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
123
124 // Conversion Pattern Group
125 conversionPatternGroup = new Group( composite, SWT.NONE );
126 conversionPatternGroup.setText( Messages.getString( "ServerLogsPage.ConverstionPattern" ) ); //$NON-NLS-1$
127 conversionPatternGroup.setLayout( new GridLayout( 2, false ) );
128 conversionPatternGroup.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
129
130 // Pattern Label
131 Label patternLabel = new Label( conversionPatternGroup, SWT.NONE );
132 patternLabel.setText( Messages.getString( "ServerLogsPage.Pattern" ) ); //$NON-NLS-1$
133
134 // Pattern Text
135 patternText = new Text( conversionPatternGroup, SWT.BORDER );
136 patternText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
137 patternText.addModifyListener( new ModifyListener()
138 {
139 public void modifyText( ModifyEvent e )
140 {
141 updatePreviewLabel();
142 }
143 } );
144
145 // Preview
146 Label label = new Label( conversionPatternGroup, SWT.NONE );
147 label.setText( Messages.getString( "ServerLogsPage.Preview" ) ); //$NON-NLS-1$
148 previewLabel = new Label( conversionPatternGroup, SWT.NONE );
149 previewLabel.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
150
151 initFromPreferences();
152
153 applyDialogFont( composite );
154 return composite;
155 }
156
157
158 /**
159 * Updates the preview label.
160 */
161 private void updatePreviewLabel()
162 {
163 LoggingEvent loggingEvent = new LoggingEvent(
164 Messages.getString( "ServerLogsPage.CategoryClass" ), Logger.getLogger( "logger" ), Level.INFO, //$NON-NLS-1$ //$NON-NLS-2$
165 Messages.getString( "ServerLogsPage.LoggingMessage" ), new Exception( Messages.getString( "ServerLogsPage.AnException" ) ) ); //$NON-NLS-1$ //$NON-NLS-2$
166 previewLabel.setText( new PatternLayout( patternText.getText() ).format( loggingEvent ) );
167 }
168
169
170 /**
171 * Initializes the UI fields from the preferences values.
172 */
173 private void initFromPreferences()
174 {
175 IPreferenceStore store = getPreferenceStore();
176
177 // Level
178 String level = store.getString( ApacheDsPluginConstants.PREFS_SERVER_LOGS_LEVEL );
179 if ( ApacheDsPluginConstants.PREFS_SERVER_LOGS_LEVEL_DEBUG.equalsIgnoreCase( level ) )
180 {
181 levelCombo.select( 0 );
182 }
183 else if ( ApacheDsPluginConstants.PREFS_SERVER_LOGS_LEVEL_INFO.equalsIgnoreCase( level ) )
184 {
185 levelCombo.select( 1 );
186 }
187 else if ( ApacheDsPluginConstants.PREFS_SERVER_LOGS_LEVEL_WARN.equalsIgnoreCase( level ) )
188 {
189 levelCombo.select( 2 );
190 }
191 else if ( ApacheDsPluginConstants.PREFS_SERVER_LOGS_LEVEL_ERROR.equalsIgnoreCase( level ) )
192 {
193 levelCombo.select( 3 );
194 }
195 else if ( ApacheDsPluginConstants.PREFS_SERVER_LOGS_LEVEL_FATAL.equalsIgnoreCase( level ) )
196 {
197 levelCombo.select( 4 );
198 }
199
200 // Pattern
201 patternText.setText( store.getString( ApacheDsPluginConstants.PREFS_SERVER_LOGS_PATTERN ) );
202 }
203
204
205 /* (non-Javadoc)
206 * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
207 */
208 protected void performDefaults()
209 {
210 IPreferenceStore store = getPreferenceStore();
211
212 // Level
213 String level = store.getDefaultString( ApacheDsPluginConstants.PREFS_SERVER_LOGS_LEVEL );
214 if ( ApacheDsPluginConstants.PREFS_SERVER_LOGS_LEVEL_DEBUG.equalsIgnoreCase( level ) )
215 {
216 levelCombo.select( 0 );
217 }
218 else if ( ApacheDsPluginConstants.PREFS_SERVER_LOGS_LEVEL_INFO.equalsIgnoreCase( level ) )
219 {
220 levelCombo.select( 1 );
221 }
222 else if ( ApacheDsPluginConstants.PREFS_SERVER_LOGS_LEVEL_WARN.equalsIgnoreCase( level ) )
223 {
224 levelCombo.select( 2 );
225 }
226 else if ( ApacheDsPluginConstants.PREFS_SERVER_LOGS_LEVEL_ERROR.equalsIgnoreCase( level ) )
227 {
228 levelCombo.select( 3 );
229 }
230 else if ( ApacheDsPluginConstants.PREFS_SERVER_LOGS_LEVEL_FATAL.equalsIgnoreCase( level ) )
231 {
232 levelCombo.select( 4 );
233 }
234
235 // Pattern
236 patternText.setText( store.getDefaultString( ApacheDsPluginConstants.PREFS_SERVER_LOGS_PATTERN ) );
237
238 super.performDefaults();
239 }
240
241
242 /* (non-Javadoc)
243 * @see org.eclipse.jface.preference.PreferencePage#performOk()
244 */
245 public boolean performOk()
246 {
247 IPreferenceStore store = getPreferenceStore();
248
249 // Level
250 int level = levelCombo.getSelectionIndex();
251
252 store.getDefaultString( ApacheDsPluginConstants.PREFS_SERVER_LOGS_LEVEL );
253 if ( level == 0 )
254 {
255 store.setValue( ApacheDsPluginConstants.PREFS_SERVER_LOGS_LEVEL,
256 ApacheDsPluginConstants.PREFS_SERVER_LOGS_LEVEL_DEBUG );
257 }
258 else if ( level == 1 )
259 {
260 store.setValue( ApacheDsPluginConstants.PREFS_SERVER_LOGS_LEVEL,
261 ApacheDsPluginConstants.PREFS_SERVER_LOGS_LEVEL_INFO );
262 }
263 else if ( level == 2 )
264 {
265 store.setValue( ApacheDsPluginConstants.PREFS_SERVER_LOGS_LEVEL,
266 ApacheDsPluginConstants.PREFS_SERVER_LOGS_LEVEL_WARN );
267 }
268 else if ( level == 3 )
269 {
270 store.setValue( ApacheDsPluginConstants.PREFS_SERVER_LOGS_LEVEL,
271 ApacheDsPluginConstants.PREFS_SERVER_LOGS_LEVEL_ERROR );
272 }
273 else if ( level == 4 )
274 {
275 store.setValue( ApacheDsPluginConstants.PREFS_SERVER_LOGS_LEVEL,
276 ApacheDsPluginConstants.PREFS_SERVER_LOGS_LEVEL_FATAL );
277 }
278
279 // Pattern
280 store.setValue( ApacheDsPluginConstants.PREFS_SERVER_LOGS_PATTERN, patternText.getText() );
281
282 return super.performOk();
283 }
284
285
286 /* (non-Javadoc)
287 * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
288 */
289 public void init( IWorkbench workbench )
290 {
291 // Nothing to do
292 }
293 }