org.fedoraproject.eclipse.packager.internal.preferences.FedoraPackagerPreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for org.fedoraproject.eclipse.packager.internal.preferences.FedoraPackagerPreferencePage.java

Source

/*******************************************************************************
 * Copyright (c) 2010-2011 Red Hat Inc. 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:
 *     Red Hat Inc. - initial API and implementation
 *******************************************************************************/

package org.fedoraproject.eclipse.packager.internal.preferences;

import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.fedoraproject.eclipse.packager.FedoraPackagerLogger;
import org.fedoraproject.eclipse.packager.FedoraPackagerPreferencesConstants;
import org.fedoraproject.eclipse.packager.FedoraPackagerText;
import org.fedoraproject.eclipse.packager.PackagerPlugin;

/**
 * Eclipse Fedora Packager main preference page.
 */
public class FedoraPackagerPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {

    private static final int GROUP_SPAN = 2;
    private static final String HTTP_PREFIX = "http"; //$NON-NLS-1$
    private static final String HTTPS_PREFIX = "https://"; //$NON-NLS-1$

    // Lookaside cache
    private StringFieldEditor lookasideUploadURLEditor;
    private StringFieldEditor lookasideDownloadURLEditor;
    // Koji
    private StringFieldEditor kojiWebURLEditor;
    private StringFieldEditor kojiHubURLEditor;

    /**
     * default constructor
     */
    public FedoraPackagerPreferencePage() {
        super(GRID);
        setPreferenceStore(PackagerPlugin.getDefault().getPreferenceStore());
        setDescription(FedoraPackagerText.FedoraPackagerPreferencePage_description);
    }

    /**
     * Validate fields for sane values.
     */
    @Override
    public void checkState() {
        super.checkState();
        // Upload URL has to be https
        if (lookasideUploadURLEditor.getStringValue() != null
                && !lookasideUploadURLEditor.getStringValue().startsWith(HTTP_PREFIX)) {
            setErrorMessage(FedoraPackagerText.FedoraPackagerPreferencePage_invalidUploadURLMsg);
            setValid(false);
        } else if (lookasideDownloadURLEditor.getStringValue() != null
                && !lookasideDownloadURLEditor.getStringValue().startsWith(HTTP_PREFIX)) {
            setErrorMessage(FedoraPackagerText.FedoraPackagerPreferencePage_invalidDownloadURLMsg);
            setValid(false);
        } else if (kojiWebURLEditor.getStringValue() != null
                && !kojiWebURLEditor.getStringValue().startsWith(HTTP_PREFIX)) {
            setErrorMessage(FedoraPackagerText.FedoraPackagerPreferencePage_kojiWebURLInvalidMsg);
            setValid(false);
        } else if (kojiHubURLEditor.getStringValue() != null
                && !kojiHubURLEditor.getStringValue().startsWith(HTTPS_PREFIX)) {
            setErrorMessage(FedoraPackagerText.FedoraPackagerPreferencePage_kojiHubURLInvalidMsg);
            setValid(false);
        } else {
            setErrorMessage(null);
            setValid(true);
        }
    }

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

    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
     */
    @Override
    public void propertyChange(PropertyChangeEvent event) {
        if (event.getProperty().equals(FieldEditor.VALUE)) {
            checkState();
        }
    }

    @Override
    protected void createFieldEditors() {
        Composite composite = getFieldEditorParent();

        // General prefs
        Group generalGroup = new Group(composite, SWT.SHADOW_ETCHED_IN);
        generalGroup.setText(FedoraPackagerText.FedoraPackagerPreferencePage_generalGroupName);
        addField(new BooleanFieldEditor(FedoraPackagerPreferencesConstants.PREF_DEBUG_MODE,
                FedoraPackagerText.FedoraPackagerPreferencePage_debugSwitchLabel, generalGroup));
        updateMargins(generalGroup);

        Group lookasideGroup = new Group(composite, SWT.SHADOW_ETCHED_IN);
        lookasideGroup.setText(FedoraPackagerText.FedoraPackagerPreferencePage_lookasideGroupName);
        GridDataFactory.fillDefaults().grab(true, false).span(GROUP_SPAN, 1).applyTo(lookasideGroup);
        /* Preference for setting the lookaside urls */
        lookasideUploadURLEditor = new StringFieldEditor(
                FedoraPackagerPreferencesConstants.PREF_LOOKASIDE_UPLOAD_URL,
                FedoraPackagerText.FedoraPackagerPreferencePage_lookasideUploadURLLabel, lookasideGroup);
        lookasideDownloadURLEditor = new StringFieldEditor(
                FedoraPackagerPreferencesConstants.PREF_LOOKASIDE_DOWNLOAD_URL,
                FedoraPackagerText.FedoraPackagerPreferencePage_lookasideDownloadURLLabel, lookasideGroup);
        // register change listener
        lookasideDownloadURLEditor.setPropertyChangeListener(this);
        lookasideUploadURLEditor.setPropertyChangeListener(this);
        // load defaults and/or set values
        lookasideDownloadURLEditor.load();
        lookasideUploadURLEditor.load();
        addField(lookasideUploadURLEditor);
        addField(lookasideDownloadURLEditor);
        updateMargins(lookasideGroup);

        Group kojiGroup = new Group(composite, SWT.SHADOW_ETCHED_IN);
        kojiGroup.setText(FedoraPackagerText.FedoraPackagerPreferencePage_buildSystemGroupName);
        GridDataFactory.fillDefaults().grab(true, false).span(GROUP_SPAN, 1).applyTo(kojiGroup);
        /* Preference for setting the koji host */
        kojiWebURLEditor = new StringFieldEditor(FedoraPackagerPreferencesConstants.PREF_KOJI_WEB_URL,
                FedoraPackagerText.FedoraPackagerPreferencePage_kojiWebURLLabel, kojiGroup);
        kojiHubURLEditor = new StringFieldEditor(FedoraPackagerPreferencesConstants.PREF_KOJI_HUB_URL,
                FedoraPackagerText.FedoraPackagerPreferencePage_kojiHubURLLabel, kojiGroup);
        kojiWebURLEditor.setPropertyChangeListener(this);
        kojiHubURLEditor.setPropertyChangeListener(this);
        kojiWebURLEditor.load();
        kojiHubURLEditor.load();
        addField(kojiWebURLEditor);
        addField(kojiHubURLEditor);
        updateMargins(kojiGroup);
    }

    @Override
    public boolean performOk() {
        super.performOk();
        // reload packager logger config
        FedoraPackagerLogger.getInstance().refreshConfig();
        return true;
    }

    @Override
    protected void performApply() {
        super.performApply();
        // reload packager logger config
        FedoraPackagerLogger.getInstance().refreshConfig();
    }

    private void updateMargins(Group group) {
        // make sure there is some room between the group border
        // and the controls in the group
        GridLayout layout = (GridLayout) group.getLayout();
        layout.marginWidth = 5;
        layout.marginHeight = 5;
    }

}