public static WfTransferParams FromNextActivity(IWfActivityDescriptor currentActDesp, Func <WfTransitionDescriptorCollection, IWfTransitionDescriptor> predicate) { currentActDesp.NullCheck("actDesp"); predicate.NullCheck("predicate"); WfTransferParams transferParams = null; WfTransitionDescriptorCollection toTransitions = currentActDesp.ToTransitions.GetAllCanTransitTransitions(); //找到匹配的线 IWfTransitionDescriptor transition = predicate(toTransitions); if (transition != null) { transferParams = new WfTransferParams(transition.ToActivity); transferParams.FromTransitionDescriptor = transition; if (transition.ToActivity.Instance != null) { transferParams.Assignees.CopyFrom(transition.ToActivity.Instance.Candidates); } if (DeluxePrincipal.IsAuthenticated) { transferParams.Operator = DeluxeIdentity.CurrentUser; } } (transferParams != null).FalseThrow(Translator.Translate(Define.DefaultCulture, "不能根据活动定义{0}找到符合条件的下一步环节", currentActDesp.Key)); return(transferParams); }
/// <summary> /// /// </summary> /// <param name="mapping"></param> /// <param name="table"></param> /// <param name="createNewAction"></param> /// <returns></returns> public TCollection DataTableToCollection(ORMappingItemCollection mapping, DataTable table, Func <DataRow, T> createNewAction) { createNewAction.NullCheck("createNewAction"); TCollection result = new TCollection(); foreach (DataRow row in table.Rows) { T data = default(T); if (createNewAction != null) { data = createNewAction(row); } ORMapping.DataRowToObject(row, mapping, data); if (data is ILoadableDataEntity) { ((ILoadableDataEntity)data).Loaded = true; } result.Add(data); } return(result); }
/// <summary> /// Attempts to convert the DataTable to a list of objects /// </summary> /// <typeparam name="T">Type the objects should be in the list</typeparam> /// <param name="Data">DataTable to convert</param> /// <param name="Creator">Function used to create each object</param> /// <returns>The DataTable converted to a list of objects</returns> public static System.Collections.Generic.List <T> ToList <T>(this DataTable Data, Func <T> Creator = null) where T : new() { if (Data.IsNull()) { return(new List <T>()); } Creator = Creator.NullCheck(() => new T()); Type TType = typeof(T); PropertyInfo[] Properties = TType.GetProperties(); System.Collections.Generic.List <T> Results = new System.Collections.Generic.List <T>(); for (int x = 0; x < Data.Rows.Count; ++x) { T RowObject = Creator(); for (int y = 0; y < Data.Columns.Count; ++y) { PropertyInfo Property = Properties.FirstOrDefault(z => z.Name == Data.Columns[y].ColumnName); if (!Property.IsNull()) { Property.SetValue(RowObject, Data.Rows[x][Data.Columns[y]].TryTo(Property.PropertyType, null), new object[] { }); } } Results.Add(RowObject); } return(Results); }
/// <summary> /// Constructor /// </summary> /// <param name="stringToObject">String to object</param> /// <param name="objectToString">Object to string</param> protected Config(Func <string, TConfigClassType> stringToObject = null, Func <IConfig, string> objectToString = null) { ObjectToString = objectToString.NullCheck(x => x.Serialize(new XMLSerializer(), fileLocation: ConfigFileLocation)); StringToObject = stringToObject.NullCheck(x => (TConfigClassType)x.Deserialize(GetType(), new XMLSerializer())); }
/// <summary> /// 广度遍历所有的活动 /// </summary> /// <param name="activityFunc">每一个活动的回调,如果返回False,则中止遍历</param> /// <param name="transitionFunc">每一条线的回调,如果返回False,则忽略该线</param> public void ProbeAllActivities(Func <WfProbeActivityArgs, bool> activityFunc, Func <IWfTransitionDescriptor, bool> transitionFunc) { activityFunc.NullCheck("activityFunc"); transitionFunc.NullCheck("transitionFunc"); Dictionary <IWfTransitionDescriptor, IWfTransitionDescriptor> elapsedTransitions = new Dictionary <IWfTransitionDescriptor, IWfTransitionDescriptor>(); InnerProbeAllActivities(this.InitialActivity, activityFunc, transitionFunc, 0, elapsedTransitions); }
public NGramSemanticGraphDistance(IDistance <float> e, Func <float, float> transform, float tolerance = 0F, float empty = 1F) { e.NullCheck(); transform.NullCheck(); this.TolerancePerNode = tolerance; this.EmptyNodeWeight = empty; this.ProbabilityDistace = e; this.TransformFunction = transform; }
/// <summary> /// 生成删除数据的SQL(时间封口) /// </summary> /// <param name="obj"></param> /// <param name="mapping"></param> /// <param name="getDeleteSql"></param> /// <param name="addCurrentTimeVar"></param> /// <param name="ignoreProperties"></param> /// <returns></returns> public string ToDeleteSql(T obj, ORMappingItemCollection mapping, Func <string> getDeleteSql, bool addCurrentTimeVar = true, params string[] ignoreProperties) { obj.NullCheck("obj"); mapping.NullCheck("mapping"); getDeleteSql.NullCheck("getDeleteSql"); return(VersionStrategyUpdateSqlHelper.ConstructUpdateSql(null, (strB, context) => { strB.Append(getDeleteSql()); }, addCurrentTimeVar)); }
private static WfClientProcessInfo ExecuteProcessActionByProcessID(string processID, WfClientRuntimeContext runtimeContext, Func <IWfProcess, WfExecutorBase> getExecutor) { processID.CheckStringIsNullOrEmpty("processID"); getExecutor.NullCheck("getExecutor"); IWfProcess process = GetProcessByProcessID(processID, runtimeContext); MeregeRuntimeContext(process, runtimeContext); ExecuteExecutor(process, runtimeContext, getExecutor); return(process.ToClientProcessInfo(runtimeContext.Operator).FillCurrentOpinion(process.CurrentActivity, runtimeContext.Operator)); }
/// <summary> /// 生成Update和Insert混合的子句。先Update,然后通过RowCount判断是需要Insert。其中Update子句可以自己构造 /// </summary> /// <param name="obj"></param> /// <param name="mapping"></param> /// <param name="getUpdateSql"></param> /// <param name="getInsertSql"></param> /// <param name="addCurrentTimeVar">是否添加@currentTime变量</param> /// <param name="ignoreProperties">需要忽略的属性</param> /// <returns></returns> public string ToUpdateSql(T obj, ORMappingItemCollection mapping, Func <string> getUpdateSql, Func <string> getInsertSql, bool addCurrentTimeVar = true, params string[] ignoreProperties) { obj.NullCheck("obj"); mapping.NullCheck("mapping"); getUpdateSql.NullCheck("getUpdateSql"); getInsertSql.NullCheck("getInsertSql"); return(VersionStrategyUpdateSqlHelper.ConstructUpdateSql(null, (strB, context) => { this.PrepareSingleObjectUpdateSql(strB, obj, mapping, true, getUpdateSql, getInsertSql, ignoreProperties); }, addCurrentTimeVar)); }
public static int Count <T>(this IEnumerable <T> t, Func <T, int> func) { t.NullCheck(); func.NullCheck(); int count = 0; foreach (var item in t) { count += func(item); } return(count); }
/// <summary> /// Converts the list to a string where each item is seperated by the Seperator /// </summary> /// <typeparam name="T">Item type</typeparam> /// <param name="List">List to convert</param> /// <param name="ItemOutput">Used to convert the item to a string (defaults to calling ToString)</param> /// <param name="Seperator">Seperator to use between items (defaults to ,)</param> /// <returns>The string version of the list</returns> public static string ToString <T>(this IEnumerable <T> List, Func <T, string> ItemOutput = null, string Seperator = ",") { List.ThrowIfNull("List"); Seperator = Seperator.NullCheck(""); ItemOutput = ItemOutput.NullCheck(x => x.ToString()); StringBuilder Builder = new StringBuilder(); string TempSeperator = ""; List.ForEach(x => { Builder.Append(TempSeperator).Append(ItemOutput(x)); TempSeperator = Seperator; }); return(Builder.ToString()); }
/// <summary> /// 将列表转换为字符串 /// </summary> public static string ToString <T>(this IEnumerable <T> list, Func <T, string> itemOutput = null, string seperator = ",") { list.ThrowIfNull("List"); seperator = seperator.NullCheck(""); itemOutput = itemOutput.NullCheck(x => x.ToString()); StringBuilder builder = new StringBuilder(); string tempSeperator = ""; list.ForEach(x => { builder.Append(tempSeperator).Append(itemOutput(x)); tempSeperator = seperator; }); return(builder.ToString()); }
private static void EnumerationVariables(string filePath, Func <string, string, bool> func) { func.NullCheck("func"); Regex r = new Regex(@"%\S+?%"); foreach (Match m in r.Matches(filePath)) { string variableName = m.Value.Trim('%'); if (func(m.Value, variableName) == false) { break; } } }
/// <summary> /// 加载某个应用的AppDomain,如果已经加载,则返回已经加载的AppDomain /// </summary> /// <param name="appName">应用名称</param> /// <param name="appDomainBuilder">AppDomain的创建器</param> /// <returns>应用程序域(AppDomain)</returns> public static AppDomain LoadAppDomain(string appName, Func<string, AppDomain> appDomainBuilder) { appName.CheckStringIsNullOrEmpty("appName"); appDomainBuilder.NullCheck("appDomainBuilder"); lock (_registeredDomains) { AppDomain domain = null; if (_registeredDomains.TryGetValue(appName, out domain) == false) { domain = CreateAppDomain(appName, appDomainBuilder); _registeredDomains.Add(appName, domain); } return domain; } }
/// <summary> /// 加载某个应用的AppDomain,如果已经加载,则返回已经加载的AppDomain /// </summary> /// <param name="appName">应用名称</param> /// <param name="appDomainBuilder">AppDomain的创建器</param> /// <returns>应用程序域(AppDomain)</returns> public static AppDomain LoadAppDomain(string appName, Func <string, AppDomain> appDomainBuilder) { appName.CheckStringIsNullOrEmpty("appName"); appDomainBuilder.NullCheck("appDomainBuilder"); lock (_registeredDomains) { AppDomain domain = null; if (_registeredDomains.TryGetValue(appName, out domain) == false) { domain = CreateAppDomain(appName, appDomainBuilder); _registeredDomains.Add(appName, domain); } return(domain); } }
/// <summary> /// 执行并且验证Task的返回结果 /// </summary> /// <param name="func"></param> private static void ExecuteAndAssertTask(Func <DO.SysTask> func) { func.NullCheck("func"); DO.SysTask task = func(); DO.SysTask taskLoaded = SysTaskAdapter.Instance.Load(task.TaskID); ISysTaskExecutor executor = SysTaskSettings.GetSettings().GetExecutor(taskLoaded.TaskType); executor.Execute(taskLoaded); SysAccomplishedTask accomplishedTask = SysAccomplishedTaskAdapter.Instance.Load(taskLoaded.TaskID); Assert.IsNotNull(accomplishedTask); Console.WriteLine(accomplishedTask.StatusText); Assert.AreEqual(SysTaskStatus.Completed, accomplishedTask.Status); }
/// <summary> /// 创建动态活动 /// </summary> /// <param name="createActivitiesParamsFetcher"></param> /// <returns></returns> private IList <IWfActivityDescriptor> InternalGenerateDynamicActivities(Func <WfCreateActivityParamCollection> createActivitiesParamsFetcher) { createActivitiesParamsFetcher.NullCheck("createActivitiesParamsFetcher"); List <IWfActivityDescriptor> result = null; //随便找一条进线和活动,构造动态活动的起始点。 IWfTransitionDescriptor firstTemplateTransition = this.FromTransitions.FirstOrDefault(); if (firstTemplateTransition != null) { //寻找动态活动的前一个点,如果有多个点,随机选取一个 WfActivityDescriptor startActDesp = (WfActivityDescriptor)firstTemplateTransition.FromActivity; IWfTransitionDescriptor dynInTransition = startActDesp.FindExsitedDynamicToTransition(this); ////没有生成过,或者已经生成过,且生成的活动还没有执行 if (dynInTransition == null || InstanceIsRunning(dynInTransition.ToActivity) == false) { //如果已经生成过 if (dynInTransition != null) { DeleteExistedDynamicActivities(dynInTransition, this); } WfCreateActivityParamCollection createActivityParams = createActivitiesParamsFetcher(); //活动矩阵定义的属性优先于活动模板定义的属性,矩阵中没有设置的属性,则使用活动模版的属性 MergeDynamicActivitiesProperties(createActivityParams, this); WfActivityDescriptorCollection createdActivities = CreateActivities(this.FromTransitions, createActivityParams, this.ToTransitions); ChangeNewDynActivitiesProperties(createdActivities, this); result = new List <IWfActivityDescriptor>(); createdActivities.CopyTo(result); } } return(result); }
/// <summary> /// 创建动态活动 /// </summary> /// <param name="createActivitiesParamsFetcher"></param> /// <returns></returns> private IList<IWfActivityDescriptor> InternalGenerateDynamicActivities(Func<WfCreateActivityParamCollection> createActivitiesParamsFetcher) { createActivitiesParamsFetcher.NullCheck("createActivitiesParamsFetcher"); List<IWfActivityDescriptor> result = null; //随便找一条进线和活动,构造动态活动的起始点。 IWfTransitionDescriptor firstTemplateTransition = this.FromTransitions.FirstOrDefault(); if (firstTemplateTransition != null) { //寻找动态活动的前一个点,如果有多个点,随机选取一个 WfActivityDescriptor startActDesp = (WfActivityDescriptor)firstTemplateTransition.FromActivity; IWfTransitionDescriptor dynInTransition = startActDesp.FindExsitedDynamicToTransition(this); ////没有生成过,或者已经生成过,且生成的活动还没有执行 if (dynInTransition == null || InstanceIsRunning(dynInTransition.ToActivity) == false) { //如果已经生成过 if (dynInTransition != null) DeleteExistedDynamicActivities(dynInTransition, this); WfCreateActivityParamCollection createActivityParams = createActivitiesParamsFetcher(); //活动矩阵定义的属性优先于活动模板定义的属性,矩阵中没有设置的属性,则使用活动模版的属性 MergeDynamicActivitiesProperties(createActivityParams, this); WfActivityDescriptorCollection createdActivities = CreateActivities(this.FromTransitions, createActivityParams, this.ToTransitions); ChangeNewDynActivitiesProperties(createdActivities, this); result = new List<IWfActivityDescriptor>(); createdActivities.CopyTo(result); } } return result; }
public static System.Collections.Generic.List <T> ToList <T>(this DataTable data, Func <T> creator = null) where T : new() { if (data.IsNull()) { return(new List <T>()); } creator = creator.NullCheck(() => new T()); Type type = typeof(T); PropertyInfo[] properties = type.GetProperties(); var results = new System.Collections.Generic.List <T>(); for (int x = 0; x < data.Rows.Count; ++x) { T rowObject = creator(); for (int y = 0; y < data.Columns.Count; ++y) { PropertyInfo property = properties.FirstOrDefault( z => String.Equals(z.Name, data.Columns[y].ColumnName, StringComparison.CurrentCulture)); if (!property.IsNull()) { if (property != null) { property.SetValue(rowObject, data.Rows[x][data.Columns[y]].TryTo(property.PropertyType, null), new object[] {}); } } } results.Add(rowObject); } return(results); }
private static WfClientProcessInfo ExecuteProcessActionByProcessID(string processID, WfClientRuntimeContext runtimeContext, Func<IWfProcess, WfExecutorBase> getExecutor) { processID.CheckStringIsNullOrEmpty("processID"); getExecutor.NullCheck("getExecutor"); IWfProcess process = GetProcessByProcessID(processID, runtimeContext); MeregeRuntimeContext(process, runtimeContext); ExecuteExecutor(process, runtimeContext, getExecutor); return process.ToClientProcessInfo(runtimeContext.Operator).FillCurrentOpinion(process.CurrentActivity, runtimeContext.Operator); }
/// <summary> /// Constructor /// </summary> /// <param name="StringToObject">String to object</param> /// <param name="ObjectToString">Object to string</param> protected Config(Func <string, ConfigClassType> StringToObject = null, Func <IConfig, string> ObjectToString = null) { this.ObjectToString = ObjectToString.NullCheck((x) => x.Serialize(new XMLSerializer(), FileLocation: ConfigFileLocation)); this.StringToObject = StringToObject.NullCheck((x) => (ConfigClassType)x.Deserialize(this.GetType(), new XMLSerializer())); }
/// <summary> /// 执行并且验证Task的返回结果 /// </summary> /// <param name="func"></param> private static void ExecuteAndAssertTask(Func<DO.SysTask> func) { func.NullCheck("func"); DO.SysTask task = func(); DO.SysTask taskLoaded = SysTaskAdapter.Instance.Load(task.TaskID); ISysTaskExecutor executor = SysTaskSettings.GetSettings().GetExecutor(taskLoaded.TaskType); executor.Execute(taskLoaded); SysAccomplishedTask accomplishedTask = SysAccomplishedTaskAdapter.Instance.Load(taskLoaded.TaskID); Assert.IsNotNull(accomplishedTask); Console.WriteLine(accomplishedTask.StatusText); Assert.AreEqual(SysTaskStatus.Completed, accomplishedTask.Status); }
/// <summary> /// Constructor /// </summary> /// <param name="StringToObject">String to object</param> /// <param name="ObjectToString">Object to string</param> public Config(Func <string, ConfigClassType> StringToObject = null, Func <IConfig, string> ObjectToString = null) { this.ObjectToString = ObjectToString.NullCheck((x) => x.ToXML(ConfigFileLocation)); this.StringToObject = StringToObject.NullCheck((x) => (ConfigClassType)x.XMLToObject(this.GetType())); }