/// <summary>
        /// 
        /// </summary>
        /// <param name="fileTypes"></param>
        public void Edit(List<AddressTypes> supportedFileTypes)
        {
            IDataElement dataElement = Object as IDataElement;
            IPolicyObjectCollection<IDataItem> dataItemCollection = dataElement.Data as IPolicyObjectCollection<IDataItem>;

            //current values display name
            List<string> currentStrings = new List<string>();
            foreach (IDataItem dataItem in dataItemCollection)
            {
                AddressTypes contextType =
                    (AddressTypes)Enum.Parse(typeof(AddressTypes), dataItem.Value.ToString(), true);
                currentStrings.Add(contextType.ToString());
            }
            
            //all values
            List<string> enumStrings = new List<string>();
            foreach (object val in Enum.GetValues(typeof(AddressTypes)))
            {
                enumStrings.Add(val.ToString());
            }


            SelectMultiEnumForm form = new SelectMultiEnumForm(currentStrings.ToArray());
            form.AllItems = enumStrings.ToArray();
            form.Text = Properties.Resources.EMAILADDRESS_FILE;
            form.SelectedEnumLabel = Properties.Resources.EMAILADDRESS_LOOK;
            if (DialogResult.OK == form.ShowDialog())
            {
                //data
                dataItemCollection.Clear();
                ICollection selectedCategories = form.SelectedItems;
                foreach (object item in selectedCategories)
                {
                    AddressTypes addressType = (AddressTypes) Enum.Parse(typeof(AddressTypes), item.ToString());

                    dataItemCollection.Add(DataItem.CreateDataItem(new NonTranslateableLanguageItem(""), DataType.String, Enum.GetName(typeof(AddressTypes), addressType)));

                }

                //display name
                if (dataItemCollection.Count == enumStrings.Count)
                {
                    dataElement.DisplayName.Value = Properties.Resources.IDS_EXPRESSION_ADDRESSTYPE_ANY;
                }
                else
                {
                    dataElement.DisplayName.Value = GetDisplayNameFromDataItems();
                }
                Text = dataElement.DisplayName.Value;
            }
        }
		/// <summary>
		/// Invokes a dialog to allow the user to edit the data in a file type parameter,
		/// and commits changes to the data. The list of file types available is restricted to
		/// those file types in availableFileTypes
		/// </summary>
		public void Edit(List<Workshare.Policy.FileType> availableFileTypes)
		{
			try
			{
				IDataElement dataElement = this.Object as IDataElement;
				IPolicyObjectCollection<IDataItem> dataItemCollection = dataElement.Data as IPolicyObjectCollection<IDataItem>;

				//current values display name
				List<string> currentStrings = new List<string>();
				foreach (IDataItem dataItem in dataItemCollection)
				{
					Workshare.Policy.FileType fileType =
						(Workshare.Policy.FileType) Enum.Parse(typeof(Workshare.Policy.FileType), dataItem.Value.ToString(), true);

					if (fileType == Workshare.Policy.FileType.Selection)
						continue;

					if (ConditionDisplayHelper.ShouldDisplayFileType(fileType, this.PolicyType))
						currentStrings.Add(ConditionDisplayHelper.ConvertFileType(fileType));
				}

				//all allowed values
				Array enumTypes = Enum.GetValues(typeof(Workshare.Policy.FileType));
				List<string> enumTypesText = new List<string>();
				foreach (Workshare.Policy.FileType type in enumTypes)
				{
					if (type == Workshare.Policy.FileType.Selection)
						continue;

					if ((availableFileTypes != null))
					{
						if (availableFileTypes.Contains(type))
						{
							if (ConditionDisplayHelper.ShouldDisplayFileType(type, this.PolicyType))
								enumTypesText.Add(ConditionDisplayHelper.ConvertFileType(type));
						}
					}
					else
					{
						if (ConditionDisplayHelper.ShouldDisplayFileType(type, this.PolicyType))
							enumTypesText.Add(ConditionDisplayHelper.ConvertFileType(type));
					}
				}

				SelectMultiEnumForm form = new SelectMultiEnumForm(currentStrings.ToArray());
				form.AllItems = enumTypesText.ToArray();
				form.Text = Properties.Resources.FILETYPE_FILE;
				form.SelectedEnumLabel = Properties.Resources.FILETYPE_LOOK;
				if (DialogResult.OK == form.ShowDialog())
				{
					//data
					dataItemCollection.Clear();
					ICollection selectedCategories = form.SelectedItems;
					foreach (object item in selectedCategories)
					{
						Workshare.Policy.FileType fileType = ConditionDisplayHelper.ConvertFileType(item.ToString());
						dataItemCollection.Add(DataItem.CreateDataItem(new NonTranslateableLanguageItem(""), DataType.String, Enum.GetName(typeof(Workshare.Policy.FileType), fileType)));
						Workshare.Policy.FileType[] fileTypesX = ConditionDisplayHelper.GetAdditionalFileType(fileType);
						foreach (Workshare.Policy.FileType filetypex in fileTypesX)
						{
							if (filetypex != Workshare.Policy.FileType.Unknown)
							{
								dataItemCollection.Add(DataItem.CreateDataItem(new NonTranslateableLanguageItem(""), DataType.String, Enum.GetName(typeof(Workshare.Policy.FileType), filetypex)));
							}
						}
					}
				}
			}
			catch (Exception ex)
			{
				throw new PolicyDesignerException("Edit failed", ex);
			}
		}
		/// <summary>
		/// 
		/// </summary>
		/// <param name="fileTypes"></param>
		public void Edit(List<Workshare.Policy.FileType> supportedFileTypes)
		{
			IDataElement dataElement = Object as IDataElement;
			IPolicyObjectCollection<IDataItem> dataItemCollection = dataElement.Data as IPolicyObjectCollection<IDataItem>;

			//current values display name
			List<string> currentStrings = new List<string>();
			foreach (IDataItem dataItem in dataItemCollection)
			{
				ConditionUnitFactory.FileHiddenDataType hiddenDataType =
					(ConditionUnitFactory.FileHiddenDataType) Enum.Parse(typeof(ConditionUnitFactory.FileHiddenDataType), dataItem.Value.ToString(), true);
				currentStrings.Add(ConditionDisplayHelper.ConvertHiddenDataType(hiddenDataType));
			}

			//get supported file types
			if (supportedFileTypes == null)
			{
				supportedFileTypes = new List<Workshare.Policy.FileType>();
				Array allFileTypes = Enum.GetValues(typeof(Workshare.Policy.FileType));
				foreach (Workshare.Policy.FileType type in allFileTypes)
				{
					supportedFileTypes.Add(type);
				}
			}

			//available values display names
			List<ConditionUnitFactory.FileHiddenDataType> enumTypes = FileTypeToHiddenDataMapper.GetHiddenDataForFileType(supportedFileTypes);
			List<string> enumTypesText = new List<string>();
			foreach (ConditionUnitFactory.FileHiddenDataType type in enumTypes)
			{
				enumTypesText.Add(ConditionDisplayHelper.ConvertHiddenDataType(type));
			}

			SelectMultiEnumForm form = new SelectMultiEnumForm(currentStrings.ToArray());
			form.AllItems = enumTypesText.ToArray();
			form.Text = Properties.Resources.HIDDEN_FILE;
			form.SelectedEnumLabel = Properties.Resources.HIDDEN_LOOK;
			if (DialogResult.OK == form.ShowDialog())
			{
				//data
				dataItemCollection.Clear();
				ICollection selectedCategories = form.SelectedItems;
				foreach (object item in selectedCategories)
				{
					ConditionUnitFactory.FileHiddenDataType hiddenDataType =
						ConditionDisplayHelper.ConvertHiddenDataType(item.ToString());
					dataItemCollection.Add(DataItem.CreateDataItem(new NonTranslateableLanguageItem(""), DataType.String, Enum.GetName(typeof(ConditionUnitFactory.FileHiddenDataType), hiddenDataType)));
				}

				//display name
				if (enumTypesText.Count == dataItemCollection.Count)
				{
					dataElement.DisplayName.Value = Properties.Resources.IDS_EXPRESSION_PARAM_HIDDENDATA_ANY;
				}
				else
				{
					dataElement.DisplayName.Value = GetDisplayNameFromDataItems();
				}

				Text = dataElement.DisplayName.Value;
			}
		}