@Override
    public void setValueAt(Object value, int row, int column) {

        Map<String, String> params = new HashMap<String, String>();

        params.put("tableName", getTableName());
        params.put("columnName", getColumnName(column));
        if (value instanceof String) {
            params.put("value", (String) value);
        } else if (value instanceof Integer) {
            params.put("value", String.valueOf(value));
        }
        params.put("id", String.valueOf(getValueAt(row, 0)));

        if (JOptionPane.showConfirmDialog
                (context,
                        COMMIT_DIALOG_MESSAGE,
                        "Commit changes",
                        JOptionPane.YES_NO_OPTION) ==
                JOptionPane.NO_OPTION) {
            return;
        }


        try {
            connection = NetworkDriver.getInstance();
            executeQuery(ClientMessageTypes.UPDATE_CELL, params);
            List<Object> dataRow = rows.get(row);
            dataRow.set(column, value);

        } catch (ServerResponseException e) {
            logger.log(Level.SEVERE, e.getMessage());
        } catch (IOException e) {
            if (e.getMessage().equals(CONNECTION_REFUSED)) {
                JOptionPane.showMessageDialog(context, CONNECTION_FAILED_MESSAGE);
            } else if (e.getMessage().equals(SOCKET_CLOSED)) {
                JOptionPane.showMessageDialog(context, CONNECTION_CLOSED_MESSAGE);
            } else {
                logger.log(Level.SEVERE, e.getMessage());
            }

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

    }