Package org.apache.felix.sigil.eclipse.ui.internal.preferences

Source Code of org.apache.felix.sigil.eclipse.ui.internal.preferences.ExcludedResourcesPrefsPage

/*
* 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.felix.sigil.eclipse.ui.internal.preferences;

import java.util.ArrayList;

import org.apache.felix.sigil.eclipse.SigilCore;
import org.apache.felix.sigil.eclipse.preferences.PrefsUtils;
import org.eclipse.jface.dialogs.IInputValidator;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Table;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;

public class ExcludedResourcesPrefsPage extends PreferencePage implements IWorkbenchPreferencePage
{

    private TableViewer viewer;
    private ArrayList<String> resources;

    public ExcludedResourcesPrefsPage()
    {
        super();
        setDescription("Specify resources that should not be offered for inclusion in a generated bundle.");
    }

    @Override
    protected Control createContents(Composite parent)
    {
        // Create controls
        Composite composite = new Composite(parent, SWT.NONE);
        Table table = new Table(composite, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);

        Button btnAdd = new Button(composite, SWT.PUSH);
        btnAdd.setText("Add");

        final Button btnRemove = new Button(composite, SWT.PUSH);
        btnRemove.setText("Remove");
        btnRemove.setEnabled(false);

        // Create viewer
        viewer = new TableViewer(table);
        viewer.setContentProvider(new ArrayContentProvider());

        // Load data
        loadPreferences(false);
        viewer.setInput(resources);

        // Listeners
        viewer.addSelectionChangedListener(new ISelectionChangedListener()
        {
            public void selectionChanged(SelectionChangedEvent event)
            {
                btnRemove.setEnabled(!viewer.getSelection().isEmpty());
            }
        });

        btnRemove.addSelectionListener(new SelectionAdapter()
        {
            @Override
            public void widgetSelected(SelectionEvent e)
            {
                IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
                Object[] deleted = selection.toArray();
                for (Object delete : deleted)
                {
                    resources.remove(delete);
                }
                viewer.remove(deleted);
            }
        });

        btnAdd.addSelectionListener(new SelectionAdapter()
        {
            @Override
            public void widgetSelected(SelectionEvent e)
            {
                InputDialog dialog = new InputDialog(getShell(), "Add Resource",
                    "Enter resource name", "", new IInputValidator()
                    {
                        public String isValid(String newText)
                        {
                            String error = null;
                            if (newText == null || newText.length() == 0)
                            {
                                error = "Name must not be empty.";
                            }
                            else if (resources.contains(newText))
                            {
                                error = "Specified resource name is already on the list.";
                            }
                            return error;
                        }
                    });

                if (dialog.open() == Window.OK)
                {
                    String value = dialog.getValue();
                    resources.add(value);
                    viewer.add(value);
                }
            }
        });

        // Layout
        composite.setLayout(new GridLayout(2, false));
        table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 3));
        btnAdd.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
        btnRemove.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));

        return composite;
    }

    private void loadPreferences(boolean useDefaults)
    {
        String resourcesListStr = useDefaults ? getPreferenceStore().getDefaultString(
            SigilCore.DEFAULT_EXCLUDED_RESOURCES) : getPreferenceStore().getString(
            SigilCore.DEFAULT_EXCLUDED_RESOURCES);
        String[] resourcesArray = PrefsUtils.stringToArray(resourcesListStr);

        resources = new ArrayList<String>(resourcesArray.length);
        for (String resource : resourcesArray)
        {
            resources.add(resource);
        }
    }

    public void init(IWorkbench workbench)
    {
    }

    @Override
    protected IPreferenceStore doGetPreferenceStore()
    {
        return SigilCore.getDefault().getPreferenceStore();
    }

    @Override
    public boolean performOk()
    {
        String resourcesStr = PrefsUtils.arrayToString(resources.toArray(new String[resources.size()]));
        getPreferenceStore().setValue(SigilCore.DEFAULT_EXCLUDED_RESOURCES, resourcesStr);
        return true;
    }

    @Override
    protected void performDefaults()
    {
        super.performDefaults();
        loadPreferences(true);
        viewer.setInput(resources);
    }

}
TOP

Related Classes of org.apache.felix.sigil.eclipse.ui.internal.preferences.ExcludedResourcesPrefsPage

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.