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; }
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); }
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); }