phex.gui.dialogs.options.DownloadPane.java Source code

Java tutorial

Introduction

Here is the source code for phex.gui.dialogs.options.DownloadPane.java

Source

/*
 *  PHEX - The pure-java Gnutella-servent.
 *  Copyright (C) 2001 - 2006 Phex Development Group
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 * 
 *  --- CVS Information ---
 *  $Id$
 */
package phex.gui.dialogs.options;

import java.util.HashMap;

import javax.swing.JCheckBox;
import javax.swing.JLabel;

import phex.gui.common.IntegerTextField;
import phex.prefs.core.ConnectionPrefs;
import phex.prefs.core.DownloadPrefs;
import phex.prefs.core.SubscriptionPrefs;
import phex.utils.Localizer;

import com.jgoodies.forms.builder.PanelBuilder;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;

public class DownloadPane extends OptionsSettingsPane {
    private static final String WORKER_PER_DOWNLOAD_KEY = "WorkerPerDownload";
    private static final String MAX_TOTAL_WORKER_KEY = "TotalWorker";
    private static final String PUSH_TIMEOUT_KEY = "PushTimeout";
    private static final String INITIAL_SEGMENT_SIZE_KEY = "InitialSegmentSize";
    private static final String SEGMENT_TRANSFER_TIME_KEY = "SegmentTransferTime";

    private IntegerTextField totalWorkersTF;
    private IntegerTextField workerPerDownloadTF;
    private IntegerTextField pushTimeoutTF;
    private IntegerTextField initialSegmentSizeTF;
    private IntegerTextField segmentTransferTimeTF;
    private JCheckBox readoutMagmaChkbx;
    private JCheckBox readoutMetalinkChkbx;
    private JCheckBox readoutRSSChkbx;
    private JCheckBox silentSubscriptionsChkbx;
    private JCheckBox removeCompletedDownloadsChkbx;
    private JCheckBox enableHitSnoopingChkbx;

    public DownloadPane() {
        super("Download");
    }

