package usda.weru.erosion;


import de.schlichtherle.truezip.file.TFile;
import java.awt.event.ItemEvent;
import java.beans.*;
import java.util.*;
import javax.swing.JCheckBox;
import usda.weru.util.*;

class OutputFlags extends usda.weru.erosion.gui.OutputFlags_n implements PropertyChangeListener {
    private static final long serialVersionUID = 1L;

	private final String measurementUnits = Util.SIUnits;
	private final int curSubr = 0;
	
	private DataStore ds;

    public static void main(String[]args) {
        OutputFlags out = new OutputFlags();
		out.ds = new DataStore();
		out.addPropertyChangeListener(out.ds);
		out.ds.addPropertyChangeListener(out);
        out.setSize(640,480);
		out.setTitle("Daily Wind Erosion Mode - OutputFlags Test");
        out.setVisible(true);
		out.ds.readTextFile(new TFile("c:/weps.wrk/test/barrier_test.in"));
    }

	Hashtable<String, JCheckBox> HT_displayFields = new Hashtable<String, JCheckBox>();
	
	OutputFlags() {
		super();
		
		HT_displayFields.put(DataStore.PlotAggMax, JCB_aggMaxDia);
		HT_displayFields.put(DataStore.PlotAggGMD , JCB_aggMeanDia);
		HT_displayFields.put(DataStore.PlotAggMin , JCB_aggMinDia);
		HT_displayFields.put(DataStore.PlotAggStd , JCB_aggSD);
		HT_displayFields.put(DataStore.PlotAggStab , JCB_aggStability);
		HT_displayFields.put(DataStore.PlotBiomass , JCB_biomassHeight);
		HT_displayFields.put(DataStore.PlotClay , JCB_clay);
		HT_displayFields.put(DataStore.PlotCrustDen , JCB_crustDensity);
		HT_displayFields.put(DataStore.PlotCrustFrac , JCB_crustFraction);
		HT_displayFields.put(DataStore.PlotCrustStab , JCB_crustStability);
		HT_displayFields.put(DataStore.PlotCrustThk , JCB_crustThickness);
		HT_displayFields.put(DataStore.PlotFieldLen , JCB_fieldLength);
		HT_displayFields.put(DataStore.PlotFlatCover , JCB_flatFraction);
//		HT_displayFields.put(DataStore.Plot , JCB_initFlg);
		HT_displayFields.put(DataStore.PlotLAI , JCB_leafArea);
		HT_displayFields.put(DataStore.PlotLMMass , JCB_looseMass);
		HT_displayFields.put(DataStore.PlotLMFrac , JCB_looseMaterial);
//		HT_displayFields.put(DataStore.Plot , JCB_plotFlg);
//		HT_displayFields.put(DataStore.Plot , JCB_printFlg);
		HT_displayFields.put(DataStore.PlotRandRough , JCB_randomRoughness);
		HT_displayFields.put(DataStore.PlotRidgeHgt , JCB_ridgeHeight);
		HT_displayFields.put(DataStore.PlotRidgeOrient , JCB_ridgeOrientation);
		HT_displayFields.put(DataStore.PlotRidgeSpc , JCB_ridgeSpacing);
		HT_displayFields.put(DataStore.PlotRidgeWid , JCB_ridgeWidth);
		HT_displayFields.put(DataStore.PlotRock , JCB_rock);
		HT_displayFields.put(DataStore.PlotSand , JCB_sand);
		HT_displayFields.put(DataStore.PlotSilt , JCB_silt);
		HT_displayFields.put(DataStore.PlotSAI , JCB_stemArea);
		HT_displayFields.put(DataStore.PlotVFSand , JCB_veryFineSand);

	}

/** Menu item handlers **/
	

/** Field and button handlers **/	


//	Soil Surface
    protected void JCB_ridgeOrientationItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_ridgeOrientationItemStateChanged
		changes.firePropertyChange(DataStore.PlotRidgeOrient, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "1" : "0");
    }//GEN-LAST:event_JCB_ridgeOrientationItemStateChanged

    protected void JCB_ridgeWidthItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_ridgeWidthItemStateChanged
		changes.firePropertyChange(DataStore.PlotRidgeWid, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "1" : "0");
    }//GEN-LAST:event_JCB_ridgeWidthItemStateChanged

    protected void JCB_ridgeSpacingItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_ridgeSpacingItemStateChanged
		changes.firePropertyChange(DataStore.PlotRidgeSpc, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "1" : "0");
    }//GEN-LAST:event_JCB_ridgeSpacingItemStateChanged

    protected void JCB_ridgeHeightItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_ridgeHeightItemStateChanged
		changes.firePropertyChange(DataStore.PlotRidgeHgt, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "1" : "0");
    }//GEN-LAST:event_JCB_ridgeHeightItemStateChanged

    protected void JCB_randomRoughnessItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_randomRoughnessItemStateChanged
		changes.firePropertyChange(DataStore.PlotRandRough, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "1" : "0");
    }//GEN-LAST:event_JCB_randomRoughnessItemStateChanged

    protected void JCB_crustStabilityItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_crustStabilityItemStateChanged
		changes.firePropertyChange(DataStore.PlotCrustStab, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "1" : "0");
    }//GEN-LAST:event_JCB_crustStabilityItemStateChanged

    protected void JCB_crustDensityItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_crustDensityItemStateChanged
		changes.firePropertyChange(DataStore.PlotCrustDen, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "1" : "0");
    }//GEN-LAST:event_JCB_crustDensityItemStateChanged

    protected void JCB_looseMassItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_looseMassItemStateChanged
		changes.firePropertyChange(DataStore.PlotLMMass, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "1" : "0");
    }//GEN-LAST:event_JCB_looseMassItemStateChanged

    protected void JCB_looseMaterialItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_looseMaterialItemStateChanged
		changes.firePropertyChange(DataStore.PlotLMFrac, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "1" : "0");
    }//GEN-LAST:event_JCB_looseMaterialItemStateChanged

    protected void JCB_crustThicknessItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_crustThicknessItemStateChanged
		changes.firePropertyChange(DataStore.PlotCrustThk, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "1" : "0");
    }//GEN-LAST:event_JCB_crustThicknessItemStateChanged

    protected void JCB_crustFractionItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_crustFractionItemStateChanged
		changes.firePropertyChange(DataStore.PlotCrustFrac, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "1" : "0");
    }//GEN-LAST:event_JCB_crustFractionItemStateChanged

    protected void JCB_aggSDItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_aggSDItemStateChanged
		changes.firePropertyChange(DataStore.PlotAggStd, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "1" : "0");
    }//GEN-LAST:event_JCB_aggSDItemStateChanged

    protected void JCB_aggMaxDiaItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_aggMaxDiaItemStateChanged
		changes.firePropertyChange(DataStore.PlotAggMax, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "1" : "0");
    }//GEN-LAST:event_JCB_aggMaxDiaItemStateChanged

    protected void JCB_aggMinDiaItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_aggMinDiaItemStateChanged
		changes.firePropertyChange(DataStore.PlotAggMin, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "1" : "0");
    }//GEN-LAST:event_JCB_aggMinDiaItemStateChanged

    protected void JCB_aggMeanDiaItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_aggMeanDiaItemStateChanged
		changes.firePropertyChange(DataStore.PlotAggGMD, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "1" : "0");
    }//GEN-LAST:event_JCB_aggMeanDiaItemStateChanged

    protected void JCB_aggStabilityItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_aggStabilityItemStateChanged
		changes.firePropertyChange(DataStore.PlotAggStab, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "1" : "0");
    }//GEN-LAST:event_JCB_aggStabilityItemStateChanged

    protected void JCB_rockItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_rockItemStateChanged
		changes.firePropertyChange(DataStore.PlotRock, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "1" : "0");
    }//GEN-LAST:event_JCB_rockItemStateChanged

    protected void JCB_clayItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_clayItemStateChanged
		changes.firePropertyChange(DataStore.PlotClay, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "1" : "0");
    }//GEN-LAST:event_JCB_clayItemStateChanged

    protected void JCB_siltItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_siltItemStateChanged
		changes.firePropertyChange(DataStore.PlotSilt, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "1" : "0");
    }//GEN-LAST:event_JCB_siltItemStateChanged

    protected void JCB_sandItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_sandItemStateChanged
		changes.firePropertyChange(DataStore.PlotSand, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "1" : "0");
    }//GEN-LAST:event_JCB_sandItemStateChanged

    protected void JCB_veryFineSandItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_veryFineSandItemStateChanged
		changes.firePropertyChange(DataStore.PlotVFSand, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "1" : "0");
    }//GEN-LAST:event_JCB_veryFineSandItemStateChanged

    protected void JCB_flatFractionItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_flatFractionItemStateChanged
		changes.firePropertyChange(DataStore.PlotFlatCover, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "1" : "0");
    }//GEN-LAST:event_JCB_flatFractionItemStateChanged

    protected void JCB_leafAreaItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_leafAreaItemStateChanged
		changes.firePropertyChange(DataStore.PlotLAI, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "1" : "0");
    }//GEN-LAST:event_JCB_leafAreaItemStateChanged

    protected void JCB_stemAreaItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_stemAreaItemStateChanged
		changes.firePropertyChange(DataStore.PlotSAI, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "1" : "0");
    }//GEN-LAST:event_JCB_stemAreaItemStateChanged

    protected void JCB_biomassHeightItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_biomassHeightItemStateChanged
		changes.firePropertyChange(DataStore.PlotBiomass, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "1" : "0");
    }//GEN-LAST:event_JCB_biomassHeightItemStateChanged

    protected void JCB_fieldLengthItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_fieldLengthItemStateChanged
		changes.firePropertyChange(DataStore.PlotFieldLen, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "1" : "0");
    }//GEN-LAST:event_JCB_fieldLengthItemStateChanged

    protected void JCB_plotFlgItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_JCB_plotFlgItemStateChanged
		changes.firePropertyChange(DataStore.PlotFlg, null, (evt.getStateChange() == ItemEvent.SELECTED) ? "0" : "-1");
