websitepanel/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx.cs
omara_vworks a2beec7fe4 Commit Contribution from Helicon
Includes:

- complete re-write of Web Application Gallery
- Addition of Web PI Installer in Server module
2012-07-19 13:16:33 -04:00

569 lines
19 KiB
C#

// Copyright (c) 2012, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Text;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using WebsitePanel.Server;
using WebsitePanel.Providers;
namespace WebsitePanel.Portal
{
public partial class ServersEditWebPlatformInstaller : WebsitePanelModuleBase
{
protected const string _wpiLogsDirViewStateKey = "WPI_LOGS_DIR";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
try
{
ES.Services.Servers.InitWPIFeeds(PanelRequest.ServerId);
}
catch
{
ProductsPanel.Visible = false;
keywordsList.Visible = false;
SearchPanel.Visible = false;
InstallButtons1.Visible = false;
InstallButtons2.Visible = false;
ShowWarningMessage("No products available. Please enable Web Platfrom Installer feeds in System Settings.");
return;
}
ProgressAnimation.ImageUrl = PortalUtils.GetThemedImage("indicator_medium.gif");
ViewState["SearchResultShown"] = false;
BindWpiProducts();
string message = UpdateProgress();
if (!string.IsNullOrEmpty(message))
{
ShowProgressPanel();
}
}
}
private void BindWpiProducts()
{
try
{
keywordsList.Items.Clear();
List<WPIKeyword> keywords = new List<WPIKeyword>(ES.Services.Servers.GetWPIKeywords(PanelRequest.ServerId));
keywords.Add(new WPIKeyword("Show installed", "Show Installed"));
keywordsList.DataSource = keywords;
keywordsList.DataTextField = "Text";
keywordsList.DataValueField = "ID";
keywordsList.DataBind();
if (keywordsList.Items.Count > 0)
{
keywordsList.Items[0].Attributes["class"] = "selected";
}
gvWpiProducts.DataSource = FilterInstaledProducts(ES.Services.Servers.GetWPIProducts(PanelRequest.ServerId, null, SelectedKeywordValue));
gvWpiProducts.DataBind();
}
catch (Exception ex)
{
ShowErrorMessage("SERVER_GET_WIN_SERVICES", ex);
return;
}
}
private string SelectedKeywordValue
{
get
{
return IsShowInstalledPseudoKeywordSelected ? null : keywordsList.SelectedValue;
}
}
private bool IsShowInstalledPseudoKeywordSelected
{
get { return keywordsList.SelectedIndex == keywordsList.Items.Count - 1; }
}
private ArrayList GetProductsToInstallList()
{
if (ViewState["wpiProductsForInstall"] != null)
{
return (ArrayList)ViewState["wpiProductsForInstall"];
}
return new ArrayList();
}
private void SetProductsToInstallList(ArrayList wpiProductsForInstall)
{
ViewState["wpiProductsForInstall"] = wpiProductsForInstall;
}
private void ShowProductsGrid()
{
ProductsPanel.Visible = true;
keywordsList.Visible = true;
SearchPanel.Visible = true;
InstallButtons1.Visible = true;
InstallButtons2.Visible = true;
NoProductsSelectedPanel.Visible = false;
InstallPanel.Visible = false;
AceptDEclineButtons.Visible = false;
ProgressPanel.Visible = false;
ProgressTimer.Enabled = false;
InstallCompletedPanel.Visible = false;
ProductsPanel.Update();
InstallPanel.Update();
ProgressPanel.Update();
}
private void ShowNoProductsSelectedPanel()
{
ProductsPanel.Visible = false;
keywordsList.Visible = false;
SearchPanel.Visible = false;
InstallButtons1.Visible = false;
InstallButtons2.Visible = false;
NoProductsSelectedPanel.Visible = true;
InstallPanel.Visible = false;
AceptDEclineButtons.Visible = false;
ProgressPanel.Visible = false;
ProgressTimer.Enabled = false;
InstallCompletedPanel.Visible = false;
ProductsPanel.Update();
InstallPanel.Update();
ProgressPanel.Update();
}
private void ShowSelectedProducts()
{
ProductsPanel.Visible = false;
keywordsList.Visible = false;
SearchPanel.Visible = false;
InstallButtons1.Visible = false;
InstallButtons2.Visible = false;
ProgressPanel.Visible = false;
ProgressTimer.Enabled = false;
InstallCompletedPanel.Visible = false;
InstallPanel.Visible = true;
AceptDEclineButtons.Visible = true;
ProductsPanel.Update();
InstallPanel.Update();
ProgressPanel.Update();
}
private void ShowProgressPanel()
{
ProductsPanel.Visible = false;
keywordsList.Visible = false;
SearchPanel.Visible = false;
InstallButtons1.Visible = false;
InstallButtons2.Visible = false;
InstallPanel.Visible = false;
AceptDEclineButtons.Visible = false;
InstallCompletedPanel.Visible = false;
ProgressPanel.Visible = true;
ProgressTimer.Enabled = true;
ProductsPanel.Update();
InstallPanel.Update();
ProgressPanel.Update();
}
protected void gvWpiProducts_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gvWpiProducts.PageIndex = ((System.Web.UI.WebControls.GridViewPageEventArgs)e).NewPageIndex;
if ((bool)ViewState["SearchResultShown"])
{
gvWpiProducts.DataSource = GetWpiProductsFiltered();
}
else
{
gvWpiProducts.DataSource = FilterInstaledProducts(ES.Services.Servers.GetWPIProducts(PanelRequest.ServerId, null, SelectedKeywordValue));
}
gvWpiProducts.DataBind();
}
protected void gvWpiProducts_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "WpiAdd")
{
((Button)e.CommandSource).Text = "- remove";
((Button)e.CommandSource).CommandName = "WpiRemove";
ArrayList wpiProductsForInstall = GetProductsToInstallList();
wpiProductsForInstall.Add(e.CommandArgument.ToString());
SetProductsToInstallList(wpiProductsForInstall);
}
if (e.CommandName == "WpiRemove")
{
((Button)e.CommandSource).Text = "+ add";
((Button)e.CommandSource).CommandName = "WpiAdd";
ArrayList wpiProductsForInstall = GetProductsToInstallList();
wpiProductsForInstall.Remove(e.CommandArgument.ToString());
SetProductsToInstallList(wpiProductsForInstall);
}
}
private void UpdateProductsByKeyword()
{
gvWpiProducts.DataSource = FilterInstaledProducts(
ES.Services.Servers.GetWPIProducts(PanelRequest.ServerId, null, SelectedKeywordValue)
);
gvWpiProducts.DataBind();
}
protected void keywordsList_SelectedIndexChanged(object sender, EventArgs e)
{
gvWpiProducts.PageIndex = 0;
keywordsList.SelectedItem.Attributes["class"] = "selected";
searchBox.Text = "";
UpdateProductsByKeyword();
}
protected void btnInstall_Click(object sender, EventArgs e)
{
string[] productsToInstall = (string[]) GetProductsToInstallList().ToArray(typeof (string));
if (null == productsToInstall || productsToInstall.Length == 0)
{
ShowNoProductsSelectedPanel();
}
else
{
// get dependencies and show it
gvWpiInstall.DataSource = ES.Services.Servers.GetWPIProductsWithDependencies(PanelRequest.ServerId, productsToInstall);
gvWpiInstall.DataBind();
ShowSelectedProducts();
}
}
protected void btnDecline_Click(object sender, EventArgs e)
{
ShowProductsGrid();
}
private IAsyncResult WPIInstallationResult;
protected void btnAccept_Click(object sender, EventArgs e)
{
WPIInstallationResult = ES.Services.Servers.BeginInstallWPIProducts(
PanelRequest.ServerId,
(string[])GetProductsToInstallList().ToArray(typeof(string)),
null,
null
);
ShowProgressPanel();
UpdateProgress();
}
private string UpdateProgress()
{
try
{
string wpiLogsDir = ViewState[_wpiLogsDirViewStateKey] as string;
if (string.IsNullOrEmpty(wpiLogsDir))
{
wpiLogsDir = ES.Services.Servers.WpiGetLogFileDirectory(PanelRequest.ServerId);
ViewState[_wpiLogsDirViewStateKey] = wpiLogsDir;
}
}
catch
{
//
}
string message = ES.Services.Servers.GetWPIStatus(PanelRequest.ServerId);
if (!string.IsNullOrEmpty(message))
{
ProgressMessage.Text = message.Replace("\n", "<br/>");
}
else
{
//ProgressMessage.Text = "please wait...";
}
return message;
}
protected void ProgressTimerTick(object sender, EventArgs e)
{
string message = UpdateProgress();
if (string.IsNullOrEmpty(message))
{
ShowInstallCompletedPanel();
//ProgressTimer.Enabled = false;
}
else if (message.IndexOf("failed", StringComparison.OrdinalIgnoreCase) > 0)
{
// some installation failed
ShowInstallFailedPanel();
}
}
private void ShowInstallFailedPanel()
{
ProgressMessagePanel.Visible = true;
InstallCompletedPanel.Visible = true;
ProgressAnimation.Style["display"] = "none";
CancelInstall.Visible = false;
LabelInstallationFailed.Visible = true;
LabelInstallationSuccess.Visible = false;
ShowLogButton();
}
private void ShowInstallCompletedPanel()
{
if (!LabelInstallationFailed.Visible)
{
ProgressMessagePanel.Visible = false;
}
InstallCompletedPanel.Visible = true;
ProgressAnimation.Style["display"] = "none";
if (!InstalledProductsList.Visible)
{
string[] productsToInstall = (string[]) GetProductsToInstallList().ToArray(typeof (string));
foreach (string product in productsToInstall)
{
InstalledProductsList.Items.Add(new ListItem(product));
}
InstalledProductsList.Visible = true;
}
ShowLogButton();
}
private void ShowLogButton()
{
string wpiLogsDir = ViewState[_wpiLogsDirViewStateKey] as string;
if (!string.IsNullOrEmpty(wpiLogsDir))
{
ShowLogsButton.Visible = true;
}
}
protected void gvWpiInstall_RowDataBound(object sender, GridViewRowEventArgs e)
{
WPIProduct p = (WPIProduct)e.Row.DataItem;
if (p != null)
{
Label labelFileSize = (Label)e.Row.FindControl("downloadSize");
if (p.FileSize == 0 )
{
if (labelFileSize != null)
{
labelFileSize.Visible = false;
}
}
else
{
if (labelFileSize != null)
{
labelFileSize.Text += " " + p.FileSize + " Kb";
}
}
if (string.IsNullOrEmpty( p.EulaUrl ) )
{
HyperLink hl = (HyperLink)e.Row.FindControl("eulaLink");
if (hl != null)
{
hl.Visible = false;
}
}
if (string.IsNullOrEmpty( p.DownloadedLocation ) )
{
Label label = (Label)e.Row.FindControl("labelDownloaded");
if (label != null)
{
label.Visible = false;
}
}
}
}
protected void BackToGalleryButtonClick(object sender, EventArgs e)
{
Response.Redirect(EditUrl("ServerID", PanelRequest.ServerId.ToString(), "edit_platforminstaller"));
}
protected void CacnelInstallButtonClick(object sender, EventArgs e)
{
ES.Services.Servers.CancelInstallWPIProducts(PanelRequest.ServerId);
ProgressMessage.Text = "Canceling...";
LabelInstallationSuccess.Text = "Installation canceled";
}
protected void NoProductsBackButtonClick(object sender, EventArgs e)
{
ShowProductsGrid();
}
protected string IsAddedText(string productId)
{
if ( GetProductsToInstallList().Contains(productId) )
{
return "- remove";
}
else
{
return "+ add";
}
}
protected void btnCancel_Click(object sender, EventArgs e)
{
Response.Redirect(EditUrl("ServerID", PanelRequest.ServerId.ToString(), "edit_server"));
}
protected void SearchButton_Click(object sender, EventArgs e)
{
keywordsList.ClearSelection();
ViewState["SearchResultShown"] = true;
gvWpiProducts.PageIndex = 0;
gvWpiProducts.DataSource = GetWpiProductsFiltered();
gvWpiProducts.DataBind();
}
private WPIProduct[] GetWpiProductsFiltered()
{
return ES.Services.Servers.GetWPIProductsFiltered(PanelRequest.ServerId, searchBox.Text);
}
protected ArrayList FilterInstaledProducts(WPIProduct[] products)
{
ViewState["SearchResultShown"] = false;
ArrayList result = new ArrayList();
foreach (WPIProduct product in products)
{
if (product.IsInstalled == IsShowInstalledPseudoKeywordSelected)
{
result.Add(product);
}
}
return result;
}
protected string FixDefaultLogo(string imgUrl)
{
if (string.IsNullOrEmpty(imgUrl))
{
return GetThemedImage("../icons/dvd_disc_48.png");
}
return imgUrl;
}
protected void ShowLogsButton_OnClick(object sender, EventArgs e)
{
//show logs
try
{
string wpiLogsDir = ViewState[_wpiLogsDirViewStateKey] as string;
if (!string.IsNullOrEmpty(wpiLogsDir))
{
//Get logs !!!
object[] logsEntrys = ES.Services.Servers.WpiGetLogsInDirectory(PanelRequest.ServerId, wpiLogsDir);
WpiLogsPanel.Visible = true;
StringBuilder sb = new StringBuilder();
foreach (SettingPair entry in logsEntrys)
{
string fileName = (string)entry.Name;
string fileContent = (string)entry.Value;
sb.AppendLine().AppendFormat("<h3>{0}</h3>", fileName).AppendLine().Append(fileContent).AppendLine();
}
WpiLogsPre.InnerHtml = sb.ToString();
ShowLogsButton.Visible = false;
ProgressTimer.Enabled = false;
}
}
catch (Exception ex)
{
WpiLogsPanel.Visible = true;
WpiLogsPre.InnerText = ex.ToString();
}
}
}
}