Package net.datacrow.console.windows.enhancers

Source Code of net.datacrow.console.windows.enhancers.TitleRewriterDialog$Rewriter

/******************************************************************************
*                                     __                                     *
*                              <-----/@@\----->                              *
*                             <-< <  \\//  > >->                             *
*                               <-<-\ __ /->->                               *
*                               Data /  \ Crow                               *
*                                   ^    ^                                   *
*                              info@datacrow.net                             *
*                                                                            *
*                       This file is part of Data Crow.                      *
*       Data Crow is free software; you can redistribute it and/or           *
*        modify it under the terms of the GNU General Public                 *
*       License as published by the Free Software Foundation; either         *
*              version 3 of the License, or any later version.               *
*                                                                            *
*        Data Crow is distributed in the hope that it will be useful,        *
*      but WITHOUT ANY WARRANTY; without even the implied warranty of        *
*           MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.             *
*           See the GNU General Public License for more details.             *
*                                                                            *
*        You should have received a copy of the GNU General Public           *
*  License along with this program. If not, see http://www.gnu.org/licenses  *
*                                                                            *
******************************************************************************/

package net.datacrow.console.windows.enhancers;

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.util.Collection;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;

import net.datacrow.console.ComponentFactory;
import net.datacrow.console.Layout;
import net.datacrow.console.components.DcLongTextField;
import net.datacrow.console.windows.DcDialog;
import net.datacrow.core.DataCrow;
import net.datacrow.core.data.DataFilters;
import net.datacrow.core.data.DataManager;
import net.datacrow.core.db.DatabaseManager;
import net.datacrow.core.modules.DcModule;
import net.datacrow.core.modules.DcModules;
import net.datacrow.core.objects.DcField;
import net.datacrow.core.resources.DcResources;
import net.datacrow.enhancers.IValueEnhancer;
import net.datacrow.enhancers.TitleRewriter;
import net.datacrow.enhancers.ValueEnhancers;
import net.datacrow.util.DcSwingUtilities;

import org.apache.log4j.Logger;

public class TitleRewriterDialog extends DcDialog implements ActionListener {

    private static Logger logger = Logger.getLogger(TitleRewriterDialog.class.getName());
   
    private boolean canceled = false;
   
    private JProgressBar progressBar = new JProgressBar();
   
    private JButton buttonRun = ComponentFactory.getButton(DcResources.getText("lblRun"));
    private JButton buttonClose = ComponentFactory.getButton(DcResources.getText("lblClose"));
    private JButton buttonSave = ComponentFactory.getButton(DcResources.getText("lblSave"));
   
    private JCheckBox checkEnabled = ComponentFactory.getCheckBox(DcResources.getText("lblEnabled"));
    private DcLongTextField txtWordList = ComponentFactory.getLongTextField();
   
    private DcModule module = DcModules.getCurrent();

    public TitleRewriterDialog() {
        super(DataCrow.mainFrame);

        buildDialog();

        setHelpIndex("dc.tools.titlerewriter");
        setTitle(DcResources.getText("lblTitleRewriter"));
       
        setCenteredLocation();
        setModal(true);
    }

    private void cancel() {
        canceled = true;
    }
   
    @Override
    public void close() {
        checkEnabled = null;
        txtWordList = null;
        progressBar = null;
        module = null;
       
        super.close();
    }

    private TitleRewriter getTitleRewriter() throws Exception {
        if (txtWordList.getText() == null || txtWordList.getText().trim().length() == 0)
            throw new Exception(DcResources.getText("msgNoMemberWordsDefined"));
       
        return new TitleRewriter(checkEnabled.isSelected(), txtWordList.getText());
    }
   
    private void save() {
        try {
            TitleRewriter titleRewriter = getTitleRewriter();
            module.removeEnhancers();
            DcField field = module.getField(titleRewriter.getField());
            if (field == null) {
                DcSwingUtilities.displayWarningMessage("msgCouldNotSaveTitleRewriter");
            } else {
                ValueEnhancers.registerEnhancer(field, titleRewriter);
                ValueEnhancers.save();
            }
        } catch (Exception exp) {
            DcSwingUtilities.displayWarningMessage(exp.toString());
        }
    }
   
    public void initProgressBar(int maxValue) {
        progressBar.setValue(0);
        progressBar.setMaximum(maxValue);
    }

