/** * 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.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.fileChooser.FileChooser; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.Consumer; import com.microsoftopentechnologies.intellij.helpers.LinkListener; import com.microsoftopentechnologies.intellij.helpers.UIHelper; import com.microsoftopentechnologies.intellij.helpers.azure.AzureRestAPIManager; import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; public class ImportSubscriptionForm extends JDialog { private JPanel mainPanel; private JButton browseButton; private JButton cancelButton; private JTextField txtFile; private JButton importButton; private JLabel lblDownload; private JLabel lblPolicy; public ImportSubscriptionForm() { lblPolicy.addMouseListener(new LinkListener("http://msdn.microsoft.com/en-us/vstudio/dn425032.aspx")); lblDownload.addMouseListener(new LinkListener("http://go.microsoft.com/fwlink/?LinkID=301775")); this.setResizable(false); this.setModal(true); this.setTitle("Import Microsoft Azure Subscriptions"); this.setContentPane(mainPanel); final ImportSubscriptionForm form = this; mainPanel.getRootPane().setDefaultButton(null); browseButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { FileChooserDescriptor fileChooserDescriptor = new FileChooserDescriptor(true, false, false, false, false, false) { @Override public boolean isFileVisible(VirtualFile file, boolean showHiddenFiles) { try { return file.isDirectory() || (file.getExtension() != null && file.getExtension().equals("publishsettings")); } catch (Throwable t) { return super.isFileVisible(file, showHiddenFiles); } } @Override public boolean isFileSelectable(VirtualFile file) { return (file.getExtension() != null && file.getExtension().equals("publishsettings")); } }; fileChooserDescriptor.setTitle("Choose Subscriptions File"); FileChooser.chooseFile(fileChooserDescriptor, null, null, new Consumer<VirtualFile>() { @Override public void consume(VirtualFile virtualFile) { if (virtualFile != null) { txtFile.setText(virtualFile.getPath()); importButton.setEnabled(true); mainPanel.getRootPane().setDefaultButton(importButton); ApplicationManager.getApplication().invokeLater(new Runnable() { @Override public void run() { importButton.requestFocus(); } }); } } }); } }); cancelButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { form.setVisible(false); form.dispose(); } }); importButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { if (new File(txtFile.getText()).exists()) { try { form.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); AzureRestAPIManager.getManager().loadSubscriptionFile(txtFile.getText()); if (form.onSubscriptionLoaded != null) form.onSubscriptionLoaded.run(); form.setCursor(Cursor.getDefaultCursor()); form.setVisible(false); form.dispose(); } catch (Throwable e) { form.setCursor(Cursor.getDefaultCursor()); UIHelper.showException("Error: " + e.getMessage(), e); } } else { UIHelper.showException("The specified Subscriptions File does not exist.", null, "Invalid Subscriptions File Path", false, false); } } }); DocumentListener documentListener = new DocumentListener() { @Override public void insertUpdate(DocumentEvent e) { importButton.setEnabled(txtFile.getText() != null && !txtFile.getText().trim().isEmpty()); } @Override public void removeUpdate(DocumentEvent e) { importButton.setEnabled(txtFile.getText() != null && !txtFile.getText().trim().isEmpty()); } @Override public void changedUpdate(DocumentEvent e) { importButton.setEnabled(txtFile.getText() != null && !txtFile.getText().trim().isEmpty()); } }; txtFile.getDocument().addDocumentListener(documentListener); importButton.setEnabled(false); } private Runnable onSubscriptionLoaded; public void setOnSubscriptionLoaded(Runnable onSubscriptionLoaded) { this.onSubscriptionLoaded = onSubscriptionLoaded; } }