Package org.apache.directory.studio.ldapbrowser.core.utils

Source Code of org.apache.directory.studio.ldapbrowser.core.utils.AttributeComparator

/*
*  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.ldapbrowser.core.utils;


import java.util.Comparator;

import org.apache.directory.studio.ldapbrowser.core.BrowserCoreConstants;
import org.apache.directory.studio.ldapbrowser.core.model.IAttribute;
import org.apache.directory.studio.ldapbrowser.core.model.IEntry;
import org.apache.directory.studio.ldapbrowser.core.model.IValue;
import org.apache.directory.studio.ldifparser.model.lines.LdifAttrValLine;


public class AttributeComparator implements Comparator<Object>
{

    private IEntry dummyEntry;


    public AttributeComparator( IEntry entry )
    {
        this.dummyEntry = entry;
    }


    public int compare( Object o1, Object o2 )
    {

        IAttribute attribute1 = null;
        IValue value1 = null;
        if ( o1 instanceof IAttribute )
        {
            attribute1 = ( IAttribute ) o1;
        }
        else if ( o1 instanceof IValue )
        {
            value1 = ( IValue ) o1;
            attribute1 = value1.getAttribute();
        }
        else if ( o1 instanceof LdifAttrValLine )
        {
            LdifAttrValLine line1 = ( LdifAttrValLine ) o1;
            value1 = ModelConverter.ldifAttrValLineToValue( line1, dummyEntry );
            attribute1 = value1.getAttribute();
        }

        IAttribute attribute2 = null;
        IValue value2 = null;
        if ( o2 instanceof IAttribute )
        {
            attribute2 = ( IAttribute ) o2;
        }
        else if ( o2 instanceof IValue )
        {
            value2 = ( IValue ) o2;
            attribute2 = value2.getAttribute();
        }
        else if ( o2 instanceof LdifAttrValLine )
        {
            LdifAttrValLine line2 = ( LdifAttrValLine ) o2;
            value2 = ModelConverter.ldifAttrValLineToValue( line2, dummyEntry );
            attribute2 = value2.getAttribute();
        }

        if ( value1 != null && value2 != null )
        {
            if ( this.getSortByOrDefault() == BrowserCoreConstants.SORT_BY_ATTRIBUTE_DESCRIPTION )
            {
                if ( value1.getAttribute() != value2.getAttribute() )
                {
                    return this.compareAttributeNames( value1.getAttribute(), value2.getAttribute() );
                }
                else
                {
                    return this.compareValues( value1, value2 );
                }
            }
            else if ( this.getSortByOrDefault() == BrowserCoreConstants.SORT_BY_VALUE )
            {
                return this.compareValues( value1, value2 );
            }
            else
            {
                return this.equal();
            }
        }
        else if ( attribute1 != null && attribute2 != null )
        {
            return this.compareAttributeNames( attribute1, attribute2 );
        }
        else
        {
            return this.equal();
        }
    }


    private int compareAttributeNames( IAttribute attribute1, IAttribute attribute2 )
    {

        if ( attribute1.isObjectClassAttribute() )
        {
            return lessThan();
        }
        else if ( attribute2.isObjectClassAttribute() )
        {
            return greaterThan();
        }

        if ( attribute1.isMustAttribute() && !attribute2.isMustAttribute() )
        {
            return lessThan();
        }
        else if ( attribute2.isMustAttribute() && !attribute1.isMustAttribute() )
        {
            return greaterThan();
        }

        if ( attribute1.isOperationalAttribute() && !attribute2.isOperationalAttribute() )
        {
            return greaterThan();
        }
        else if ( attribute2.isOperationalAttribute() && !attribute1.isOperationalAttribute() )
        {
            return lessThan();
        }

        return compare( attribute1.getDescription(), attribute2.getDescription() );
    }


    private int compareValues( IValue value1, IValue value2 )
    {

        if ( value1.isEmpty() && value2.isEmpty() )
        {
            return equal();
        }

        if ( value1.isEmpty() && !value2.isEmpty() )
        {
            return greaterThan();
        }
        if ( !value1.isEmpty() && value2.isEmpty() )
        {
            return lessThan();
        }

        return compare( value1.getStringValue(), value2.getStringValue() );
    }


    private int getSortOrderOrDefault()
    {
        return BrowserCoreConstants.SORT_ORDER_ASCENDING;
    }


    private int getSortByOrDefault()
    {
        return BrowserCoreConstants.SORT_BY_ATTRIBUTE_DESCRIPTION;
    }


    private int lessThan()
    {
        return this.getSortOrderOrDefault() == BrowserCoreConstants.SORT_ORDER_ASCENDING ? -1 : 1;
    }


    private int equal()
    {
        return 0;
    }


    private int greaterThan()
    {
        return this.getSortOrderOrDefault() == BrowserCoreConstants.SORT_ORDER_ASCENDING ? 1 : -1;
    }


    private int compare( String s1, String s2 )
    {
        return this.getSortOrderOrDefault() == BrowserCoreConstants.SORT_ORDER_ASCENDING ? s1.compareToIgnoreCase( s2 )
            : s2.compareToIgnoreCase( s1 );
    }

}
TOP

Related Classes of org.apache.directory.studio.ldapbrowser.core.utils.AttributeComparator

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.