com.schmeedy.relaxng.eclipse.ui.internal.preferences.RngSchemaBindingPreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for com.schmeedy.relaxng.eclipse.ui.internal.preferences.RngSchemaBindingPreferencePage.java

Source

/*******************************************************************************
 * Copyright (c) 2002, 2008 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are 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:
 *       IBM Corporation, Jens Lukowski/Innoopract - original implementation of 
 *          the XMLCatalogPreferencePage
 *       Martin Schmied - customizations for the RELAX NG Bindings preference page
 *******************************************************************************/
package com.schmeedy.relaxng.eclipse.ui.internal.preferences;

import java.util.Set;

import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;

import com.schmeedy.relaxng.eclipse.core.internal.binding.ConsolidatedRngSchemaBindings;
import com.schmeedy.relaxng.eclipse.core.internal.binding.PluginSchemaBindings;
import com.schmeedy.relaxng.eclipse.core.internal.binding.RngSchemaBinding;
import com.schmeedy.relaxng.eclipse.core.internal.binding.UserSchemaBindings;

public class RngSchemaBindingPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
    private final UserSchemaBindings userBindings = new UserSchemaBindings();

    private final PluginSchemaBindings pluginBindings = PluginSchemaBindings.INSTANCE;

    private RngSchemaBindingView schemaBindingView;

    private RngBindingDetailsView bindingDetailsView;

    public RngSchemaBindingPreferencePage() {
        setDescription("Manage bindings between root element namespaces and RELAX NG schemata.");
    }

    @Override
    protected Control createContents(Composite parent) {
        noDefaultAndApplyButton();

        Composite composite = new Composite(parent, SWT.NULL);
        composite.setLayout(new GridLayout());
        composite.setLayoutData(new GridData(GridData.FILL_BOTH));

        createSchemaBindingsView(composite);
        createBindingDetailsView(composite);

        return composite;
    }

    private void createSchemaBindingsView(Composite parent) {
        Group group = new Group(parent, SWT.NONE);
        group.setLayout(new GridLayout());
        group.setLayoutData(new GridData(GridData.FILL_BOTH));
        group.setText("RELAX NG Schema Bindings");

        schemaBindingView = new RngSchemaBindingView(group, userBindings, pluginBindings);
        schemaBindingView.setLayoutData(new GridData(GridData.FILL_BOTH));
        schemaBindingView.addSelectionObserver(new RngSchemaBindingView.SimpleRngBindingSelectionObserver() {
            // @Override
            public void onSingleSelection(RngSchemaBinding binding) {
                bindingDetailsView.display(binding);
            }

            // @Override
            public void onMultiSelection(Set<RngSchemaBinding> bindings) {
                bindingDetailsView.clear();
            }

            // @Override
            public void onSelectionCleared() {
                bindingDetailsView.clear();
            }
        });
    }

    private void createBindingDetailsView(Composite parent) {
        Group group = new Group(parent, SWT.NONE);
        group.setLayout(new GridLayout());
        group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        group.setText("Binding Details");

        bindingDetailsView = new RngBindingDetailsView(group);
    }

    // @Override
    public void init(IWorkbench workbench) {

    }

    @Override
    public boolean performCancel() {
        userBindings.reload();
        return true;
    }

    @Override
    public boolean performOk() {
        userBindings.save();
        ConsolidatedRngSchemaBindings.INSTANCE.reloadWorkingUserBindings();
        return true;
    }
}