internal static Workshare.PolicyContent.ResolvedAction GetResolvedAction(IResolvedAction ra)
		{
			if (null == ra)
				throw new ArgumentNullException("ra");

			Workshare.PolicyContent.ResolvedAction result = new Workshare.PolicyContent.ResolvedAction();
			result.Sequence = ra.Sequence;

			result.Contents = new Workshare.PolicyContent.ContentItem[0];
			if (ra.ContentCollection != null && ra.ContentCollection.Count > 0)
			{
				List<Workshare.PolicyContent.ContentItem> contents = new List<Workshare.PolicyContent.ContentItem>();
				foreach (IContentItem item in ra.ContentCollection)
				{
					contents.Add(ContentItemAdaptor.GetContentItemNoBytes(item));
				}
				result.Contents = new Workshare.PolicyContent.ContentItem[contents.Count];
				contents.CopyTo(result.Contents);
			}

			result.Action = ActionAdaptor.GetAction(ra.ResponseAction);

			return result;
		}
Esempio n. 2
0
		private void ExecuteAction(IUniversalRequestObject outputUro, IResolvedAction actionInfo, List<string> actionsApplied)
		{
			PolicyResponseAction resAction = actionInfo.ResponseAction as PolicyResponseAction;

			// ReSharper disable ConditionIsAlwaysTrueOrFalse
			if (outputUro == null || actionInfo == null || resAction == null)
			// ReSharper restore ConditionIsAlwaysTrueOrFalse
			{
				return;
			}

			IAction3 action = resAction.Action;
			IFile emailFile;
			using (Stream stream = GetMimeStream(outputUro))
			{
				emailFile = new File(stream, resAction.Type);
			}

			ActionData data = new ActionData(emailFile, GetReadableContent)
								{
									AttachmentFiles = outputUro.Attachments
								};

			Logger.LogDebug("Pre-Execute: MIME");
			Logger.LogDebug("ProcessActions: action " + resAction.Type); // shame no policySetInfo name

			OnBeforeExecuteHandler(resAction.Name, emailFile.FileName);

			if (!_emailActions[actionInfo].SystemProperties.ContainsKey("FileType"))
			{
				_emailActions[actionInfo].SystemProperties["FileType"] = new Action.ActionProperty("FileType", typeof(string),
																									PropertyDisplayType.TextBox,
																									true, false, ".email", true);
			}
			_emailActions[actionInfo].SystemProperties["FileType"].Value = ".email";

			using (Stream modifiedStream = action.ExecuteMime(data, _emailActions[actionInfo]))
			{
				if (null == modifiedStream)
				{
					throw new PolicyException("Invalid mime stream");
				}
				UpdateUroOriginalContentBytes(outputUro, modifiedStream);
			}

			foreach (RequestAttachment ra in outputUro.Attachments)
			{
				if (ra.File == null)
				{
					ra.File = new FCS.Lite.Interface.File(ra.FileName, ra.Name);
				}
			}

			bool isUserOverriden = resAction.InternalProperties.Modified;
			resAction.Executed = true;
			actionsApplied.Add(resAction.Name);

			Logger.LogDebug("Post-Execute: MIME");

			UpdateActionEntity(resAction, isUserOverriden);

			OnAfterExecuteHandler(resAction.Name, emailFile.FileName);
		}
Esempio n. 3
0
        private static void RemoveContentItemFromResolvedAction(IContentItem content, IResolvedAction resolvedAction)
        {
            List<IContentItem> contents = new List<IContentItem>(resolvedAction.ContentCollection);

            contents.RemoveAll(x => x == content);  //relies on the fact that the ContentItem is ref copied throughout the pro, NEVER cloned.

            ((ResolvedAction)resolvedAction).ContentCollection = new Collection<IContentItem>(contents);
        }