    public void updateProgressBar() {
        int current = progressBar.getValue();
        progressBar.setValue(current + 1);
    }   

    private void buildDialog() {
        getContentPane().setLayout(Layout.getGBL());

        /***********************************************************************
         * Settings
         **********************************************************************/
        JPanel panelSettings = new JPanel(false);
        panelSettings.setLayout(Layout.getGBL());
       
        JLabel lblWords = ComponentFactory.getLabel(DcResources.getText("lblWords"));
        buttonSave.addActionListener(this);
        buttonSave.setActionCommand("save");
       
        JScrollPane textScroller = new JScrollPane(txtWordList);
        textScroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
        textScroller.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
       
        panelSettings.add(checkEnabled,     Layout.getGBC(0, 0, 1, 1, 1.0, 1.0,
                GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL,
                new Insets(5, 5, 5, 5), 0, 0));
        panelSettings.add(lblWords,         Layout.getGBC(0, 1, 1, 1, 1.0, 1.0,
                GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL,
                new Insets(10, 5, 0, 5), 0, 0));
        panelSettings.add(textScroller,     Layout.getGBC(0, 2, 1, 1, 5.0, 5.0,
                GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH,
                new Insets(0, 5, 5, 5), 0, 0));
        panelSettings.add(buttonSave,       Layout.getGBC(0, 3, 1, 1, 1.0, 1.0,
                GridBagConstraints.NORTHEAST, GridBagConstraints.NONE,
                new Insets(5, 5, 5, 5), 0, 0));
       
        /***********************************************************************
         * Rewrite Titles
         **********************************************************************/
        JPanel panelRewrite = new JPanel(false);
        panelRewrite.setLayout(Layout.getGBL());
       
        DcLongTextField explanation = ComponentFactory.getLongTextField();
        explanation.setText(DcResources.getText("msgTitleRewriterExplanation"));
        ComponentFactory.setUneditable(explanation);
       
        panelRewrite.add(explanation, Layout.getGBC(0, 0, 1, 1, 1.0, 1.0,
                GridBagConstraints.NORTHEAST, GridBagConstraints.BOTH,
                new Insets(5, 5, 5, 5), 0, 0));

        buttonRun.addActionListener(this);
        buttonRun.setActionCommand("rewrite");
       
        JButton buttonCancel = ComponentFactory.getButton(DcResources.getText("lblCancel"));
        buttonCancel.addActionListener(this);
        buttonCancel.setActionCommand("cancel");
       
        JPanel panel = new JPanel();
        panel.add(buttonRun);
        panel.add(buttonCancel);
       
        panelRewrite.add(panel,   Layout.getGBC(0, 1, 1, 1, 1.0, 1.0,
                GridBagConstraints.NORTHEAST, GridBagConstraints.NONE,
                new Insets(0, 0, 0, 0), 0, 0));
       
        panelRewrite.add(progressBar, Layout.getGBC(0, 2, 1, 1, 1.0, 1.0,
                GridBagConstraints.NORTHEAST, GridBagConstraints.HORIZONTAL,
                new Insets(5, 5, 5, 5), 0, 0));
       
        /***********************************************************************
         * Main
         **********************************************************************/
        panelRewrite.setBorder(ComponentFactory.getTitleBorder(DcResources.getText("lblRewriteAll")));
        panelSettings.setBorder(ComponentFactory.getTitleBorder(DcResources.getText("lblSettings")));
       
        buttonClose.addActionListener(this);
        buttonClose.setActionCommand("close");

        getContentPane().add(panelSettings, Layout.getGBC(0, 0, 1, 1, 10.0, 10.0,
                GridBagConstraints.SOUTHWEST, GridBagConstraints.BOTH,
                new Insets(5, 5, 5, 5), 0, 0));
        getContentPane().add(panelRewrite,  Layout.getGBC(0, 1, 1, 1, 1.0, 1.0,
                GridBagConstraints.SOUTHWEST, GridBagConstraints.BOTH,
                new Insets(5, 5, 5, 5), 0, 0));
        getContentPane().add(buttonClose,  Layout.getGBC(0, 2, 1, 1, 1.0, 1.0,
                GridBagConstraints.SOUTHEAST, GridBagConstraints.NONE,
                new Insets(5, 5, 5, 10), 0, 0));       

        Collection<? extends IValueEnhancer> enhancers =
            ValueEnhancers.getEnhancers(module.getIndex(), ValueEnhancers._TITLEREWRITERS);
       
        if (enhancers != null && enhancers.size() > 0)
            setEnhancers(enhancers.toArray()[0]);
        else
            txtWordList.setText("the,un,de,le,a,la,une,de,het,een,der,die,das");
       
        setResizable(false);
        pack();
        setSize(new Dimension(500,400));
        setCenteredLocation();
    }
   
