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

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