com.microsoft.intellij.ui.ApplicationsTab.java Source code

Java tutorial

Introduction

Here is the source code for com.microsoft.intellij.ui.ApplicationsTab.java

Source

/**
 * Copyright (c) Microsoft Corporation
 * <p/>
 * All rights reserved.
 * <p/>
 * MIT License
 * <p/>
 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
 * documentation files (the "Software"), to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
 * to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 * <p/>
 * The above copyright notice and this permission notice shall be included in all copies or substantial portions of
 * the Software.
 * <p/>
 * THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
 * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
package com.microsoft.intellij.ui;

import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.interopbridges.tools.windowsazure.WindowsAzureInvalidProjectOperationException;
import com.interopbridges.tools.windowsazure.WindowsAzureProjectManager;
import com.interopbridges.tools.windowsazure.WindowsAzureRole;
import com.interopbridges.tools.windowsazure.WindowsAzureRoleComponent;
import com.microsoft.intellij.AzurePlugin;
import com.microsoft.intellij.util.AppCmpntParam;
import com.microsoft.intellij.util.PluginUtil;

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.AbstractTableModel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import java.util.List;

import static com.microsoft.intellij.AzurePlugin.log;
import static com.microsoft.intellij.ui.messages.AzureBundle.message;

public class ApplicationsTab extends JPanel {
    private JPanel contentPane;
    private JTable appTable;
    private JButton addButton;
    private JButton removeButton;

    private Project project;
    private WindowsAzureProjectManager waProjManager;
    private WindowsAzureRole waRole;
    private boolean newRole;
    private boolean modified;

    private final ArrayList<AppCmpntParam> appList = new ArrayList<AppCmpntParam>();
    private List<String> fileToDel;

    public JPanel getPanel() {
        return contentPane;
    }

    void init(Project project, WindowsAzureProjectManager waProjManager, WindowsAzureRole waRole,
            List<String> fileToDel) {
        this.project = project;
        this.waProjManager = waProjManager;
        this.waRole = waRole;
        this.fileToDel = fileToDel;
        this.newRole = waProjManager == null;
        appTable.setModel(new ApplicationsTableModel());
        appTable.getSelectionModel().addListSelectionListener(createAppTableListener());
        addButton.addActionListener(createAddApplicationListener());
        removeButton.addActionListener(createRemoveButtonListener());
        removeButton.setEnabled(false);
    }

    private ListSelectionListener createAppTableListener() {
        return new ListSelectionListener() {
            @Override
            public void valueChanged(ListSelectionEvent e) {
                boolean buttonsEnabled = appTable.getSelectedRow() > -1;
                removeButton.setEnabled(buttonsEnabled);
            }
        };
    }

    private ActionListener createAddApplicationListener() {
        return new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                final AddApplicationDialog addApplicationDialog = new AddApplicationDialog(project, waRole,
                        getAppsAsNames());
                addApplicationDialog.show();
                if (addApplicationDialog.isOK()) {
                    appList.add(addApplicationDialog.getAppCmpntParam());
                    ((ApplicationsTableModel) appTable.getModel()).fireTableDataChanged();
                    if (!newRole) {
                        List<WindowsAzureRoleComponent> srvApp = null;
                        try {
                            if (!getAppsAsNames().isEmpty()) {
                                AppCmpntParam app = getAppsList().get(getAppsList().size() - 1);
                                String impSrc = app.getImpSrc();
                                String impAs = app.getImpAs();

                                srvApp = waRole.getServerApplications();
                                String approotPathSubStr = String.format("%s%s%s%s", waProjManager.getProjectName(),
                                        File.separator, waRole.getName(), message("approot"));
                                boolean needCldAttr = true;
                                if (impSrc.contains(approotPathSubStr)) {
                                    needCldAttr = false;
                                }
                                if (srvApp.size() == 0) {
                                    waRole.addServerApplication(impSrc, impAs, app.getImpMethod(),
                                            AzurePlugin.cmpntFile, needCldAttr);
                                    modified = true;
                                } else {
                                    boolean isExist = false;
                                    for (int i = 0; i < srvApp.size(); i++) {
                                        WindowsAzureRoleComponent c = srvApp.get(i);
                                        if (impAs.equalsIgnoreCase(c.getDeployName())
                                                && impSrc.equalsIgnoreCase(c.getImportPath())) {
                                            isExist = true;
                                            break;
                                        }
                                    }
                                    if (!isExist) {
                                        waRole.addServerApplication(impSrc, impAs, app.getImpMethod(),
                                                AzurePlugin.cmpntFile, needCldAttr);
                                        modified = true;
                                    }
                                }
                            }
                        } catch (WindowsAzureInvalidProjectOperationException ex) {
                            PluginUtil.displayErrorDialogAndLog(message("srvErrTtl"), message("addSrvAppErrMsg"),
                                    ex);
                            return;
                        }
                    }
                }
            }
        };
    }

    private ActionListener createRemoveButtonListener() {
        return new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int curSelIndex = appTable.getSelectedRow();
                if (curSelIndex > -1) {
                    if (!newRole) {
                        try {
                            int choice = Messages.showYesNoDialog(message("appRmvMsg"), message("appRmvTtl"),
                                    Messages.getQuestionIcon());
                            if (choice == Messages.YES) {
                                String cmpntName = appList.get(curSelIndex).getImpAs();
                                String cmpntPath = String.format("%s%s%s%s%s",
                                        PluginUtil.getModulePath(ModuleManager.getInstance(project)
                                                .findModuleByName(waProjManager.getProjectName())),
                                        File.separator, waRole.getName(), message("approot"), cmpntName);
                                waRole.removeServerApplication(cmpntName);
                                modified = true;
                                if (!fileToDel.contains(cmpntPath)) {
                                    fileToDel.add(cmpntPath);
                                }
                                //                                JdkSrvConfig.getTableViewer().refresh();
                                //                                JdkSrvConfigListener.disableRemoveButton();
                            } else {
                                return;
                            }
                        } catch (Exception ex) {
                            PluginUtil.displayErrorDialogAndLog(message("srvErrTtl"), message("rmvSrvAppErrMsg"),
                                    ex);
                            return;
                        }
                    }
                    appList.remove(curSelIndex);
                    ((ApplicationsTableModel) appTable.getModel()).fireTableDataChanged();

                }
            }
        };
    }

    void initAppTab() {
        if (newRole) {
            try {
                AppCmpntParam acp = new AppCmpntParam();
                acp.setImpAs(waRole.getComponents().get(0).getDeployName());
                appList.add(acp);
            } catch (WindowsAzureInvalidProjectOperationException e) {
                log(message("error"), e);
            }
        } else {
            List<WindowsAzureRoleComponent> srvApp1 = null;
            // Get previously added sever applications
            try {
                srvApp1 = waRole.getServerApplications();
            } catch (WindowsAzureInvalidProjectOperationException e) {
                PluginUtil.displayErrorDialogAndLog(message("srvErrTtl"), message("getSrvAppErrMsg"), e);
            }
            /* Display existing server
             * applications in Applications table
            */
            for (int i = 0; i < srvApp1.size(); i++) {
                WindowsAzureRoleComponent cmpnt = srvApp1.get(i);
                AppCmpntParam acp = new AppCmpntParam();
                acp.setImpAs(cmpnt.getDeployName());
                appList.add(acp);
            }
        }
    }

    void setEnable(boolean enable) {
        appTable.setEnabled(enable);
        addButton.setEnabled(enable);
    }

    /**
     * @return added application Asnames which is to be set in table.
     */
    public ArrayList<String> getAppsAsNames() {
        ArrayList<String> list = new ArrayList<String>();
        for (int i = 0; i < appList.size(); i++) {
            list.add(appList.get(i).getImpAs());
        }
        return list;
    }

    /**
     * @return applist
     */
    public ArrayList<AppCmpntParam> getAppsList() {
        return appList;
    }

    public boolean isModified() {
        return modified;
    }

    public void setModified(boolean modified) {
        this.modified = modified;
    }

    private class ApplicationsTableModel extends AbstractTableModel {
        public final String[] COLUMNS = new String[] { "Name" };

        public int getColumnCount() {
            return COLUMNS.length;
        }

        @Override
        public String getColumnName(int column) {
            return COLUMNS[column];
        }

        public int getRowCount() {
            return appList.size();
        }

        public Object getValueAt(int rowIndex, int columnIndex) {
            AppCmpntParam appCmpntParam = appList.get(rowIndex);
            switch (columnIndex) {
            case 0:
                return appCmpntParam.getImpAs();
            }
            return null;
        }
    }
}