    private void setEnhancers(Object enhancer) {
        if (enhancer instanceof TitleRewriter) {
            TitleRewriter rewriter = (TitleRewriter) enhancer;
            checkEnabled.setSelected(rewriter.isEnabled());
            txtWordList.setText(rewriter.getWordList());
        }
    }
   
    private void rewrite() {
        save();
        this.canceled = false;
        Rewriter rewriter = new Rewriter();
        rewriter.start();
    }

    private class Rewriter extends Thread {
       
        public Rewriter() {}
       
        @Override
        public void run() {
            boolean active = false;
           
            for (DcField field : module.getFields()) {
               
                if (canceled) break;
               
                IValueEnhancer[] enhancers = field.getValueEnhancers();
                for (int i = 0; i < enhancers.length && !canceled; i++) {
                    if (enhancers[i].isEnabled() && enhancers[i] instanceof TitleRewriter) {
                        active = true;
                        rewrite((TitleRewriter) enhancers[i],
                                module.getField(((TitleRewriter) enhancers[i]).getField()));
                    }
                }
            }
           
            if (!active && !canceled) {
                DcSwingUtilities.displayErrorMessage("msgNoTitleRewritersFound");
            } else {
                // refresh the view
                module.getSearchView().clear();
                module.getSearchView().add(DataManager.getKeys(DataFilters.getCurrent(module.getIndex())));
            }           
        }
       
        private void rewrite(TitleRewriter rewriter, DcField field) {
            save();
           
            buttonClose.setEnabled(false);
            buttonRun.setEnabled(false);
            buttonSave.setEnabled(false);           
           
            try {
                ResultSet rs = DatabaseManager.executeSQL(
                        "SELECT COUNT(ID) AS TOTAL FROM " + module.getTableName() +
                        " WHERE " + field.getDatabaseFieldName() + " IS NOT NULL AND " +
                        field.getDatabaseFieldName() + " != ''");
               
                int total = 0;
                while (rs.next()) {
                    total = rs.getInt("TOTAL");
                }
                rs.close();               
               
                initProgressBar(total);
                rs = DatabaseManager.executeSQL(
                        "SELECT ID, " + field.getDatabaseFieldName() + " FROM " + module.getTableName() +
                        " WHERE " + field.getDatabaseFieldName() + " IS NOT NULL AND " +
                        field.getDatabaseFieldName() + " != ''");
               
                String ID;
                String title;
                String newTitle;
                while (rs.next() &&  !canceled) {
                    ID = rs.getString("ID");
                    title = rs.getString(field.getDatabaseFieldName());
                    newTitle = (String) rewriter.apply(field, title);
                   
                    if (!title.equals(newTitle)) {
                        DatabaseManager.executeSQL(
                                "UPDATE " + module.getTableName() + " SET " + field.getDatabaseFieldName() +
                                " = '" + newTitle + "' WHERE ID = '" + ID + "'");
                    }
                    updateProgressBar();
                }
                rs.close();
            } catch (Exception e) {
                logger.error("An error occurred while rewriting titles", e);
            } finally {
                if (buttonRun != null) {
                    buttonClose.setEnabled(true);
                    buttonRun.setEnabled(true);
                    buttonSave.setEnabled(true);
                }
            }
        }
    }
   
   
    @Override
    public void actionPerformed(ActionEvent ae) {
        if (ae.getActionCommand().equals("rewrite"))
            rewrite();
        else if (ae.getActionCommand().equals("cancel"))
            cancel();
        else if (ae.getActionCommand().equals("close"))
            close();
        else if (ae.getActionCommand().equals("save"))
            save();
    }
}
TOP

Related Classes of net.datacrow.console.windows.enhancers.TitleRewriterDialog$Rewriter

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.