home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / VCAFE.3.0A / Sample.bin / EditReportDialog.java < prev    next >
Text File  |  1998-11-05  |  23KB  |  639 lines

  1. // Copyright (c) 1997, 1998 Symantec, Inc. All Rights Reserved.
  2.  
  3. import java.awt.*;
  4. import java.util.Date;
  5.  
  6. import symantec.itools.awt.ImagePanel;
  7. import symantec.itools.awt.Label3D;
  8. import symantec.itools.awt.Wizard;
  9. import symantec.itools.awt.TabPanel;
  10.  
  11. /**
  12.  * This dialog was added to this project by dragging a Dialog form component 
  13.  * into the project.
  14.  * It was then customized with Cafe's visual tools, including the Interaction
  15.  * Wizard.
  16.  * Then it was manually customized to 
  17.  * 1) initialize component values from report data
  18.  * 2) enable/disable/set the report start and end dates as needed,
  19.  * 3) cleanup user-entered URLs,
  20.  * 4) validate user-entered data, and
  21.  * 5) save the results.
  22.  */
  23. public class EditReportDialog extends Dialog
  24. {
  25.     /*
  26.     Sets the initial component values from the report data.
  27.     */
  28.     void initializeComponentsFromData() {
  29.         // Get main program
  30.         WebLogAnalyzer wla = (WebLogAnalyzer)getParent();
  31.         // Create a new Report record and add it to the program data....
  32.         Report report = wla.data.getCurrentReport();    // should always work
  33.         // Values specified in the New Report wizard
  34.         reportTitleText.setText(report.title);
  35.         timeframeChoice.select(report.timeframe);  // TIMEFRAME_
  36.         if(report.timeframe == Report.TIMEFRAME_SPECIFIC) {
  37.             startDateText.setText(WLAUtil.dateTime2String(report.dateStart));
  38.             endDateText.setText(WLAUtil.dateTime2String(report.dateEnd));
  39.         } else {
  40.             startDateText.setText(WLAUtil.timeframeChoice2DateString(report.timeframe, true));
  41.             endDateText.setText(WLAUtil.timeframeChoice2DateString(report.timeframe, false));
  42.         }
  43.         //
  44.         userEnteredStartDate = startDateText.getText();
  45.         userEnteredEndDate = endDateText.getText();
  46.         //
  47.         logfileURLText.setText(report.getLogFileURL());
  48.         logfileFormatChoice.select(report.getLogFileFormat());  // FORMAT_
  49.         homePageFileText.setText(report.homePageFile);
  50.         usageChartCheckbox.setState(report.optUsageChart);
  51.         generalStatisticsCheckbox.setState(report.optGeneralStatistics);
  52.         mostActiveDomainsCheckbox.setState(report.optMostActiveDomains);
  53.     }
  54.  
  55.     /*
  56.     Validates the user-entered data in this dialog when OK pressed.
  57.     */
  58.     boolean validateAllPages() {
  59.         if(!validatePage1()) {
  60.             try {
  61.                 tabPanel1.setCurrentPanelNdx(0);
  62.             } catch(java.beans.PropertyVetoException x) {
  63.             }
  64.             return false;
  65.         }
  66.         if(!validatePage2()) {
  67.             try {
  68.                 tabPanel1.setCurrentPanelNdx(1);
  69.             } catch(java.beans.PropertyVetoException x) {
  70.             }
  71.             return false;
  72.         }
  73.         return true;
  74.     }
  75.  
  76.     // - START of validate code that's identical for new and edit dialogs
  77.     
  78.     /*
  79.     This method is the same for both new report and edit report dialogs.
  80.     This is because they display/edit the same data, and the field names were 
  81.     carefully given the same names in both dialogs to simplify coding.
  82.     */
  83.     boolean validatePage1() {
  84.         // Only validate start/end date if specific user-supplied dates
  85.         int timeframe = timeframeChoice.getSelectedIndex();  // TIMEFRAME_
  86.         if(timeframe == Report.TIMEFRAME_SPECIFIC) {
  87.             if(!WLAUtil.validateDateField(this, startDateText)) {
  88.                 return false;
  89.             }
  90.             if(!WLAUtil.validateDateField(this, endDateText)) {
  91.                 return false;
  92.             }
  93.         }
  94.         return true;
  95.     }
  96.     
  97.     /*
  98.     This method is the same for both new report and edit report dialogs.
  99.     This is because they display/edit the same data, and the field names were 
  100.     carefully given the same names in both dialogs to simplify coding.
  101.     */
  102.     boolean validatePage2() {
  103.         // Log file URL must be specified
  104.         String logfileURL = logfileURLText.getText();
  105.         if(logfileURL.trim().length() == 0) {
  106.             logfileURLText.requestFocus();
  107.             logfileURLText.selectAll();
  108.             // Alert user
  109.             new AlertDialog((Frame)getParent(), false, "A log file URL must be supplied.");
  110.             return false;
  111.         }
  112.         return true;
  113.     }
  114.     // - END of validate code that's identical for new and edit dialogs
  115.  
  116.  
  117. //  --  AUTOMATICALLY GENERATED/MAINTAINED CODE FRAMEWORK BELOW THIS LINE  --
  118.     
  119.     /**
  120.      * Constructs this dialog.
  121.      * Initializes components the components.
  122.      * Registers component listeners.
  123.      * All of the code in this routine except the last two lines are 
  124.      * automatically generated/maintained by Visual Cafe.
  125.      */
  126.     public EditReportDialog(Frame parent, boolean modal)
  127.     {
  128.         super(parent, modal);
  129.  
  130.         // This code is automatically generated by Visual Cafe when you add
  131.         // components to the visual environment. It instantiates and initializes
  132.         // the components. To modify the code, only use code syntax that matches
  133.         // what Visual Cafe can generate, or Visual Cafe may be unable to back
  134.         // parse your Java file into its visual environment.
  135.         //{{INIT_CONTROLS
  136.         setLayout(null);
  137.         setBackground(java.awt.Color.lightGray);
  138.         setSize(529,407);
  139.         setVisible(false);
  140.         try {
  141.             imagePanel1.setImageURL(symantec.itools.net.RelativeURL.getURL("images/wl-wizardb.jpg"));
  142.         }
  143.         catch (java.net.MalformedURLException error) { }
  144.         catch(java.beans.PropertyVetoException e) { }
  145.         imagePanel1.setLayout(null);
  146.         add(imagePanel1);
  147.         imagePanel1.setBackground(new java.awt.Color(64,128,128));
  148.         imagePanel1.setBounds(8,7,506,40);
  149.         try {
  150.             label3D1.setBevelStyle(symantec.itools.awt.Label3D.BEVEL_LOWERED);
  151.         }
  152.         catch(java.beans.PropertyVetoException e) { }
  153.         try {
  154.             label3D1.setText("Edit Report");
  155.         }
  156.         catch(java.beans.PropertyVetoException e) { }
  157.         imagePanel1.add(label3D1);
  158.         label3D1.setBackground(java.awt.Color.lightGray);
  159.         label3D1.setBounds(11,8,111,24);
  160.         try {
  161.             {
  162.                 String[] tempString = new String[3];
  163.                 tempString[0] = "General";
  164.                 tempString[1] = "URLs";
  165.                 tempString[2] = "Report Options";
  166.                 tabPanel1.setPanelLabels(tempString);
  167.             }
  168.         }
  169.         catch(java.beans.PropertyVetoException e) { }
  170.         add(tabPanel1);
  171.         tabPanel1.setBounds(1,54,523,312);
  172.         panel1.setLayout(null);
  173.         tabPanel1.add(panel1);
  174.         panel1.setBounds(12,33,499,268);
  175.         panel1.setVisible(false);
  176.         reportTitleLabel.setText("Report Title, Description");
  177.         panel1.add(reportTitleLabel);
  178.         reportTitleLabel.setFont(new Font("SansSerif", Font.BOLD, 12));
  179.         reportTitleLabel.setBounds(8,8,175,24);
  180.         panel1.add(reportTitleText);
  181.         reportTitleText.setBounds(5,35,487,22);
  182.         timeframeLabel.setText("Select Date Range for Report");
  183.         panel1.add(timeframeLabel);
  184.         timeframeLabel.setFont(new Font("SansSerif", Font.BOLD, 12));
  185.         timeframeLabel.setBounds(7,84,175,24);
  186.         timeframeChoice.addItem("All dates in the log");
  187.         timeframeChoice.addItem("Today");
  188.         timeframeChoice.addItem("Yesterday");
  189.         timeframeChoice.addItem("Last two days");
  190.         timeframeChoice.addItem("Last seven days");
  191.         timeframeChoice.addItem("Last 14 days");
  192.         timeframeChoice.addItem("Last 30 days");
  193.         timeframeChoice.addItem("Last 60 days");
  194.         timeframeChoice.addItem("Last 90 days");
  195.         timeframeChoice.addItem("Specific Date Range");
  196.         try {
  197.             timeframeChoice.select(0);
  198.         }
  199.         catch (IllegalArgumentException e) { }
  200.         panel1.add(timeframeChoice);
  201.         timeframeChoice.setBounds(198,84,287,26);
  202.         startDateLabel.setText("Start Date");
  203.         startDateLabel.setAlignment(java.awt.Label.RIGHT);
  204.         startDateLabel.setEnabled(false);
  205.         panel1.add(startDateLabel);
  206.         startDateLabel.setBounds(199,131,78,20);
  207.         endDateLabel.setText("End Date");
  208.         endDateLabel.setAlignment(java.awt.Label.RIGHT);
  209.         endDateLabel.setEnabled(false);
  210.         panel1.add(endDateLabel);
  211.         endDateLabel.setBounds(199,156,78,20);
  212.         startDateText.setEditable(false);
  213.         panel1.add(startDateText);
  214.         startDateText.setBounds(293,130,150,21);
  215.         endDateText.setEditable(false);
  216.         panel1.add(endDateText);
  217.         endDateText.setBounds(293,155,150,21);
  218.         panel2.setLayout(null);
  219.         tabPanel1.add(panel2);
  220.         panel2.setBounds(12,33,499,268);
  221.         panel2.setVisible(false);
  222.         logfileURLLabel.setText("Log File URL");
  223.         panel2.add(logfileURLLabel);
  224.         logfileURLLabel.setFont(new Font("SansSerif", Font.BOLD, 12));
  225.         logfileURLLabel.setBounds(8,8,175,24);
  226.         panel2.add(logfileURLText);
  227.         logfileURLText.setBounds(8,44,358,24);
  228.         logfileURLBrowseButton.setLabel("Browse...");
  229.         panel2.add(logfileURLBrowseButton);
  230.         logfileURLBrowseButton.setBounds(381,44,62,24);
  231.         logfileFormatLabel.setText("Log File Format");
  232.         panel2.add(logfileFormatLabel);
  233.         logfileFormatLabel.setFont(new Font("SansSerif", Font.BOLD, 12));
  234.         logfileFormatLabel.setBounds(8,85,175,24);
  235.         logfileFormatChoice.addItem("Detect Log Format Automatically");
  236.         logfileFormatChoice.addItem("NCSA - common log format");
  237.         logfileFormatChoice.addItem("NCSA - combined/extended log format");
  238.         logfileFormatChoice.addItem("MPIS log format");
  239.         try {
  240.             logfileFormatChoice.select(0);
  241.         }
  242.         catch (IllegalArgumentException e) { }
  243.         logfileFormatChoice.setBackground(java.awt.Color.white);
  244.         panel2.add(logfileFormatChoice);
  245.         logfileFormatChoice.setBounds(8,111,266,29);
  246.         homePageFileLabel.setText("Home Page File");
  247.         panel2.add(homePageFileLabel);
  248.         homePageFileLabel.setFont(new Font("SansSerif", Font.BOLD, 12));
  249.         homePageFileLabel.setBounds(8,155,175,24);
  250.         panel2.add(homePageFileText);
  251.         homePageFileText.setBounds(8,191,358,24);
  252.         homePageFileBrowseButton.setLabel("Browse...");
  253.         panel2.add(homePageFileBrowseButton);
  254.         homePageFileBrowseButton.setBounds(381,191,62,24);
  255.         panel3.setLayout(null);
  256.         tabPanel1.add(panel3);
  257.         panel3.setBounds(12,33,499,268);
  258.         reportOptionsLabel.setText("Report Options");
  259.         panel3.add(reportOptionsLabel);
  260.         reportOptionsLabel.setFont(new Font("SansSerif", Font.BOLD, 12));
  261.         reportOptionsLabel.setBounds(8,8,175,24);
  262.         panel4.setLayout(new GridLayout(3,1,0,0));
  263.         panel3.add(panel4);
  264.         panel4.setBounds(12,40,456,96);
  265.         usageChartCheckbox.setLabel("Usage chart");
  266.         panel4.add(usageChartCheckbox);
  267.         usageChartCheckbox.setBounds(0,0,456,32);
  268.         generalStatisticsCheckbox.setLabel("General statistics");
  269.         panel4.add(generalStatisticsCheckbox);
  270.         generalStatisticsCheckbox.setBounds(0,32,456,32);
  271.         mostActiveDomainsCheckbox.setLabel("Most active domains");
  272.         panel4.add(mostActiveDomainsCheckbox);
  273.         mostActiveDomainsCheckbox.setBounds(0,64,456,32);
  274.         try {
  275.             tabPanel1.setCurrentPanelNdx(2);
  276.         }
  277.         catch(java.beans.PropertyVetoException e) { }
  278.         panel6.setLayout(new GridLayout(1,1,8,0));
  279.         add(panel6);
  280.         panel6.setBounds(392,368,121,25);
  281.         okButton.setLabel("OK");
  282.         panel6.add(okButton);
  283.         okButton.setFont(new Font("Dialog", Font.BOLD, 12));
  284.         okButton.setBounds(0,0,121,25);
  285.         cancelButton.setLabel("Cancel");
  286.         panel6.add(cancelButton);
  287.         cancelButton.setBounds(64,0,56,25);
  288.         setTitle("Edit Report");
  289.         //}}
  290.  
  291.         //{{REGISTER_LISTENERS
  292.         SymWindow aSymWindow = new SymWindow();
  293.         this.addWindowListener(aSymWindow);
  294.         SymAction lSymAction = new SymAction();
  295.         okButton.addActionListener(lSymAction);
  296.         cancelButton.addActionListener(lSymAction);
  297.         logfileURLBrowseButton.addActionListener(lSymAction);
  298.         homePageFileBrowseButton.addActionListener(lSymAction);
  299.         SymItem lSymItem = new SymItem();
  300.         timeframeChoice.addItemListener(lSymItem);
  301.         SymFocus aSymFocus = new SymFocus();
  302.         logfileURLText.addFocusListener(aSymFocus);
  303.         //}}
  304.         
  305.         // Initialize the component values
  306.         initializeComponentsFromData();
  307.         // Simulate an ItemEvent for the timeframeChoice component to 
  308.         // initialize display
  309.         timeframeChoice_ItemStateChanged(null);
  310.         
  311.         // Center this dialog within its parent's bounds
  312.         WLAUtil.centerInParent(this);
  313.     }
  314.     
  315.     /**
  316.      * Tells this component that it has been added to a container. 
  317.      * This is a standard Java AWT method which gets called by the AWT when 
  318.      * this component is added to a container. 
  319.      * Typically, it is used to create this component's peer. <br>
  320.      * It has been OVERRIDDEN here to adjust the position of components as needed
  321.      * for the container's insets. <br>
  322.      * This method is automatically generated by Visual Cafe.
  323.      */
  324.     public void addNotify()
  325.     {
  326.           // Record the size of the window prior to calling parents addNotify.
  327.         Dimension d = getSize();
  328.  
  329.         super.addNotify();
  330.  
  331.         if (fComponentsAdjusted)
  332.             return;
  333.  
  334.         // Adjust components according to the insets
  335.         Insets insets = getInsets();
  336.         setSize(insets.left + insets.right + d.width, insets.top + insets.bottom + d.height);
  337.         Component components[] = getComponents();
  338.         for (int i = 0; i < components.length; i++)
  339.         {
  340.             Point p = components[i].getLocation();
  341.             p.translate(insets.left, insets.top);
  342.             components[i].setLocation(p);
  343.         }
  344.         fComponentsAdjusted = true;
  345.     }
  346.  
  347.     // Used for addNotify check.
  348.     boolean fComponentsAdjusted = false;
  349.  
  350.     /**
  351.      * Constructs this Dialog with the given title.
  352.      * This routine was automatically generated by Visual Cafe, and is not
  353.      * actually used.
  354.      */
  355.     public EditReportDialog(Frame parent, String title, boolean modal)
  356.     {
  357.         this(parent, modal);
  358.         setTitle(title);
  359.     }
  360.  
  361.     //{{DECLARE_CONTROLS
  362.     symantec.itools.awt.ImagePanel imagePanel1 = new symantec.itools.awt.ImagePanel();
  363.     symantec.itools.awt.Label3D label3D1 = new symantec.itools.awt.Label3D();
  364.     symantec.itools.awt.TabPanel tabPanel1 = new symantec.itools.awt.TabPanel();
  365.     java.awt.Panel panel1 = new java.awt.Panel();
  366.     java.awt.Label reportTitleLabel = new java.awt.Label();
  367.     java.awt.TextField reportTitleText = new java.awt.TextField();
  368.     java.awt.Label timeframeLabel = new java.awt.Label();
  369.     java.awt.Choice timeframeChoice = new java.awt.Choice();
  370.     java.awt.Label startDateLabel = new java.awt.Label();
  371.     java.awt.Label endDateLabel = new java.awt.Label();
  372.     java.awt.TextField startDateText = new java.awt.TextField();
  373.     java.awt.TextField endDateText = new java.awt.TextField();
  374.     java.awt.Panel panel2 = new java.awt.Panel();
  375.     java.awt.Label logfileURLLabel = new java.awt.Label();
  376.     java.awt.TextField logfileURLText = new java.awt.TextField();
  377.     java.awt.Button logfileURLBrowseButton = new java.awt.Button();
  378.     java.awt.Label logfileFormatLabel = new java.awt.Label();
  379.     java.awt.Choice logfileFormatChoice = new java.awt.Choice();
  380.     java.awt.Label homePageFileLabel = new java.awt.Label();
  381.     java.awt.TextField homePageFileText = new java.awt.TextField();
  382.     java.awt.Button homePageFileBrowseButton = new java.awt.Button();
  383.     java.awt.Panel panel3 = new java.awt.Panel();
  384.     java.awt.Label reportOptionsLabel = new java.awt.Label();
  385.     java.awt.Panel panel4 = new java.awt.Panel();
  386.     java.awt.Checkbox usageChartCheckbox = new java.awt.Checkbox();
  387.     java.awt.Checkbox generalStatisticsCheckbox = new java.awt.Checkbox();
  388.     java.awt.Checkbox mostActiveDomainsCheckbox = new java.awt.Checkbox();
  389.     java.awt.Panel panel6 = new java.awt.Panel();
  390.     java.awt.Button okButton = new java.awt.Button();
  391.     java.awt.Button cancelButton = new java.awt.Button();
  392.     //}}
  393.  
  394.     /** 
  395.      * This is an event listener created by Visual Cafe to handle WindowEvents.
  396.      */
  397.     class SymWindow extends java.awt.event.WindowAdapter
  398.     {
  399.         public void windowClosing(java.awt.event.WindowEvent event)
  400.         {
  401.             Object object = event.getSource();
  402.             if (object == EditReportDialog.this)
  403.                 EditReportDialog_WindowClosing(event);
  404.         }
  405.     }
  406.     
  407.     /**
  408.      * Handles the WINDOW_CLOSING WindowEvent.
  409.      * This method is automatically added when the Dialog form was added to
  410.      * this project.
  411.      */
  412.     void EditReportDialog_WindowClosing(java.awt.event.WindowEvent event)
  413.     {
  414.         dispose();
  415.     }
  416.  
  417.     /** 
  418.      * This is an event listener created by Visual Cafe to handle ActionEvents.
  419.      * It was created by the Interaction Wizard.
  420.      * The last two "else if"s were simply copied and pasted from the 
  421.      * NewReportDialog.
  422.      */
  423.     class SymAction implements java.awt.event.ActionListener
  424.     {
  425.         public void actionPerformed(java.awt.event.ActionEvent event)
  426.         {
  427.             Object object = event.getSource();
  428.             if (object == okButton)
  429.                 okButton_Action(event);
  430.             else if (object == cancelButton)
  431.                 cancelButton_Action(event);
  432.             // Just copied and pasted the next 4 lines
  433.             else if (object == logfileURLBrowseButton)
  434.                 logfileURLBrowseButton_Action(event);
  435.             else if (object == homePageFileBrowseButton)
  436.                 homePageFileBrowseButton_Action(event);
  437.         }
  438.     }
  439.  
  440.     /**
  441.      * This handles the ActionEvents generated by the OK button.
  442.      * Created using the Interaction Wizard, then the modified to validate and
  443.      * save changes to the report.
  444.      */
  445.     void okButton_Action(java.awt.event.ActionEvent event)
  446.     {
  447.         // to do: code goes here.
  448.         // VALIDATE DATA
  449.         if(!validateAllPages()) {
  450.             return;
  451.         }
  452.         // SAVE THE EDITS TO THE NEW REPORT
  453.         // Get main program
  454.         WebLogAnalyzer wla = (WebLogAnalyzer)getParent();
  455.         // Access the current report
  456.         Report report = wla.data.getCurrentReport();    // should always work
  457.         // Values specified in the New Report wizard
  458.         report.title = reportTitleText.getText();
  459.         report.timeframe = timeframeChoice.getSelectedIndex();  // TIMEFRAME_
  460.         try {
  461.             report.dateStart = WLAUtil.string2DateTime(startDateText.getText()); // valid if dateRange == TIMEFRAME_SPECIFIC
  462.         } catch(java.text.ParseException x) {
  463.             // Can't parse the given date (because its "all")
  464.             report.dateStart = new Date(0);
  465.         }
  466.         try {
  467.             report.dateEnd = WLAUtil.string2DateTime(endDateText.getText()); // valid if dateRange == TIMEFRAME_SPECIFIC
  468.         } catch(java.text.ParseException x) {
  469.             // Can't parse the given date (because its "all")
  470.             report.dateEnd = new Date(Long.MAX_VALUE);
  471.         }
  472.         report.setLogFileURL(logfileURLText.getText());
  473.         report.setLogFileFormat(logfileFormatChoice.getSelectedIndex());  // FORMAT_
  474.         report.homePageFile = homePageFileText.getText();
  475.         report.optUsageChart = usageChartCheckbox.getState();
  476.         report.optGeneralStatistics = generalStatisticsCheckbox.getState();
  477.         report.optMostActiveDomains = mostActiveDomainsCheckbox.getState();
  478.         // update the report in the main list of reports
  479.         wla.updateCurrentReportInList();
  480.  
  481.         //{{CONNECTION
  482.         // Hide the Dialog
  483.         setVisible(false);
  484.         //}}
  485.     }
  486.  
  487.     /**
  488.      * This handles the ActionEvents generated by the Cancel button.
  489.      * Created using the Interaction Wizard.
  490.      */
  491.     void cancelButton_Action(java.awt.event.ActionEvent event)
  492.     {
  493.         // to do: code goes here.
  494.         // Ignore report edits - just close the dialog
  495.         
  496.         //{{CONNECTION
  497.         // Hide the Dialog
  498.         setVisible(false);
  499.         //}}
  500.     }
  501.     
  502.     /*
  503.      * Simply copied and pasted from the NewReportDialog.
  504.      */
  505.     void logfileURLBrowseButton_Action(java.awt.event.ActionEvent event)
  506.     {
  507.         String urlStr = WLAUtil.browseForURL("*.log");
  508.         if(urlStr != null) {
  509.             logfileURLText.setText(urlStr);
  510.         }
  511.     }
  512.  
  513.     /*
  514.      * Simply copied and pasted from the NewReportDialog.
  515.      */
  516.     void homePageFileBrowseButton_Action(java.awt.event.ActionEvent event)
  517.     {
  518.         // Get main program
  519.         WebLogAnalyzer wla = (WebLogAnalyzer)getParent();
  520.         // set the default suffix
  521.         wla.openFileURLDialog.setFile("*.html");
  522.         // Show the OpenFileDialog
  523.         wla.openFileURLDialog.show();
  524.         // get the results
  525.         String urlStr = wla.openFileURLDialog.getFile();
  526.         if(urlStr != null) {
  527.             homePageFileText.setText(urlStr);
  528.         }
  529.     }
  530.     
  531.  
  532.     /** 
  533.      * This is an event listener created by Visual Cafe to handle ItemEvents.
  534.      */
  535.     class SymItem implements java.awt.event.ItemListener
  536.     {
  537.         public void itemStateChanged(java.awt.event.ItemEvent event)
  538.         {
  539.             Object object = event.getSource();
  540.             if (object == timeframeChoice)
  541.                 timeframeChoice_ItemStateChanged(event);
  542.         }
  543.     }
  544.  
  545.     /*
  546.     Created this method by first creating the first interaction it
  547.     supports using the Interaction Wizard, then just copied and pasted the 
  548.     whole method (and fields) from NewReportDialog. Code is identical.
  549.     */
  550.     String userEnteredStartDate = WLAUtil.dateTime2String(new Date());
  551.     String userEnteredEndDate = WLAUtil.dateTime2String(new Date());
  552.     
  553.     void timeframeChoice_ItemStateChanged(java.awt.event.ItemEvent event)
  554.     {
  555.         // to do: code goes here.
  556.         boolean bSpecificTimeframe = timeframeChoice.getSelectedIndex() == Report.TIMEFRAME_SPECIFIC;
  557.  
  558.         // save/restore user entered start/end date, as needed
  559.         if(bSpecificTimeframe) {
  560.             // restore, as needed
  561.             if(userEnteredStartDate != null) {
  562.                 startDateText.setText(userEnteredStartDate);
  563.                 userEnteredStartDate = null;
  564.                 endDateText.setText(userEnteredEndDate);
  565.                 userEnteredEndDate = null;
  566.             }
  567.         } else {
  568.             // not bSpecificTime. Save as needed
  569.             if(userEnteredStartDate == null) {
  570.                 userEnteredStartDate = startDateText.getText();
  571.                 userEnteredEndDate = endDateText.getText();
  572.             }
  573.             // Now place the chosen timeframe in the text fields
  574.             int choice = timeframeChoice.getSelectedIndex();
  575.             startDateText.setText(WLAUtil.timeframeChoice2DateString(choice, true));
  576.             endDateText.setText(WLAUtil.timeframeChoice2DateString(choice, false));
  577.         }
  578.  
  579.         //{{CONNECTION
  580.         // Set editablity on condition...
  581.         startDateText.setEditable(bSpecificTimeframe);
  582.         //}}
  583.              
  584.         //{{CONNECTION
  585.         // Enable the TextField on condition...
  586.         startDateText.setEnabled(bSpecificTimeframe);
  587.         //}}
  588.              
  589.         //{{CONNECTION
  590.         // Set editablity on condition...
  591.         endDateText.setEditable(bSpecificTimeframe);
  592.         //}}
  593.              
  594.         //{{CONNECTION
  595.         // Enable the TextField on condition...
  596.         endDateText.setEnabled(bSpecificTimeframe);
  597.         //}}
  598.              
  599.         //{{CONNECTION
  600.         // Enable the Label on condition...
  601.         startDateLabel.setEnabled(bSpecificTimeframe);
  602.         //}}
  603.              
  604.         //{{CONNECTION
  605.         // Enable the Label on condition...
  606.         endDateLabel.setEnabled(bSpecificTimeframe);
  607.         //}}
  608.     }
  609.  
  610.     /*
  611.     Just copied and pasted this and all the _LostFocus() methods
  612.     from NewReportDialog. Also copied and pasted the 3 lines that
  613.     instantiate and use this class in the main class constructor.
  614.     */
  615.     class SymFocus extends java.awt.event.FocusAdapter
  616.     {
  617.         public void focusLost(java.awt.event.FocusEvent event)
  618.         {
  619.             Object object = event.getSource();
  620.             if (object == logfileURLText)
  621.                 logfileURLText_LostFocus(event);
  622.         }
  623.     }
  624.  
  625.     /*
  626.     Just copied and pasted this method from NewReportDialog.
  627.     */
  628.     void logfileURLText_LostFocus(java.awt.event.FocusEvent event)
  629.     {
  630.         // to do: code goes here.
  631.              
  632.         //{{CONNECTION
  633.         // Set the text for TextField...
  634.         logfileURLText.setText(WLAUtil.cleanupURLName(logfileURLText.getText()));
  635.         //}}
  636.     }
  637. }
  638.  
  639.