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    }