    /**
     * Called when preparing this settings pane for display the first time. Can
     * be overriden to implement the look of the settings pane.
     */
    @Override
    protected void prepareComponent() {
        FormLayout layout = new FormLayout("10dlu, right:d, 2dlu, d, 2dlu:grow", // columns
                "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p"); // rows
        layout.setRowGroups(new int[][] { { 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23 } });
        setLayout(layout);

        PanelBuilder builder = new PanelBuilder(layout, this);
        CellConstraints cc = new CellConstraints();

        builder.addSeparator(Localizer.getString("GeneralDownloadSettings"), cc.xywh(1, 1, 5, 1));

        JLabel label = builder.addLabel(Localizer.getString("DownloadSettings_TotalParallelDownloads") + ": ",
                cc.xy(2, 3));
        label.setToolTipText(Localizer.getString("DownloadSettings_TTTTotalParallelDownloads"));
        totalWorkersTF = new IntegerTextField(DownloadPrefs.MaxTotalDownloadWorker.get().toString(), 6, 2);
        totalWorkersTF.setToolTipText(Localizer.getString("DownloadSettings_TTTTotalParallelDownloads"));
        builder.add(totalWorkersTF, cc.xy(4, 3));

        label = builder.addLabel(Localizer.getString("DownloadSettings_ParallelDownloadsPerFile") + ": ",
                cc.xy(2, 5));
        label.setToolTipText(Localizer.getString("DownloadSettings_TTTParallelDownloadsPerFile"));
        workerPerDownloadTF = new IntegerTextField(DownloadPrefs.MaxWorkerPerDownload.get().toString(), 6, 2);
        workerPerDownloadTF.setToolTipText(Localizer.getString("DownloadSettings_TTTParallelDownloadsPerFile"));
        builder.add(workerPerDownloadTF, cc.xy(4, 5));

        label = builder.addLabel(Localizer.getString("DownloadSettings_InitialSegmentSizeKb") + ": ", cc.xy(2, 7));
        label.setToolTipText(Localizer.getString("DownloadSettings_TTTInitialSegmentSizeKb"));
        initialSegmentSizeTF = new IntegerTextField(
                String.valueOf(DownloadPrefs.SegmentInitialSize.get().intValue() / 1024), 6, 4);
        initialSegmentSizeTF.setToolTipText(Localizer.getString("DownloadSettings_TTTInitialSegmentSizeKb"));
        builder.add(initialSegmentSizeTF, cc.xy(4, 7));

        label = builder.addLabel(Localizer.getString("DownloadSettings_SegmentTransferTimeSec") + ": ",
                cc.xy(2, 9));
        label.setToolTipText(Localizer.getString("DownloadSettings_TTTSegmentTransferTimeSec"));
        segmentTransferTimeTF = new IntegerTextField(DownloadPrefs.SegmentTransferTargetTime.get().toString(), 6,
                3);
        segmentTransferTimeTF.setToolTipText(Localizer.getString("DownloadSettings_TTTSegmentTransferTimeSec"));
        builder.add(segmentTransferTimeTF, cc.xy(4, 9));

        builder.addLabel(Localizer.getString("PushTimeout") + ": ", cc.xy(2, 11));
        pushTimeoutTF = new IntegerTextField(
                String.valueOf(DownloadPrefs.PushRequestTimeout.get().intValue() / 1000), 6, 3);
        builder.add(pushTimeoutTF, cc.xy(4, 11));

        readoutMagmaChkbx = new JCheckBox(Localizer.getString("DownloadSettings_ReadoutDownloadedMagmas"),
                DownloadPrefs.AutoReadoutMagmaFiles.get().booleanValue());
        readoutMagmaChkbx.setToolTipText(Localizer.getString("DownloadSettings_TTTReadoutDownloadedMagmas"));
        builder.add(readoutMagmaChkbx, cc.xywh(2, 13, 4, 1));

        readoutMetalinkChkbx = new JCheckBox(Localizer.getString("DownloadSettings_ReadoutDownloadedMetalink"),
                DownloadPrefs.AutoReadoutMetalinkFiles.get().booleanValue());
        readoutMetalinkChkbx.setToolTipText(Localizer.getString("DownloadSettings_TTTReadoutDownloadedMetalink"));
        builder.add(readoutMetalinkChkbx, cc.xywh(2, 15, 4, 1));

        readoutRSSChkbx = new JCheckBox(Localizer.getString("DownloadSettings_ReadoutDownloadedRSS"),
                DownloadPrefs.AutoReadoutRSSFiles.get().booleanValue());
        readoutRSSChkbx.setToolTipText(Localizer.getString("DownloadSettings_TTTReadoutDownloadedRSS"));
        builder.add(readoutRSSChkbx, cc.xywh(2, 17, 4, 1));

        silentSubscriptionsChkbx = new JCheckBox(
                Localizer.getString("DownloadSettings_DownloadSubscriptionsSilently"),
                SubscriptionPrefs.DownloadSilently.get().booleanValue());
        silentSubscriptionsChkbx
                .setToolTipText(Localizer.getString("DownloadSettings_TTTDownloadSubscriptionsSilently"));
        builder.add(silentSubscriptionsChkbx, cc.xywh(2, 19, 4, 1));

        removeCompletedDownloadsChkbx = new JCheckBox(
                Localizer.getString("DownloadSettings_AutoRemoveCompletedDownloads"),
                DownloadPrefs.AutoRemoveCompleted.get().booleanValue());
        removeCompletedDownloadsChkbx
                .setToolTipText(Localizer.getString("DownloadSettings_TTTAutoRemoveCompletedDownloads"));
        builder.add(removeCompletedDownloadsChkbx, cc.xywh(2, 21, 4, 1));

        enableHitSnoopingChkbx = new JCheckBox(Localizer.getString("DownloadSettings_EnableHitSnooping"),
                ConnectionPrefs.EnableQueryHitSnooping.get().booleanValue());
        enableHitSnoopingChkbx.setToolTipText(Localizer.getString("DownloadSettings_TTTEnableHitSnooping"));
        builder.add(enableHitSnoopingChkbx, cc.xywh(2, 23, 4, 1));

        initConfigValues();
        refreshEnableState();
    }

