Package

Source Code of QuantCostDialog

// $Id: QuantCostDialog.java,v 1.1 2007/01/30 16:21:23 jtrent Exp $

import javax.swing.JFrame;
import javax.swing.SwingConstants;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import javax.swing.BoxLayout;
import javax.swing.JDialog;
import java.awt.Color;
import javax.swing.JFormattedTextField;
import java.text.NumberFormat;
import javax.swing.Box;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.Printable;
import java.awt.print.PrinterJob;
import java.awt.print.PageFormat;
import java.awt.print.PrinterException;
import javax.swing.RepaintManager;
import java.awt.Component;
import java.util.Date;
import javax.swing.text.JTextComponent;

/**
* QuantCostDialog allows input of currency values for costs and benefits,
* computes totals, and allows the user to print the result.
*
* @author Jason R Trent - jtrent@sandia.gov - Sandia National Laboratories
* @version $Revision: 1.1 $
*/
public class QuantCostDialog extends JDialog implements ActionListener, KeyListener, Printable
{
  private SmoothJButton okButton,
            printButton,
            helpButton;

  private JPanel navigationPanel,
        interfacePanel,
        dataPanel;

  private SmoothJFormattedTextField acqCost,
                  mainCost,
                  opCost,
                  govGrantsBenefit,
                  rateIncBenefit,
                  otherRecoverBenefit,
                  diligenceBenefit,
                  cyberAvoidBenefit,
                  regComplianceBenefit,
                  secBusBenefit;


  private SmoothJLabel totalCostLabel,
            totalBenefitLabel,
            totalLabel,
            evalNameLabel,
            evalProductLabel,
            evalDateLabel;


  private NumberFormat curFormat = NumberFormat.getCurrencyInstance();
   private MainFrame mainFrameRef;

  public QuantCostDialog( MainFrame mainFrameRef, String splash, Color color )
  {
    super( mainFrameRef,
        VersionInfo.applicationTitle + " v " + VersionInfo.versionString,
        true );

    this.mainFrameRef = mainFrameRef;

        Container c;
    c = getContentPane();
    c.setLayout( new BorderLayout( 10, 10 ) );

    JPanel dialogPanel = new JPanel( new BorderLayout( 10, 10 ) );

        setupButtons();

    interfacePanel = new JPanel( new BorderLayout( 10, 10 ) );

    if( navigationPanel != null )
      interfacePanel.add( navigationPanel, BorderLayout.SOUTH );

    setupFields();

    dialogPanel.add( interfacePanel, BorderLayout.CENTER );

    add( new I3PGraphicsPanel( splash, color ), BorderLayout.WEST );

    add( dialogPanel );

    setMinimumSize( new Dimension( mainFrameRef.getMinimumSize().width,
                    mainFrameRef.getMinimumSize().height ) );
    setPreferredSize( new Dimension( mainFrameRef.getPreferredSize().width,
                    mainFrameRef.getPreferredSize().height ) );
    setMaximumSize( new Dimension( mainFrameRef.getMaximumSize().width,
                    mainFrameRef.getMaximumSize().height ) );
    setSize( new Dimension( mainFrameRef.getSize().width,
                    mainFrameRef.getSize().height ) );

    setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );

        centerOnDisplay();

    dialogPanel.setVisible( true );

