Package org.apache.directory.ldapstudio.browser.ui.dialogs.properties

Source Code of org.apache.directory.ldapstudio.browser.ui.dialogs.properties.RootDSEPropertyPage$InnerContentProvider

/*
*  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.ldapstudio.browser.ui.dialogs.properties;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.directory.ldapstudio.browser.core.model.IAttribute;
import org.apache.directory.ldapstudio.browser.core.model.IConnection;
import org.apache.directory.ldapstudio.browser.core.model.IEntry;
import org.apache.directory.ldapstudio.browser.core.model.IValue;
import org.apache.directory.ldapstudio.browser.ui.widgets.BaseWidgetUtils;
import org.apache.directory.ldapstudio.browser.ui.widgets.entryeditor.EntryEditorWidgetTableMetadata;

import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowData;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbenchPropertyPage;
import org.eclipse.ui.dialogs.PropertyPage;


public class RootDSEPropertyPage extends PropertyPage implements IWorkbenchPropertyPage
{

    private TabFolder tabFolder;

    private TabItem commonsTab;

    private TabItem controlsTab;

    private TabItem extensionsTab;

    private TabItem featuresTab;

    private TabItem rawTab;


    public RootDSEPropertyPage()
    {
        super();
        super.noDefaultAndApplyButton();
    }


    protected Control createContents( Composite parent )
    {

        final IConnection connection = ConnectionPropertyPage.getConnection( getElement() );

        this.tabFolder = new TabFolder( parent, SWT.TOP );
        RowLayout mainLayout = new RowLayout();
        mainLayout.fill = true;
        mainLayout.marginWidth = 0;
        mainLayout.marginHeight = 0;
        this.tabFolder.setLayout( mainLayout );

        Composite composite = new Composite( this.tabFolder, SWT.NONE );
        GridLayout gl = new GridLayout( 2, false );
        composite.setLayout( gl );
        BaseWidgetUtils.createLabel( composite, "Directory Type:", 1 );
        Text typeText = BaseWidgetUtils.createLabeledText( composite, "-", 1 );
        if ( connection != null && connection.getRootDSE() != null )
        {

            boolean typeDetected = false;

            // check OpenLDAP
            IAttribute ocAttribute = connection.getRootDSE().getAttribute( "objectClass" );
            if ( ocAttribute != null )
            {
                for ( int i = 0; i < ocAttribute.getStringValues().length; i++ )
                {
                    if ( "OpenLDAProotDSE".equals( ocAttribute.getStringValues()[i] ) )
                    {
                        IAttribute ccAttribute = connection.getRootDSE().getAttribute( "configContext" );
                        if ( ccAttribute != null )
                        {
                            typeText.setText( "OpenLDAP 2.3" );
                            typeDetected = true;
                        }
                        if ( !typeDetected )
                        {
                            IAttribute scAttribute = connection.getRootDSE().getAttribute( "supportedControl" );
                            if ( scAttribute != null )
                            {
                                for ( int sci = 0; sci < scAttribute.getStringValues().length; sci++ )
                                {
                                    // if("1.2.840.113556.1.4.319".equals(scAttribute.getStringValues()[sci]))
                                    // {
                                    if ( "2.16.840.1.113730.3.4.18".equals( scAttribute.getStringValues()[sci] ) )
                                    {
                                        typeText.setText( "OpenLDAP 2.2" );
                                        typeDetected = true;
                                    }
                                }
                            }

                        }
                        if ( !typeDetected )
                        {
                            IAttribute seAttribute = connection.getRootDSE().getAttribute( "supportedExtension" );
                            if ( seAttribute != null )
                            {
                                for ( int sei = 0; sei < seAttribute.getStringValues().length; sei++ )
                                {
                                    if ( "1.3.6.1.4.1.4203.1.11.3".equals( seAttribute.getStringValues()[sei] ) )
                                    {
                                        typeText.setText( "OpenLDAP 2.1" );
                                        typeDetected = true;
                                    }
                                }
                            }
                        }
                        if ( !typeDetected )
                        {
                            IAttribute sfAttribute = connection.getRootDSE().getAttribute( "supportedFeatures" );
                            if ( sfAttribute != null )
                            {
                                for ( int sfi = 0; sfi < sfAttribute.getStringValues().length; sfi++ )
                                {
                                    if ( "1.3.6.1.4.1.4203.1.5.4".equals( sfAttribute.getStringValues()[sfi] ) )
                                    {
                                        typeText.setText( "OpenLDAP 2.0" );
                                        typeDetected = true;
                                    }
                                }
                            }
                        }
                        if ( !typeDetected )
                        {
                            typeText.setText( "OpenLDAP" );
                            typeDetected = true;
                        }
                    }
                }
            }

            // check Siemens DirX
            IAttribute ssseAttribute = connection.getRootDSE().getAttribute( "subSchemaSubentry" );
            if ( ssseAttribute != null )
            {
                for ( int i = 0; i < ssseAttribute.getStringValues().length; i++ )
                {
                    if ( "cn=LDAPGlobalSchemaSubentry".equals( ssseAttribute.getStringValues()[i] ) )
                    {
                        typeText.setText( "Siemens DirX" );
                    }
                }
            }

            // check active directory
            IAttribute rdncAttribute = connection.getRootDSE().getAttribute( "rootDomainNamingContext" );
            if ( rdncAttribute != null )
            {
                IAttribute ffAttribute = connection.getRootDSE().getAttribute( "forestFunctionality" );
                if ( ffAttribute != null )
                {
                    typeText.setText( "Microsoft Active Directory 2003" );
                }
                else
                {
                    typeText.setText( "Microsoft Active Directory 2000" );
                }
            }

            // check Novell eDirectory / Sun Directory Server / Netscape
            // Directory Server
            IAttribute vnAttribute = connection.getRootDSE().getAttribute( "vendorName" );
            IAttribute vvAttribute = connection.getRootDSE().getAttribute( "vendorVersion" );
            if ( vnAttribute != null && vnAttribute.getStringValues().length > 0 && vvAttribute != null
                && vvAttribute.getStringValues().length > 0 )
            {
                if ( vnAttribute.getStringValues()[0].indexOf( "Novell" ) > -1
                    || vvAttribute.getStringValues()[0].indexOf( "eDirectory" ) > -1 )
                {
                    typeText.setText( "Novell eDirectory" );
                }
                if ( vnAttribute.getStringValues()[0].indexOf( "Sun" ) > -1
                    || vvAttribute.getStringValues()[0].indexOf( "Sun" ) > -1 )
                {
                    typeText.setText( "Sun Directory Server" );
                }
                if ( vnAttribute.getStringValues()[0].indexOf( "Netscape" ) > -1
                    || vvAttribute.getStringValues()[0].indexOf( "Netscape" ) > -1 )
                {
                    typeText.setText( "Netscape Directory Server" );
                }
            }
        }
        addInfo( connection, composite, "vendorName", "Vendor Name:" );
        addInfo( connection, composite, "vendorVersion", "Vendor Version:" );
        addInfo( connection, composite, "supportedLDAPVersion", "Supported LDAP Versions:" );
        addInfo( connection, composite, "supportedSASLMechanisms", "Supported SASL Mechanisms:" );

        this.commonsTab = new TabItem( this.tabFolder, SWT.NONE );
        this.commonsTab.setText( "Info" );
        this.commonsTab.setControl( composite );

        // naming contexts
        // alt servers
        // schema DN
        // ldap version

        Composite controlsComposite = new Composite( this.tabFolder, SWT.NONE );
        controlsComposite.setLayoutData( new RowData( 10, 10 ) );
        GridLayout controlsLayout = new GridLayout();
        controlsComposite.setLayout( controlsLayout );
        ListViewer controlsViewer = new ListViewer( controlsComposite );
        controlsViewer.getList().setLayoutData( new GridData( GridData.FILL_BOTH ) );
        controlsViewer.setContentProvider( new ArrayContentProvider() );
        controlsViewer.setLabelProvider( new LabelProvider() );
        if ( connection != null && connection.getRootDSE() != null )
        {
            controlsViewer.setInput( connection.getRootDSE().getSupportedControls() );
        }
        this.controlsTab = new TabItem( this.tabFolder, SWT.NONE );
        this.controlsTab.setText( "Controls" );
        this.controlsTab.setControl( controlsComposite );

        Composite extensionComposite = new Composite( this.tabFolder, SWT.NONE );
        extensionComposite.setLayoutData( new RowData( 10, 10 ) );
        GridLayout extensionLayout = new GridLayout();
        extensionComposite.setLayout( extensionLayout );
        ListViewer extensionViewer = new ListViewer( extensionComposite );
        extensionViewer.getList().setLayoutData( new GridData( GridData.FILL_BOTH ) );
        extensionViewer.setContentProvider( new ArrayContentProvider() );
        extensionViewer.setLabelProvider( new LabelProvider() );
        if ( connection != null && connection.getRootDSE() != null )
        {
            extensionViewer.setInput( connection.getRootDSE().getSupportedExtensions() );
        }
        this.extensionsTab = new TabItem( this.tabFolder, SWT.NONE );
        this.extensionsTab.setText( "Extensions" );
        this.extensionsTab.setControl( extensionComposite );

        Composite featureComposite = new Composite( this.tabFolder, SWT.NONE );
        featureComposite.setLayoutData( new RowData( 10, 10 ) );
        GridLayout featureLayout = new GridLayout();
        featureComposite.setLayout( featureLayout );
        ListViewer featureViewer = new ListViewer( featureComposite );
        featureViewer.getList().setLayoutData( new GridData( GridData.FILL_BOTH ) );
        featureViewer.setContentProvider( new ArrayContentProvider() );
        featureViewer.setLabelProvider( new LabelProvider() );
        if ( connection != null && connection.getRootDSE() != null )
        {
            featureViewer.setInput( connection.getRootDSE().getSupportedFeatures() );
        }
        this.featuresTab = new TabItem( this.tabFolder, SWT.NONE );
        this.featuresTab.setText( "Features" );
        this.featuresTab.setControl( featureComposite );

        Composite rawComposite = new Composite( this.tabFolder, SWT.NONE );
        rawComposite.setLayoutData( new RowData( 10, 10 ) );
        GridLayout rawLayout = new GridLayout();
        rawComposite.setLayout( rawLayout );
        Table table = new Table( rawComposite, SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL
            | SWT.FULL_SELECTION | SWT.HIDE_SELECTION );
        GridData gridData = new GridData( GridData.FILL_BOTH );
        table.setLayoutData( gridData );
        table.setHeaderVisible( true );
        table.setLinesVisible( true );
        TableViewer viewer = new TableViewer( table );
        for ( int i = 0; i < EntryEditorWidgetTableMetadata.COLUM_NAMES.length; i++ )
        {
            TableColumn column = new TableColumn( table, SWT.LEFT, i );
            column.setText( EntryEditorWidgetTableMetadata.COLUM_NAMES[i] );
            column.setWidth( 150 );
            column.setResizable( true );
        }
        viewer.setColumnProperties( EntryEditorWidgetTableMetadata.COLUM_NAMES );
        viewer.setSorter( new InnerViewerSorter() );
        viewer.setContentProvider( new InnerContentProvider() );
        viewer.setLabelProvider( new InnerLabelProvider() );
        if ( connection != null )
        {
            IEntry entry = connection.getRootDSE();
            viewer.setInput( entry );
        }
        this.rawTab = new TabItem( this.tabFolder, SWT.NONE );
        this.rawTab.setText( "Raw" );
        this.rawTab.setControl( rawComposite );

        // setControl(composite);
        return this.tabFolder;
    }


    private void addInfo( final IConnection connection, Composite composite, String attributeName, String labelName )
    {
        Label label = new Label( composite, SWT.NONE );
        label.setText( labelName );
        Text text = new Text( composite, SWT.NONE );
        text.setEditable( false );
        text.setBackground( composite.getBackground() );
        try
        {
            String[] versions = connection.getRootDSE().getAttribute( attributeName ).getStringValues();
            String version = Arrays.asList( versions ).toString();
            text.setText( version.substring( 1, version.length() - 1 ) );
        }
        catch ( Exception e )
        {
            text.setText( "-" );
        }
    }

    class InnerContentProvider implements IStructuredContentProvider
    {
        public Object[] getElements( Object inputElement )
        {
            if ( inputElement instanceof IEntry )
            {
                IEntry entry = ( IEntry ) inputElement;
                if ( !entry.isAttributesInitialized() && entry.isDirectoryEntry() )
                {
                    return new Object[]
                        {};
                }
                else
                {
                    IAttribute[] attributes = entry.getAttributes();
                    List valueList = new ArrayList();
                    for ( int i = 0; attributes != null && i < attributes.length; i++ )
                    {
                        IValue[] values = attributes[i].getValues();
                        for ( int j = 0; j < values.length; j++ )
                        {
                            valueList.add( values[j] );
                        }
                    }
                    return valueList.toArray();
                }
            }
            return new Object[0];
        }


        public void dispose()
        {
        }


        public void inputChanged( Viewer viewer, Object oldInput, Object newInput )
        {
        }
    }

    class InnerLabelProvider extends LabelProvider implements ITableLabelProvider
    {
        public String getColumnText( Object obj, int index )
        {
            if ( obj != null && obj instanceof IValue )
            {
                IValue attributeValue = ( IValue ) obj;
                switch ( index )
                {
                    case EntryEditorWidgetTableMetadata.KEY_COLUMN_INDEX:
                        return attributeValue.getAttribute().getDescription();
                    case EntryEditorWidgetTableMetadata.VALUE_COLUMN_INDEX:
                        return attributeValue.getStringValue();
                    default:
                        return "";
                }
            }
            return "";
        }


        public Image getColumnImage( Object obj, int index )
        {
            return super.getImage( obj );
        }
    }

    class InnerViewerSorter extends ViewerSorter
    {

    }

}
TOP

Related Classes of org.apache.directory.ldapstudio.browser.ui.dialogs.properties.RootDSEPropertyPage$InnerContentProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.