public void serialializeEntries()

in plugins/ldapbrowser.ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/actions/CopyEntryAsCsvAction.java [169:352]


    public void serialializeEntries( IEntry[] entries, StringBuffer text )
    {

        String attributeDelimiter = BrowserCommonActivator.getDefault().getPreferenceStore().getString(
            BrowserCommonConstants.PREFERENCE_FORMAT_TABLE_ATTRIBUTEDELIMITER );
        String valueDelimiter = BrowserCommonActivator.getDefault().getPreferenceStore().getString(
            BrowserCommonConstants.PREFERENCE_FORMAT_TABLE_VALUEDELIMITER );
        String quoteCharacter = BrowserCommonActivator.getDefault().getPreferenceStore().getString(
            BrowserCommonConstants.PREFERENCE_FORMAT_TABLE_QUOTECHARACTER );
        String lineSeparator = BrowserCommonActivator.getDefault().getPreferenceStore().getString(
            BrowserCommonConstants.PREFERENCE_FORMAT_TABLE_LINESEPARATOR );
        int binaryEncoding = BrowserCommonActivator.getDefault().getPreferenceStore().getInt(
            BrowserCommonConstants.PREFERENCE_FORMAT_TABLE_BINARYENCODING );

        String[] returningAttributes = null;
        if ( this.mode == MODE_DN_ONLY )
        {
            returningAttributes = new String[0];
        }
        else if ( this.mode == MODE_RETURNING_ATTRIBUTES_ONLY && getSelectedSearchResults().length > 0
            && getSelectedEntries().length + getSelectedBookmarks().length + getSelectedSearches().length == 0 )
        {
            returningAttributes = getSelectedSearchResults()[0].getSearch().getReturningAttributes();
        }
        else if ( ( this.mode == MODE_RETURNING_ATTRIBUTES_ONLY || this.mode == MODE_TABLE )
            && getSelectedSearches().length == 1 )
        {
            returningAttributes = getSelectedSearches()[0].getReturningAttributes();
        }
        else if ( ( this.mode == MODE_RETURNING_ATTRIBUTES_ONLY || this.mode == MODE_TABLE )
            && ( getInput() instanceof ISearch ) )
        {
            returningAttributes = ( ( ISearch ) ( getInput() ) ).getReturningAttributes();
        }
        else
        {
            Map<String, IAttribute> attributeMap = new HashMap<String, IAttribute>();
            for ( int e = 0; entries != null && e < entries.length; e++ )
            {
                IAttribute[] attributes = entries[e].getAttributes();
                for ( int a = 0; attributes != null && a < attributes.length; a++ )
                {

                    if ( attributes[a].isOperationalAttribute() && this.mode != MODE_INCLUDE_OPERATIONAL_ATTRIBUTES )
                        continue;

                    if ( !attributeMap.containsKey( attributes[a].getDescription() ) )
                    {
                        attributeMap.put( attributes[a].getDescription(), attributes[a] );
                    }
                }
            }
            IAttribute[] attributes = ( IAttribute[] ) attributeMap.values().toArray(
                new IAttribute[attributeMap.size()] );

            if ( attributes.length > 0 )
            {
                AttributeComparator comparator = new AttributeComparator();
                Arrays.sort( attributes, comparator );
            }

            returningAttributes = new String[attributes.length];
            for ( int i = 0; i < attributes.length; i++ )
            {
                returningAttributes[i] = attributes[i].getDescription();
            }
        }

        // header
        if ( this.mode != MODE_TABLE
            || BrowserUIPlugin.getDefault().getPreferenceStore().getBoolean(
                BrowserUIConstants.PREFERENCE_SEARCHRESULTEDITOR_SHOW_DN ) )
        {
            text.append( quoteCharacter );
            text.append( "Dn" ); //$NON-NLS-1$
            text.append( quoteCharacter );
            text.append( attributeDelimiter );
        }
        for ( int a = 0; returningAttributes != null && a < returningAttributes.length; a++ )
        {
            text.append( quoteCharacter );
            text.append( returningAttributes[a] );
            text.append( quoteCharacter );
            if ( a + 1 < returningAttributes.length )
            {
                text.append( attributeDelimiter );
            }
        }
        text.append( lineSeparator );

        for ( int e = 0; entries != null && e < entries.length; e++ )
        {

            if ( this.mode != MODE_TABLE
                || BrowserUIPlugin.getDefault().getPreferenceStore().getBoolean(
                    BrowserUIConstants.PREFERENCE_SEARCHRESULTEDITOR_SHOW_DN ) )
            {
                text.append( quoteCharacter );
                text.append( entries[e].getDn().getName() );
                text.append( quoteCharacter );
                text.append( attributeDelimiter );

            }
            for ( int a = 0; returningAttributes != null && a < returningAttributes.length; a++ )
            {

                AttributeComparator comparator = new AttributeComparator();
                AttributeHierarchy ah = entries[e].getAttributeWithSubtypes( returningAttributes[a] );
                if ( ah != null )
                {

                    StringBuffer valueSB = new StringBuffer();

                    for ( Iterator it = ah.iterator(); it.hasNext(); )
                    {
                        IAttribute attribute = ( IAttribute ) it.next();
                        if ( attribute != null )
                        {

                            IValue[] values = attribute.getValues();
                            Arrays.sort( values, comparator );

                            for ( int v = 0; v < values.length; v++ )
                            {
                                String val = ModelConverter.getStringValue( values[v], binaryEncoding );
                                valueSB.append( val );
                                if ( v + 1 < values.length )
                                {
                                    valueSB.append( valueDelimiter );
                                }
                            }
                        }

                        if ( it.hasNext() )
                        {
                            valueSB.append( valueDelimiter );
                        }
                    }

                    String value = valueSB.toString().replaceAll( quoteCharacter, quoteCharacter + quoteCharacter );
                    text.append( quoteCharacter );
                    text.append( value );
                    text.append( quoteCharacter );

                }

                // IAttribute attribute =
                // entries[e].getAttribute(returningAttributes[a]);
                // if (attribute != null) {
                //
                // IValue[] values = attribute.getValues();
                // Arrays.sort(values, comparator);
                //
                // StringBuffer valueSB = new StringBuffer();
                // for (int v = 0; v < values.length; v++) {
                // String val = LdifUtils.getStringValue(values[v],
                // binaryEncoding);
                // valueSB.append(val);
                // if (v + 1 < values.length) {
                // valueSB.append(valueDelimiter);
                // ;
                // }
                // }
                //
                // String value = valueSB.toString().replaceAll(quoteCharacter,
                // quoteCharacter + quoteCharacter);
                // text.append(quoteCharacter);
                // text.append(value);
                // text.append(quoteCharacter);
                //
                // }

                if ( a + 1 < returningAttributes.length )
                {
                    text.append( attributeDelimiter );
                }
            }

            if ( e < entries.length )
            {
                text.append( lineSeparator );
            }
        }
    }