From ed91dad325bd11951b92b6e2a39de0a979c2a560 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Granfeldt?= Date: Wed, 2 May 2018 14:40:19 +0200 Subject: [PATCH] Release 1.1.2158 --- fim.mare/AssemblyInfo.cs | 2 +- fim.mare/FIM.MARE.config.xml | 15 ++++ fim.mare/FIM.MARE.cs | 2 +- fim.mare/FIM.MARE.csproj | 1 + fim.mare/Model/Source.cs | 21 +++++ fim.mare/Model/Transforms.cs | 14 ++-- .../Transforms/Transforms.DateTime.Add.cs | 80 +++++++++++++++++++ 7 files changed, 127 insertions(+), 8 deletions(-) create mode 100644 fim.mare/Model/Transforms/Transforms.DateTime.Add.cs diff --git a/fim.mare/AssemblyInfo.cs b/fim.mare/AssemblyInfo.cs index 6c18671..cb00f56 100644 --- a/fim.mare/AssemblyInfo.cs +++ b/fim.mare/AssemblyInfo.cs @@ -31,7 +31,7 @@ // You can specify all the values or you can default the Revision and Build Numbers // by using the '*' as shown below: -[assembly: AssemblyVersion("1.1.1500.*")] +[assembly: AssemblyVersion("1.1.2158.*")] // // In order to sign your assembly you must specify a key to use. Refer to the diff --git a/fim.mare/FIM.MARE.config.xml b/fim.mare/FIM.MARE.config.xml index f765cb4..dd99a1b 100644 --- a/fim.mare/FIM.MARE.config.xml +++ b/fim.mare/FIM.MARE.config.xml @@ -3,6 +3,7 @@ + @@ -34,6 +35,20 @@ + + + + + + + + + + + + + + diff --git a/fim.mare/FIM.MARE.cs b/fim.mare/FIM.MARE.cs index f288018..aac85b1 100644 --- a/fim.mare/FIM.MARE.cs +++ b/fim.mare/FIM.MARE.cs @@ -218,7 +218,7 @@ public void MapAttributesForImportExportDetached(string FlowRuleName, CSEntry cs if (rules == null) throw new NotImplementedException(direction.ToString() + "-rule-'" + FlowRuleName + "'-not-found-on-ma-" + maName); foreach (FlowRule r in rules) Tracer.TraceInformation("found-rule name: {0}, description: {1}", r.Name, r.Description); FlowRule rule = rules.Where(ru => ru.Conditions.AreMet(csentry, mventry)).FirstOrDefault(); - if (rule == null) throw new DeclineMappingException("no-" + direction.ToString() + "-rule-'" + FlowRuleName + "'-not-found-on-ma-'" + maName + "'-where-conditions-were-met"); + if (rule == null) throw new DeclineMappingException("no-" + direction.ToString() + "-rule-'" + FlowRuleName + "'-found-on-ma-'" + maName + "'-where-conditions-were-met"); #region FlowRuleDefault if (rule.GetType().Equals(typeof(FlowRule))) diff --git a/fim.mare/FIM.MARE.csproj b/fim.mare/FIM.MARE.csproj index cb00957..2c50e11 100644 --- a/fim.mare/FIM.MARE.csproj +++ b/fim.mare/FIM.MARE.csproj @@ -97,6 +97,7 @@ + diff --git a/fim.mare/Model/Source.cs b/fim.mare/Model/Source.cs index 2032d62..932c9bb 100644 --- a/fim.mare/Model/Source.cs +++ b/fim.mare/Model/Source.cs @@ -68,10 +68,31 @@ public class Attribute : Value [XmlAttribute("Name")] public string Name { get; set; } + [XmlAttribute("RetrieveFrom")] + public string RetrieveFrom { get; set; } + public string GetValueOrDefault(Direction direction, CSEntry csentry, MVEntry mventry) { string value = this.DefaultValue; bool sourceValueIsPresent = false; + if (!string.IsNullOrEmpty(this.RetrieveFrom)) + { + // override direction + switch (RetrieveFrom) + { + case "CS": + direction = Direction.Import; + Tracer.TraceInformation("retrieve-attribute-value-from: name: {0}, {1} / {2}", Name, direction, RetrieveFrom); + break; + case "MV": + direction = Direction.Export; + Tracer.TraceInformation("retrieve-attribute-value-from: name: {0}, {1} / {2}", Name, direction, RetrieveFrom); + break; + default: + Tracer.TraceWarning("override-source-input-value-to: INVALID (use CS or MV)"); + break; + } + } if (Name.Equals("[DN]") || Name.Equals("[RDN]") || Name.Equals("[ObjectType]") || Name.Equals("[ConnectionChangeTime]")) { sourceValueIsPresent = true; diff --git a/fim.mare/Model/Transforms.cs b/fim.mare/Model/Transforms.cs index c0e636a..fb13cc6 100644 --- a/fim.mare/Model/Transforms.cs +++ b/fim.mare/Model/Transforms.cs @@ -37,7 +37,8 @@ namespace FIM.MARE XmlInclude(typeof(RegexSelect)), XmlInclude(typeof(RegexIsMatch)), XmlInclude(typeof(FormatDate)), - XmlInclude(typeof(Base64ToGUID)), + XmlInclude(typeof(DateTimeAdd)), + XmlInclude(typeof(Base64ToGUID)), XmlInclude(typeof(IsBitSet)), XmlInclude(typeof(IsBitNotSet)), XmlInclude(typeof(SIDToString)), @@ -500,20 +501,21 @@ public class FormatDate : Transform public override object Convert(object value) { if (value == null) return value; - string returnValue = value as string; - if (DateType.Equals(DateType.FileTimeUTC)) + string returnValue = value.ToString(); + Tracer.TraceInformation("formatdate-from {0} / {1}", DateType, returnValue); + if (DateType.Equals(DateType.FileTimeUTC)) { - returnValue = DateTime.FromFileTimeUtc(long.Parse(value as string)).ToString(ToFormat); + returnValue = DateTime.FromFileTimeUtc(long.Parse(value.ToString())).ToString(ToFormat); return returnValue; } if (DateType.Equals(DateType.BestGuess)) { - returnValue = DateTime.Parse(value as string, CultureInfo.InvariantCulture).ToString(ToFormat); + returnValue = DateTime.Parse(value.ToString(), CultureInfo.InvariantCulture).ToString(ToFormat); return returnValue; } if (DateType.Equals(DateType.DateTime)) { - returnValue = DateTime.ParseExact(value as string, FromFormat, CultureInfo.InvariantCulture).ToString(ToFormat); + returnValue = DateTime.ParseExact(value.ToString(), FromFormat, CultureInfo.InvariantCulture).ToString(ToFormat); return returnValue; } return returnValue; diff --git a/fim.mare/Model/Transforms/Transforms.DateTime.Add.cs b/fim.mare/Model/Transforms/Transforms.DateTime.Add.cs new file mode 100644 index 0000000..333f375 --- /dev/null +++ b/fim.mare/Model/Transforms/Transforms.DateTime.Add.cs @@ -0,0 +1,80 @@ +// may 2, 2018 | soren granfeldt +// - added DateTimeAdd transform + +using Microsoft.MetadirectoryServices; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Globalization; +using System.Linq; +using System.Security.Principal; +using System.Text.RegularExpressions; +using System.Xml.Serialization; + +namespace FIM.MARE +{ + + public class DateTimeAdd : Transform + { + [XmlAttribute("AddSeconds")] + public int AddSeconds { get; set; } + [XmlAttribute("AddMinutes")] + public int AddMinutes { get; set; } + [XmlAttribute("AddHours")] + public int AddHours { get; set; } + [XmlAttribute("AddDays")] + public int AddDays { get; set; } + [XmlAttribute("AddMonths")] + public int AddMonths { get; set; } + [XmlAttribute("AddYears")] + public int AddYears { get; set; } + + public override object Convert(object value) + { + if (value == null) return value; + string input = value.ToString(); + Tracer.TraceInformation("adddays {0}", AddDays); + DateTime dateValue; + if (DateTime.TryParse(input, out dateValue)) + { + if (!AddSeconds.Equals(0)) + { + dateValue = dateValue.AddSeconds(this.AddSeconds); + Tracer.TraceInformation("date-after-addseconds {0}", dateValue); + } + if (!AddMinutes.Equals(0)) + { + dateValue = dateValue.AddMinutes(this.AddMinutes); + Tracer.TraceInformation("date-after-addminutes {0}", dateValue); + } + if (!AddHours.Equals(0)) + { + dateValue = dateValue.AddHours(this.AddHours); + Tracer.TraceInformation("date-after-addhours {0}", dateValue); + } + if (!AddDays.Equals(0)) + { + dateValue = dateValue.AddDays(this.AddDays); + Tracer.TraceInformation("date-after-adddays {0}", dateValue); + } + if (!AddMonths.Equals(0)) + { + dateValue = dateValue.AddMonths(this.AddMonths); + Tracer.TraceInformation("date-after-addmonths {0}", dateValue); + } + if (!AddYears.Equals(0)) + { + dateValue = dateValue.AddYears(this.AddYears); + Tracer.TraceInformation("date-after-addyears {0}", dateValue); + } + return dateValue; + } + else + { + Tracer.TraceWarning("could-not-parse-to-date {0}", 1, input); + } + return value; + } + } + +}