    pack();
    setVisible( true );
  }

  private void centerOnDisplay()
  {
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    Dimension size = getSize();
    setLocation( (screenSize.width - size.width)/2,
          (screenSize.height - size.height)/2 );

    return;
  }

  private void setupButtons()
  {
    navigationPanel = new JPanel();
    navigationPanel.setLayout( new BorderLayout() );

       JPanel buttonPanel = new JPanel();
    buttonPanel.setLayout( new BoxLayout( buttonPanel, BoxLayout.X_AXIS ) );

    okButton = new SmoothJButton( "End" );
    okButton.addActionListener( this );
    buttonPanel.add( okButton );

    navigationPanel.add( buttonPanel, BorderLayout.EAST );

        JPanel helpPrintPanel = new JPanel();
    helpPrintPanel.setLayout( new BoxLayout( helpPrintPanel, BoxLayout.X_AXIS ) );

    printButton = new SmoothJButton( "Print" );
    printButton.addActionListener( this );
    helpPrintPanel.add( printButton );

    helpButton = new SmoothJButton( "Help" );
    helpButton.addActionListener( this );
    helpPrintPanel.add( helpButton );

    JPanel infoPanel = new JPanel( new BorderLayout() );

    SmoothJLabel infoLabel = new SmoothJLabel( "<html>Values must be annualized or total for<br>the estimated life of the product</html>" );
    infoLabel.setFont( infoLabel.getFont().deriveFont( 10f ) );
        infoLabel.setAlignmentX( Component.CENTER_ALIGNMENT );
    infoPanel.add( Box.createRigidArea( new Dimension( 5, 0 ) ), BorderLayout.WEST );
    infoPanel.add( infoLabel, BorderLayout.CENTER );

    navigationPanel.add( infoPanel, BorderLayout.CENTER );
    navigationPanel.add( helpPrintPanel, BorderLayout.WEST );

    return;
  }

  private void setupFields()
  {
        dataPanel = new JPanel( new BorderLayout( 10, 10 ) );

        JPanel fieldPanel = new JPanel();
        fieldPanel.setLayout( new BoxLayout( fieldPanel, BoxLayout.Y_AXIS ) );

    if( mainFrameRef.getEvalProductName() != "" )
    {
          evalNameLabel = new SmoothJLabel( "<html><font size=+1>" + mainFrameRef.getEvalProductName() + "</font></html>", SwingConstants.CENTER );
      evalNameLabel.setAlignmentX( Component.CENTER_ALIGNMENT );
          fieldPanel.add( evalNameLabel );
    }
    if( mainFrameRef.getEvaluatorName() != "" )
    {
          evalProductLabel = new SmoothJLabel( "<html>Evaluated by " + mainFrameRef.getEvaluatorName() + "</html>", SwingConstants.CENTER );
      evalProductLabel.setAlignmentX( Component.CENTER_ALIGNMENT );
          fieldPanel.add( evalProductLabel );
    }

    String evalDataString = new SimpleDateFormat( "MMMMM dd, yyyy" ).format(new Date());
        evalDateLabel = new SmoothJLabel( "<html>Evaluated " + evalDataString + "</html>", SwingConstants.CENTER );
    evalDateLabel.setAlignmentX( Component.CENTER_ALIGNMENT );
         fieldPanel.add( evalDateLabel );

    fieldPanel.add( Box.createRigidArea( new Dimension( 0, 10 ) ) );

    JPanel acqPanel = new JPanel( new BorderLayout() );
    acqPanel.add( new SmoothJLabel( "Acquisition/Installation Costs" ),
          BorderLayout.CENTER );
    acqCost = new SmoothJFormattedTextField( curFormat );
        acqCost.setValue( 0.00 );
        acqCost.setColumns( 10 );
        acqCost.addKeyListener( this );
    acqPanel.add( new SmoothJLabel( "Total Cost of Ownership of Security Product:" ), BorderLayout.NORTH );
    acqPanel.add( Box.createRigidArea( new Dimension( 15, 0 ) ), BorderLayout.WEST );
    acqPanel.add( acqCost, BorderLayout.EAST );
    fieldPanel.add( acqPanel );


    JPanel mainPanel = new JPanel( new BorderLayout() );
    mainPanel.add( new SmoothJLabel( "Maintenance Costs" ),
          BorderLayout.CENTER );
    mainCost = new SmoothJFormattedTextField( curFormat );
        mainCost.setValue( 0.00 );
        mainCost.setColumns( 10 );
        mainCost.addKeyListener( this );
    mainPanel.add( Box.createRigidArea( new Dimension( 15, 0 ) ), BorderLayout.WEST );
    mainPanel.add( mainCost, BorderLayout.EAST );
    fieldPanel.add( mainPanel );

      JPanel opPanel = new JPanel( new BorderLayout() );
    opPanel.add( new SmoothJLabel( "Operations Costs" ),
          BorderLayout.CENTER );
    opCost = new SmoothJFormattedTextField( curFormat );
        opCost.setValue( 0.00 );
        opCost.setColumns( 10 );
        opCost.addKeyListener( this );
    opPanel.add( Box.createRigidArea( new Dimension( 15, 0 ) ), BorderLayout.WEST );
    opPanel.add( opCost, BorderLayout.EAST );
    fieldPanel.add( opPanel );

      JPanel totalPanel = new JPanel( new BorderLayout() );
    totalPanel.add( new SmoothJLabel( "Total Cost" ),
          BorderLayout.CENTER );
    totalCostLabel = new SmoothJLabel( "$0.00" );
    totalPanel.add( Box.createRigidArea( new Dimension( 15, 0 ) ), BorderLayout.WEST );
    totalPanel.add( totalCostLabel, BorderLayout.EAST );
    fieldPanel.add( totalPanel );

       JPanel govGrantsPanel = new JPanel( new BorderLayout() );
    govGrantsPanel.add( new SmoothJLabel( "Government Security Grants" ),
          BorderLayout.CENTER );
    govGrantsBenefit = new SmoothJFormattedTextField( curFormat );
        govGrantsBenefit.setValue( 0.00 );
        govGrantsBenefit.setColumns( 10 );
        govGrantsBenefit.addKeyListener( this );
    govGrantsPanel.add( new SmoothJLabel( "Cost Recovery:" ), BorderLayout.NORTH );
    govGrantsPanel.add( Box.createRigidArea( new Dimension( 15, 0 ) ), BorderLayout.WEST );
    govGrantsPanel.add( govGrantsBenefit, BorderLayout.EAST );
    fieldPanel.add( govGrantsPanel );

       JPanel rateIncPanel = new JPanel( new BorderLayout() );
    rateIncPanel.add( new SmoothJLabel( "Allowable Rate Increases" ),
          BorderLayout.CENTER );
    rateIncBenefit = new SmoothJFormattedTextField( curFormat );
        rateIncBenefit.setValue( 0.00 );
        rateIncBenefit.setColumns( 10 );
        rateIncBenefit.addKeyListener( this );
    rateIncPanel.add( Box.createRigidArea( new Dimension( 15, 0 ) ), BorderLayout.WEST );
    rateIncPanel.add( rateIncBenefit, BorderLayout.EAST );
    fieldPanel.add( rateIncPanel );

       JPanel otherRecoverPanel = new JPanel( new BorderLayout() );
    otherRecoverPanel.add( new SmoothJLabel( "Other Cost Recovery Methods" ),
          BorderLayout.CENTER );
    otherRecoverBenefit = new SmoothJFormattedTextField( curFormat );
        otherRecoverBenefit.setValue( 0.00 );
        otherRecoverBenefit.setColumns( 10 );
        otherRecoverBenefit.addKeyListener( this );
    otherRecoverPanel.add( Box.createRigidArea( new Dimension( 15, 0 ) ), BorderLayout.WEST );
    otherRecoverPanel.add( otherRecoverBenefit, BorderLayout.EAST );
    fieldPanel.add( otherRecoverPanel );

       JPanel diligencePanel = new JPanel( new BorderLayout() );
    diligencePanel.add( new SmoothJLabel( "Legal Cost Avoidance (due diligence)" ),
          BorderLayout.CENTER );
    diligenceBenefit = new SmoothJFormattedTextField( curFormat );
        diligenceBenefit.setValue( 0.00 );
        diligenceBenefit.setColumns( 10 );
        diligenceBenefit.addKeyListener( this );
    diligencePanel.add( new SmoothJLabel( "Benefits and Cost Avoidance:" ), BorderLayout.NORTH );
    diligencePanel.add( Box.createRigidArea( new Dimension( 15, 0 ) ), BorderLayout.WEST );
    diligencePanel.add( diligenceBenefit, BorderLayout.EAST );
    fieldPanel.add( diligencePanel );

       JPanel cyberAvoidPanel = new JPanel( new BorderLayout() );
    cyberAvoidPanel.add( new SmoothJLabel( "Cyberattack Incident Cost Avoidance" ),
          BorderLayout.CENTER );
    cyberAvoidBenefit = new SmoothJFormattedTextField( curFormat );
        cyberAvoidBenefit.setValue( 0.00 );
        cyberAvoidBenefit.setColumns( 10 );
        cyberAvoidBenefit.addKeyListener( this );
    cyberAvoidPanel.add( Box.createRigidArea( new Dimension( 15, 0 ) ), BorderLayout.WEST );
    cyberAvoidPanel.add( cyberAvoidBenefit, BorderLayout.EAST );
    fieldPanel.add( cyberAvoidPanel );

       JPanel regCompliancePanel = new JPanel( new BorderLayout() );
    regCompliancePanel.add( new SmoothJLabel( "Regulation Compliance Cost Avoidance" ),
          BorderLayout.CENTER );
    regComplianceBenefit = new SmoothJFormattedTextField( curFormat );
        regComplianceBenefit.setValue( 0.00 );
        regComplianceBenefit.setColumns( 10 );
        regComplianceBenefit.addKeyListener( this );
    regCompliancePanel.add( Box.createRigidArea( new Dimension( 15, 0 ) ), BorderLayout.WEST );
    regCompliancePanel.add( regComplianceBenefit, BorderLayout.EAST );
    fieldPanel.add( regCompliancePanel );

       JPanel secBusPanel = new JPanel( new BorderLayout() );
    secBusPanel.add( new SmoothJLabel( "Security Enabled Business Advantage" ),
          BorderLayout.CENTER );
    secBusBenefit = new SmoothJFormattedTextField( curFormat );
        secBusBenefit.setValue( 0.00 );
        secBusBenefit.setColumns( 10 );
        secBusBenefit.addKeyListener( this );
    secBusPanel.add( Box.createRigidArea( new Dimension( 15, 0 ) ), BorderLayout.WEST );
    secBusPanel.add( secBusBenefit, BorderLayout.EAST );
    fieldPanel.add( secBusPanel );

         totalPanel = new JPanel( new BorderLayout() );
    totalPanel.add( new SmoothJLabel( "Total Benefit" ),
          BorderLayout.CENTER );
    totalBenefitLabel = new SmoothJLabel( "$0.00" );
    totalPanel.add( Box.createRigidArea( new Dimension( 15, 0 ) ), BorderLayout.WEST );
    totalPanel.add( totalBenefitLabel, BorderLayout.EAST );
    fieldPanel.add( totalPanel );

        fieldPanel.add( Box.createRigidArea( new Dimension( 0, 5 ) ) );

         totalPanel = new JPanel( new BorderLayout() );
    totalPanel.add( new SmoothJLabel( "Total" ),
          BorderLayout.CENTER );
    totalLabel = new SmoothJLabel( "$0.00" );
    totalPanel.add( totalLabel, BorderLayout.EAST );
    fieldPanel.add( totalPanel );

    dataPanel.add( fieldPanel, BorderLayout.NORTH );

    interfacePanel.add( dataPanel, BorderLayout.CENTER );
  }

  public void keyReleased( KeyEvent event )
  {
    try
    {
      if( event.getSource() instanceof SmoothJFormattedTextField )
        ((SmoothJFormattedTextField)event.getSource()).commitEdit();

      updateTotals();
    }
    catch( ParseException exception )
    {
      String currentValue = ((JTextComponent)event.getSource()).getText();

      try
      {
        Number numForm = NumberFormat.getNumberInstance().parse( currentValue );
        currentValue = "$" + currentValue;
        ((SmoothJFormattedTextField)event.getSource()).setValue( numForm );
        ((SmoothJFormattedTextField)event.getSource()).setCaretPosition( currentValue.length() );
        updateTotals();
      }
      catch( ParseException parseException )
      {}
      catch( IllegalArgumentException illegalArgumentException )
      {}
        }
  }

    public void actionPerformed( ActionEvent event )
  {
    if( event.getSource() == okButton )
      setVisible( false );
    else if( event.getSource() == helpButton )
      popupHelpDialog();
    else if( event.getSource() == printButton )
      printQuantitative();

    return;
  }

  public void popupHelpDialog()
  {
    setVisible( false );
    new HelpDialogFrame( mainFrameRef, HelpDialog.QUANTITATIVE, "Help", StringRadarGraph.BLUEFILL );
    setVisible( true );

    return;
  }

     public int print( Graphics g, PageFormat pageFormat, int pageIndex )
  {
    if( pageIndex > 0 )
    {
          return NO_SUCH_PAGE;
      }
    else
    {
      Graphics2D g2d = (Graphics2D) g;
      g2d.translate( pageFormat.getImageableX (), pageFormat.getImageableY () );

            RepaintManager currentManager = RepaintManager.currentManager( this);
      currentManager.setDoubleBufferingEnabled( false );

      dataPanel.paint( g2d );

      currentManager.setDoubleBufferingEnabled( true );

      return PAGE_EXISTS;
    }
  }

  public void printQuantitative()
  {
    PrinterJob printJob = PrinterJob.getPrinterJob();

      printJob.setPrintable( this );
      if( printJob.printDialog() )
      {
      try
      {
            printJob.print();
      }
        catch( PrinterException pe )
      {
            System.out.println("Error printing: " + pe);
          }
       }

    return;
  }

  private void updateTotals()
  {
    double totalCostValue = ((Number)acqCost.getValue()).doubleValue() +
                ((Number)mainCost.getValue()).doubleValue() +
                ((Number)opCost.getValue()).doubleValue();

    double totalBenefitValue = ((Number)govGrantsBenefit.getValue()).doubleValue() +
                ((Number)rateIncBenefit.getValue()).doubleValue() +
                ((Number)otherRecoverBenefit.getValue()).doubleValue() +
                ((Number)diligenceBenefit.getValue()).doubleValue() +
                ((Number)cyberAvoidBenefit.getValue()).doubleValue() +
                ((Number)regComplianceBenefit.getValue()).doubleValue() +
                ((Number)secBusBenefit.getValue()).doubleValue();

    double totalValue = totalBenefitValue - totalCostValue;

    totalCostLabel.setText( curFormat.format( -1 * totalCostValue ) );

    if( totalCostValue > 0.0 )
      totalCostLabel.setForeground( Color.RED );
    else
      totalCostLabel.setForeground( Color.BLACK );

    totalBenefitLabel.setText( curFormat.format( totalBenefitValue ) );
    if( totalBenefitValue > 0.0 )
      totalBenefitLabel.setForeground( Color.GREEN.darker() );
    else
      totalBenefitLabel.setForeground( Color.BLACK );

    totalLabel.setText( curFormat.format( totalValue ) );
    if( totalValue < 0.0 )
      totalLabel.setForeground( Color.RED );
    else if( totalValue > 0.0 )
      totalLabel.setForeground( Color.GREEN.darker() );
    else
      totalLabel.setForeground( Color.BLACK );
   
    return;
  }

  public void keyTyped( KeyEvent event ) {}
  public void keyPressed( KeyEvent event ) {}
};
TOP

Related Classes of QuantCostDialog

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.