websitepanel/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebApplicationGalleryParamControl.ascx.cs
Virtuworks 40b39a1469 Merge
2013-01-07 10:35:03 -05:00

304 lines
No EOL
12 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.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WebsitePanel.Providers.WebAppGallery;
namespace WebsitePanel.Portal
{
public partial class WebApplicationGalleryParamControl : WebsitePanelModuleBase
{
#region Constants
public const string DatabaseIdentifierRegexp = "^[a-zA-Z_]+[a-zA-Z0-9_]{0,63}$";
#endregion
#region Private Properties
DeploymentParameterWellKnownTag wellKnownTags
{
get { return ViewState["WellKnownTags"] != null ? (DeploymentParameterWellKnownTag)ViewState["WellKnownTags"] : DeploymentParameterWellKnownTag.None; }
set { ViewState["WellKnownTags"] = value; }
}
DeploymentParameterValidationKind validationKind
{
get { return ViewState["ValidationKind"] != null ? (DeploymentParameterValidationKind)ViewState["ValidationKind"] : DeploymentParameterValidationKind.None; }
set { ViewState["ValidationKind"] = value; }
}
string validationString
{
get { return ViewState["ValidationString"] != null ? (string)ViewState["ValidationString"] : null; }
set { ViewState["ValidationString"] = value; }
}
#endregion
#region Public Properties
public string Name
{
get { return ViewState["Name"] != null ? (string)ViewState["Name"] : null; }
private set { ViewState["Name"] = value; }
}
public string FriendlyName
{
get { return friendlyName.Text; }
private set { friendlyName.Text = value; }
}
public string Description
{
get { return description.Text; }
private set { description.Text = value; }
}
public string DefaultValue
{
get { return ViewState["DefaultValue"] != null ? (string)ViewState["DefaultValue"] : null; }
private set { ViewState["DefaultValue"] = value; }
}
public string ValuePrefix
{
get { return ViewState["ValuePrefix"] != null ? (string)ViewState["ValuePrefix"] : null; }
private set { ViewState["ValuePrefix"] = value; }
}
public string ValueSuffix
{
get { return ViewState["ValueSuffix"] != null ? (string)ViewState["ValueSuffix"] : null; }
private set { ViewState["ValueSuffix"] = value; }
}
public DeploymentParameterWellKnownTag WellKnownTags
{
get { return this.wellKnownTags; }
set { wellKnownTags = value; BindControls(); }
}
public DeploymentParameterValidationKind ValidationKind
{
get { return this.validationKind; }
set { validationKind = value; BindControls(); }
}
public string ValidationString
{
get { return this.validationString; }
set { validationString = value; BindControls(); }
}
public string Value
{
get { return null; }
}
#endregion
protected void Page_Load(object sender, EventArgs e)
{
}
public void BindParameter(DeploymentParameter param)
{
// store parameter details
this.Name = param.Name;
this.FriendlyName = param.FriendlyName;
this.Description = param.Description;
this.DefaultValue = param.DefaultValue;
this.wellKnownTags = param.WellKnownTags;
this.validationKind = param.ValidationKind;
this.validationString = param.ValidationString;
this.ValuePrefix = param.ValuePrefix;
this.ValueSuffix = param.ValueSuffix;
// toggle controls
BindControls();
}
public void SetTextValuePrefixSuffix(string prefix, string suffix)
{
if (!string.IsNullOrEmpty(prefix))
{
valPrefix.Text = prefix;
}
if (!string.IsNullOrEmpty(suffix))
{
valSuffix.Text = suffix;
}
}
public DeploymentParameter GetParameter()
{
DeploymentParameter parameter = new DeploymentParameter();
parameter.Name = this.Name;
parameter.FriendlyName = this.FriendlyName;
parameter.Description = this.Description;
parameter.Value = GetParameterValue();
parameter.DefaultValue = this.DefaultValue;
parameter.WellKnownTags = this.WellKnownTags;
parameter.ValidationKind = this.ValidationKind;
parameter.ValidationString = this.ValidationString;
return parameter;
}
private string GetParameterValue()
{
if (PasswordControl.Visible)
return password.Text;
else if (TextControl.Visible)
return valPrefix.Text + textValue.Text.Trim() + valSuffix.Text;
else if (BooleanControl.Visible)
return boolValue.Checked.ToString();
else if (EnumControl.Visible)
return enumValue.SelectedValue;
else
return null;
}
private void BindControls()
{
// hide database server parameters
DeploymentParameterWellKnownTag hiddenTags =
DeploymentParameterWellKnownTag.IisApp |
DeploymentParameterWellKnownTag.Hidden |
DeploymentParameterWellKnownTag.DBServer |
DeploymentParameterWellKnownTag.DBAdminUserName |
DeploymentParameterWellKnownTag.DBAdminPassword;
if ((WellKnownTags & hiddenTags) > 0)
{
this.Visible = false;
return;
}
// disable all editor controls
BooleanControl.Visible = false;
EnumControl.Visible = false;
PasswordControl.Visible = false;
TextControl.Visible = false;
// enable specific control
if ((ValidationKind & DeploymentParameterValidationKind.Boolean) == DeploymentParameterValidationKind.Boolean)
{
// Boolean value
BooleanControl.Visible = true;
bool val = false;
Boolean.TryParse(DefaultValue, out val);
boolValue.Checked = val;
}
else if ((ValidationKind & DeploymentParameterValidationKind.Enumeration) == DeploymentParameterValidationKind.Enumeration)
{
// Enumeration value
EnumControl.Visible = true;
// fill dropdown
enumValue.Items.Clear();
string[] items = (ValidationString ?? "").Trim().Split(',');
foreach (string item in items)
enumValue.Items.Add(item.Trim());
// select default value
enumValue.SelectedValue = DefaultValue;
}
else if ((WellKnownTags & DeploymentParameterWellKnownTag.Password) == DeploymentParameterWellKnownTag.Password)
{
// Password value
PasswordControl.Visible = true;
confirmPasswordControls.Visible = ((WellKnownTags & DeploymentParameterWellKnownTag.New) == DeploymentParameterWellKnownTag.New);
}
else
{
// Text value
TextControl.Visible = true;
textValue.Text = DefaultValue;
valPrefix.Text = ValuePrefix;
valSuffix.Text = ValueSuffix;
if (
(WellKnownTags & DeploymentParameterWellKnownTag.MySql) == DeploymentParameterWellKnownTag.MySql
&&
(WellKnownTags & DeploymentParameterWellKnownTag.DBUserName) == DeploymentParameterWellKnownTag.DBUserName
)
{
MysqlUsernameLengthValidator.Enabled = true;
}
}
// enforce validation for database parameters if they are allowed empty by app pack developers
bool isDatabaseParameter = (WellKnownTags & (
DeploymentParameterWellKnownTag.DBName |
DeploymentParameterWellKnownTag.DBUserName |
DeploymentParameterWellKnownTag.DBUserPassword)) > 0;
// enforce validation for database name and username
if ((WellKnownTags & (DeploymentParameterWellKnownTag.DBName | DeploymentParameterWellKnownTag.DBUserName)) > 0
&& String.IsNullOrEmpty(ValidationString))
{
validationKind |= DeploymentParameterValidationKind.RegularExpression;
validationString = DatabaseIdentifierRegexp;
}
// validation common for all editors
requireTextValue.Enabled = requirePassword.Enabled = requireConfirmPassword.Enabled = requireEnumValue.Enabled =
((ValidationKind & DeploymentParameterValidationKind.AllowEmpty) != DeploymentParameterValidationKind.AllowEmpty) || isDatabaseParameter;
requireTextValue.Text = requirePassword.Text = requireEnumValue.Text =
String.Format(GetLocalizedString("RequiredValidator.Text"), FriendlyName);
regexpTextValue.Enabled = regexpPassword.Enabled = regexpEnumValue.Enabled =
(ValidationKind & DeploymentParameterValidationKind.RegularExpression) == DeploymentParameterValidationKind.RegularExpression;
regexpTextValue.ValidationExpression = regexpPassword.ValidationExpression = regexpEnumValue.ValidationExpression =
ValidationString ?? "";
regexpTextValue.Text = regexpPassword.Text = regexpEnumValue.Text =
String.Format(GetLocalizedString("RegexpValidator.Text"), FriendlyName, ValidationString);
}
protected void mysqlUsernameLen_OnServerValidate(object source, ServerValidateEventArgs args)
{
args.IsValid = true;
// get entered database name with prefixes / suffixes
string value = GetParameterValue();
// check length
if (!string.IsNullOrEmpty(value) && value.Length <= 16)
return;
// validation failed
args.IsValid = false;
}
}
}