/* Copyright (C) 2001, 2007 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 4857 2008-03-29 01:11:08Z 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<FileSet> 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<FileSet> fileSetList = RPFWizardUtil.getFileSetList(model);
updatePanelTitle(fileSetList);
updatePanelData(fileSetList);
updatePanelDataDescription(fileSetList);
}
}
private void fileSetSelectionChanged()
{
setNextButtonAccordingToSelection();
WizardModel model = getWizardModel();
if (model != null)
{
Collection<FileSet> 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<FileSet> 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<FileSet> fileSetList)
{
this.panelComponent.setFileSetList(fileSetList);
}
private void updatePanelDataDescription(Collection<FileSet> 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()));
}
}
}