/**
* 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.fileChooser.FileChooserDescriptorFactory;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.ui.TextBrowseFolderListener;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import com.intellij.openapi.ui.ValidationInfo;
import com.intellij.openapi.vfs.VirtualFile;
import com.interopbridges.tools.windowsazure.*;
import com.microsoft.intellij.AzurePlugin;
import com.microsoft.intellij.ui.components.DefaultDialogWrapper;
import com.microsoft.intellij.ui.messages.AzureBundle;
import com.microsoft.intellij.ui.util.JdkSrvConfig;
import com.microsoft.intellij.ui.util.UIUtils;
import com.microsoft.intellij.util.PluginUtil;
import com.microsoft.intellij.util.WAHelper;
import com.microsoftopentechnologies.azurecommons.roleoperations.JdkSrvConfigUtilMethods;
import com.microsoftopentechnologies.azurecommons.roleoperations.WAServerConfUtilMethods;
import com.microsoftopentechnologies.azurecommons.storageregistry.StorageAccountRegistry;
import com.microsoftopentechnologies.azurecommons.storageregistry.StorageRegistryUtilMethods;
import com.microsoftopentechnologies.azurecommons.util.WAEclipseHelperMethods;
import org.jdesktop.swingx.JXHyperlink;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import java.awt.event.*;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import static com.microsoft.intellij.AzurePlugin.log;
import static com.microsoft.intellij.ui.messages.AzureBundle.message;
public class JdkServerPanel {
private final String AUTO = "auto";
private final int HTTP_PORT = 80;
private JPanel rootPanel;
private JPanel jdkSettings;
private JPanel serverSettings;
private JTabbedPane settingsPane;
private JCheckBox jdkCheckBox;
private TextFieldWithBrowseButton jdkPath;
private JRadioButton uploadLocalJdk;
private JRadioButton thirdPartyJdk;
private JComboBox thirdPartyJdkName;
private JRadioButton customDownloadJdk;
private JTextField jdkUrl;
private JComboBox storageAccountJdk;
private JTextField javaHome;
private JLabel lblJavaHome;
private JLabel lblNoteJavaHome;
//Server tab
private JCheckBox serverCheckBox;
private TextFieldWithBrowseButton serverPath;
private JComboBox serverType;
private JRadioButton thrdPrtSrvBtn;
private JRadioButton uploadLocalServer;
private JRadioButton customDownloadServer;
private JTextField serverUrl;
private JComboBox storageAccountServer;
private JTextField serverHomeDir;
private JXHyperlink accountsButton;
private JXHyperlink serverAccountsButton;
private JLabel jdkUrlLabel;
private JLabel storageAccountJdkLabel;
private JLabel lblHomeDir;
private JLabel lblDlNoteUrl;
private JLabel lblSelect;
private JLabel lblUrlSrv;
private JLabel lblDlNoteUrlSrv;
private JLabel lblKeySrv;
private JPanel applicationsSettings;
private JLabel lblNoteHomeDir;
private JComboBox thrdPrtSrvCmb;
private JLabel lblSrvPath;
private ApplicationsTab applicationsTab;
private final Project project;
private final WindowsAzureRole waRole;
private final WindowsAzureProjectManager waProjManager;
private boolean accepted = false;
private boolean srvAccepted = false;
private String jdkPrevName;
private final ArrayList<String> fileToDel = new ArrayList<String>();
private String finalSrvPath;
private WindowsAzureRoleComponentImportMethod finalImpMethod;
private String finalAsName;
private String finalJdkPath;
private boolean isManualUpdate = true;
private boolean modified;
private String srvPrevName;
public JdkServerPanel(Project project, WindowsAzureRole waRole, WindowsAzureProjectManager waProjManager) {
this.project = project;
this.waRole = waRole;
this.waProjManager = waProjManager;
applicationsTab.init(project, waProjManager, waRole, fileToDel);
applicationsTab.initAppTab();
init();
// preference page
if (waProjManager != null) {
initForPreference();
initJdkTab();
initServerTab();
} else {
initForWizard();
}
}
public int getSelectedIndex() {
return settingsPane.getSelectedIndex();
}
public void setSelectedIndex(int currentTab) {
settingsPane.setSelectedIndex(currentTab);
}
public JPanel getPanel() {
return rootPanel;
}
public boolean isModified() {
return modified || applicationsTab.isModified();
}
public void setModified(boolean modified) {
this.modified = modified;
applicationsTab.setModified(modified);
}
public ApplicationsTab getApplicationsTab() {
return applicationsTab;
}
public ArrayList<String> getFileToDel() {
return fileToDel;
}
public String getFinalJdkPath() {
return finalJdkPath;
}
public String getFinalSrvPath() {
return finalSrvPath;
}
public WindowsAzureRoleComponentImportMethod getFinalImpMethod() {
return finalImpMethod;
}
public String getFinalAsName() {
return finalAsName;
}
private void initJdkTab() {
// Check JDK is already enabled or not
// and if enabled show appropriate values on property page
try {
String jdkSrcPath = waRole.getJDKSourcePath();
if (jdkSrcPath == null) {
setEnableJDK(false);
setEnableDlGrp(false, false);
uploadLocalJdk.setSelected(true);
} else {
if (jdkSrcPath.isEmpty()) {
setEnableJDK(false);
} else {
setEnableJDK(true);
jdkPath.setText(jdkSrcPath);
}
String jdkName = waRole.getJDKCloudName();
// project may be using deprecated JDK, hence pass to method
showThirdPartyJdkNames(jdkName);
String jdkUrlValue = waRole.getJDKCloudURL();
// JDK download group
if (jdkUrl != null && !jdkUrlValue.isEmpty()) {
// JDK auto upload option configured
if (JdkSrvConfigUtilMethods.isJDKAutoUploadPrevSelected(waRole)) {
setEnableDlGrp(true, true);
// check for third party JDK
if (jdkName.isEmpty()) {
uploadLocalJdk.setSelected(true);
} else {
thirdPartyJdk.setSelected(true);
enableThirdPartyJdkCombo(true);
thirdPartyJdkName.setSelectedItem(jdkName);
/*
* License has already been accepted
* on wizard or property page previously.
*/
accepted = true;
jdkPrevName = jdkName;
}
} else {
// JDK deploy option configured
uploadLocalJdk.setSelected(false);
customDownloadJdk.setSelected(true);
setEnableDlGrp(true, false);
}
// Update URL text box
if (jdkUrlValue.equalsIgnoreCase(AUTO)) {
jdkUrlValue = JdkSrvConfig.AUTO_TXT;
}
jdkUrl.setText(jdkUrlValue);
// Update JAVA_HOME text box
if (waProjManager.getPackageType().equals(WindowsAzurePackageType.LOCAL)) {
javaHome.setText(waRole.getJDKCloudHome());
} else {
javaHome.setText(waRole.getRuntimeEnv(message("jvHome")));
}
// Update note below JDK URL text box
if (jdkSrcPath.isEmpty()) {
lblDlNoteUrl.setText(message("dlgDlNtLblUrl"));
} else {
String dirName = new File(jdkSrcPath).getName();
lblDlNoteUrl.setText(String.format(message("dlNtLblDir"), dirName));
}
// Update storage account combo box.
String jdkKey = waRole.getJDKCloudKey();
UIUtils.populateStrgNameAsPerKey(jdkKey, storageAccountJdk);
}
}
uploadLocalJdk.addActionListener(createUploadLocalJdkListener());
checkSDKPresenceAndEnable();
} catch (WindowsAzureInvalidProjectOperationException e) {
PluginUtil.displayErrorDialogAndLog(message("jdkPathErrTtl"), message("getJdkErrMsg"), e);
}
}
private void initServerTab() {
// Check Server is already enabled or not
// and if enabled show appropriate values on property page
try {
String srvName = waRole.getServerName();
if (srvName == null) {
setEnableServer(false);
setEnableDlGrpSrv(false, false);
enableApplicationTab(false);
} else {
String srvSrcPath = waRole.getServerSourcePath();
String thirdServerName = waRole.getServerCloudName();
serverCheckBox.setSelected(true);
setEnableServer(true);
isManualUpdate = false;
serverType.setSelectedItem(srvName);
serverPath.setText(srvSrcPath);
enableApplicationTab(true);
showThirdPartySrvNames(true, srvName, thirdServerName);
// Server download group
String srvUrl = waRole.getServerCloudURL();
if (srvUrl != null && !srvUrl.isEmpty()) {
// server auto upload option configured
if (JdkSrvConfigUtilMethods.isServerAutoUploadPrevSelected(waRole) || !thirdServerName.isEmpty()) {
if (thirdServerName.isEmpty()) {
uploadLocalServer.setSelected(true);
} else {
thrdPrtSrvBtn.setSelected(true);
enableThirdPartySrvCombo(true);
srvAccepted = true;
srvPrevName = thirdServerName;
}
setEnableDlGrpSrv(true, true);
if (!thirdServerName.isEmpty()) {
thrdPrtSrvCmb.setSelectedItem(thirdServerName);
}
} else {
// server deploy option configured
customDownloadServer.setSelected(true);
setEnableDlGrpSrv(true, false);
}
if (srvUrl.equalsIgnoreCase(AUTO)) {
srvUrl = JdkSrvConfig.AUTO_TXT;
}
serverUrl.setText(srvUrl);
// Update server home text box
if (waProjManager.getPackageType().equals(WindowsAzurePackageType.LOCAL)) {
serverHomeDir.setText(waRole.getServerCloudHome());
} else {
serverHomeDir.setText(waRole.getRuntimeEnv(waRole.getRuntimeEnvName(message("typeSrvHm"))));
}
// Update note below Server URL text box
if (srvSrcPath.isEmpty()) {
lblDlNoteUrlSrv.setText(message("dlgDlNtLblUrl"));
} else {
String dirName = new File(srvSrcPath).getName();
lblDlNoteUrlSrv.setText(String.format(message("dlNtLblDir"), dirName));
}
String srvKey = waRole.getServerCloudKey();
UIUtils.populateStrgNameAsPerKey(srvKey, storageAccountServer);
if (!thirdServerName.isEmpty()) {
String cldSrc = getThirdPartyServerCloudSrc();
// check if its latest server scenario then set storage account to (none)
if (!cldSrc.isEmpty()) {
// storageAccountServer.insertItemAt("(none)", 0);
}
}
}
}
checkSDKPresenceAndEnableServer();
} catch (WindowsAzureInvalidProjectOperationException e) {
PluginUtil.displayErrorDialogAndLog(message("srvErrTtl"), message("getSrvBothErrMsg"), e);
} finally {
isManualUpdate = true;
}
if (jdkCheckBox.isSelected() || thirdPartyJdk.isSelected() || customDownloadJdk.isSelected()) {
serverCheckBox.setEnabled(true);
}
if (!serverPath.getText().isEmpty()) {
enforceSameLocalCloudServer();
}
}
public void checkSDKPresenceAndEnable() {
String sdkVersion = WindowsAzureProjectManager.getLatestAzureVersionForSA();
if (sdkVersion == null || sdkVersion.isEmpty()) {
jdkCheckBox.setEnabled(false);
setEnableJDK(false);
}
}
public void checkSDKPresenceAndEnableServer() {
String sdkVersion = WindowsAzureProjectManager.getLatestAzureVersionForSA();
if ((sdkVersion == null || sdkVersion.isEmpty()) && !uploadLocalServer.isSelected()) {
enableLocalServerPathCmpnts(false);
}
}
// @Override
// public JComponent prepare(final WizardNavigationState state) {
// rootPanel.revalidate();
// state.FINISH.setEnabled(true);
// return rootPanel;
// }
public void init() {
accountsButton.setAction(createStorageAccountsAction(storageAccountJdk, JdkSrvConfig.JDK_TXT));
serverAccountsButton.setAction(createStorageAccountsAction(storageAccountServer, JdkSrvConfig.SRV_TXT));
uploadLocalServer.addActionListener(createUploadLocalServerListener());
customDownloadServer.addActionListener(createCustomDownloadServerListener());
// thirdPartyJdkName = new JComboBox(JdkSrvConfigListener.getThirdPartyJdkNames(true));
thirdPartyJdk.addActionListener(createThirdPartyJdkListener());
customDownloadJdk.addActionListener(createCustomDownloadJdkListener());
// uploadLocalJdk.setSelected(true);
showThirdPartyJdkNames("");
jdkUrl.getDocument().addDocumentListener(createJdkUrlListener());
storageAccountJdk.addItemListener(createStorageAccountJdkListener());
thirdPartyJdkName.addItemListener(createThirdPartyJdkNameListener());
// setEnableDlGrp(false, false);
thrdPrtSrvBtn.addActionListener(createThirdPartySrvListener());
thrdPrtSrvCmb.addItemListener(createthrdPrtSrvCmbListener());
setEnableDlGrpSrv(false, false);
storageAccountServer.addItemListener(createStorageAccountServerListener());
serverUrl.getDocument().addDocumentListener(createServerUrlListener());
checkSDKPresenceAndEnable();
settingsPane.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
if (isManualUpdate) {
if (!createAccLicenseAggDlg(true) && !((waProjManager == null || configureJdkCloudDeployment()))) {
try {
isManualUpdate = false;
settingsPane.setSelectedIndex(0);
} finally {
isManualUpdate = true;
}
}
if (!createAccLicenseAggDlg(false) && !((waProjManager == null || configureSrvCloudDeployment()))) {
try {
isManualUpdate = false;
settingsPane.setSelectedIndex(1);
} finally {
isManualUpdate = true;
}
}
}
}
});
}
public void initForWizard() {
jdkCheckBox.addItemListener(createJdkCheckBoxListener());
jdkPath.addActionListener(UIUtils.createFileChooserListener(jdkPath, null, FileChooserDescriptorFactory.createSingleFolderDescriptor()));
jdkPath.getTextField().getDocument().addDocumentListener(createJdkPathListener());
uploadLocalJdk.addActionListener(createUploadLocalJdkListener());
uploadLocalJdk.setSelected(true);
jdkChkBoxUnChecked();
serverPath.addBrowseFolderListener(new TextBrowseFolderListener(FileChooserDescriptorFactory.createSingleFolderDescriptor()) {
protected void onFileChoosen(@NotNull VirtualFile chosenFile) {
super.onFileChosen(chosenFile);
serBrowseBtnListener();
modifySrvText(waRole, message("dlNtLblDirSrv"));
modified = true;
}
});
serverCheckBox.addItemListener(createServerListener());
serverCheckBox.setSelected(false);
serverType.addItemListener(createServerTypeListener());
}
private void initForPreference() {
jdkPath.addFocusListener(createJdkPathPreferenceListener());
jdkCheckBox.addItemListener(createJdkCheckBoxPreferenceListener());
jdkPath.addBrowseFolderListener(new TextBrowseFolderListener(FileChooserDescriptorFactory.createSingleFolderDescriptor()) {
protected void onFileChoosen(@NotNull VirtualFile chosenFile) {
String oldTxt = jdkPath.getText();
super.onFileChosen(chosenFile);
String directory = jdkPath.getText();
if (directory != null && !directory.equalsIgnoreCase(oldTxt)) {
modified = true;
modifyJdkText(waRole, message("dlNtLblDir"));
}
}
});
serverPath.addFocusListener(createServerPathPreferenceListener());
serverCheckBox.addItemListener(createServerPreferenceListener());
serverType.addItemListener(createServerTypePreferenceListener());
serverPath.addBrowseFolderListener(new TextBrowseFolderListener(FileChooserDescriptorFactory.createSingleFolderDescriptor()) {
protected void onFileChoosen(@NotNull VirtualFile chosenFile) {
super.onFileChosen(chosenFile);
serBrowseBtnListener();
modifySrvText(waRole, message("dlNtLblDirSrv"));
enforceSameLocalCloudServer();
if (thrdPrtSrvBtn.isSelected()) {
String currentName = (String) thrdPrtSrvCmb.getSelectedItem();
if (!currentName.equalsIgnoreCase(srvPrevName)) {
srvAccepted = false;
srvPrevName = currentName;
}
}
modified = true;
}
});
serverCheckBox.setSelected(false);
}
private ItemListener createServerTypeListener() {
return new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (isManualUpdate && serverType.getSelectedItem() != null) {
enforceSameLocalCloudServer();
if (uploadLocalServer.isSelected()) {
updateServerHome(serverPath.getText());
} else if (thrdPrtSrvBtn.isSelected()) {
updateServerHomeForThirdParty();
String currentName = (String) thrdPrtSrvCmb.getSelectedItem();
if (!currentName.equalsIgnoreCase(srvPrevName)) {
srvAccepted = false;
srvPrevName = currentName;
}
} else if (customDownloadServer.isSelected()) {
if (serverUrl.getText().isEmpty()) {
updateServerHome(serverPath.getText());
} else {
modifySrvUrlText();
}
}
modified = true;
}
}
};
}
private ItemListener createServerTypePreferenceListener() {
return new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (isManualUpdate && serverType.getSelectedItem() != null) {
enforceSameLocalCloudServer();
if (uploadLocalServer.isSelected()) {
updateServerHome(serverPath.getText());
} else if (thrdPrtSrvBtn.isSelected()) {
updateServerHomeForThirdParty();
String currentName = (String) thrdPrtSrvCmb.getSelectedItem();
if (!currentName.equalsIgnoreCase(srvPrevName)) {
srvAccepted = false;
srvPrevName = currentName;
}
} else if (customDownloadServer.isSelected()) {
if (serverUrl.getText().isEmpty()) {
updateServerHome(serverPath.getText());
} else {
modifySrvUrlText();
}
}
modified = true;
}
}
};
}
private ItemListener createServerPreferenceListener() {
return new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (serverCheckBox.isSelected()) {
srvChkBoxChecked();
} else {
if (serverType.getSelectedItem() != null) {
// Remove server home settings
removeServerHomeSettings();
// Remove server setting
updateServer(null, null, AzurePlugin.cmpntFile);
srvChkBoxUnChecked();
}
}
modified = true;
}
};
}
private FocusListener createServerPathPreferenceListener() {
return new FocusListener() {
private String oldTxt = "";
@Override
public void focusGained(FocusEvent e) {
oldTxt = serverPath.getText();
}
@Override
public void focusLost(FocusEvent e) {
String path = serverPath.getText().trim();
if (!(serverType.getSelectedItem() == null || ((String) serverType.getSelectedItem()).isEmpty())
&& !serverPath.getText().equalsIgnoreCase(oldTxt)) {
File file = new File(path);
if (file.exists() && file.isDirectory()) {
// Server auto-detection
String serverName = WAEclipseHelperMethods.detectServer(file, WAHelper.getTemplateFile(AzureBundle.message("cmpntFileName")));
if (serverName != null) {
serverType.setSelectedItem(serverName);
} else {
String srvComboTxt = (String) serverType.getSelectedItem();
if (srvComboTxt != null && !srvComboTxt.isEmpty()) {
serverName = srvComboTxt;
}
}
updateServer(serverName, path, AzurePlugin.cmpntFile);
}
}
focusLostSrvText(path, message("dlNtLblDir"), message("dlgDlNtLblUrl"));
}
};
}
private FocusListener createJdkPathPreferenceListener() {
return new FocusListener() {
private String oldTxt = "";
@Override
public void focusGained(FocusEvent e) {
oldTxt = jdkPath.getText();
}
@Override
public void focusLost(FocusEvent e) {
String jdkPath = JdkServerPanel.this.jdkPath.getText();
focusLostJdkText(jdkPath);
}
};
}
private ItemListener createJdkCheckBoxPreferenceListener() {
return new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
modified = true;
if (jdkCheckBox.isSelected()) {
// populate third party JDKs whose status in not deprecated
jdkChkBoxChecked("");
} else {
jdkChkBoxUnChecked();
}
}
};
}
/**
* Sets the JDK.
*
* @throws WindowsAzureInvalidProjectOperationException
*/
private void handleJdkDirRemoval() throws WindowsAzureInvalidProjectOperationException {
// deleting JDK entry from approot
String oldJdkPath = waRole.getJDKSourcePath();
if (oldJdkPath != null && !oldJdkPath.isEmpty() && !fileToDel.contains("jdk")) {
fileToDel.add("jdk");
WindowsAzureRoleComponent cmp = getPrevCmpnt(message("typeJdkDply"));
if (cmp != null) {
finalJdkPath = cmp.getImportPath();
}
}
}
private void handleServerDirRemoval() throws WindowsAzureInvalidProjectOperationException {
String oldName = waRole.getServerName();
String oldPath = waRole.getServerSourcePath();
// Remove old server from approot
if (oldName != null && oldPath != null && !oldPath.isEmpty() && !fileToDel.contains("srv")) {
fileToDel.add("srv");
WindowsAzureRoleComponent cmp = getPrevCmpnt(message("typeSrvDply"));
if (cmp != null) {
finalSrvPath = cmp.getImportPath();
finalImpMethod = cmp.getImportMethod();
finalAsName = cmp.getDeployName();
}
}
}
/**
* Method removes server home settings,
* according to current package type.
* Method will get called on the event of
* check box uncheck.
*/
private void removeServerHomeSettings() {
try {
WAServerConfUtilMethods.removeServerHomeSettings(waRole, waProjManager);
} catch (Exception e) {
PluginUtil.displayErrorDialog(message("genErrTitle"), message("srvHomeErr"));
}
}
/**
* Method returns component object according to component type.
* If component not present then returns NULL.
*
* @param cmpntType
* @return WindowsAzureRoleComponent
*/
private WindowsAzureRoleComponent getPrevCmpnt(String cmpntType) {
WindowsAzureRoleComponent cmp = null;
try {
cmp = WAServerConfUtilMethods.getPrevCmpnt(cmpntType, waRole);
} catch (WindowsAzureInvalidProjectOperationException e) {
PluginUtil.displayErrorDialogAndLog(message("cmpntSetErrTtl"), message("cmpntgetErrMsg"), e);
}
return cmp;
}
/**
* Method updates server home,
* according to current package type.
* Method will get called when user click
* on OK button or tries to navigate to other page.
*
* @param srvHome
*/
private void updateServerHomeAsPerPackageType(String srvHome) {
try {
WAServerConfUtilMethods.updateServerHome(srvHome, waRole, waProjManager, serverPath.getText().trim(), getServerName(), AzurePlugin.cmpntFile);
} catch (Exception e) {
PluginUtil.displayErrorDialog(message("genErrTitle"), message("srvHomeErr"));
}
}
/**
* Updates server settings when UI controls change.
*
* @param newName
* @param newPath
* @param componentFile
*/
private void updateServer(String newName, String newPath, File componentFile) {
try {
String oldName = waRole.getServerName();
String oldPath = waRole.getServerSourcePath();
String path = newPath;
/*
* Trying to set server to same value,
* then don't do anything.
*/
if (newName != null && path != null && newName.equalsIgnoreCase(oldName) && path.equalsIgnoreCase(oldPath)) {
handleEndpointSettings(newName);
return;
}
// Remove old server from approot
if (oldName != null && !fileToDel.contains("srv")) {
fileToDel.add("srv");
WindowsAzureRoleComponent cmp = getPrevCmpnt(message("typeSrvDply"));
if (cmp != null) {
finalSrvPath = cmp.getImportPath();
finalImpMethod = cmp.getImportMethod();
finalAsName = cmp.getDeployName();
}
}
/*
* Trying to set server with name only.
* Consider scenario where user selected server type using combo box
* without selecting server directory path
* i.e. server path text box is empty.
*/
if (path == null || path.isEmpty()) {
path = message("dummySrvPath");
}
// Remove the current server if any
waRole.setServer(null, message("dummySrvPath"), componentFile);
// Add the new server if desired
/*
* If both name and path are null
* that means we don't want to set server
* and old server gets removed in previous step only.
*/
if (newName != null && path != null) {
handleEndpointSettings(newName);
waRole.setServer(newName, path, componentFile);
}
} catch (WindowsAzureInvalidProjectOperationException e) {
PluginUtil.displayErrorDialogAndLog(message("srvErrTtl"), message("setSrvNmErrMsg"), e);
}
}
private void handleEndpointSettings(String srvName) {
try {
String srvPriPort = WindowsAzureProjectManager.getHttpPort(srvName, AzurePlugin.cmpntFile);
// Check server's private port already used on role
int count = 0;
WindowsAzureEndpoint endptWithPort = null;
for (WindowsAzureEndpoint endpoint : waRole.getEndpoints()) {
String priPort = endpoint.getPrivatePort();
if (priPort != null && priPort.equalsIgnoreCase(srvPriPort)) {
count++;
endptWithPort = endpoint;
}
}
if (count == 0) {
// server's private port is not used
WindowsAzureEndpoint sslEndpt = waRole.getSslOffloadingInternalEndpoint();
WindowsAzureEndpoint stickyEndpt = waRole.getSessionAffinityInternalEndpoint();
if (sslEndpt != null) {
sslEndpt.setPrivatePort(srvPriPort);
} else if (stickyEndpt != null) {
stickyEndpt.setPrivatePort(srvPriPort);
} else {
checkForHttpElseAddEndpt(srvPriPort);
}
} else if (count == 1 && endptWithPort.getEndPointType().equals(WindowsAzureEndpointType.InstanceInput)) {
// one endpoint is using server's private port
checkForHttpElseAddEndpt(srvPriPort);
}
/*
* If two endpoints of type Input and InstanceInput
* are using server's private port then don't do anything
*/
} catch (WindowsAzureInvalidProjectOperationException e) {
PluginUtil.displayErrorDialogAndLog(message("srvErrTtl"), message("errSrvPort"), e);
}
}
private void checkForHttpElseAddEndpt(String srvPriPort) {
try {
WindowsAzureEndpoint httpEndpt = WAEclipseHelperMethods.findEndpointWithPubPortWithAuto(HTTP_PORT, waRole);
if (httpEndpt != null) {
httpEndpt.setPrivatePort(srvPriPort);
} else {
WindowsAzureRole httpRole = WAEclipseHelperMethods.findRoleWithEndpntPubPort(HTTP_PORT, waProjManager);
if (httpRole != null) {
PluginUtil.displayWarningDialog(message("cmhLblSrvCnfg"), String.format(message("srvPortWarn"), httpRole.getName()));
} else {
// create an endpoint
WAServerConfUtilMethods.addEndpt(srvPriPort, waRole);
}
}
} catch (WindowsAzureInvalidProjectOperationException e) {
PluginUtil.displayErrorDialogAndLog(message("srvErrTtl"), message("errSrvPort"), e);
}
}
/**
* Method is used when focus is lost
* from server directory text box.
*
* @param srvPath
* @param label
* @param labelNext
*/
public void focusLostSrvText(String srvPath, String label, String labelNext) {
File file = new File(srvPath);
if (customDownloadServer.isSelected() && !srvPath.isEmpty() && file.exists()) {
String dirName = file.getName();
lblDlNoteUrlSrv.setText(String.format(label, dirName));
} else {
lblDlNoteUrlSrv.setText(labelNext);
}
}
private DocumentListener createJdkPathListener() {
return new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
handleUpdate();
}
@Override
public void removeUpdate(DocumentEvent e) {
handleUpdate();
}
@Override
public void changedUpdate(DocumentEvent e) {
handleUpdate();
}
private void handleUpdate() {
modifyJdkText(waRole, message("dlNtLblDir"));
// handlePageComplete();
}
};
}
private DocumentListener createJdkUrlListener() {
return new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
handleUpdate();
}
@Override
public void removeUpdate(DocumentEvent e) {
handleUpdate();
}
@Override
public void changedUpdate(DocumentEvent e) {
handleUpdate();
}
private void handleUpdate() {
modified = true;
if (uploadLocalJdk.isSelected()) {
// no need to do any checks if auto upload is selected
return;
}
isManualUpdate = false;
String jdkPath = jdkUrl.getText().trim();
modifyUrlText(jdkPath, storageAccountJdk);
if (jdkPath.endsWith(".zip")) {
jdkPath = jdkPath.substring(0, jdkPath.indexOf(".zip"));
}
updateJDKHome(jdkPath);
isManualUpdate = true;
}
};
}
private DocumentListener createServerUrlListener() {
return new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
handleUpdate();
}
@Override
public void removeUpdate(DocumentEvent e) {
handleUpdate();
}
@Override
public void changedUpdate(DocumentEvent e) {
handleUpdate();
}
private void handleUpdate() {
modified = true;
// If auto upload is selected, no need to handle this case
if (uploadLocalServer.isSelected()) {
// handlePageComplete();
return;
}
String url = serverUrl.getText().trim();
isManualUpdate = false;
modifyUrlText(url, storageAccountServer);
/*
* update home directory for server accordingly
*/
if (url.endsWith(".zip")) {
url = url.substring(0, url.indexOf(".zip"));
}
String srvDirName = new File(url).getName();
serverHomeDir.setText("%DEPLOYROOT%\\" + srvDirName);
isManualUpdate = true;
}
};
}
private ActionListener createCustomDownloadJdkListener() {
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
modified = true;
if (customDownloadJdk.isSelected()) {
jdkUrl.setText(getUrl(storageAccountJdk));
jdkDeployBtnSelected();
serverCheckBox.setEnabled(true);
setEnableServer(true);
}
accepted = false;
}
};
}
private ItemListener createStorageAccountServerListener() {
return new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED && isManualUpdate) {
updateServerDlURL();
if (customDownloadServer.isSelected() || uploadLocalServer.isSelected()) {
updateServerHome(waRole);
} else if (thrdPrtSrvBtn.isSelected()) {
updateServerHomeForThirdParty();
}
}
}
};
}
private ActionListener createServerPathListener() {
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
modifySrvText(waRole, message("dlNtLblDirSrv"));
// handlePageComplete();
}
};
}
private ItemListener createthrdPrtSrvCmbListener() {
return new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
modified = true;
thirdPartySrvComboListener();
/*
* If server name is changed by user then license
* has to be accepted again.
*/
String currentName = (String) thrdPrtSrvCmb.getSelectedItem();
if (currentName == null || !currentName.equalsIgnoreCase(srvPrevName)) {
srvAccepted = false;
srvPrevName = currentName;
}
}
};
}
private ItemListener createThirdPartyJdkNameListener() {
return new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
modified = true;
thirdPartyComboListener();
/*
* If JDK name is changed by user then license
* has to be accepted again.
*/
String currentName = (String) thirdPartyJdkName.getSelectedItem();
if (currentName == null || !currentName.equalsIgnoreCase(jdkPrevName)) {
accepted = false;
jdkPrevName = currentName;
}
}
};
}
private ItemListener createStorageAccountJdkListener() {
return new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED && isManualUpdate) {
modified = true;
updateJDKDlURL();
// handlePageComplete();
}
}
};
}
private ActionListener createThirdPartyJdkListener() {
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
modified = true;
/*
* Check if third party radio button
* is already selected
* and user is selecting same radio button again
* then do not do any thing.
*/
if (!thirdPartyJdkName.isEnabled()) {
thirdPartyJdkBtnSelected(message("dlNtLblDir"));
jdkPrevName = (String) thirdPartyJdkName.getSelectedItem();
serverCheckBox.setEnabled(true);
accepted = false;
}
}
};
}
private ActionListener createThirdPartySrvListener() {
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
modified = true;
if (!thrdPrtSrvCmb.isEnabled()) {
thirdPartySrvBtnSelected();
srvPrevName = (String) thrdPrtSrvCmb.getSelectedItem();
}
}
};
}
public Map<String, String> getDeployPageValues() {
Map<String, String> values = new HashMap<String, String>();
// JDK
values.put("jdkChecked", String.valueOf(jdkCheckBox.isSelected()));
values.put("jdkLoc", jdkPath.getText());
// JDK download group
values.put("jdkDwnldChecked", String.valueOf(customDownloadJdk.isSelected()));
values.put("jdkAutoDwnldChecked", String.valueOf(uploadLocalJdk.isSelected()));
values.put("jdkThrdPartyChecked", String.valueOf(thirdPartyJdk.isSelected()));
values.put("jdkName", thirdPartyJdkName.getSelectedItem() == null ? "" : (String) thirdPartyJdkName.getSelectedItem());
values.put("jdkUrl", jdkUrl.getText());
values.put("jdkKey", AzureWizardModel.getAccessKey(storageAccountJdk));
values.put("javaHome", javaHome.getText());
// Server
values.put("serChecked", String.valueOf(serverCheckBox.isSelected()));
values.put("servername", (String) serverType.getSelectedItem());
values.put("serLoc", serverPath.getText());
values.put("tempFile", WAHelper.getTemplateFile(message("cmpntFileName")));
// Server download group
values.put("srvDwnldChecked", String.valueOf(customDownloadServer.isSelected()));
values.put("srvAutoDwnldChecked", String.valueOf(uploadLocalServer.isSelected()));
values.put("srvThrdPartyChecked", String.valueOf(thrdPrtSrvBtn.isSelected()));
values.put("srvThrdPartyName", thrdPrtSrvCmb.getSelectedItem() == null ? "" : (String) thrdPrtSrvCmb.getSelectedItem());
values.put("srvThrdAltSrc", getServerCloudAltSource());
values.put("srvUrl", serverUrl.getText());
values.put("srvKey", AzureWizardModel.getAccessKey(storageAccountServer));
values.put("srvHome", serverHomeDir.getText());
return values;
}
private ItemListener createJdkCheckBoxListener() {
return new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
modified = true;
try {
isManualUpdate = false;
if (jdkCheckBox.isSelected()) {
try {
// populate third party JDKs whose status in not deprecated
jdkChkBoxChecked("");
} catch (Exception e1) {
log(message("error"), e1);
}
} else {
jdkChkBoxUnChecked();
}
} finally {
isManualUpdate = true;
}
// handlePageComplete();
}
};
}
private Action createStorageAccountsAction(JComboBox combo, String tabName) {
return new AccountsAction(combo, tabName);
}
// @Override
public ValidationInfo doValidate() {
boolean isJdkValid = false;
// JDK emulator group
if (jdkCheckBox.isSelected()) {
if (jdkPath.getText().isEmpty()) {
return createValidationInfo(message("jdkPathErrMsg"), jdkPath);
} else {
File file = new File(jdkPath.getText());
if (!file.exists()) {
return createValidationInfo(message("dplWrngJdkMsg"), jdkPath);
}
}
}
// JDK download group
// cloud radio button selected
if (customDownloadJdk.isSelected()) {
// Validate JDK URL
String url = jdkUrl.getText();
if (url.isEmpty()) {
return createValidationInfo(message("dlgDlUrlErrMsg"), jdkUrl);
} else {
try {
new URL(url);
if (WAEclipseHelperMethods.isBlobStorageUrl(url)) {
String jdkHome = javaHome.getText().trim();
if (jdkHome.isEmpty()) {
return createValidationInfo(message("jvHomeErMsg"), javaHome);
} else {
isJdkValid = true;
}
} else {
return createValidationInfo(message("dlgDlUrlErrMsg"), jdkUrl);
}
} catch (MalformedURLException e) {
return createValidationInfo(message("dlgDlUrlErrMsg"), jdkUrl);
}
}
}
// No Validation needed if auto upload or
// third party JDK is selected
// local radio button selected
else {
isJdkValid = true;
}
// Server
if (isJdkValid && serverCheckBox.isSelected()) {
if (serverType.getSelectedItem() == null) {
return createValidationInfo(message("dplEmtSerMsg"), serverType);
} else if (uploadLocalServer.isSelected() && serverPath.getText().isEmpty()) {
return createValidationInfo(message("dplEmtSerPtMsg"), serverPath);
} else if (!serverPath.getText().isEmpty() && !(new File(serverPath.getText()).exists())) {
return createValidationInfo(message("dplWrngSerMsg"), serverPath);
} else {
// Server download group
if (customDownloadServer.isSelected()) {
String srvUrl = serverUrl.getText();
if (srvUrl.isEmpty()) {
return createValidationInfo(message("dlgDlUrlErrMsg"), serverUrl);
} else {
try {
// Validate Server URL
new URL(srvUrl);
if (WAEclipseHelperMethods.isBlobStorageUrl(srvUrl)) {
String srvHome = serverHomeDir.getText().trim();
if (srvHome.isEmpty()) {
return createValidationInfo(message("srvHomeErMsg"), serverHomeDir);
}
} else {
return createValidationInfo(message("dlgDlUrlErrMsg"), serverUrl);
}
} catch (MalformedURLException e) {
return createValidationInfo(message("dlgDlUrlErrMsg"), serverUrl);
}
}
}
// No validations if auto upload Server is selected
// local radio button selected
}
}
// myModel.getCurrentNavigationState().FINISH.setEnabled(true);
// myModel.getCurrentNavigationState().NEXT.setEnabled(true);
return null;
}
private ValidationInfo createValidationInfo(String message, JComponent component) {
// myModel.getCurrentNavigationState().FINISH.setEnabled(false);
// myModel.getCurrentNavigationState().NEXT.setEnabled(false);
return new ValidationInfo(message, component);
}
private void createUIComponents() {
applicationsTab = new ApplicationsTab();
applicationsSettings = applicationsTab.getPanel();
}
private class AccountsAction extends AbstractAction {
private JComboBox myCombo;
private String myTabName;
private AccountsAction(JComboBox myCombo, String tabName) {
super("Accounts...");
this.myCombo = myCombo;
this.myTabName = tabName;
}
public void actionPerformed(ActionEvent e) {
final DefaultDialogWrapper storageAccountDialog = new DefaultDialogWrapper(project, new StorageAccountPanel(project));
storageAccountDialog.show();
/*
* Update data in every case.
* No need to check which button (OK/Cancel)
* has been pressed as change is permanent
* even though user presses cancel
* according to functionality.
*/
/*
* store old value which was selected
* previously so that we can populate
* the same later.
*/
String cmbName = (String) myCombo.getSelectedItem();
String accPgName = storageAccountDialog.getSelectedValue();
String finalNameToSet;
/*
* If row selected on preference page.
* set combo box to it always.
* Else keep combo box's previous value
* as it is.
*/
if (accPgName != JdkSrvConfig.NONE_TXT && accPgName != JdkSrvConfig.AUTO_TXT) {
finalNameToSet = accPgName;
} else {
finalNameToSet = cmbName;
}
// update storage account combo box
myCombo = JdkSrvConfig.populateStrgAccComboBox(finalNameToSet, myCombo, myTabName, JdkSrvConfig.AUTO_TXT.equals(finalNameToSet));
}
}
private ActionListener createUploadLocalJdkListener() {
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
modified = true;
// auto upload radio button selected
try {
configureAutoUploadJDKSettings(message("dlNtLblDir"));
} catch (Exception ex) {
log(ex.getMessage());
}
if (!jdkCheckBox.isSelected()) {
setEnableServer(false);
setEnableDlGrpSrv(false, false);
}
// handlePageComplete();
accepted = false;
}
};
}
private ActionListener createUploadLocalJdkPreferenceListener() {
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
modified = true;
// auto upload radio button selected
try {
configureAutoUploadJDKSettings(message("dlNtLblDir"));
} catch (Exception ex) {
log(ex.getMessage());
}
if (!jdkCheckBox.isSelected()) {
setEnableServer(false);
setEnableDlGrpSrv(false, false);
try {
if (waRole.getServerName() != null && waRole.getServerSourcePath() != null) {
removeServerHomeSettings();
}
// Remove server setting
updateServer(null, null, AzurePlugin.cmpntFile);
} catch (WindowsAzureInvalidProjectOperationException ex) {
log(message("error", ex));
}
}
// handlePageComplete();
accepted = false;
}
};
}
private ItemListener createServerListener() {
return new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (serverCheckBox.isSelected()) {
srvChkBoxChecked();
} else {
srvChkBoxUnChecked();
}
// handlePageComplete(); todo:
}
};
}
private ActionListener createUploadLocalServerListener() {
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (uploadLocalServer.isSelected()) {
// server auto upload radio button selected
configureAutoUploadServerSettings();
}
// handlePageComplete();
}
};
}
private ActionListener createCustomDownloadServerListener() {
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (customDownloadServer.isSelected()) {
srvDeployBtnSelected();
/*
* server auto upload radio button unselected
* and deploy button selected.
*/
serverUrl.setText(getUrl(storageAccountServer));
}
// handlePageComplete();
}
};
}
/**
* Method is used when JDK check box is checked.
*
* @return
*/
public String jdkChkBoxChecked(String depJdkName) {
// Pre-populate with auto-discovered JDK if any
String jdkDefaultDir = null;
try {
jdkDefaultDir = WAEclipseHelperMethods.jdkDefaultDirectory(waRole.getJDKSourcePath());
} catch (WindowsAzureInvalidProjectOperationException e) {
log(message("error"), e);
}
jdkPath.setText(jdkDefaultDir);
setEnableJDK(true);
serverCheckBox.setEnabled(true);
if (uploadLocalJdk.isSelected()) {
configureAutoUploadJDKSettings(message("dlNtLblDir"));
} else if (thirdPartyJdk.isSelected()) {
thirdPartyJdkBtnSelected(message("dlNtLblDir"));
} else {
jdkDeployBtnSelected();
}
return jdkDefaultDir;
}
/**
* Method is used when JDK check box is unchecked.
*/
public void jdkChkBoxUnChecked() {
serverCheckBox.setSelected(false);
setEnableJDK(false);
if (uploadLocalJdk.isSelected()) {
setEnableServer(false);
setEnableDlGrpSrv(false, false);
configureAutoUploadJDKSettings(message("dlNtLblDir"));
} else {
// incase of third party and custom download just change text
uploadLocalJdk.setText(message("noJdkDplyLbl"));
}
}
/**
* Method is used when JDK directory text is modified.
*
* @param role
* @param label
*/
public void modifyJdkText(WindowsAzureRole role, String label) {
// update only for auto upload not for third party JDK.
if (uploadLocalJdk.isSelected()) {
jdkUrl.setText(cmbBoxListener(storageAccountJdk, jdkUrl.getText(), "JDK"));
updateJDKDlNote(label);
updateJDKHome(jdkPath.getText());
}
}
/**
* Enable or disable components of JDK group according to status.
*
* @param status
*/
public void setEnableJDK(boolean status) {
if (isManualUpdate) {
jdkCheckBox.setSelected(status);
}
jdkPath.setEnabled(status);
if (!status) {
jdkPath.setText("");
}
}
public void enableThirdPartySrvCombo(Boolean status) {
thrdPrtSrvCmb.setEnabled(status);
thrdPrtSrvBtn.setSelected(status);
}
/**
* Method decides whether to
* show third party JDK names or not.
*/
public void showThirdPartyJdkNames(String depJdkName) {
try {
String[] thrdPrtJdkArr = WindowsAzureProjectManager.getThirdPartyJdkNames(AzurePlugin.cmpntFile, depJdkName);
// check at least one element is present
if (thrdPrtJdkArr.length >= 1) {
thirdPartyJdkName.setModel(new DefaultComboBoxModel(thrdPrtJdkArr));
}
} catch (WindowsAzureInvalidProjectOperationException ex) {
log(ex.getMessage(), ex);
}
}
public void showThirdPartySrvNames(Boolean status, String localSrvName, String depSrvName) {
if (status) {
try {
String[] thrdPrtSrvArr;
if (localSrvName == null || localSrvName.isEmpty()) {
thrdPrtSrvArr = WindowsAzureProjectManager.getAllThirdPartySrvNames(AzurePlugin.cmpntFile, depSrvName);
} else {
thrdPrtSrvArr = WindowsAzureProjectManager.getThirdPartySrvNames(AzurePlugin.cmpntFile, localSrvName, depSrvName);
}
// check at least one element is present else disable
if (thrdPrtSrvArr.length >= 1) {
thrdPrtSrvCmb.setModel(new DefaultComboBoxModel(thrdPrtSrvArr));
String valueToSet = "";
if (localSrvName == null || localSrvName.isEmpty()) {
valueToSet = WindowsAzureProjectManager.getFirstDefaultThirdPartySrvName(AzurePlugin.cmpntFile);
} else {
valueToSet = WindowsAzureProjectManager.getDefaultThirdPartySrvName(AzurePlugin.cmpntFile, localSrvName);
}
if (valueToSet.isEmpty()) {
valueToSet = thrdPrtSrvArr[0];
}
thrdPrtSrvCmb.setSelectedItem(valueToSet);
}
} catch (WindowsAzureInvalidProjectOperationException e) {
AzurePlugin.log(e.getMessage());
}
} else {
thrdPrtSrvCmb.removeAllItems();
// getThrdPrtSrvCmb().setText("");
}
}
/**
* Listener for third party JDK name combo box.
* Updates URL and java home.
*/
public void thirdPartyComboListener() {
updateJDKDlURL();
try {
javaHome.setText(WindowsAzureProjectManager.getCloudValue((String) thirdPartyJdkName.getSelectedItem(), AzurePlugin.cmpntFile));
} catch (WindowsAzureInvalidProjectOperationException e) {
log(e.getMessage());
}
}
/**
* Listener for third party Server name combo box.
* Updates URL and java home.
*/
public void thirdPartySrvComboListener() {
updateServerDlURL();
try {
serverHomeDir.setText(WindowsAzureProjectManager.getThirdPartyServerHome((String) thrdPrtSrvCmb.getSelectedItem(), AzurePlugin.cmpntFile));
} catch (WindowsAzureInvalidProjectOperationException e) {
AzurePlugin.log(e.getMessage());
}
}
/**
* Method is used when focus is lost
* from JDK directory text box.
*
* @param jdkPath
*/
public void focusLostJdkText(String jdkPath) {
// Update note below JDK URL text box
File file = new File(jdkPath);
if (customDownloadJdk.isSelected() && !jdkPath.isEmpty() && file.exists()) {
String dirName = file.getName();
lblDlNoteUrl.setText(String.format(message("dlNtLblDir"), dirName));
} else {
lblDlNoteUrl.setText(message("dlgDlNtLblUrl"));
}
}
/**
* Method is used when JDK's deploy from custom download
* radio button is selected.
*/
public void jdkDeployBtnSelected() {
// deploy radio button selected
setEnableDlGrp(true, false);
updateJDKDlNote(message("dlNtLblDir"));
updateJDKHome(jdkPath.getText());
enableThirdPartyJdkCombo(false);
}
/**
* Method is used when third party JDK
* radio button is selected.
*
* @param label
*/
public void thirdPartyJdkBtnSelected(String label) {
setEnableDlGrp(true, true);
enableThirdPartyJdkCombo(true);
thirdPartyComboListener();
updateJDKDlNote(label);
}
/**
* Method is used when JDK URL text is modified.
*/
public void modifyUrlText(String url, JComboBox storageAccountCombo) {
/*
* Extract storage account name
* and service endpoint from URL
* entered by user.
*/
String nameInUrl = StorageRegistryUtilMethods.getAccNameFromUrl(url);
urlModifyListner(url, nameInUrl, storageAccountCombo);
}
/**
* Enable or disable components of
* JDK download group according to status.
*
* @param status
*/
public void setEnableDlGrp(boolean status, boolean applyAutoUlParams) {
if (jdkCheckBox.isSelected()) {
uploadLocalJdk.setText(message("autoDlJdkCldRdBtnLbl"));
} else {
uploadLocalJdk.setText(message("noJdkDplyLbl"));
showThirdPartyJdkNames("");
}
// URL
jdkUrlLabel.setEnabled(status);
lblDlNoteUrl.setEnabled(status);
jdkUrl.setEnabled(status);
// storage account combo
storageAccountJdk.setEnabled(status);
storageAccountJdkLabel.setEnabled(status);
// labels
lblJavaHome.setEnabled(status);
lblNoteJavaHome.setEnabled(status);
if (status && applyAutoUlParams) {
// Always disable and auto-generate JDK url and derive Java home.
jdkUrl.setEditable(false);
javaHome.setEnabled(!status);
} else {
jdkUrl.setEditable(true);
javaHome.setEnabled(status);
}
if (!status) {
jdkUrl.setText("");
storageAccountJdk.removeAllItems();
javaHome.setText("");
lblDlNoteUrl.setText(message("dlgDlNtLblUrl"));
thirdPartyJdkName.setEnabled(false);
} else {
JdkSrvConfig.populateStrgAccComboBox((String) storageAccountJdk.getSelectedItem(), storageAccountJdk, JdkSrvConfig.JDK_TXT, false);
}
}
/**
* Method is used when Server check box is checked.
*/
public void srvChkBoxChecked() {
setEnableServer(true);
try {
String[] servList = WindowsAzureProjectManager.getServerTemplateNames(AzurePlugin.cmpntFile);
Arrays.sort(servList);
serverType.setModel(new DefaultComboBoxModel(servList));
// select third party server button.
thrdPrtSrvBtn.setSelected(true);
if (uploadLocalServer.isSelected()) {
configureAutoUploadServerSettings();
} else if (thrdPrtSrvBtn.isSelected()) {
thirdPartySrvBtnSelected();
} else {
srvDeployBtnSelected();
}
checkSDKPresenceAndEnableServer();
} catch (WindowsAzureInvalidProjectOperationException e) {
AzurePlugin.log(e.getMessage());
}
}
/**
* Method is used when Server check box is unchecked.
*/
public void srvChkBoxUnChecked() {
setEnableServer(false);
applicationsTab.setEnable(false);
setEnableDlGrpSrv(false, false);
serverCheckBox.setEnabled(true);
}
/**
* Listener for server browse button it is used in file system button.
* It will open the file system location.
*/
protected void serBrowseBtnListener() {
utilSerBrowseBtnListener(message("dlNtLblDirSrv"));
// handlePageComplete();
}
/**
* Method is used when Server directory text is modified.
*
* @param role
* @param label
*/
public void modifySrvText(WindowsAzureRole role, String label) {
if (uploadLocalServer.isSelected()) {
serverUrl.setText(cmbBoxListener(storageAccountServer, serverUrl.getText(), JdkSrvConfig.SRV_TXT));
updateSrvDlNote();
updateServerHome(role);
}
}
private void enableSrvRdButtons() {
uploadLocalServer.setEnabled(true);
customDownloadServer.setEnabled(true);
uploadLocalServer.setSelected(true);
}
/**
* Enable or disable components of Server group according to status.
*
* @param status
*/
public void setEnableServer(boolean status) {
serverCheckBox.setEnabled(status);
serverType.setEnabled(status);
lblSelect.setEnabled(status);
serverUrl.setEnabled(status);
uploadLocalServer.setEnabled(status);
lblSrvPath.setEnabled(status);
serverPath.setEnabled(status);
// tblApp.setEnabled(status);
// btnAdd.setEnabled(status);
if (!status) {
// serCheckBtn.setSelection(status);
serverType.removeAllItems();
serverPath.setText("");
// btnRemove.setEnabled(status);
}
}
public void enableLocalServerPathCmpnts(boolean status) {
lblSrvPath.setEnabled(status);
serverPath.setEnabled(status);
}
/**
* Enable or disable components of
* Server download group according to status.
*
* @param status
*/
public void setEnableDlGrpSrv(boolean status, boolean applyAutoUlParams) {
thrdPrtSrvBtn.setEnabled(status);
customDownloadServer.setEnabled(status);
uploadLocalServer.setEnabled(status);
if (!serverCheckBox.isSelected()) {
showThirdPartySrvNames(true, "", "");
}
storageAccountServer.setEnabled(status);
lblKeySrv.setEnabled(status);
lblUrlSrv.setEnabled(status);
lblDlNoteUrlSrv.setEnabled(status);
lblHomeDir.setEnabled(status);
serverUrl.setEnabled(status);
lblNoteHomeDir.setEnabled(status);
if (status && applyAutoUlParams) {
serverUrl.setEnabled(false);
serverHomeDir.setEnabled(false);
storageAccountServer.setEnabled(false);
} else {
serverUrl.setEnabled(true);
serverHomeDir.setEnabled(status);
}
if (!status) {
thrdPrtSrvBtn.setSelected(false);
customDownloadServer.setSelected(false);
uploadLocalServer.setSelected(false);
serverUrl.setText("");
storageAccountServer.removeAllItems();
serverHomeDir.setText("");
lblDlNoteUrlSrv.setText(message("dlNtLblUrlSrv"));
enableThirdPartySrvCombo(false);
} else {
JdkSrvConfig.populateStrgAccComboBox((String) storageAccountServer.getSelectedItem(), storageAccountServer, JdkSrvConfig.SRV_TXT, false);
}
}
public void enableApplicationTab(boolean status) {
applicationsTab.setEnable(status);
}
/**
* Method used when server auto upload radio
* button selected.
*/
public void configureAutoUploadServerSettings() {
setEnableDlGrpSrv(true, true);
enableLocalServerPathCmpnts(true);
populateDefaultStrgAccForSrvAuto();
updateServerDlURL();
updateSrvDlNote();
updateServerHome(serverPath.getText());
enableThirdPartySrvCombo(false);
enableApplicationTab(true);
enforceSameLocalCloudServer();
}
/**
* Method used when JDK auto upload/no JDK deployment
* radio button selected.
*
* @param label
*/
public void configureAutoUploadJDKSettings(String label) {
if (jdkCheckBox.isSelected()) {
setEnableDlGrp(true, true);
updateJDKDlURL();
updateJDKDlNote(label);
updateJDKHome(jdkPath.getText());
enableThirdPartyJdkCombo(false);
} else {
setEnableDlGrp(false, false);
}
}
/**
* Enable or disable third party JDK
* related components.
*
* @param status
*/
public void enableThirdPartyJdkCombo(Boolean status) {
thirdPartyJdkName.setEnabled(status);
thirdPartyJdk.setSelected(status);
}
/**
* Method to update JDK cloud URL.
* Will get updated as per storage account
* combo box and radio button selection.
*/
public void updateJDKDlURL()/* throws Exception*/ {
if (isSASelectedForJDK()) {
jdkUrl.setText(cmbBoxListener(storageAccountJdk, jdkUrl.getText(), JdkSrvConfig.JDK_TXT));
} else if (uploadLocalJdk.isSelected()) {
jdkUrl.setText("");
}
}
/**
* Method to update server cloud URL.
* Will get updated as per storage account
* combo box and radio button selection.
*/
public void updateServerDlURL() {
boolean needsToBeUpdated = true;
if (thrdPrtSrvBtn.isSelected()) {
String cldSrc = getThirdPartyServerCloudSrc();
// check if its latest server scenario
// if yes then directly set cloud source value and storage account to (none)
if (!cldSrc.isEmpty()) {
needsToBeUpdated = false;
serverUrl.setText(cldSrc);
// storageAccountServer.insertItemAt("(none)", 0);
} else {
// storageAccountServer.insertItemAt("(auto)", 0);
}
}
if (needsToBeUpdated) {
if (isSASelectedForSrv()) {
serverUrl.setText(cmbBoxListener(storageAccountServer, serverUrl.getText(), JdkSrvConfig.SRV_TXT));
} else if (!customDownloadServer.isSelected()) {
serverUrl.setText("");
}
}
}
/**
* Returns cloud source value from download element as per third party server selected.
* @return
*/
public String getThirdPartyServerCloudSrc() {
String url = "";
if (thrdPrtSrvBtn.isSelected()) {
try {
url = WindowsAzureProjectManager.getThirdPartyServerCloudSrc((String) thrdPrtSrvCmb.getSelectedItem(), AzurePlugin.cmpntFile);
} catch (WindowsAzureInvalidProjectOperationException e) {
url = "";
}
}
return url;
}
/**
* Utility method to update note below text box for JDK.
*/
public void updateJDKDlNote(String label) {
// Update note below URL text box
String jdkPath = this.jdkPath.getText();
File file = new File(jdkPath);
if (!jdkPath.isEmpty() && file.exists()) {
String dirName = file.getName();
lblDlNoteUrl.setText(String.format(label, dirName));
}
}
/**
* Utility method to update note below text box for Server.
*/
public void updateSrvDlNote() {
// Update note below server URL text box
String srvPath = serverPath.getText();
File file = new File(srvPath);
if (!srvPath.isEmpty() && file.exists()) {
String dirName = file.getName();
lblDlNoteUrlSrv.setText(String.format(message("dlNtLblDir"), dirName));
} else {
lblDlNoteUrlSrv.setText(message("dlgDlNtLblUrl"));
}
}
/**
* Utility method to update java home value.
*/
public void updateJDKHome(String jdkPath) {
try {
String jdkHome = waRole.constructJdkHome(jdkPath, AzurePlugin.cmpntFile);
javaHome.setText(jdkHome);
} catch (WindowsAzureInvalidProjectOperationException e) {
log(e.getMessage());
}
}
/**
* Utility method to update server home value.
*/
public void updateServerHome(WindowsAzureRole role) {
// set server home directory text box value
String srvPath = serverPath.getText();
try {
String srvHome = role.constructServerHome((String) serverType.getSelectedItem(), srvPath, AzurePlugin.cmpntFile);
serverHomeDir.setText(srvHome);
} catch (WindowsAzureInvalidProjectOperationException e) {
log(e.getMessage());
}
}
/**
* Server directory browse button listener.
*
* @param label
* @return
*/
public void utilSerBrowseBtnListener(String label) {
try {
File serverDir = new File(serverPath.getText());
String oldServerType = (String) serverType.getSelectedItem();
// Update note below server URL text box
if (customDownloadServer.isSelected()) {
String dirName = serverDir.getName();
lblDlNoteUrlSrv.setText(String.format(label, dirName));
}
// Auto detect server family
String newServerType = WAEclipseHelperMethods.detectServer(serverDir, WAHelper.getTemplateFile(AzureBundle.message("cmpntFileName")));
isManualUpdate = false;
if (oldServerType == null || oldServerType.isEmpty()) {
// if server family is not selected already
if (newServerType != null && !newServerType.isEmpty()) {
serverType.setSelectedItem(newServerType);
} else {
PluginUtil.displayInfoDialog(message("srvTtl"), message("srvNoDetectionMsg"));
}
} else {
if (newServerType != null && !newServerType.isEmpty()) {
if (!oldServerType.equalsIgnoreCase(newServerType)) {
PluginUtil.displayInfoDialog(message("srvTtl"), String.format(message("srvWrngDetectionMsg"), newServerType));
serverType.setSelectedItem(newServerType);
}
} else {
PluginUtil.displayInfoDialog(message("srvTtl"), message("srvNoDetectionMsg"));
}
}
// String serverName = WAEclipseHelperMethods.detectServer(serverDir, WAHelper.getTemplateFile(AzureBundle.message("cmpntFileName")));
// isManualUpdate = false;
// if (serverName != null && !serverName.isEmpty()) {
// this.serverType.setSelectedItem(serverName);
// } else {
// serverType.setSelectedItem(null);
// }
} catch (Exception e) {
log(e.getMessage(), e);
} finally {
isManualUpdate = true;
}
}
/**
* API to determine if storage account is selected or not in JDK tab
*
* @return true if storage account is selected in JDK tab else false.
*/
public boolean isSASelectedForJDK() {
return !JdkSrvConfig.NONE_TXT.equals(storageAccountJdk.getSelectedItem());
}
/**
* API to determine if storage account is selected or not in Server tab
*
* @return true if storage account is selected in Server tab else false.
*/
public boolean isSASelectedForSrv() {
return !JdkSrvConfig.NONE_TXT.equals(storageAccountServer.getSelectedItem());
}
/**
* Method returns URL from storage registry
* according to account name selected in combo box.
*/
public static String getUrl(JComboBox combo) {
int index = combo.getSelectedIndex();
String url = "";
if (index > 0) {
url = StorageAccountRegistry.getStrgList().get(index - 1).getStrgUrl();
}
return url;
}
/**
* Method will check if JDK storage account combo box
* is set to valid value other than none
* then while selecting auto upload option
* for server, it will populate
* storage account name selected for JDK
* in server combo box.
*/
public void populateDefaultStrgAccForSrvAuto() {
int jdkIndex = storageAccountJdk.getSelectedIndex();
int srvIndex = storageAccountServer.getSelectedIndex();
/*
* JDK storage account combo box is enabled
* and account selected is other than (none).
* Also check storage account for server
* is not specified already then only change.
*/
if (jdkIndex > 0 && !(srvIndex > 0)) {
storageAccountServer.setSelectedIndex(jdkIndex);
}
}
/**
* Listener for URL text box's text change.
*
* @param url
* @param nameInUrl
* @param combo
* @return
*/
public void urlModifyListner(String url, String nameInUrl, JComboBox combo) {
combo.setSelectedItem(JdkSrvConfigUtilMethods.getNameToSet(url, nameInUrl, JdkSrvConfig.accNames));
}
/**
* Listener for storage account combo box.
*
* @param combo
* @param urlTxt
* @param tabControl
* @return
*/
public String cmbBoxListener(JComboBox combo, String urlTxt, String tabControl) {
int index = combo.getSelectedIndex();
String url = urlTxt.trim();
// check value is not none and auto.
if (index > 0) {
String newUrl = StorageAccountRegistry.getStrgList().get(index - 1).getStrgUrl();
// For JDK tab and auto upload option selected
if (tabControl != null && JdkSrvConfig.JDK_TXT.equals(tabControl)) {
if (uploadLocalJdk.isSelected()) {
urlTxt = JdkSrvConfigUtilMethods.prepareCloudBlobURL(jdkPath.getText(), newUrl);
return urlTxt;
} else if (thirdPartyJdk.isSelected()) {
try {
urlTxt = JdkSrvConfigUtilMethods.prepareUrlForThirdPartyJdk(thirdPartyJdkName.getSelectedItem().toString(), newUrl, AzurePlugin.cmpntFile);
return urlTxt;
} catch (Exception e) {
log(e.getMessage());
return "";
}
}
}
// For Server and auto upload option selected
if (tabControl != null && JdkSrvConfig.SRV_TXT.equals(tabControl) && uploadLocalServer.isSelected()) {
urlTxt = JdkSrvConfigUtilMethods.prepareCloudBlobURL(serverPath.getText(), newUrl);
return urlTxt;
} else if (tabControl != null && JdkSrvConfig.SRV_TXT.equals(tabControl) && thrdPrtSrvBtn.isSelected()) {
urlTxt = prepareUrlForThirdPartySrv((String) thrdPrtSrvCmb.getSelectedItem(), newUrl);
return urlTxt;
}
/*
* If URL is blank and new storage account selected
* then auto generate with storage accounts URL.
*/
if (url.isEmpty()) {
urlTxt = newUrl;
} else {
/*
* If storage account in combo box and URL
* are in sync then update
* corresponding portion of the URL
* with the URI of the newly selected storage account
* (leaving the container and blob name unchanged.
*/
String oldVal = StorageRegistryUtilMethods.getSubStrAccNmSrvcUrlFrmUrl(url);
String newVal = StorageRegistryUtilMethods.getSubStrAccNmSrvcUrlFrmUrl(newUrl);
urlTxt = url.replaceFirst(oldVal, newVal);
}
} else if (index == 0) {
// index = 0 means none or auto is selected
// For JDK tab and auto upload option selected
if (tabControl != null && JdkSrvConfig.JDK_TXT.equals(tabControl) && (uploadLocalJdk.isSelected() || thirdPartyJdk.isSelected())) {
urlTxt = JdkSrvConfig.AUTO_TXT;
return urlTxt;
}
// For Server and auto upload option selected
if (tabControl != null && JdkSrvConfig.SRV_TXT.equals(tabControl) && (uploadLocalServer.isSelected() || thrdPrtSrvBtn.isSelected())) {
urlTxt = JdkSrvConfig.AUTO_TXT;
return urlTxt;
}
}
return urlTxt;
}
public static String prepareUrlForThirdPartySrv(String srvName, String url) {
String finalUrl = "";
try {
finalUrl = JdkSrvConfigUtilMethods.prepareUrlForThirdPartySrv(srvName, url, AzurePlugin.cmpntFile);
} catch (Exception ex) {
AzurePlugin.log(ex.getMessage());
}
return finalUrl;
}
/**
* Method is used when server's deploy from download
* radio button is selected.
*/
public void srvDeployBtnSelected() {
// server deploy radio button selected
setEnableDlGrpSrv(true, false);
checkSDKPresenceAndEnableServer();
updateSrvDlNote();
updateServerHome(serverPath.getText());
enableThirdPartySrvCombo(false);
enableApplicationTab(true);
enforceSameLocalCloudServer();
}
/**
* Method is used when third party JDK
* radio button is selected.
*/
public void thirdPartySrvBtnSelected() {
setEnableDlGrpSrv(true, true);
checkSDKPresenceAndEnableServer();
enableThirdPartySrvCombo(true);
thirdPartySrvComboListener();
updateSrvDlNote();
enableApplicationTab(true);
}
/**
* Method is used when server URL text is modified.
*/
public void modifySrvUrlText() {
/*
* Extract storage account name
* and service endpoint from URL
* entered by user.
*/
String url = serverUrl.getText().trim();
String nameInUrl = StorageRegistryUtilMethods.getAccNameFromUrl(url);
urlModifyListner(url, nameInUrl, storageAccountServer);
/*
* update home directory for server accordingly
*/
if (WAEclipseHelperMethods.isBlobStorageUrl(url) && url.endsWith(".zip")) {
url = url.substring(0, url.indexOf(".zip"));
updateServerHome(url);
}
}
public boolean createAccLicenseAggDlg(boolean isForJdk) {
String name = "";
String url = "";
try {
if (isForJdk && !accepted && thirdPartyJdk.isSelected()) {
name = (String) thirdPartyJdkName.getSelectedItem();
url = WindowsAzureProjectManager.getLicenseUrl(name, AzurePlugin.cmpntFile);
accepted = showAcceptDialog(name, url);
return accepted;
} else if (!isForJdk && !srvAccepted && thrdPrtSrvBtn.isSelected()) {
name = (String) thrdPrtSrvCmb.getSelectedItem();
url = WindowsAzureProjectManager.getThirdPartyServerLicenseUrl(name, AzurePlugin.cmpntFile);
srvAccepted = showAcceptDialog(name, url);
return srvAccepted;
} else {
return true;
}
} catch (WindowsAzureInvalidProjectOperationException e) {
log(e.getMessage(), e);
return showAcceptDialog(name, url);
}
}
private boolean showAcceptDialog(String name, String url) {
StringBuilder sb = new StringBuilder("<html>").append(String.format(message("aggMsg"), name));
sb.append(String.format(message("aggLnk"), url, url)).append("</html>");
return Messages.showYesNoDialog(project, sb.toString(), message("aggTtl"), message("acptBtn"), "Cancel", null) == Messages.YES;
}
/**
* Method configures cloud deployment for JDK
* by saving URL, key and cloud method.
*
* @return
*/
private boolean configureJdkCloudDeployment() {
boolean isValid = true;
String jdkPath = this.jdkPath.getText().trim();
String jdkUrl = this.jdkUrl.getText().trim();
String javaHome = this.javaHome.getText().trim();
String jdkName = (String) thirdPartyJdkName.getSelectedItem();
try {
handleJdkDirRemoval();
handleServerDirRemoval();
WAServerConfUtilMethods.removeJavaHomeSettings(waRole, waProjManager);
waRole.setJDKCloudName(null);
waRole.setJDKSourcePath(null, AzurePlugin.cmpntFile, "");
if (!(!jdkCheckBox.isSelected() && uploadLocalJdk.isSelected())) {
if (thirdPartyJdk.isSelected()) {
waRole.setJDKSourcePath(jdkPath, AzurePlugin.cmpntFile, jdkName);
} else {
waRole.setJDKSourcePath(jdkPath, AzurePlugin.cmpntFile, "");
}
// JDK download group
// By default auto upload will be selected.
if (uploadLocalJdk.isSelected() || thirdPartyJdk.isSelected()) {
if (jdkUrl.equalsIgnoreCase(JdkSrvConfig.AUTO_TXT)) {
jdkUrl = AUTO;
}
if (thirdPartyJdk.isSelected()) {
waRole.setJDKCloudName(jdkName);
}
waRole.setJDKCloudUploadMode(WARoleComponentCloudUploadMode.auto);
}
waRole.setJDKCloudURL(jdkUrl);
waRole.setJDKCloudKey(AzureWizardModel.getAccessKey(storageAccountJdk));
updateJavaHomeAsPerPackageType(javaHome);
}
} catch (WindowsAzureInvalidProjectOperationException e) {
isValid = false;
PluginUtil.displayErrorDialog(message("genErrTitle"), message("urlKeySetErrMsg"));
}
return isValid;
}
/**
* Method configures cloud deployment for server
* by saving URL, key and cloud method.
*
* @return
*/
private boolean configureSrvCloudDeployment() {
boolean isValid = true;
String srvPath = serverPath.getText();
String srvUrl = serverUrl.getText();
String srvHome = serverHomeDir.getText();
String srvName = getServerName();
try {
WAServerConfUtilMethods.removeServerHomeSettings(waRole, waProjManager);
waRole.setServerCloudName(null);
waRole.setServer(null, "", AzurePlugin.cmpntFile);
if (serverCheckBox.isSelected()) {
if (!srvName.isEmpty()) {
// if its latest server scenario, then don't set cloudkey
// it should be public download
boolean setKey = true;
handleEndpointSettings(srvName);
waRole.setServer(srvName, srvPath, AzurePlugin.cmpntFile);
// JDK download group
// By default auto upload will be selected.
if (uploadLocalServer.isSelected() || thrdPrtSrvBtn.isSelected()) {
if (srvUrl.equalsIgnoreCase(JdkSrvConfig.AUTO_TXT)) {
srvUrl = AUTO;
}
if (thrdPrtSrvBtn.isSelected()) {
String altSrcUrl = getServerCloudAltSource();
if (altSrcUrl.isEmpty()) {
setKey = false;
} else {
waRole.setServerCldAltSrc(altSrcUrl);
waRole.setServerCloudUploadMode(WARoleComponentCloudUploadMode.auto);
}
waRole.setServerCloudName((String) thrdPrtSrvCmb.getSelectedItem());
waRole.setServerCloudValue(srvHome);
} else {
waRole.setServerCloudUploadMode(WARoleComponentCloudUploadMode.auto);
}
}
waRole.setServerCloudURL(srvUrl);
if (setKey) {
waRole.setServerCloudKey(AzureWizardModel.getAccessKey(storageAccountServer));
}
updateServerHomeAsPerPackageType(srvHome);
}
}
} catch (WindowsAzureInvalidProjectOperationException e) {
isValid = false;
PluginUtil.displayErrorDialog(message("genErrTitle"), message("urlKeySetErMsgSrv"));
}
return isValid;
}
/**
* Method updates java home,
* according to current package type.
* Method will get called when user click
* on OK button or tries to navigate to other page.
*
* @param javaHome
*/
private void updateJavaHomeAsPerPackageType(String javaHome) {
try {
WAServerConfUtilMethods.updateJavaHome(javaHome, waRole, waProjManager, jdkPath.getText().trim(), AzurePlugin.cmpntFile);
} catch (Exception e) {
PluginUtil.displayErrorDialog(message("genErrTitle"), message("jvHomeErr"));
}
}
/**
* Utility method to update server home value.
*/
public void updateServerHome(String srvPath) {
// set server home directory text box value
try {
String srvHome = WindowsAzureRole.constructServerHome((String) serverType.getSelectedItem(), srvPath, AzurePlugin.cmpntFile);
serverHomeDir.setText(srvHome);
} catch (WindowsAzureInvalidProjectOperationException e) {
AzurePlugin.log(e.getMessage());
}
}
public void updateServerHomeForThirdParty() {
// set server home directory text box value
try {
serverHomeDir.setText(WindowsAzureProjectManager.getThirdPartyServerHome((String) thrdPrtSrvCmb.getSelectedItem(), AzurePlugin.cmpntFile));
} catch (WindowsAzureInvalidProjectOperationException e) {
AzurePlugin.log(e.getMessage());
}
}
/**
* Gives server name selected by user.
*
* @return serverName
*/
public String getServerName() {
String serverName = "";
if (thrdPrtSrvBtn.isSelected()) {
try {
serverName = WindowsAzureProjectManager.getServerNameUsingThirdPartyServerName((String) thrdPrtSrvCmb.getSelectedItem(), AzurePlugin.cmpntFile);
} catch (WindowsAzureInvalidProjectOperationException e) {
serverName = "";
}
} else {
serverName = (String) serverType.getSelectedItem();
}
return serverName;
}
public String getServerCloudAltSource() {
String url = "";
if (thrdPrtSrvBtn.isSelected()) {
try {
url = WindowsAzureProjectManager.getThirdPartyServerCloudAltSrc((String) thrdPrtSrvCmb.getSelectedItem(), AzurePlugin.cmpntFile);
} catch (WindowsAzureInvalidProjectOperationException e) {
url = "";
}
}
return url;
}
public void enforceSameLocalCloudServer() {
try {
String srvName = (String) serverType.getSelectedItem();
String cloudSrv = "";
if (thrdPrtSrvBtn.isSelected()) {
cloudSrv = (String) thrdPrtSrvCmb.getSelectedItem();
}
if (cloudSrv.isEmpty()) {
/*
* user first selects a local server and
* third party radio button is not selected.
*/
populateServerNames(srvName);
} else {
if (WindowsAzureProjectManager.checkCloudAndLocalFamilyAreEqual(AzurePlugin.cmpntFile, srvName, cloudSrv)) {
/*
* user first selects the cloud server
* and then a local server that is compatible with cloud server.
*/
showThirdPartySrvNames(true, srvName, "");
thrdPrtSrvCmb.setSelectedItem(cloudSrv);
} else {
/*
* user first selects the cloud server
* and then a local server that is different from cloud server.
*/
populateServerNames(srvName);
if (thrdPrtSrvCmb.getItemCount() <= 0) {
// if no third party servers available
uploadLocalServer.setSelected(true);
configureAutoUploadServerSettings();
} else {
thirdPartySrvBtnSelected();
}
}
}
} catch (WindowsAzureInvalidProjectOperationException e) {
AzurePlugin.log(e.getMessage());
}
}
private void populateServerNames(String srvName) {
showThirdPartySrvNames(false, "", "");
showThirdPartySrvNames(true, srvName, "");
if (thrdPrtSrvCmb.getItemCount() <= 0) {
// if no third party servers available
enableThirdPartySrvCombo(false);
thrdPrtSrvBtn.setEnabled(false);
} else {
thrdPrtSrvBtn.setEnabled(true);
}
}
public void apply() throws ConfigurationException {
boolean isJdkValid = true;
boolean isSrvValid = true;
// Validation for JDK
if (jdkCheckBox.isSelected()) {
if (jdkPath.getText().isEmpty()) {
throw new ConfigurationException(message("jdkPathErrMsg"), message("jdkPathErrTtl"));
} else {
File file = new File(jdkPath.getText());
if (!file.exists() || !file.isDirectory()) {
throw new ConfigurationException(message("jdkPathErrMsg"), message("jdkPathErrTtl"));
}
}
}
// JDK download group
// If scenario is "No deployment" then no validation
if (!(!jdkCheckBox.isSelected() && uploadLocalJdk.isSelected())) {
String jdkUrl = this.jdkUrl.getText().trim();
if (jdkUrl.isEmpty()) {
throw new ConfigurationException(message("dlgDlUrlErrMsg"), message("dlgDlUrlErrTtl"));
} else {
Boolean isUrlValid = false;
// JDK auto upload or third party option selected.
if (uploadLocalJdk.isSelected() || thirdPartyJdk.isSelected()) {
if (jdkUrl.equalsIgnoreCase(JdkSrvConfig.AUTO_TXT)) {
jdkUrl = AUTO;
}
isUrlValid = true;
} else {
// JDK cloud option selected
try {
new URL(jdkUrl);
if (WAEclipseHelperMethods.isBlobStorageUrl(jdkUrl)) {
isUrlValid = true;
} else {
throw new ConfigurationException(message("dlgDlUrlErrMsg"), message("dlgDlUrlErrTtl"));
}
} catch (MalformedURLException e) {
throw new ConfigurationException(message("dlgDlUrlErrMsg"), message("dlgDlUrlErrTtl"));
}
}
if (isUrlValid) {
String javaHome = this.javaHome.getText().trim();
if (javaHome.isEmpty()) {
throw new ConfigurationException(message("jvHomeErMsg"), message("genErrTitle"));
} else {
boolean tempAccepted = true;
if (thirdPartyJdk.isSelected() && !accepted) {
tempAccepted = createAccLicenseAggDlg(true);
accepted = tempAccepted;
}
if (tempAccepted) {
isJdkValid = configureJdkCloudDeployment();
} else {
isJdkValid = false;
}
}
} else {
isJdkValid = false;
}
}
} else {
isJdkValid = configureJdkCloudDeployment();
}
if (!isJdkValid) {
throw new ConfigurationException(message("error"), message("jdkErrTtl"));
}
// Validation for Server
if (serverCheckBox.isSelected()) {
if (serverType.getSelectedItem() == null || ((String) serverType.getSelectedItem()).isEmpty()) {
throw new ConfigurationException(message("dplEmtSerMsg"), message("srvErrTtl"));
} else if (uploadLocalServer.isSelected() && serverPath.getText().isEmpty()) {
throw new ConfigurationException(message("dplWrngSerMsg"), message("srvErrTtl"));
} else if (!serverPath.getText().isEmpty() && !(new File(serverPath.getText()).exists())) {
throw new ConfigurationException(message("dplWrngSerMsg"), message("srvErrTtl"));
} else {
// Validate Server URL
String srvUrl = serverUrl.getText().trim();
if (srvUrl.isEmpty()) {
throw new ConfigurationException(message("dlgDlUrlErrMsg"), message("dlgDlUrlErrTtl"));
} else {
Boolean isSrvUrlValid = false;
// Server auto upload option selected.
if (uploadLocalServer.isSelected() || thrdPrtSrvBtn.isSelected()) {
if (srvUrl.equalsIgnoreCase(JdkSrvConfig.AUTO_TXT)) {
srvUrl = AUTO;
}
isSrvUrlValid = true;
} else {
// Server cloud option selected
try {
new URL(srvUrl);
if (WAEclipseHelperMethods.isBlobStorageUrl(srvUrl)) {
isSrvUrlValid = true;
} else {
throw new ConfigurationException(message("dlgDlUrlErrMsg"), message("dlgDlUrlErrTtl"));
}
} catch (MalformedURLException e) {
throw new ConfigurationException(message("dlgDlUrlErrMsg"), message("dlgDlUrlErrTtl"));
}
}
if (isSrvUrlValid) {
String srvHome = serverHomeDir.getText().trim();
if (srvHome.isEmpty()) {
throw new ConfigurationException(message("srvHomeErMsg"), message("genErrTitle"));
} else {
boolean tempAccepted = true;
if (thrdPrtSrvBtn.isSelected() && !srvAccepted) {
tempAccepted = createAccLicenseAggDlg(false);
srvAccepted = tempAccepted;
}
if (tempAccepted) {
isSrvValid = configureSrvCloudDeployment();
} else {
isSrvValid = false;
}
}
} else {
isSrvValid = false;
}
}
}
} else {
isSrvValid = configureSrvCloudDeployment();
}
if (!isSrvValid) {
throw new ConfigurationException(message("error"), message("srvErrTtl"));
}
}
}