Пример #1
0
        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);
        }
Пример #4
0
 /// <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()));
 }
Пример #5
0
        /// <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));
        }
Пример #10
0
        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());
        }
Пример #12
0
        /// <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());
        }
Пример #13
0
        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;
                }
            }
        }
Пример #14
0
        /// <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;
            }
        }
Пример #15
0
        /// <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);
            }
        }
Пример #16
0
        /// <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);
        }
Пример #21
0
 /// <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);
		}
Пример #23
0
 /// <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()));
 }