public override bool TryFormat(IDateTimeOperationTO dateTimeTO, out string result, out string error) { if (string.IsNullOrEmpty(dateTimeTO.DateTime)) { dateTimeTO.DateTime = DateTime.Now.ToString(GlobalConstants.Dev2DotNetDefaultDateTimeFormat, CultureInfo.InvariantCulture); } var internallyParsedValue = DateTime.TryParseExact(dateTimeTO.DateTime?.Trim(), dateTimeTO.InputFormat, CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces, out var dateResult); if (internallyParsedValue) { var tmpDateTime = PerformDateTimeModification(dateTimeTO, dateResult); result = tmpDateTime.ToString(dateTimeTO.OutputFormat, CultureInfo.InvariantCulture); error = ""; } else { var secondResult = DateTime.Parse(dateTimeTO.DateTime?.Trim(), CultureInfo.InvariantCulture); var tmpDateTime = PerformDateTimeModification(dateTimeTO, secondResult); result = tmpDateTime.ToString(dateTimeTO.OutputFormat, CultureInfo.InvariantCulture); error = ""; } return(true); }
public abstract bool TryFormat(IDateTimeOperationTO dateTimeTO, out string result, out string error);
/// <summary> /// Converts a date from one format to another. If a valid time modifier is specified then the date is adjusted /// accordingly before being returned. /// </summary> public bool TryFormat(IDateTimeOperationTO dateTimeTO, out string result, out string error) { result = ""; IDateTimeParser dateTimeParser = DateTimeConverterFactory.CreateParser(); bool nothingDied = true; IDateTimeResultTO dateTimeResultTO; //2013.05.06: Ashley Lewis - Bug 9300 - trim should allow null input format dateTimeTO.InputFormat = dateTimeTO.InputFormat != null ? dateTimeTO.InputFormat.Trim() : null; //2013.02.12: Ashley Lewis - Bug 8725, Task 8840 - Added trim to data if (dateTimeParser.TryParseDateTime(dateTimeTO.DateTime.Trim(), dateTimeTO.InputFormat, out dateTimeResultTO, out error)) { // // Parse time, if present // DateTime tmpDateTime = dateTimeResultTO.ToDateTime(); if (!string.IsNullOrWhiteSpace(dateTimeTO.TimeModifierType)) { //2012.09.27: massimo.guerrera - Added for the new functionality for the time modification Func<DateTime, int, DateTime> funcToExecute; if (TimeModifiers.TryGetValue(dateTimeTO.TimeModifierType, out funcToExecute) && funcToExecute != null) { tmpDateTime = funcToExecute(tmpDateTime, dateTimeTO.TimeModifierAmount); } } // // If nothing has gone wrong yet // // ReSharper disable ConditionIsAlwaysTrueOrFalse if (nothingDied) // ReSharper restore ConditionIsAlwaysTrueOrFalse { // // If there is no output format use the input format // string outputFormat = string.IsNullOrWhiteSpace(dateTimeTO.OutputFormat) ? dateTimeTO.InputFormat : dateTimeTO.OutputFormat; if (string.IsNullOrWhiteSpace(outputFormat)) { //07.03.2013: Ashley Lewis - Bug 9167 null to default string shortPattern = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern; string longPattern = CultureInfo.CurrentCulture.DateTimeFormat.LongTimePattern; string finalPattern = shortPattern + " " + longPattern; if (finalPattern.Contains("ss")) { outputFormat = finalPattern.Insert(finalPattern.IndexOf("ss", StringComparison.Ordinal) + 2, ".fff"); outputFormat =dateTimeParser.TranslateDotNetToDev2Format(outputFormat,out error); } } // // Format to output format // List<IDateTimeFormatPartTO> formatParts; // // Get output format parts // nothingDied = DateTimeParser.TryGetDateTimeFormatParts(outputFormat, out formatParts, out error); if (nothingDied) { int count = 0; while (count < formatParts.Count && nothingDied) { IDateTimeFormatPartTO formatPart = formatParts[count]; if (formatPart.Isliteral) { result += formatPart.Value; } else { Func<IDateTimeResultTO, DateTime, string> func; if (DateTimeFormatParts.TryGetValue(formatPart.Value, out func)) { result += func(dateTimeResultTO, tmpDateTime); } else { nothingDied = false; error = string.Concat("Unrecognized format part '", formatPart.Value, "'."); } } count++; } } } } else { nothingDied = false; } return nothingDied; }
/// <summary> /// Converts a date from one format to another. If a valid time modifier is specified then the date is adjusted /// accordingly before being returned. /// </summary> public bool TryFormat(IDateTimeOperationTO dateTimeTO, out string result, out string error) { result = ""; IDateTimeParser dateTimeParser = DateTimeConverterFactory.CreateParser(); bool nothingDied = true; IDateTimeResultTO dateTimeResultTO; //2013.05.06: Ashley Lewis - Bug 9300 - trim should allow null input format dateTimeTO.InputFormat = dateTimeTO.InputFormat != null?dateTimeTO.InputFormat.Trim() : null; //2013.02.12: Ashley Lewis - Bug 8725, Task 8840 - Added trim to data if (dateTimeParser.TryParseDateTime(dateTimeTO.DateTime.Trim(), dateTimeTO.InputFormat, out dateTimeResultTO, out error)) { // // Parse time, if present // DateTime tmpDateTime = dateTimeResultTO.ToDateTime(); if (!string.IsNullOrWhiteSpace(dateTimeTO.TimeModifierType)) { //2012.09.27: massimo.guerrera - Added for the new functionality for the time modification Func <DateTime, int, DateTime> funcToExecute; if (TimeModifiers.TryGetValue(dateTimeTO.TimeModifierType, out funcToExecute) && funcToExecute != null) { tmpDateTime = funcToExecute(tmpDateTime, dateTimeTO.TimeModifierAmount); } } // // If nothing has gone wrong yet // // ReSharper disable ConditionIsAlwaysTrueOrFalse if (nothingDied) // ReSharper restore ConditionIsAlwaysTrueOrFalse { // // If there is no output format use the input format // string outputFormat = string.IsNullOrWhiteSpace(dateTimeTO.OutputFormat) ? dateTimeTO.InputFormat : dateTimeTO.OutputFormat; if (string.IsNullOrWhiteSpace(outputFormat)) { //07.03.2013: Ashley Lewis - Bug 9167 null to default string shortPattern = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern; string longPattern = CultureInfo.CurrentCulture.DateTimeFormat.LongTimePattern; string finalPattern = shortPattern + " " + longPattern; if (finalPattern.Contains("ss")) { outputFormat = finalPattern.Insert(finalPattern.IndexOf("ss", StringComparison.Ordinal) + 2, ".fff"); outputFormat = dateTimeParser.TranslateDotNetToDev2Format(outputFormat, out error); } } // // Format to output format // List <IDateTimeFormatPartTO> formatParts; // // Get output format parts // nothingDied = DateTimeParser.TryGetDateTimeFormatParts(outputFormat, out formatParts, out error); if (nothingDied) { int count = 0; while (count < formatParts.Count && nothingDied) { IDateTimeFormatPartTO formatPart = formatParts[count]; if (formatPart.Isliteral) { result += formatPart.Value; } else { Func <IDateTimeResultTO, DateTime, string> func; if (DateTimeFormatParts.TryGetValue(formatPart.Value, out func)) { result += func(dateTimeResultTO, tmpDateTime); } else { nothingDied = false; error = string.Concat("Unrecognized format part '", formatPart.Value, "'."); } } count++; } } } } else { nothingDied = false; } return(nothingDied); }
protected override void ExecuteTool(IDSFDataObject dataObject) { _debugInputs = new List <DebugItem>(); _debugOutputs = new List <DebugItem>(); ErrorResultTO allErrors = new ErrorResultTO(); InitializeDebug(dataObject); // Process if no errors try { IsSingleValueRule.ApplyIsSingleValueRule(Result, allErrors); if (dataObject.IsDebugMode()) { if (string.IsNullOrEmpty(DateTime)) { var defaultDateTimeDebugItem = new DebugItem(); AddDebugItem(new DebugItemStaticDataParams("System Date Time", "Input"), defaultDateTimeDebugItem); AddDebugItem(new DebugItemStaticDataParams(System.DateTime.Now.ToString(CultureInfo.CurrentCulture), "="), defaultDateTimeDebugItem); _debugInputs.Add(defaultDateTimeDebugItem); } else { AddDebugInputItem(new DebugEvalResult(DateTime, "Input", dataObject.Environment)); } var cultureType = typeof(CultureInfo); var fieldInfo = cultureType.GetField("s_userDefaultCulture", BindingFlags.NonPublic | BindingFlags.Static); if (fieldInfo != null) { var val = fieldInfo.GetValue(CultureInfo.CurrentCulture); var newCul = val as CultureInfo; if (newCul != null) { Thread.CurrentThread.CurrentCulture = newCul; } } var dateTimePattern = string.Format("{0} {1}", Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern, Thread.CurrentThread.CurrentCulture.DateTimeFormat.LongTimePattern); if (string.IsNullOrEmpty(InputFormat)) { var defaultDateTimeDebugItem = new DebugItem(); AddDebugItem(new DebugItemStaticDataParams("System Date Time Format", "Input Format"), defaultDateTimeDebugItem); AddDebugItem(new DebugItemStaticDataParams(dateTimePattern, "="), defaultDateTimeDebugItem); _debugInputs.Add(defaultDateTimeDebugItem); } else { AddDebugInputItem(new DebugEvalResult(InputFormat, "Input Format", dataObject.Environment)); } var debugItem = new DebugItem(); AddDebugItem(new DebugItemStaticDataParams(TimeModifierType, "Add Time"), debugItem); AddDebugItem(new DebugEvalResult(TimeModifierAmountDisplay, "", dataObject.Environment), debugItem); _debugInputs.Add(debugItem); if (string.IsNullOrEmpty(OutputFormat)) { var defaultDateTimeDebugItem = new DebugItem(); AddDebugItem(new DebugItemStaticDataParams("System Date Time Format", "Output Format"), defaultDateTimeDebugItem); AddDebugItem(new DebugItemStaticDataParams(dateTimePattern, "="), defaultDateTimeDebugItem); _debugInputs.Add(defaultDateTimeDebugItem); } else { AddDebugInputItem(new DebugEvalResult(OutputFormat, "Output Format", dataObject.Environment)); } } if (DataListUtil.HasNegativeIndex(InputFormat)) { allErrors.AddError(string.Format("Negative Recordset Index for Input Format: {0}", InputFormat)); } if (DataListUtil.HasNegativeIndex(OutputFormat)) { allErrors.AddError(string.Format("Negative Recordset Index for Output Format: {0}", OutputFormat)); } if (DataListUtil.HasNegativeIndex(TimeModifierAmountDisplay)) { allErrors.AddError(string.Format("Negative Recordset Index for Add Time: {0}", TimeModifierAmountDisplay)); } if (!allErrors.HasErrors()) { var colItr = new WarewolfListIterator(); var dtItr = CreateDataListEvaluateIterator(string.IsNullOrEmpty(DateTime) ? GlobalConstants.CalcExpressionNow : DateTime, dataObject.Environment); colItr.AddVariableToIterateOn(dtItr); var ifItr = CreateDataListEvaluateIterator(InputFormat, dataObject.Environment); colItr.AddVariableToIterateOn(ifItr); var ofItr = CreateDataListEvaluateIterator(OutputFormat, dataObject.Environment); colItr.AddVariableToIterateOn(ofItr); var tmaItr = CreateDataListEvaluateIterator(TimeModifierAmountDisplay, dataObject.Environment); colItr.AddVariableToIterateOn(tmaItr); if (!allErrors.HasErrors()) { while (colItr.HasMoreData()) { IDateTimeOperationTO transObj = ConvertToDateTimeTo(colItr.FetchNextValue(dtItr), colItr.FetchNextValue(ifItr), colItr.FetchNextValue(ofItr), TimeModifierType, colItr.FetchNextValue(tmaItr) ); IDateTimeFormatter format = DateTimeConverterFactory.CreateFormatter(); string result; string error; if (format.TryFormat(transObj, out result, out error)) { string expression = Result; dataObject.Environment.Assign(expression, result); } else { allErrors.AddError(error); } } if (dataObject.IsDebugMode() && !allErrors.HasErrors()) { AddDebugOutputItem(new DebugEvalResult(Result, "", dataObject.Environment)); } } } } catch (Exception e) { Dev2Logger.Log.Error("DSFDateTime", e); allErrors.AddError(e.Message); } finally { // Handle Errors var hasErrors = allErrors.HasErrors(); if (hasErrors) { DisplayAndWriteError("DsfDateTimeActivity", allErrors); var errorString = allErrors.MakeDisplayReady(); dataObject.Environment.AddError(errorString); } if (dataObject.IsDebugMode()) { if (hasErrors) { AddDebugOutputItem(new DebugItemStaticDataParams("", Result, "")); } DispatchDebugState(dataObject, StateType.Before); DispatchDebugState(dataObject, StateType.After); } } }
/// <summary> /// The execute method that is called when the activity is executed at run time and will hold all the logic of the activity /// </summary> protected override void OnExecute(NativeActivityContext context) { _debugInputs = new List <DebugItem>(); _debugOutputs = new List <DebugItem>(); IDSFDataObject dataObject = context.GetExtension <IDSFDataObject>(); IDataListCompiler compiler = DataListFactory.CreateDataListCompiler(); ErrorResultTO allErrors = new ErrorResultTO(); ErrorResultTO errors; Guid executionId = DataListExecutionID.Get(context); InitializeDebug(dataObject); // Process if no errors try { IsSingleValueRule.ApplyIsSingleValueRule(Result, allErrors); IDev2DataListUpsertPayloadBuilder <string> toUpsert = Dev2DataListBuilderFactory.CreateStringDataListUpsertBuilder(true); toUpsert.IsDebug = (dataObject.IsDebugMode()); toUpsert.ResourceID = dataObject.ResourceID; IDev2IteratorCollection colItr = Dev2ValueObjectFactory.CreateIteratorCollection(); IDev2DataListEvaluateIterator dtItr = CreateDataListEvaluateIterator(string.IsNullOrEmpty(DateTime) ? GlobalConstants.CalcExpressionNow : DateTime, executionId, compiler, colItr, allErrors); colItr.AddIterator(dtItr); IDev2DataListEvaluateIterator ifItr = CreateDataListEvaluateIterator(InputFormat, executionId, compiler, colItr, allErrors); colItr.AddIterator(ifItr); IDev2DataListEvaluateIterator ofItr = CreateDataListEvaluateIterator(OutputFormat, executionId, compiler, colItr, allErrors); colItr.AddIterator(ofItr); IDev2DataListEvaluateIterator tmaItr = CreateDataListEvaluateIterator(TimeModifierAmountDisplay, executionId, compiler, colItr, allErrors); colItr.AddIterator(tmaItr); if (dataObject.IsDebugMode()) { if (string.IsNullOrEmpty(DateTime)) { var defaultDateTimeDebugItem = new DebugItem(); AddDebugItem(new DebugItemStaticDataParams("System Date Time", "Input"), defaultDateTimeDebugItem); AddDebugItem(new DebugItemStaticDataParams(System.DateTime.Now.ToString(CultureInfo.CurrentCulture), "="), defaultDateTimeDebugItem); _debugInputs.Add(defaultDateTimeDebugItem); } else { AddDebugInputItem(new DebugItemVariableParams(DateTime, "Input", dtItr.FetchEntry(), executionId)); } var dateTimePattern = string.Format("{0} {1}", CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern, CultureInfo.CurrentCulture.DateTimeFormat.LongTimePattern); if (string.IsNullOrEmpty(InputFormat)) { var defaultDateTimeDebugItem = new DebugItem(); AddDebugItem(new DebugItemStaticDataParams("System Date Time Format", "Input Format"), defaultDateTimeDebugItem); AddDebugItem(new DebugItemStaticDataParams(dateTimePattern, "="), defaultDateTimeDebugItem); _debugInputs.Add(defaultDateTimeDebugItem); } else { AddDebugInputItem(new DebugItemVariableParams(InputFormat, "Input Format", ifItr.FetchEntry(), executionId)); } var debugItem = new DebugItem(); AddDebugItem(new DebugItemStaticDataParams(TimeModifierType, "Add Time"), debugItem); AddDebugItem(new DebugItemVariableParams(TimeModifierAmountDisplay, "", tmaItr.FetchEntry(), executionId, true), debugItem); _debugInputs.Add(debugItem); if (string.IsNullOrEmpty(OutputFormat)) { var defaultDateTimeDebugItem = new DebugItem(); AddDebugItem(new DebugItemStaticDataParams("System Date Time Format", "Output Format"), defaultDateTimeDebugItem); AddDebugItem(new DebugItemStaticDataParams(dateTimePattern, "="), defaultDateTimeDebugItem); _debugInputs.Add(defaultDateTimeDebugItem); } else { AddDebugInputItem(new DebugItemVariableParams(OutputFormat, "Output Format", ofItr.FetchEntry(), executionId)); } } if (!allErrors.HasErrors()) { while (colItr.HasMoreData()) { IDateTimeOperationTO transObj = ConvertToDateTimeTo(colItr.FetchNextRow(dtItr).TheValue, colItr.FetchNextRow(ifItr).TheValue, colItr.FetchNextRow(ofItr).TheValue, TimeModifierType, colItr.FetchNextRow(tmaItr).TheValue ); //Create a DateTimeFomatter using the DateTimeConverterFactory.DONE IDateTimeFormatter format = DateTimeConverterFactory.CreateFormatter(); string result; string error; if (format.TryFormat(transObj, out result, out error)) { string expression = Result; //2013.06.03: Ashley Lewis for bug 9498 - handle multiple regions in result toUpsert.Add(expression, result); toUpsert.FlushIterationFrame(); } else { allErrors.AddError(error); } } compiler.Upsert(executionId, toUpsert, out errors); allErrors.MergeErrors(errors); if (dataObject.IsDebugMode() && !allErrors.HasErrors()) { foreach (var debugOutputTo in toUpsert.DebugOutputs) { AddDebugOutputItem(new DebugItemVariableParams(debugOutputTo)); } } allErrors.MergeErrors(errors); } } catch (Exception e) { Dev2Logger.Log.Error("DSFDateTime", e); allErrors.AddError(e.Message); } finally { // Handle Errors var hasErrors = allErrors.HasErrors(); if (hasErrors) { DisplayAndWriteError("DsfDateTimeActivity", allErrors); compiler.UpsertSystemTag(dataObject.DataListID, enSystemTag.Dev2Error, allErrors.MakeDataListReady(), out errors); compiler.Upsert(executionId, Result, (string)null, out errors); } if (dataObject.IsDebugMode()) { if (hasErrors) { AddDebugOutputItem(new DebugItemStaticDataParams("", Result, "")); } DispatchDebugState(context, StateType.Before); DispatchDebugState(context, StateType.After); } } }