//		if (evt.getStateChange() == evt.SELECTED) {
//			changes.firePropertyChange(DataStore.PrintFlg, null, "0");
//		} else {
//			changes.firePropertyChange(DataStore.PrintFlg, null, "-1");
//		}
    }//GEN-LAST:event_JCB_plotFlgItemStateChanged



	/****** Property change support methods *****/

	/**
     * RunFileData throws a property change each time setData is called.
     * Wrapper classes listen to determine if the the event is relevant to
     * them.
     */

	private final PropertyChangeSupport changes = new PropertyChangeSupport(this);

	/**
     * Allows the container to add or register some other components to recognize the changes that occur
     * on this component.
     * @param l The listener that listens and reacts towards the the changes to be reflected.
     */
    @Override
	public void addPropertyChangeListener(PropertyChangeListener l) {
		changes.addPropertyChangeListener(l);
	}

	/**
     * Allows the container to remove or de-register some other components and stop recognizing the
     * changes that occur on this component.
     * @param l The listener that does not listen and react towards the the changes to be reflected.
     */
    @Override
	public void removePropertyChangeListener(PropertyChangeListener l) {
		changes.removePropertyChangeListener(l);
	}

	/**
     * Recognizes and takes appropriate actions on registered properties from different
     * screens to update and synchronize data and GUI screens as needed.
     * @param e The event itself that is responsible for triggering the change required for registered
     * properties/components.
     */
    @Override
	public void propertyChange(PropertyChangeEvent e) {

		String property = e.getPropertyName();
		if (property.equals(DataStore.PlotFlg)) {
			setPlotFlag((String) e.getNewValue());
		} else {
			if (property.indexOf("+") > 0) property = property.substring(0, property.indexOf("+"));
			String value = (String) e.getNewValue();
			Object obj = HT_displayFields.get(property);
			if (obj != null) {
				if (obj instanceof javax.swing.JCheckBox) {
////System.out.println("E_pC: " + obj);					
					javax.swing.JCheckBox jcb = (javax.swing.JCheckBox) obj;
					jcb.setSelected(value.trim().equals("1"));
				}
			}
		}
	}

	/***** specific property change handles ********/


	private void setPlotFlag(String selStr) {
		selStr = selStr.trim();
		if (selStr.equals("0")) {
			JCB_plotFlg.setSelected(true);
		} else {
			JCB_plotFlg.setSelected(false);
		}
	}

}
	
	