Package org.apache.directory.ldapstudio.schemas.view.viewers

Source Code of org.apache.directory.ldapstudio.schemas.view.viewers.PoolManagerContentProvider

/*
*  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.schemas.view.viewers;


import java.util.Comparator;

import org.apache.directory.ldapstudio.schemas.model.AttributeType;
import org.apache.directory.ldapstudio.schemas.model.ObjectClass;
import org.apache.directory.ldapstudio.schemas.model.Schema;
import org.apache.directory.ldapstudio.schemas.model.SchemaPool;
import org.apache.directory.ldapstudio.schemas.view.viewers.wrappers.AlphabeticalOrderComparator;
import org.apache.directory.ldapstudio.schemas.view.viewers.wrappers.IntermediateNode;
import org.apache.directory.ldapstudio.schemas.view.viewers.wrappers.PoolManagerAttributeTypeWrapper;
import org.apache.directory.ldapstudio.schemas.view.viewers.wrappers.PoolManagerObjectClassWrapper;
import org.apache.directory.ldapstudio.schemas.view.viewers.wrappers.SchemaWrapper;
import org.apache.directory.ldapstudio.schemas.view.viewers.wrappers.IntermediateNode.IntermediateNodeType;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;


/**
* Content provider for the schema-pool manager
*
*/
public class PoolManagerContentProvider implements SortableContentProvider, IStructuredContentProvider,
    ITreeContentProvider
{

    private SchemaPool pool;
    private Comparator order = new AlphabeticalOrderComparator();


    /**
     * Default constructor
     */
    public PoolManagerContentProvider()
    {
        pool = SchemaPool.getInstance();
    }


    /* (non-Javadoc)
     * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
     */
    public Object[] getElements( Object inputElement )
    {
        return getChildren( inputElement );
    }


    /* (non-Javadoc)
     * @see org.eclipse.jface.viewers.IContentProvider#dispose()
     */
    public void dispose()
    {
    }


    /* (non-Javadoc)
     * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
     */
    public void inputChanged( Viewer viewer, Object oldInput, Object newInput )
    {
    }


    /* (non-Javadoc)
     * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
     */
    public Object[] getChildren( Object parentElement )
    {
        if ( parentElement instanceof IntermediateNode )
        {
            IntermediateNode intermediate = ( IntermediateNode ) parentElement;

            if ( intermediate.getName().equals( "**Primary Node**" ) ) { //$NON-NLS-1$
                // clear the primary node (because it's always the same instance we need to
                //refresh it manually)
                intermediate.clearChildrens();

                Schema[] schemas = this.pool.getSchemas();
                for ( int i = 0; i < schemas.length; i++ )
                {
                    Schema schema = schemas[i];
                    SchemaWrapper schemaWrapper = new SchemaWrapper( schema, ( IntermediateNode ) parentElement );
                    intermediate.addElement( schemaWrapper );
                }
            }

            Object[] temp = intermediate.getChildren();
            return temp;
        }

        else if ( parentElement instanceof SchemaWrapper )
        {
            //we are looking for the childrens of the contained objectClass
            Schema schema = ( ( ( SchemaWrapper ) parentElement ).getMySchema() );

            IntermediateNode attributeTypes = new IntermediateNode(
                "Attribute Types", ( SchemaWrapper ) parentElement, this, IntermediateNodeType.ATTRIBUTE_TYPE_FOLDER ); //$NON-NLS-1$
            IntermediateNode objectClasses = new IntermediateNode(
                "Object Classes", ( SchemaWrapper ) parentElement, this, IntermediateNodeType.OBJECT_CLASS_FOLDER ); //$NON-NLS-1$

            // Let's get all Attribute Types defined in the schema
            AttributeType[] attributeTypeList = schema.getAttributeTypesAsArray();
            for ( int i = 0; i < attributeTypeList.length; i++ )
            {
                AttributeType attributeType = attributeTypeList[i];
                attributeTypes.addElement( new PoolManagerAttributeTypeWrapper( attributeType, attributeTypes ) );
            }

            // Let's get all Object Classes defined in the schema
            ObjectClass[] objectClassList = schema.getObjectClassesAsArray();
            for ( int i = 0; i < objectClassList.length; i++ )
            {
                ObjectClass objectClass = objectClassList[i];
                objectClasses.addElement( new PoolManagerObjectClassWrapper( objectClass, objectClasses ) );
            }

            return new Object[]
                { attributeTypes, objectClasses };
        }

        return new Object[0];
    }


    /* (non-Javadoc)
     * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
     */
    public Object getParent( Object element )
    {
        if ( element instanceof SchemaWrapper )
        {
            return ( ( SchemaWrapper ) element ).getParent();
        }
        else if ( element instanceof IntermediateNode )
        {
            return ( ( IntermediateNode ) element ).getParent();
        }
        return null;
    }


    /* (non-Javadoc)
     * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
     */
    public boolean hasChildren( Object element )
    {
        if ( element instanceof IntermediateNode )
        {
            if ( ( ( IntermediateNode ) element ).getChildren().length > 0 )
                return true;
        }
        else if ( element instanceof SchemaWrapper )
        {
            return true;
        }
        return false;
    }


    /******************************************
     *                 Logic                  *
     ******************************************/

    /**
     * Specify the comparator that will be used to sort the elements in the view
     * @param order the comparator
     */
    public void setOrder( Comparator order )
    {
        this.order = order;
    }


    /**
     * Returns the comparator used to sort the elements in the view
     * @return
     */
    public Comparator getOrder()
    {
        return order;
    }


    /**
     * Initialize a tree viewer to display the information provided by the specified content
     * provider
     * @param viewer the tree viewer
     */
    public void bindToTreeViewer( TreeViewer viewer )
    {
        viewer.setContentProvider( this );
        viewer.setLabelProvider( new HierarchicalLabelProvider() );

        IntermediateNode invisibleNode = new IntermediateNode( "**Primary Node**", null, this ); //$NON-NLS-1$
        viewer.setInput( invisibleNode );
    }
}
TOP

Related Classes of org.apache.directory.ldapstudio.schemas.view.viewers.PoolManagerContentProvider

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.