All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.datacleaner.extension.emailing.ui.SendEmailAnalyzerResultSwingRenderer Maven / Gradle / Ivy

The newest version!
package org.datacleaner.extension.emailing.ui;

import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.File;
import java.util.Collection;

import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JLabel;

import org.apache.metamodel.util.FileHelper;
import org.datacleaner.api.RendererBean;
import org.datacleaner.extension.emailing.EmailResult;
import org.datacleaner.extension.emailing.SendEmailAnalyzerResult;
import org.datacleaner.panels.DCPanel;
import org.datacleaner.result.renderer.AbstractRenderer;
import org.datacleaner.result.renderer.SwingRenderingFormat;
import org.datacleaner.util.FileFilters;
import org.datacleaner.util.IconUtils;
import org.datacleaner.util.ImageManager;
import org.datacleaner.util.WidgetUtils;
import org.datacleaner.widgets.Alignment;
import org.datacleaner.widgets.DCFileChooser;
import org.jdesktop.swingx.VerticalLayout;

@RendererBean(SwingRenderingFormat.class)
public class SendEmailAnalyzerResultSwingRenderer extends AbstractRenderer {

    @Override
    public JComponent render(SendEmailAnalyzerResult analyzerResult) {
        final int successCount = analyzerResult.getSuccessCount();
        final int skipCount = analyzerResult.getSkipCount();
        final int failureCount = analyzerResult.getFailureCount();

        final DCPanel panel = new DCPanel();
        panel.setLayout(new VerticalLayout(4));

        panel.add(createMetricText("Emails sent: ", successCount));
        panel.add(createMetricText("Emails skipped: ", skipCount));
        panel.add(createMetricText("Emails failed: ", failureCount));

        final Collection failures = analyzerResult.getFailures();

        if (!failures.isEmpty()) {
            final Icon icon = ImageManager.get().getImageIcon(IconUtils.CSV_IMAGEPATH, IconUtils.ICON_SIZE_MEDIUM);
            final JButton exportButton = new JButton("Export failure recipients", icon);
            exportButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    final DCFileChooser fileChooser = new DCFileChooser();
                    fileChooser.addChoosableFileFilter(FileFilters.TXT);
                    final int result = fileChooser.showSaveDialog(panel);
                    if (result == DCFileChooser.APPROVE_OPTION) {
                        final File selectedFile = fileChooser.getSelectedFile();
                        final BufferedWriter writer = FileHelper.getBufferedWriter(selectedFile);
                        try {
                            writer.write("recipient");
                            for (EmailResult emailResult : failures) {
                                writer.write('\n');
                                writer.write(emailResult.getRecipient());
                            }
                        } catch (Exception ex) {
                            WidgetUtils.showErrorMessage("Failed to export failure recipients", ex);
                        } finally {
                            FileHelper.safeClose(writer);
                        }
                    }
                }
            });

            final DCPanel exportButtonPanel = new DCPanel();
            exportButtonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
            exportButtonPanel.add(exportButton);
            panel.add(exportButtonPanel);
        }

        int failuresPresented = 0;
        for (EmailResult failureEmailResult : failures) {
            panel.add(createFailureText(failureEmailResult));
            failuresPresented++;
            if (failuresPresented > 20) {
                // prevent too many errors on page
                break;
            }
        }

        return panel;
    }

    private Component createFailureText(EmailResult failureEmailResult) {
        final JLabel recipientLabel = new JLabel(failureEmailResult.getRecipient());
        recipientLabel.setFont(WidgetUtils.FONT_NORMAL.deriveFont(Font.BOLD));

        DCPanel panel = new DCPanel(WidgetUtils.BG_COLOR_BRIGHTEST);
        panel.setLayout(new FlowLayout(Alignment.LEFT.getFlowLayoutAlignment()));
        panel.add(new JLabel("Failed to send email to: "));
        panel.add(recipientLabel);

        final Exception error = failureEmailResult.getError();
        if (error != null) {
            String message = error.getMessage();
            panel.add(new JLabel("Error message (see log for details): " + message));
        }

        return WidgetUtils.decorateWithShadow(panel, false, 2);
    }

    private Component createMetricText(String metric, int value) {
        final JLabel valueLabel = new JLabel("" + value);
        valueLabel.setFont(WidgetUtils.FONT_NORMAL.deriveFont(Font.BOLD));

        DCPanel panel = new DCPanel(WidgetUtils.BG_COLOR_BRIGHTEST);
        panel.setLayout(new FlowLayout(Alignment.LEFT.getFlowLayoutAlignment()));
        panel.add(new JLabel(metric));
        panel.add(valueLabel);
        return WidgetUtils.decorateWithShadow(panel, false, 2);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy