com.microsoftopentechnologies.intellij.forms.TableForm.java Source code

Java tutorial

Introduction

Here is the source code for com.microsoftopentechnologies.intellij.forms.TableForm.java

Source

/**
 * Copyright 2014 Microsoft Open Technologies Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

package com.microsoftopentechnologies.intellij.forms;

import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.project.Project;
import com.microsoftopentechnologies.intellij.helpers.UIHelper;
import com.microsoftopentechnologies.intellij.helpers.azure.AzureRestAPIManager;
import com.microsoftopentechnologies.intellij.model.PermissionItem;
import com.microsoftopentechnologies.intellij.model.PermissionType;
import com.microsoftopentechnologies.intellij.model.Table;
import com.microsoftopentechnologies.intellij.model.TablePermissions;
import org.apache.commons.lang.ArrayUtils;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.UUID;

public class TableForm extends JDialog {
    private JPanel mainPanel;
    private JButton cancelButton;
    private JButton createButton;
    private JTextField tableNameTextField;
    private JComboBox insertPermisssionComboBox;
    private JComboBox updatePermissionComboBox;
    private JComboBox deletePermissionComboBox;
    private JComboBox readPermissionComboBox;
    private UUID subscriptionId;
    private String serviceName;
    private Project project;
    private Table editingTable;
    private Runnable afterSave;

    public Project getProject() {
        return project;
    }

    public void setProject(Project project) {
        this.project = project;
    }

    public void setSubscriptionId(UUID subscriptionId) {
        this.subscriptionId = subscriptionId;
    }

    public void setServiceName(String serviceName) {
        this.serviceName = serviceName;
    }

    public void setAfterSave(Runnable afterSave) {
        this.afterSave = afterSave;
    }

    private ArrayList<String> existingTableNames;

    public void setEditingTable(Table editingTable) {

        this.editingTable = editingTable;

        this.setTitle(editingTable == null ? "Create new table" : "Edit table");
        this.tableNameTextField.setText(editingTable == null ? "" : editingTable.getName());
        this.tableNameTextField.setEnabled(editingTable == null);
        this.createButton.setEnabled(editingTable != null);
        this.createButton.setText(editingTable == null ? "Create" : "Save");

        PermissionItem[] tablePermissions = PermissionItem.getTablePermissions();

        if (editingTable != null) {
            deletePermissionComboBox.setSelectedIndex(
                    permissionIndex(tablePermissions, editingTable.getTablePermissions().getDelete()));
            insertPermisssionComboBox.setSelectedIndex(
                    permissionIndex(tablePermissions, editingTable.getTablePermissions().getInsert()));
            readPermissionComboBox.setSelectedIndex(
                    permissionIndex(tablePermissions, editingTable.getTablePermissions().getRead()));
            updatePermissionComboBox.setSelectedIndex(
                    permissionIndex(tablePermissions, editingTable.getTablePermissions().getUpdate()));
        }
    }

    public TableForm() {
        final TableForm form = this;
        this.setResizable(false);
        this.setModal(true);
        this.setTitle("Create new table");
        this.setContentPane(mainPanel);

        createButton.setEnabled(false);

        tableNameTextField.addKeyListener(new KeyAdapter() {
            @Override
            public void keyTyped(KeyEvent keyEvent) {
                super.keyTyped(keyEvent);

                createButton.setEnabled(!tableNameTextField.getText().isEmpty());
            }
        });

        final PermissionItem[] tablePermissions = PermissionItem.getTablePermissions();

        insertPermisssionComboBox.setModel(new DefaultComboBoxModel(tablePermissions));
        deletePermissionComboBox.setModel(new DefaultComboBoxModel(tablePermissions));
        updatePermissionComboBox.setModel(new DefaultComboBoxModel(tablePermissions));
        readPermissionComboBox.setModel(new DefaultComboBoxModel(tablePermissions));

        cancelButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                form.setVisible(false);
                form.dispose();
            }
        });

        createButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                ApplicationManager.getApplication().invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            TablePermissions tablePermissions = new TablePermissions();

                            tablePermissions.setDelete(
                                    ((PermissionItem) deletePermissionComboBox.getSelectedItem()).getType());
                            tablePermissions.setUpdate(
                                    ((PermissionItem) updatePermissionComboBox.getSelectedItem()).getType());
                            tablePermissions
                                    .setRead(((PermissionItem) readPermissionComboBox.getSelectedItem()).getType());
                            tablePermissions.setInsert(
                                    ((PermissionItem) insertPermisssionComboBox.getSelectedItem()).getType());

                            final String tableName = tableNameTextField.getText().trim();

                            if (!tableName.matches("^[A-Za-z][A-Za-z0-9_]+")) {
                                JOptionPane.showMessageDialog(form,
                                        "Invalid table name. Table name must start with a letter, \n"
                                                + "contain only letters, numbers, and underscores.",
                                        "Error creating the table", JOptionPane.ERROR_MESSAGE);
                                return;
                            }

                            int tableNameIndex = -1;
                            if (existingTableNames != null) {
                                tableNameIndex = Iterables.indexOf(existingTableNames, new Predicate<String>() {
                                    @Override
                                    public boolean apply(String name) {
                                        return tableName.equalsIgnoreCase(name);
                                    }
                                });
                            }

                            if (tableNameIndex != -1) {
                                JOptionPane.showMessageDialog(form,
                                        "Invalid table name. A table with that name already exists in this service.",
                                        "Error creating the table", JOptionPane.ERROR_MESSAGE);
                                return;
                            }

                            form.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

                            if (editingTable == null) {
                                AzureRestAPIManager.getManager().createTable(subscriptionId, serviceName, tableName,
                                        tablePermissions);
                            } else {
                                AzureRestAPIManager.getManager().updateTable(subscriptionId, serviceName, tableName,
                                        tablePermissions);
                            }
                            if (afterSave != null)
                                afterSave.run();

                            form.setVisible(false);
                            form.dispose();
                            form.setCursor(Cursor.getDefaultCursor());

                        } catch (Throwable e) {
                            form.setCursor(Cursor.getDefaultCursor());
                            UIHelper.showException("Error creating table", e);
                        }

                    }
                });
            }
        });
    }

    private int permissionIndex(PermissionItem[] p, PermissionType pt) {
        for (int i = 0; i < p.length; i++) {
            if (p[i].getType() == pt)
                return i;
        }
        return 0;
    }

    public void setExistingTableNames(ArrayList<String> existingTableNames) {
        this.existingTableNames = existingTableNames;
    }
}