/* * 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.directory.studio.openldap.config.editor.dialogs.overlays; import java.text.ParseException; import java.util.ArrayList; import java.util.List; import org.apache.directory.api.util.Strings; import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils; import org.apache.directory.studio.ldapbrowser.common.widgets.search.FilterWidget; import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Spinner; import org.apache.directory.studio.openldap.common.ui.dialogs.AttributeDialog; import org.apache.directory.studio.openldap.common.ui.model.LogOperationEnum; import org.apache.directory.studio.openldap.common.ui.widgets.EntryWidget; import org.apache.directory.studio.openldap.common.ui.widgets.LogOperationsWidget; import org.apache.directory.studio.openldap.config.OpenLdapConfigurationPlugin; import org.apache.directory.studio.openldap.config.OpenLdapConfigurationPluginConstants; import org.apache.directory.studio.openldap.config.editor.dialogs.AbstractOverlayDialogConfigurationBlock; import org.apache.directory.studio.openldap.config.editor.dialogs.OverlayDialog; import org.apache.directory.studio.openldap.config.editor.dialogs.PurgeTimeSpan; import org.apache.directory.studio.openldap.config.model.overlay.OlcAccessLogConfig; /** * This class implements a block for the configuration of the Access Log overlay. * * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> */ public class AccessLogOverlayConfigurationBlock extends AbstractOverlayDialogConfigurationBlock<OlcAccessLogConfig> { /** The attributes list */ private List<String> attributes = new ArrayList<String>(); // UI widgets private EntryWidget databaseEntryWidget; private Button onlyLogSuccessfulRequestsCheckbox; private LogOperationsWidget logOperationsWidget; private TableViewer attributesTableViewer; private Button addAttributeButton; private Button deleteAttributeButton; private FilterWidget filterWidget; private Spinner purgeAgeDaysSpinner; private Spinner purgeAgeHoursSpinner; private Spinner purgeAgeMinutesSpinner; private Spinner purgeAgeSecondsSpinner; private Spinner purgeIntervalDaysSpinner; private Spinner purgeIntervalHoursSpinner; private Spinner purgeIntervalMinutesSpinner; private Spinner purgeIntervalSecondsSpinner; // Listeners private ISelectionChangedListener attributesTableViewerSelectionChangedListener = new ISelectionChangedListener() { public void selectionChanged( SelectionChangedEvent event ) { deleteAttributeButton.setEnabled( !attributesTableViewer.getSelection().isEmpty() ); } }; private SelectionListener addAttributeButtonSelectionListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { AttributeDialog dialog = new AttributeDialog( addAttributeButton.getShell(), browserConnection ); if ( dialog.open() == AttributeDialog.OK ) { String attribute = dialog.getAttribute(); if ( !attributes.contains( attribute ) ) { attributes.add( attribute ); attributesTableViewer.refresh(); attributesTableViewer.setSelection( new StructuredSelection( attribute ) ); } } } }; private SelectionListener deleteAttributeButtonSelectionListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { StructuredSelection selection = ( StructuredSelection ) attributesTableViewer.getSelection(); if ( !selection.isEmpty() ) { String selectedAttribute = ( String ) selection.getFirstElement(); attributes.remove( selectedAttribute ); attributesTableViewer.refresh(); } } }; /** * Creates a new instance of AccessLogOverlayConfigurationBlock. * * @param dialog the overlay dialog * @param browserConnection the browser connection */ public AccessLogOverlayConfigurationBlock( OverlayDialog dialog, IBrowserConnection browserConnection ) { super( dialog, browserConnection ); setOverlay( new OlcAccessLogConfig() ); } /** * Creates a new instance of AccessLogOverlayConfigurationBlock. * * @param dialog the overlay dialog * @param browserConnection the browser connection * @param overlay the access log overlay */ public AccessLogOverlayConfigurationBlock( OverlayDialog dialog, IBrowserConnection browserConnection, OlcAccessLogConfig overlay ) { super( dialog, browserConnection ); if ( overlay == null ) { overlay = new OlcAccessLogConfig(); } setOverlay( overlay ); } /** * {@inheritDoc} */ public void createBlockContent( Composite parent ) { Composite composite = BaseWidgetUtils.createColumnContainer( parent, 3, 1 ); // Database BaseWidgetUtils.createLabel( composite, "Database:", 1 ); databaseEntryWidget = new EntryWidget( getDialog().getBrowserConnection() ); databaseEntryWidget.createWidget( composite ); databaseEntryWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); // Successful requests onlyLogSuccessfulRequestsCheckbox = BaseWidgetUtils.createCheckbox( composite, "Only log successful requests", 3 ); createLogOperationsGroup( composite ); createAttributesGroup( composite ); createFilterGroup( composite ); createPurgeGroup( composite ); } /** * Creates the log operations group. * * @param parent the parent composite */ private void createLogOperationsGroup( Composite parent ) { // Log Operations Group Group logOperationsGroup = BaseWidgetUtils.createGroup( parent, "Log Operations", 3 ); // Log Operations Widget logOperationsWidget = new LogOperationsWidget(); logOperationsWidget.create( logOperationsGroup ); logOperationsWidget.getControl().setLayoutData( new GridData( SWT.BEGINNING, SWT.CENTER, false, false, 2, 1 ) ); List<LogOperationEnum> logOperations = new ArrayList<LogOperationEnum>(); logOperations.add( LogOperationEnum.ADD ); logOperations.add( LogOperationEnum.ABANDON ); logOperations.add( LogOperationEnum.SESSION ); logOperationsWidget.setInput( logOperations ); } /** * Creates the attributes group. * * @param parent the parent composite */ private void createAttributesGroup( Composite parent ) { // Attributes Group Group attributesGroup = BaseWidgetUtils.createGroup( parent, "Attributes", 3 ); GridLayout attributesCompositeGridLayout = new GridLayout( 2, false ); attributesCompositeGridLayout.verticalSpacing = 0; attributesGroup.setLayout( attributesCompositeGridLayout ); // Attributes TableViewer attributesTableViewer = new TableViewer( attributesGroup ); GridData tableViewerGridData = new GridData( SWT.FILL, SWT.FILL, true, true, 1, 3 ); tableViewerGridData.heightHint = 20; tableViewerGridData.widthHint = 100; attributesTableViewer.getControl().setLayoutData( tableViewerGridData ); attributesTableViewer.setContentProvider( new ArrayContentProvider() ); attributesTableViewer.setLabelProvider( new LabelProvider() { public Image getImage( Object element ) { return OpenLdapConfigurationPlugin.getDefault().getImage( OpenLdapConfigurationPluginConstants.IMG_ATTRIBUTE ); } } ); attributesTableViewer.setInput( attributes ); attributesTableViewer.addSelectionChangedListener( attributesTableViewerSelectionChangedListener ); // Attribute Add Button addAttributeButton = BaseWidgetUtils.createButton( attributesGroup, "Add...", 1 ); addAttributeButton.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, false, false ) ); addAttributeButton.addSelectionListener( addAttributeButtonSelectionListener ); // Attribute Delete Button deleteAttributeButton = BaseWidgetUtils.createButton( attributesGroup, "Delete", 1 ); deleteAttributeButton.setEnabled( false ); deleteAttributeButton.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, false, false ) ); deleteAttributeButton.addSelectionListener( deleteAttributeButtonSelectionListener ); } /** * Creates the filter group. * * @param parent the parent composite */ private void createFilterGroup( Composite parent ) { // Filter Group Group filterGroup = BaseWidgetUtils.createGroup( parent, "Filter", 3 ); GridLayout filterGroupGridLayout = new GridLayout( 2, false ); filterGroupGridLayout.marginHeight = 0; filterGroupGridLayout.verticalSpacing = 0; filterGroup.setLayout( filterGroupGridLayout ); filterWidget = new FilterWidget(); filterWidget.setFilter( "" ); filterWidget.setBrowserConnection( getDialog().getBrowserConnection() ); filterWidget.createWidget( filterGroup ); } /** * Creates the purge group. * * @param parent the parent composite */ private void createPurgeGroup( Composite parent ) { // Purge Group Group purgeGroup = BaseWidgetUtils.createGroup( parent, "Log Purge", 3 ); GridLayout purgeCompositeGridLayout = new GridLayout( 5, false ); purgeCompositeGridLayout.verticalSpacing = 0; purgeGroup.setLayout( purgeCompositeGridLayout ); // Age Label BaseWidgetUtils.createLabel( purgeGroup, "Age:", 1 ); // Age Days Spinner purgeAgeDaysSpinner = new Spinner( purgeGroup, SWT.BORDER ); purgeAgeDaysSpinner.setMinimum( 0 ); purgeAgeDaysSpinner.setMaximum( 99999 ); // Age Hours Spinner purgeAgeHoursSpinner = new Spinner( purgeGroup, SWT.BORDER ); purgeAgeHoursSpinner.setMinimum( 0 ); purgeAgeHoursSpinner.setMaximum( 23 ); // Age Minutes Spinner purgeAgeMinutesSpinner = new Spinner( purgeGroup, SWT.BORDER ); purgeAgeMinutesSpinner.setMinimum( 0 ); purgeAgeMinutesSpinner.setMaximum( 59 ); // Age Seconds Spinner purgeAgeSecondsSpinner = new Spinner( purgeGroup, SWT.BORDER ); purgeAgeSecondsSpinner.setMinimum( 0 ); purgeAgeSecondsSpinner.setMaximum( 59 ); // Interval Label BaseWidgetUtils.createLabel( purgeGroup, "Interval:", 1 ); // Interval Days Spinner purgeIntervalDaysSpinner = new Spinner( purgeGroup, SWT.BORDER ); purgeIntervalDaysSpinner.setMinimum( 0 ); purgeIntervalDaysSpinner.setMaximum( 99999 ); // Interval Hours Spinner purgeIntervalHoursSpinner = new Spinner( purgeGroup, SWT.BORDER ); purgeIntervalHoursSpinner.setMinimum( 0 ); purgeIntervalHoursSpinner.setMaximum( 23 ); // Interval Minutes Spinner purgeIntervalMinutesSpinner = new Spinner( purgeGroup, SWT.BORDER ); purgeIntervalMinutesSpinner.setMinimum( 0 ); purgeIntervalMinutesSpinner.setMaximum( 59 ); // Interval Seconds Spinner purgeIntervalSecondsSpinner = new Spinner( purgeGroup, SWT.BORDER ); purgeIntervalSecondsSpinner.setMinimum( 0 ); purgeIntervalSecondsSpinner.setMaximum( 59 ); // Days Hours Minutes Seconds Labels BaseWidgetUtils.createSpacer( purgeGroup, 1 ); BaseWidgetUtils.createLabel( purgeGroup, "Days", 1 ); BaseWidgetUtils.createLabel( purgeGroup, "Hours", 1 ); BaseWidgetUtils.createLabel( purgeGroup, "Minutes", 1 ); BaseWidgetUtils.createLabel( purgeGroup, "Seconds", 1 ); } /** * {@inheritDoc} */ public void refresh() { if ( overlay != null ) { // Database databaseEntryWidget.setInput( overlay.getOlcAccessLogDB() ); // // Only log successful requests // Boolean onlyLogSuccessfulRequests = overlay.getOlcAccessLogSuccess(); if ( onlyLogSuccessfulRequests != null ) { onlyLogSuccessfulRequestsCheckbox.setSelection( onlyLogSuccessfulRequests.booleanValue() ); } else { onlyLogSuccessfulRequestsCheckbox.setSelection( false ); } // // Log operations // List<String> logOperationsValues = overlay.getOlcAccessLogOps(); if ( ( logOperationsValues != null ) && ( logOperationsValues.size() > 0 ) ) { logOperationsWidget.setInput( getAccessLogOperations( logOperationsValues ) ); } else { logOperationsWidget.setInput( null ); } // // Attributes // List<String> attributeValues = overlay.getOlcAccessLogOldAttr(); if ( ( attributeValues != null ) && ( attributeValues.size() > 0 ) ) { for ( String attribute : attributeValues ) { attributes.add( attribute ); } } attributesTableViewer.refresh(); // // Filter // String filter = overlay.getOlcAccessLogOld(); if ( filter != null ) { filterWidget.setFilter( filter ); } // // Purge // String accessLogPurge = overlay.getOlcAccessLogPurge(); if ( !Strings.isEmpty( accessLogPurge ) ) { // Splitting age and interval purge time spans String[] accessLogPurgeValues = accessLogPurge.split( " " ); // Checking if we got the appropriate number of members if ( accessLogPurgeValues.length == 2 ) { try { // Purge age time span PurgeTimeSpan purgeAgeTimeSpan = new PurgeTimeSpan( accessLogPurgeValues[0] ); purgeAgeDaysSpinner.setSelection( purgeAgeTimeSpan.getDays() ); purgeAgeHoursSpinner.setSelection( purgeAgeTimeSpan.getHours() ); purgeAgeMinutesSpinner.setSelection( purgeAgeTimeSpan.getMinutes() ); purgeAgeSecondsSpinner.setSelection( purgeAgeTimeSpan.getSeconds() ); // Purge interval time span PurgeTimeSpan purgeIntervalTimeSpan = new PurgeTimeSpan( accessLogPurgeValues[1] ); purgeIntervalDaysSpinner.setSelection( purgeIntervalTimeSpan.getDays() ); purgeIntervalHoursSpinner.setSelection( purgeIntervalTimeSpan.getHours() ); purgeIntervalMinutesSpinner.setSelection( purgeIntervalTimeSpan.getMinutes() ); purgeIntervalSecondsSpinner.setSelection( purgeIntervalTimeSpan.getSeconds() ); } catch ( ParseException e ) { // TODO Auto-generated catch block e.printStackTrace(); } } else { // We didn't have 2 members in the string // TODO error } } } } /** * {@inheritDoc} */ public void save() { if ( overlay != null ) { // Database overlay.setOlcAccessLogDB( databaseEntryWidget.getDn() ); // Only log successful requests overlay.setOlcAccessLogSuccess( onlyLogSuccessfulRequestsCheckbox.getSelection() ); // Log operations overlay.setOlcAccessLogOps( getAccessLogOperationsValues() ); // Attributes overlay.setOlcAccessLogOldAttr( attributes ); // Filter overlay.setOlcAccessLogOld( filterWidget.getFilter() ); // Purge overlay.setOlcAccessLogPurge( getPurgeValue() ); } // Saving dialog settings databaseEntryWidget.saveDialogSettings(); filterWidget.saveDialogSettings(); } /** * Gets the access log operations values. * * @return the access log operations values */ private List<String> getAccessLogOperationsValues() { List<String> accessLogOperations = new ArrayList<String>(); List<LogOperationEnum> logOperations = logOperationsWidget.getSelectedOperationsList(); for ( LogOperationEnum logOperation : logOperations ) { // Converting log operation to string accessLogOperations.add( logOperation.toString() ); } return accessLogOperations; } /** * Gets the access log operations. * * @return the access log operations */ private List<LogOperationEnum> getAccessLogOperations( List<String> logOperationsValues ) { List<LogOperationEnum> logOperations = new ArrayList<LogOperationEnum>(); for ( String logOperationValue : logOperationsValues ) { // Converting log operation from a string LogOperationEnum logOperation = LogOperationEnum.fromString( logOperationValue ); if ( logOperation != null ) { logOperations.add( logOperation ); } } return logOperations; } /** * Gets the purge value. * * @return the purge value */ private String getPurgeValue() { return getPurgeAgeTimeSpan().toString() + " " + getPurgeIntervalTimeSpan().toString(); } /** * Gets the purge age time span. * * @return the purge age time span */ private PurgeTimeSpan getPurgeAgeTimeSpan() { PurgeTimeSpan purgeAgeTimeSpan = new PurgeTimeSpan(); purgeAgeTimeSpan.setDays( purgeAgeDaysSpinner.getSelection() ); purgeAgeTimeSpan.setHours( purgeAgeHoursSpinner.getSelection() ); purgeAgeTimeSpan.setMinutes( purgeAgeMinutesSpinner.getSelection() ); purgeAgeTimeSpan.setSeconds( purgeAgeSecondsSpinner.getSelection() ); return purgeAgeTimeSpan; } /** * Gets the purge interval time span. * * @return the purge interval time span */ private PurgeTimeSpan getPurgeIntervalTimeSpan() { PurgeTimeSpan purgeInternalTimeSpan = new PurgeTimeSpan(); purgeInternalTimeSpan.setDays( purgeIntervalDaysSpinner.getSelection() ); purgeInternalTimeSpan.setHours( purgeIntervalHoursSpinner.getSelection() ); purgeInternalTimeSpan.setMinutes( purgeIntervalMinutesSpinner.getSelection() ); purgeInternalTimeSpan.setSeconds( purgeIntervalSecondsSpinner.getSelection() ); return purgeInternalTimeSpan; } }