    /**
     * Override this method if you like to verify inputs before storing them.
     * A input dictionary is given to the pane. It can be used to store values
     * like error flags or prepared values for saving. The dictionary is given
     * to every settings pane checkInput(), displayErrorMessage() and
     * saveAndApplyChanges() method.
     * When the input has been flaged as invalid with the method setInputValid()
     * the method displayErrorMessage() is called directly after return of
     * checkInput() and the focus is given to settings pane.
     * After checking all settings pane without any error the method
     * saveAndApplyChanges() is called for all settings panes to save the
     * changes.
     */
    @Override
    public void checkInput(HashMap inputDic) {
        try {
            String workerPerDownloadStr = workerPerDownloadTF.getText();
            Integer workerPerDownload = Integer.valueOf(workerPerDownloadStr);
            inputDic.put(WORKER_PER_DOWNLOAD_KEY, workerPerDownload);
        } catch (NumberFormatException exp) {
            inputDic.put(NUMBER_FORMAT_ERROR_KEY, workerPerDownloadTF);
            setInputValid(inputDic, false);
            return;
        }

        try {
            String totalWorkersStr = totalWorkersTF.getText();
            Integer totalWorkers = Integer.valueOf(totalWorkersStr);
            inputDic.put(MAX_TOTAL_WORKER_KEY, totalWorkers);
        } catch (NumberFormatException exp) {
            inputDic.put(NUMBER_FORMAT_ERROR_KEY, totalWorkersTF);
            setInputValid(inputDic, false);
            return;
        }

        try {
            String initialSegmentSizeStr = initialSegmentSizeTF.getText();
            Integer initialSegmentSize = Integer.valueOf(initialSegmentSizeStr);
            inputDic.put(INITIAL_SEGMENT_SIZE_KEY, initialSegmentSize);
        } catch (NumberFormatException exp) {
            inputDic.put(NUMBER_FORMAT_ERROR_KEY, initialSegmentSizeTF);
            setInputValid(inputDic, false);
            return;
        }

        try {
            String segmentTransferTimeStr = segmentTransferTimeTF.getText();
            Integer segmentTransferTime = Integer.valueOf(segmentTransferTimeStr);
            inputDic.put(SEGMENT_TRANSFER_TIME_KEY, segmentTransferTime);
        } catch (NumberFormatException exp) {
            inputDic.put(NUMBER_FORMAT_ERROR_KEY, segmentTransferTimeTF);
            setInputValid(inputDic, false);
            return;
        }

        try {
            String pushTimeoutStr = pushTimeoutTF.getText();
            Integer pushTimeout = Integer.valueOf(pushTimeoutStr);
            inputDic.put(PUSH_TIMEOUT_KEY, pushTimeout);
        } catch (NumberFormatException exp) {
            inputDic.put(NUMBER_FORMAT_ERROR_KEY, pushTimeoutTF);
            setInputValid(inputDic, false);
            return;
        }

        setInputValid(inputDic, true);
    }

    /**
     * When isInputValid() returns a false this method is called.
     * The input dictionary should contain the settings pane specific information
     * of the error.
     * The settings pane should override this method to display a error
     * message. Before calling the method the focus is given to the
     * settings pane.
     */
    public void displayErrorMessage(HashMap inputDic) {
        if (inputDic.containsKey(NUMBER_FORMAT_ERROR_KEY)) {
            displayNumberFormatError(inputDic);
        }
    }

    /**
     * Override this method if you like to apply and save changes made on
     * settings pane. To trigger saving of the configuration if any value was
     * changed call triggerConfigSave().
     */
    @Override
    public void saveAndApplyChanges(HashMap inputDic) {
        Integer totalWorkerInt = (Integer) inputDic.get(MAX_TOTAL_WORKER_KEY);
        DownloadPrefs.MaxTotalDownloadWorker.set(totalWorkerInt);

        Integer initialSegmentSizeInt = (Integer) inputDic.get(INITIAL_SEGMENT_SIZE_KEY);
        DownloadPrefs.SegmentInitialSize.set(Integer.valueOf(initialSegmentSizeInt.intValue() * 1024));

        Integer segmentTransferTimeInt = (Integer) inputDic.get(SEGMENT_TRANSFER_TIME_KEY);
        DownloadPrefs.SegmentTransferTargetTime.set(segmentTransferTimeInt);

        Integer maxWorkerPerDownloadInt = (Integer) inputDic.get(WORKER_PER_DOWNLOAD_KEY);
        DownloadPrefs.MaxWorkerPerDownload.set(maxWorkerPerDownloadInt);

        Integer pushTimeoutInt = (Integer) inputDic.get(PUSH_TIMEOUT_KEY);
        int pushTimeout = pushTimeoutInt.intValue();
        DownloadPrefs.PushRequestTimeout.set(Integer.valueOf(pushTimeout * 1000));

        boolean readoutMagmas = readoutMagmaChkbx.isSelected();
        DownloadPrefs.AutoReadoutMagmaFiles.set(Boolean.valueOf(readoutMagmas));

        boolean readoutMetalinks = readoutMetalinkChkbx.isSelected();
        DownloadPrefs.AutoReadoutMetalinkFiles.set(Boolean.valueOf(readoutMetalinks));

        boolean readoutRSS = readoutRSSChkbx.isSelected();
        DownloadPrefs.AutoReadoutRSSFiles.set(Boolean.valueOf(readoutRSS));

        boolean silentSubscriptions = silentSubscriptionsChkbx.isSelected();
        SubscriptionPrefs.DownloadSilently.set(Boolean.valueOf(silentSubscriptions));

        boolean removeCompletedDownloads = removeCompletedDownloadsChkbx.isSelected();
        DownloadPrefs.AutoRemoveCompleted.set(Boolean.valueOf(removeCompletedDownloads));

        boolean enableHitSnooping = enableHitSnoopingChkbx.isSelected();
        ConnectionPrefs.EnableQueryHitSnooping.set(Boolean.valueOf(enableHitSnooping));
    }

    private void refreshEnableState() {
    }

    private void initConfigValues() {
    }
}