All Downloads are FREE. Search and download functionalities are using the official Maven repository.

src.gov.nasa.worldwind.layers.rpf.wizard.DataChooserPanelDescriptor Maven / Gradle / Ivy

Go to download

World Wind is a collection of components that interactively display 3D geographic information within Java applications or applets.

There is a newer version: 2.0.0-986
Show newest version
/*
 * Copyright (C) 2012 United States Government as represented by the Administrator of the
 * National Aeronautics and Space Administration.
 * All Rights Reserved.
 */
package gov.nasa.worldwind.layers.rpf.wizard;

import gov.nasa.worldwind.util.wizard.DefaultPanelDescriptor;
import gov.nasa.worldwind.util.wizard.Wizard;
import gov.nasa.worldwind.util.wizard.WizardModel;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Collection;
import java.io.File;

/**
 * @author dcollins
 * @version $Id: DataChooserPanelDescriptor.java 1171 2013-02-11 21:45:02Z dcollins $
 */
public class DataChooserPanelDescriptor extends DefaultPanelDescriptor
{
    private DataChooserPanel panelComponent;
    private PropertyEvents propertyEvents;
    public static final String IDENTIFIER = "gov.nasa.worldwind.rpf.wizard.DataChooserPanel";

    public DataChooserPanelDescriptor()
    {
        this.panelComponent = new DataChooserPanel();
        this.propertyEvents = new PropertyEvents();
        this.panelComponent.addPropertyChangeListener(this.propertyEvents);
        setPanelIdentifier(IDENTIFIER);
        setPanelComponent(this.panelComponent);
    }

    public Object getBackPanelDescriptor()
    {
        return FileChooserPanelDescriptor.IDENTIFIER;
    }

    public Object getNextPanelDescriptor()
    {
        return PreprocessPanelDescriptor.IDENTIFIER;
    }

    public void registerPanel(Wizard wizard)
    {
        WizardModel oldWizardModel = getWizardModel();
        if (oldWizardModel != null)
            oldWizardModel.removePropertyChangeListener(this.propertyEvents);

        super.registerPanel(wizard);

        WizardModel newWizardModel = getWizardModel();
        if (newWizardModel != null)
            newWizardModel.addPropertyChangeListener(this.propertyEvents);
    }

    public void aboutToDisplayPanel()
    {
        setNextButtonAccordingToSelection();
    }

    private void setNextButtonAccordingToSelection()
    {
        Wizard wizard = getWizard();
        if (wizard != null)
        {
            boolean anySelected = false;
            Collection fileSetList = RPFWizardUtil.getFileSetList(wizard.getModel());
            if (fileSetList != null && fileSetList.size() > 0)
            {
                for (FileSet set : fileSetList)
                    anySelected |= set.isSelected();
            }
            wizard.setNextButtonEnabled(anySelected);
            wizard.giveFocusToNextButton();
        }
    }

    private void fileSetListChanged()
    {
        WizardModel model = getWizardModel();
        if (model != null)
        {
            Collection fileSetList = RPFWizardUtil.getFileSetList(model);
            updatePanelTitle(fileSetList);
            updatePanelData(fileSetList);
            updatePanelDataDescription(fileSetList);
        }
    }

    private void fileSetSelectionChanged()
    {
        setNextButtonAccordingToSelection();

        WizardModel model = getWizardModel();
        if (model != null)
        {
            Collection fileSetList = RPFWizardUtil.getFileSetList(model);
            updatePanelDataDescription(fileSetList);
        }
    }

    private class PropertyEvents implements PropertyChangeListener {
        public void propertyChange(PropertyChangeEvent evt) {
            if (evt != null && evt.getPropertyName() != null) {
                String propertyName = evt.getPropertyName();
                if (propertyName.equals(RPFWizardUtil.FILE_SET_LIST)) {
                    fileSetListChanged();
                } else if (propertyName.equals(FileSet.SELECTED)) {
                    fileSetSelectionChanged();
                }
            }
        }
    }

    private void updatePanelTitle(Collection fileSetList)
    {
        if (fileSetList != null && fileSetList.size() > 0)
        {
            this.panelComponent.setTitle(RPFWizardUtil.makeLarger("Select Imagery to Import"));
        }
        else
        {
            this.panelComponent.setTitle(RPFWizardUtil.makeLarger("No Imagery Found"));
        }
    }

    private void updatePanelData(Collection fileSetList)
    {
        this.panelComponent.setFileSetList(fileSetList);
    }

    private void updatePanelDataDescription(Collection fileSetList)
    {
        int totalFiles = 0;
        int selectedFiles = 0;
        if (fileSetList != null && fileSetList.size() > 0)
        {
            for (FileSet set : fileSetList)
            {
                if (set != null)
                {
                    int count = set.getFileCount();
                    totalFiles += count;
                    if (set.isSelected())
                        selectedFiles += count;
                }
            }
        }

        if (totalFiles > 0)
        {
            StringBuilder sb = new StringBuilder();
            if (selectedFiles > 0)
            {
                long WAVELET_SIZE_EST = 262160; // TODO: compute this value
                long WAVELET_TIME_EST = 200;    // TODO: compute this value
                long estimatedBytes = selectedFiles * WAVELET_SIZE_EST;
                long estimatedMillis = selectedFiles * WAVELET_TIME_EST;
                sb.append("Selected files: ");
                sb.append(String.format("%,d", selectedFiles));
                if (estimatedBytes > 0)
                {
                    SizeFormatter sf = new SizeFormatter();
                    if (sb.length() > 0)
                        sb.append(" - ");
                    sb.append("Disk space required: ~");
                    sb.append(sf.formatEstimate(estimatedBytes));
                }
                if (estimatedMillis > 0)
                {
                    TimeFormatter tf = new TimeFormatter();
                    if (sb.length() > 0)
                        sb.append(" - ");
                    sb.append("Processing time: ");
                    sb.append(tf.formatEstimate(estimatedMillis));
                }
            }
            else
            {
                sb.append("No files selected");
            }
            this.panelComponent.setDataDescription(RPFWizardUtil.makeSmaller(sb.toString()));
        }
        else
        {
            StringBuilder sb = new StringBuilder();
            sb.append("No Imagery");
            WizardModel model = getWizardModel();
            if (model != null)
            {
                File selectedFile = RPFWizardUtil.getSelectedFile(model);
                if (selectedFile != null)
                    sb.append(" in \'").append(selectedFile.getAbsolutePath()).append(File.separator).append("\'");
            }
            this.panelComponent.setDataDescription(RPFWizardUtil.makeBold(sb.toString()));
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy