org.jboss.tools.common.model.ui.preferences.TabbedPreferencesPage.java Source code

Java tutorial

Introduction

Here is the source code for org.jboss.tools.common.model.ui.preferences.TabbedPreferencesPage.java

Source

/*******************************************************************************
 * Copyright (c) 2007-2015 Red Hat, Inc.
 * Distributed under license by Red Hat, Inc. All rights reserved.
 * This program is made available under the terms of the
 * Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     Exadel, Inc. and Red Hat, Inc. - initial API and implementation
 ******************************************************************************/
package org.jboss.tools.common.model.ui.preferences;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.eclipse.jface.preference.IPreferencePage;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.jboss.tools.common.model.XModel;
import org.jboss.tools.common.model.XModelObject;
import org.jboss.tools.common.model.ui.util.ModelUtilities;

/**
 * @author eskimo
 *
 */
public class TabbedPreferencesPage extends PreferencePage implements IWorkbenchPreferencePage {

    Map<String, PreferencePage> map = new HashMap<String, PreferencePage>();

    public TabbedPreferencesPage(String[] paths) {
        addAllPreferencePage(convertPathArrayToPreferencePageList(paths));
    }

    public TabbedPreferencesPage() {

    }

    public final XModel getPreferenceModel() {
        return ModelUtilities.getPreferenceModel();
    }

    private List convertPathArrayToPreferencePageList(String[] path) {

        XModel model = getPreferenceModel();
        if (model == null)
            throw new IllegalArgumentException("Preference XModel not loaded."); //$NON-NLS-1$
        if (path == null)
            throw new IllegalArgumentException("String array with path's cannot be null"); //$NON-NLS-1$
        if (path.length == 0)
            throw new IllegalArgumentException("Path array should contains at least one element."); //$NON-NLS-1$
        List<XMOBasedPreferencesPage> pages = new ArrayList<XMOBasedPreferencesPage>();
        for (int i = 0; i < path.length; i++) {
            XModelObject o = model.getByPath(path[i]);
            XMOBasedPreferencesPage page = new XMOBasedPreferencesPage(o);
            pages.add(page);
            map.put(path[i], page); //map.put(o.getPathPart(), page);
        }
        return pages;
    }

    public XMOBasedPreferencesPage getXMOTabPage(String name) {
        return (XMOBasedPreferencesPage) map.get(name);
    }

    /* (non-Javadoc)
     * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
     */
    @Override
    public void init(IWorkbench workbench) {
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
     */
    @Override
    protected Control createContents(Composite parent) {
        this.noDefaultAndApplyButton();
        TabFolder tabbedComposite = new TabFolder(parent, SWT.NULL);
        tabbedComposite.setBackground(parent.getBackground());

        for (Iterator iter = pageList.iterator(); iter.hasNext();) {
            PreferencePage element = (PreferencePage) iter.next();
            TabItem newTab = new TabItem(tabbedComposite, SWT.NULL);
            element.createControl(tabbedComposite);
            if (element instanceof XMOBasedPreferencesPage)
                ((XMOBasedPreferencesPage) element).initPageProperties();
            newTab.setControl(element.getControl());
            newTab.setText(element.getTitle());
        }

        return tabbedComposite;
    }

    List<PreferencePage> pageList = new ArrayList<PreferencePage>();

    public void addPreferencePage(PreferencePage page) {
        pageList.add(page);
        if (page instanceof XMOBasedPreferencesPage) {
            //         XMOBasedPreferencesPage xPage = (XMOBasedPreferencesPage)page;
            map.put(page.getTitle(), page);
        }
    }

    public void addAllPreferencePage(List page) {
        for (Iterator iter = page.iterator(); iter.hasNext();) {
            addPreferencePage((PreferencePage) iter.next());
        }
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.preference.IPreferencePage#performCancel()
     */
    @Override
    public boolean performCancel() {
        boolean cancel = true;
        for (PreferencePage preferencePage : pageList) {
            cancel = preferencePage.performCancel() && cancel;
        }
        return cancel;
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.preference.IPreferencePage#performCancel()
     */
    @Override
    public void performDefaults() {
        for (Iterator iter = pageList.iterator(); iter.hasNext();) {
            IPreferencePage element = (IPreferencePage) iter.next();
            if (element instanceof IPreferencePageExt) {
                IPreferencePageExt elementExt = (IPreferencePageExt) iter.next();
                elementExt.performDefaults();
            }
        }
        super.performDefaults();
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.dialogs.IDialogPage#performHelp()
     */
    @Override
    public void performHelp() {
        super.performHelp();
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.preference.IPreferencePage#performOk()
     */
    @Override
    public boolean performOk() {
        boolean isOk = true;
        for (PreferencePage page : pageList) {
            isOk = page.performOk() && isOk;
        }
        return isOk;
    }

    @Override
    public void dispose() {
        for (Iterator iter = pageList.iterator(); iter.hasNext();) {
            PreferencePage element = (PreferencePage) iter.next();
            element.dispose();
        }
        super.dispose();
    }
}