1   package com.stateofflow.eclipse.metrics.export.wizard;
2   
3   import org.eclipse.core.runtime.CoreException;
4   import org.eclipse.core.runtime.QualifiedName;
5   import org.eclipse.jface.preference.IntegerFieldEditor;
6   import org.eclipse.swt.widgets.Button;
7   
8   import com.stateofflow.eclipse.metrics.swt.SWTBuilder;
9   
10  class HtmlExportAgent implements Agent {
11      private final Button exportEnabledCheckbox;
12      private final IntegerFieldEditor rowsPerPageEditor;
13      private final Button exportImagesCheckbox;
14      private final Button exportJavaCheckbox;
15  
16      public HtmlExportAgent(final SWTBuilder builder, final MetricsExportWizardPage metricsExportWizardPage) {
17          builder.addGroup("HTML").setGridLayout(1);
18          exportEnabledCheckbox = builder.createCheckbox("Export HTML", metricsExportWizardPage);
19          exportJavaCheckbox = builder.createCheckbox("Export Java", metricsExportWizardPage);
20          exportImagesCheckbox = builder.createCheckbox("Histograms and Dashboard");
21          builder.addComposite().setGridLayout(2);
22          rowsPerPageEditor = builder.createIntegerFieldEditor("Rows per Page:", 4, metricsExportWizardPage);
23          builder.pop().pop();
24      }
25  
26      public int getRowsPerPage() {
27          return isRowsPerPageEmpty() ? Integer.MAX_VALUE : rowsPerPageEditor.getIntValue();
28      }
29  
30      private boolean isRowsPerPageEmpty() {
31          return rowsPerPageEditor.getStringValue().trim().length() == 0;
32      }
33  
34      public boolean isEnabled() {
35          return exportEnabledCheckbox.getSelection();
36      }
37  
38      public boolean isImageProductionEnabled() {
39          return exportImagesCheckbox.getSelection();
40      }
41  
42      public boolean isJavaExportEnabled() {
43          return exportJavaCheckbox.getSelection();
44      }
45  
46      private void initialiseExportEnabledEditor(final ProjectProperties properties) throws CoreException {
47          initialiseBooleanEditor(properties, exportEnabledCheckbox, MetricsExportWizard.HTML_EXPORT_ENABLED_QUALIFIED_NAME, true);
48      }
49  
50      private void initialiseExportJavaEditor(final ProjectProperties properties) throws CoreException {
51          initialiseBooleanEditor(properties, exportJavaCheckbox, MetricsExportWizard.HTML_EXPORT_JAVA_ENABLED_QUALIFIED_NAME, true);
52      }
53  
54      private void initialiseImagesEnabledEditor(final ProjectProperties properties) throws CoreException {
55          initialiseBooleanEditor(properties, exportImagesCheckbox, MetricsExportWizard.HTML_IMAGE_PRODUCTION_ENABLED_QUALIFIED_NAME, true);
56      }
57  
58      private void initialiseBooleanEditor(final ProjectProperties properties, final Button checkbox, final QualifiedName propertyName, final boolean defaultValue) throws CoreException {
59          checkbox.setSelection(properties.getBoolean(propertyName, defaultValue));
60      }
61  
62      private void initialiseRowsPerPageEditor(final ProjectProperties properties) throws CoreException {
63          final String rowsPerPage = properties.getString(MetricsExportWizard.HTML_ROWS_PER_PAGE_QUALIFIED_NAME);
64          if (rowsPerPage != null && !rowsPerPage.equals(Integer.toString(Integer.MAX_VALUE))) {
65              rowsPerPageEditor.setStringValue(rowsPerPage);
66          } else {
67              rowsPerPageEditor.setStringValue("");
68          }
69      }
70  
71      private boolean isRowsPerPageValid() {
72          return !isEnabled() || isRowsPerPageEmpty() || rowsPerPageEditor.isValid() && rowsPerPageEditor.getIntValue() > 0;
73      }
74  
75      public void initialise(final ProjectProperties properties) throws CoreException {
76          initialiseExportEnabledEditor(properties);
77          initialiseExportJavaEditor(properties);
78          initialiseRowsPerPageEditor(properties);
79          initialiseImagesEnabledEditor(properties);
80      }
81  
82      public void updateStatus(final StatusUpdateable updateable) {
83          updateable.updateStatus(isRowsPerPageValid(), "Rows per page must be a positive integer or blank (no paging)");
84      }
85  }
86