org.apache.directory.studio.templateeditor.view.preferences.TemplatesLabelProvider.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.directory.studio.templateeditor.view.preferences.TemplatesLabelProvider.java

Source

/*
 *  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.templateeditor.view.preferences;

import java.util.Iterator;
import java.util.List;

import org.apache.directory.api.ldap.model.schema.ObjectClass;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.ITableColorProvider;
import org.eclipse.jface.viewers.ITableFontProvider;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.apache.directory.studio.common.ui.CommonUIConstants;
import org.apache.directory.studio.templateeditor.EntryTemplatePlugin;
import org.apache.directory.studio.templateeditor.EntryTemplatePluginConstants;
import org.apache.directory.studio.templateeditor.EntryTemplatePluginUtils;
import org.apache.directory.studio.templateeditor.model.Template;
import org.apache.directory.studio.templateeditor.view.ColumnsLabelProvider;

/**
 * This class implements a label provider for the table viewer of
 * the Template Entry Editor preference page.
 *
 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
 */
public class TemplatesLabelProvider extends ColumnsLabelProvider
        implements ITableFontProvider, ITableColorProvider {
    /** The Grey color constant */
    private static final Color GREY_COLOR = CommonUIConstants.ML_GREY_COLOR;

    /** The templates manager */
    private PreferencesTemplatesManager manager;

    /** The preference store */
    private IPreferenceStore store;

    /**
     * Creates a new instance of TemplatesLabelProvider.
     */
    public TemplatesLabelProvider(PreferencesTemplatesManager manager) {
        this.manager = manager;
        store = EntryTemplatePlugin.getDefault().getPreferenceStore();
    }

    /**
     * {@inheritDoc}
     */
    public Image getColumnImage(Object element, int columnIndex) {
        // Object class presentation
        if (isObjectClassPresentation()) {
            if (columnIndex == 0) {
                if (element instanceof ObjectClass) {
                    return EntryTemplatePlugin.getDefault().getImage(EntryTemplatePluginConstants.IMG_OBJECT_CLASS);
                } else if (element instanceof Template) {
                    if (manager.isEnabled((Template) element)) {
                        return EntryTemplatePlugin.getDefault().getImage(EntryTemplatePluginConstants.IMG_TEMPLATE);
                    } else {
                        return EntryTemplatePlugin.getDefault()
                                .getImage(EntryTemplatePluginConstants.IMG_TEMPLATE_DISABLED);
                    }
                }
            }
        }
        // Template presentation
        else if (isTemplatePresentation()) {
            if (columnIndex == 0) {
                if (element instanceof Template) {
                    if (manager.isEnabled((Template) element)) {
                        return EntryTemplatePlugin.getDefault().getImage(EntryTemplatePluginConstants.IMG_TEMPLATE);
                    } else {
                        return EntryTemplatePlugin.getDefault()
                                .getImage(EntryTemplatePluginConstants.IMG_TEMPLATE_DISABLED);
                    }
                }
            } else if (columnIndex == 1) {
                if (element instanceof Template) {
                    return EntryTemplatePlugin.getDefault().getImage(EntryTemplatePluginConstants.IMG_OBJECT_CLASS);
                }
            }
        }

        return null;
    }

    /**
     * {@inheritDoc}
     */
    public String getColumnText(Object element, int columnIndex) {
        // Object class presentation
        if (isObjectClassPresentation()) {
            if (columnIndex == 0) {
                if (element instanceof ObjectClass) {
                    return concatenateObjectClassNames(((ObjectClass) element).getNames());
                } else if (element instanceof Template) {
                    Template template = (Template) element;
                    if (manager.isDefaultTemplate(template)) {
                        return NLS.bind(Messages.getString("TemplatesLabelProvider.Default"), template.getTitle()); //$NON-NLS-1$
                    } else {
                        return template.getTitle();
                    }
                }
            }
        }
        // Template presentation
        else if (isTemplatePresentation()) {
            if (columnIndex == 0) {
                if (element instanceof Template) {
                    return ((Template) element).getTitle();
                }
            } else if (columnIndex == 1) {
                if (element instanceof Template) {
                    Template template = (Template) element;
                    return concatenateObjectClasses(EntryTemplatePluginUtils
                            .getObjectClassDescriptionFromDefaultSchema(template.getStructuralObjectClass()),
                            template.getAuxiliaryObjectClasses());
                }
            }
        }

        return ""; //$NON-NLS-1$
    }

    /**
     * Indicates if the template presentation is selected.
     *
     * @return
     *      <code>true</code> if the template presentation is selected,
     *      <code>false</code> if not
     */
    private boolean isTemplatePresentation() {
        return (store.getInt(
                EntryTemplatePluginConstants.PREF_TEMPLATES_PRESENTATION) == EntryTemplatePluginConstants.PREF_TEMPLATES_PRESENTATION_TEMPLATE);
    }

    /**
     * Indicates if the object class presentation is selected.
     *
     * @return
     *      <code>true</code> if the object class presentation is selected,
     *      <code>false</code> if not
     */
    private boolean isObjectClassPresentation() {
        return (store.getInt(
                EntryTemplatePluginConstants.PREF_TEMPLATES_PRESENTATION) == EntryTemplatePluginConstants.PREF_TEMPLATES_PRESENTATION_OBJECT_CLASS);
    }

    /**
     * Concatenates the object classes in a single string.
     *
     * @param objectClass
     *      the object class
     * @param auxiliaryObjectClasses
     *      the list of auxiliary object class names
     * @return
     *      a string containing all the object classes separated 
     *      by <code>", "</code> characters.
     */
    private String concatenateObjectClasses(ObjectClass objectClass, List<String> auxiliaryObjectClasses) {
        if ((objectClass != null) && (auxiliaryObjectClasses != null)) {
            StringBuilder sb = new StringBuilder();

            sb.append(concatenateObjectClassNames(objectClass.getNames()));

            if (auxiliaryObjectClasses.size() > 0) {
                sb.append(" <"); //$NON-NLS-1$

                // Adding each auxiliary object class
                Iterator<String> iterator = auxiliaryObjectClasses.iterator();
                while (iterator.hasNext()) {
                    sb.append((String) iterator.next());
                    if (iterator.hasNext()) {
                        sb.append(", "); //$NON-NLS-1$
                    }
                }

                sb.append(">"); //$NON-NLS-1$
            }

            return sb.toString();
        }

        return ""; //$NON-NLS-1$
    }

    /**
     * Concatenates the object class names in a single string.
     *
     * @param objectClasses
     *      the object classes
     * @return
     *      a string containing all the object classes separated 
     *      by <code>", "</code> characters.
     */
    private String concatenateObjectClassNames(List<String> names) {
        if ((names != null) && (names.size() > 0)) {
            StringBuilder sb = new StringBuilder();

            Iterator<String> iterator = names.iterator();
            while (iterator.hasNext()) {
                sb.append((String) iterator.next());
                if (iterator.hasNext()) {
                    sb.append(", "); //$NON-NLS-1$
                }
            }

            return sb.toString();
        }

        return ""; //$NON-NLS-1$
    }

    /**
     * {@inheritDoc}
     */
    public Font getFont(Object element, int columnIndex) {
        // Object class presentation
        if (isObjectClassPresentation()) {
            if (element instanceof Template) {
                if (manager.isDefaultTemplate((Template) element)) {
                    // Get the default Bold Font
                    return JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT);
                }
            }
        }

        return null;
    }

    /**
     * {@inheritDoc}
     */
    public Color getForeground(Object element, int columnIndex) {
        if (element instanceof Template) {
            if (!manager.isEnabled((Template) element)) {
                return GREY_COLOR;
            }
        }

        return null;
    }

    /**
     * {@inheritDoc}
     */
    public Color getBackground(Object element, int columnIndex) {
        return null;
    }
}