Commit 83426bdc authored by Seyed Reza  Sajjadinasab's avatar Seyed Reza Sajjadinasab
Browse files

addFirstGuiToCheckAddedTokens

parent ce267c7e
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -3,7 +3,9 @@ import java.security.NoSuchAlgorithmException;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import javax.swing.*;

import GUI.*;
import HashTableMaker.HashTableMaker;
import DirectedGraph.BasicGraph;
import DirectedGraph.DirectedGraph;
@@ -21,7 +23,15 @@ public class Checker {
        DBinterface dbInterface = new DBinterface();
        DirectedGraph<State> graph = basicGraphClass.getGraph();
        JsonMaker jsonMaker = JsonMaker.create();
        if(argPars.isUpdateToken()){

        if(argPars.isValidateUpdates()){
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    new WordRoleUpdater();
                }
            });
        }else if(argPars.isUpdateToken()){
            dbInterface.readDataFromDatabase();
            if(argPars.isCheckFile()){
                SentenceExtractor extractor = SentenceExtractor.of(argPars.getFileName());
+177 −0
Original line number Diff line number Diff line
package DirectedGraph;
import java.util.HashMap;
import java.sql.*;

import StateMachine.State;

public class BasicGraph {
@@ -19,60 +22,234 @@ public class BasicGraph {
            cur = cur.next();
            graph.addEdge(State.first(), cur);
        }
        createTable();


        graph.addEdge(State.START,     State.PRONOUN);
        edgeList.put(State.START.toString(), State.PRONOUN.toString());

        graph.addEdge(State.PRONOUN,   State.VERB);
        edgeList.put(State.PRONOUN.toString(), State.VERB.toString());

        graph.addEdge(State.VERB,      State.ADVERB);
        edgeList.put(State.VERB.toString(), State.ADVERB.toString());

        graph.addEdge(State.ADVERB,    State.ADJECTIVE);
        edgeList.put(State.ADVERB.toString(), State.ADJECTIVE.toString());

        graph.addEdge(State.VERB,      State.ARTICLE);
        edgeList.put(State.VERB.toString(), State.ARTICLE.toString());

        graph.addEdge(State.ARTICLE,   State.ADVERB);
        edgeList.put(State.ARTICLE.toString(), State.ADVERB.toString());

        graph.addEdge(State.ARTICLE,   State.ADJECTIVE);
        edgeList.put(State.ARTICLE.toString(), State.ADJECTIVE.toString());

        graph.addEdge(State.ARTICLE,   State.NOUN);
        edgeList.put(State.ARTICLE.toString(), State.NOUN.toString());

        graph.addEdge(State.ADJECTIVE, State.DOT);
        edgeList.put(State.ADJECTIVE.toString(), State.DOT.toString());

        graph.addEdge(State.ADJECTIVE, State.NOUN);
        edgeList.put(State.ADJECTIVE.toString(), State.NOUN.toString());

        graph.addEdge(State.ADJECTIVE, State.COMMA);
        edgeList.put(State.ADJECTIVE.toString(), State.COMMA.toString());

        graph.addEdge(State.NOUN,      State.DOT);
        edgeList.put(State.NOUN.toString(), State.DOT.toString());

        graph.addEdge(State.NOUN,      State.COMMA);
        edgeList.put(State.NOUN.toString(), State.COMMA.toString());

        graph.addEdge(State.DOT,       State.END);
        edgeList.put(State.DOT.toString(), State.END.toString());

        //graph.addEdge(State.COMMA,     State.PRONOUN);
        graph.addEdge(State.COMMA,     State.CONJ);
        edgeList.put(State.COMMA.toString(), State.CONJ.toString());

        graph.addEdge(State.CONJ,      State.PRONOUN);
        edgeList.put(State.CONJ.toString(), State.PRONOUN.toString());

        graph.addEdge(State.PRONOUN,   State.MODAL);
        edgeList.put(State.PRONOUN.toString(), State.MODAL.toString());

        graph.addEdge(State.NOUN,   State.MODAL);
        edgeList.put(State.NOUN.toString(), State.MODAL.toString());

        graph.addEdge(State.MODAL,       State.VERB);
        edgeList.put(State.MODAL.toString(), State.VERB.toString());

        graph.addEdge(State.IF,        State.PRONOUN);
        edgeList.put(State.IF.toString(), State.PRONOUN.toString());

        graph.addEdge(State.THAT,      State.PRONOUN);
        edgeList.put(State.THAT.toString(), State.PRONOUN.toString());

        graph.addEdge(State.IF,        State.NOUN);
        edgeList.put(State.IF.toString(), State.NOUN.toString());

        graph.addEdge(State.THAT,      State.NOUN);
        edgeList.put(State.THAT.toString(), State.NOUN.toString());

        graph.addEdge(State.NOUN,      State.VERB);
        edgeList.put(State.NOUN.toString(), State.VERB.toString());

        graph.addEdge(State.NOUN,      State.MODAL);
        edgeList.put(State.NOUN.toString(), State.MODAL.toString());

        //graph.addEdge(State.VERB,      State.NOT);
        graph.addEdge(State.PRONOUN,   State.DOES);
        edgeList.put(State.PRONOUN.toString(), State.DOES.toString());

        graph.addEdge(State.NOUN,      State.DOES);
        edgeList.put(State.NOUN.toString(), State.DOES.toString());

        graph.addEdge(State.DOES,      State.NOT);
        edgeList.put(State.DOES.toString(), State.NOT.toString());

        graph.addEdge(State.NOT,       State.VERB);
        edgeList.put(State.NOT.toString(), State.VERB.toString());

        graph.addEdge(State.NOT,       State.ADVERB);
        edgeList.put(State.NOT.toString(), State.ADVERB.toString());

        graph.addEdge(State.NOT,       State.ADJECTIVE);
        edgeList.put(State.NOT.toString(), State.ADJECTIVE.toString());

        graph.addEdge(State.NOT,       State.ARTICLE);
        edgeList.put(State.NOT.toString(), State.ARTICLE.toString());

        graph.addEdge(State.NOT,       State.DOT);
        edgeList.put(State.NOT.toString(), State.DOT.toString());

        graph.addEdge(State.PREPOS,        State.PRONOUN);
        edgeList.put(State.PREPOS.toString(), State.PRONOUN.toString());

        graph.addEdge(State.NOUN,      State.IS);
        edgeList.put(State.NOUN.toString(), State.IS.toString());

        graph.addEdge(State.PRONOUN,   State.IS);
        edgeList.put(State.PRONOUN.toString(), State.IS.toString());

        graph.addEdge(State.IS,        State.ADJECTIVE);
        edgeList.put(State.IS.toString(), State.ADJECTIVE.toString());

        graph.addEdge(State.IS,        State.ADVERB);
        edgeList.put(State.IS.toString(), State.ADVERB.toString());

        graph.addEdge(State.IS,        State.ARTICLE);
        edgeList.put(State.IS.toString(), State.ARTICLE.toString());

        graph.addEdge(State.IS,        State.NOT);
        edgeList.put(State.IS.toString(), State.NOT.toString());

        graph.addEdge(State.THAT,      State.IF);
        edgeList.put(State.THAT.toString(), State.IF.toString());

        graph.addEdge(State.VERB,      State.PREPOS);
        edgeList.put(State.VERB.toString(), State.PREPOS.toString());

        graph.addEdge(State.IS,      State.PREPOS);
        edgeList.put(State.IS.toString(), State.PREPOS.toString());

        graph.addEdge(State.PREPOS,      State.NOUN);
        edgeList.put(State.PREPOS.toString(), State.NOUN.toString());

        graph.addEdge(State.PREPOS,      State.ARTICLE);
        edgeList.put(State.PREPOS.toString(), State.ARTICLE.toString());

        graph.addEdge(State.PREPOS,      State.ADJECTIVE);
        edgeList.put(State.PREPOS.toString(), State.ADJECTIVE.toString());

        graph.addEdge(State.ADVERB,      State.VERB);
        edgeList.put(State.ADVERB.toString(), State.VERB.toString());

        graph.addEdge(State.NOUN,      State.NOUN);
        edgeList.put(State.NOUN.toString(), State.NOUN.toString());

        graph.addEdge(State.ADJECTIVE,      State.ADJECTIVE);
        edgeList.put(State.ADJECTIVE.toString(), State.ADJECTIVE.toString());
    }
    public DirectedGraph<State> getGraph() {
        return graph;
    }


    private HashMap<String, String> edgeList;

    private static final String URL = "jdbc:sqlite:./SQLite/graphdatabase_name";

    // Method to create the table
    private void createTable() {
        edgeList = new HashMap<>();
        // SQL statement to create the table
        String sqlCreateTable = "CREATE TABLE nodeOne_nodeTwo ("
                + "nodeOne VARCHAR(50) PRIMARY KEY,"
                + "nodeTwo VARCHAR(50)"
                + ")";

        try (Connection conn = DriverManager.getConnection(URL);
             Statement stmt = conn.createStatement()) {
            // Execute the SQL statement to create the table
            stmt.execute(sqlCreateTable);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // Method to read data from SQLite database into HashMap
    public void readDataFromDatabase() {
        edgeList = new HashMap<>();
        String dbUrl = "jdbc:sqlite:./SQLite/graphdatabase.db";
        try (Connection connection = DriverManager.getConnection(dbUrl)) {
            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery("SELECT * FROM nodeOne_nodeTwo");

            while (resultSet.next()) {
                String word = resultSet.getString("nodeOne");
                String role = resultSet.getString("nodeTwo");
                edgeList.put(word, role);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // Method to update SQLite database with updated HashMap
    public void updateDatabase() {
        String dbUrl = "jdbc:sqlite:./SQLite/newdatabase.db";
        try (Connection connection = DriverManager.getConnection(dbUrl)) {
            // Clear existing data in the table
            Statement clearStatement = connection.createStatement();
            clearStatement.executeUpdate("DELETE FROM nodeOne_nodeTwo");

            // Insert updated data from HashMap into the table
            PreparedStatement insertStatement = connection.prepareStatement("INSERT INTO word_roles (nodeOne, nodeTwo) VALUES (?, ?)");
            for (String word : edgeList.keySet()) {
                String role = edgeList.get(word);
                insertStatement.setString(1, word);
                insertStatement.setString(2, role);
                insertStatement.addBatch();
            }
            insertStatement.executeBatch();

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // Getter method for the HashMap
    public HashMap<String, String> getEdgeList() {
        return edgeList;
    }

    // Setter method for the HashMap
    public void setWordRolesMap(HashMap<String, String> edgeList) {
        this.edgeList = edgeList;
    }
}
+208 −0
Original line number Diff line number Diff line
package GUI;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import java.util.HashMap;
import java.util.Map;

public class WordRoleUpdater extends JFrame {
    private static final String DB_URL = "jdbc:sqlite:./SQLite/newdatabase.db";
    private static final String TABLE_NAME = "word_roles";
    private static final int POPUP_WIDTH = 300;
    private static final int POPUP_HEIGHT = 200;

    private Connection connection;
    private Map<String, String> wordRoles;
    private Map<String, Boolean> changes;
    private int currentIndex;
    private JLabel progressLabel;
    private JLabel wordLabel;
    private JLabel roleLabel;
    private JButton acceptButton;
    private JButton rejectButton;
    private JButton acceptAllButton;
    private JButton rejectAllButton;

    public WordRoleUpdater() {
        try {
            connection = DriverManager.getConnection(DB_URL);
            loadWordRoles();
            initializeUI();
            updateWordLabel(); // Show the first word and its role
            updateRoleLabel();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    private void loadWordRoles() throws SQLException {
        wordRoles = new HashMap<>();
        changes = new HashMap<>();

        Statement statement = connection.createStatement();
        ResultSet resultSet = statement.executeQuery("SELECT * FROM " + TABLE_NAME);

        while (resultSet.next()) {
            String word = resultSet.getString("word");
            String role = resultSet.getString("role");
            wordRoles.put(word, role);
            changes.put(word, false);
        }

        statement.close();
    }

    private void initializeUI() {
        setTitle("Word Role Updater");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        progressLabel = new JLabel();
        progressLabel.setHorizontalAlignment(SwingConstants.CENTER);
        updateProgressLabel();

        wordLabel = new JLabel();
        wordLabel.setHorizontalAlignment(SwingConstants.CENTER);
        updateWordLabel();

        roleLabel = new JLabel();
        roleLabel.setHorizontalAlignment(SwingConstants.CENTER);
        updateRoleLabel();

        JPanel labelPanel = new JPanel(new GridLayout(3, 1));
        labelPanel.add(progressLabel);
        labelPanel.add(wordLabel);
        labelPanel.add(roleLabel);

        acceptButton = new JButton("Accept");
        rejectButton = new JButton("Reject");
        acceptAllButton = new JButton("Accept All");
        rejectAllButton = new JButton("Reject All");

        JPanel buttonPanel = new JPanel(new GridLayout(2, 2));
        buttonPanel.add(acceptButton);
        buttonPanel.add(rejectButton);
        buttonPanel.add(acceptAllButton);
        buttonPanel.add(rejectAllButton);

        acceptButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                changes.put(getCurrentWord(), true);
                updateNextWord();
            }
        });

        rejectButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                wordRoles.remove(getCurrentWord()); // Remove the current word
                changes.remove(getCurrentWord()); // Remove the change for the current word
                updateNextWord(); // Move to the next word
            }
        });

        acceptAllButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                for (String word : wordRoles.keySet()) {
                    changes.put(word, true);
                }
                updateDatabase(); // Update database before ending
                JOptionPane.showMessageDialog(WordRoleUpdater.this, "All changes accepted. Database updated.");
                System.exit(0);
            }
        });

        rejectAllButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                wordRoles.clear(); // Clear all word roles
                changes.clear(); // Clear all changes
                updateDatabase(); // Update database (clear the table)
                JOptionPane.showMessageDialog(WordRoleUpdater.this, "All changes rejected. Table cleared.");
                System.exit(0);
            }
        });

        JPanel mainPanel = new JPanel(new BorderLayout());
        mainPanel.setPreferredSize(new Dimension(POPUP_WIDTH, POPUP_HEIGHT));
        mainPanel.add(labelPanel, BorderLayout.NORTH);
        mainPanel.add(buttonPanel, BorderLayout.SOUTH);

        add(mainPanel);

        pack();
        setLocationRelativeTo(null); // Center the window
        setVisible(true);
    }

    private String getCurrentWord() {
        return (String) wordRoles.keySet().toArray()[currentIndex];
    }

    private void updateNextWord() {
        currentIndex++;
        if (currentIndex >= wordRoles.size()) {
            updateDatabase();
            JOptionPane.showMessageDialog(this, "No more changes to review.");
            System.exit(0);
        } else {
            updateWordLabel();
            updateRoleLabel(); 
            updateProgressLabel();
        }
    }

    private void updateProgressLabel() {
        progressLabel.setText((currentIndex + 1) + "/" + wordRoles.size());
    }

    private void updateWordLabel() {
        String word = getCurrentWord();
        wordLabel.setText("Word: " + word);
    }

    private void updateRoleLabel() {
        String word = getCurrentWord();
        String role = wordRoles.get(word);
        roleLabel.setText("Role: " + role);
    }

    private void updateDatabase() {
        try {
            Statement statement = connection.createStatement();
            statement.executeUpdate("DELETE FROM " + TABLE_NAME);
            PreparedStatement insertStatement = connection.prepareStatement("INSERT INTO " + TABLE_NAME + " (word, role) VALUES (?, ?)");

            for (Map.Entry<String, Boolean> entry : changes.entrySet()) {
                String word = entry.getKey();
                boolean accept = entry.getValue();

                if (accept) {
                    String role = wordRoles.get(word);
                    insertStatement.setString(1, word);
                    insertStatement.setString(2, role);
                    insertStatement.executeUpdate();
                }
            }

            statement.close();
            insertStatement.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new WordRoleUpdater();
            }
        });
    }
}
+12 KiB

File added.

No diff preview for this file type.

(12 KiB)

File changed.

No diff preview for this file type.

Loading