Beispiel #1
0
        protected virtual void MapProperties(SPJobDefinition currentJobInstance, JobDefinition jobDefinition)
        {
            if (!string.IsNullOrEmpty(jobDefinition.ScheduleString))
            {
                currentJobInstance.Schedule = SPSchedule.FromString(jobDefinition.ScheduleString);
            }

            if (!string.IsNullOrEmpty(jobDefinition.Title))
            {
                currentJobInstance.Title = jobDefinition.Title;
            }

            foreach (var prop in jobDefinition.Properties)
            {
                var key   = prop.Key;
                var value = prop.Value;

                if (currentJobInstance.Properties.ContainsKey(key))
                {
                    currentJobInstance.Properties[key] = value;
                }
                else
                {
                    currentJobInstance.Properties.Add(key, value);
                }
            }
        }
Beispiel #2
0
        public override void DeployModel(object modelHost, DefinitionBase model)
        {
            var webAppModelHost = modelHost.WithAssertAndCast <WebApplicationModelHost>("modelHost", value => value.RequireNotNull());
            var definition      = model.WithAssertAndCast <JobDefinition>("model", value => value.RequireNotNull());

            var spObject = FindWebApplicationJob(modelHost, webAppModelHost.HostWebApplication, definition);

            var assert = ServiceFactory.AssertService
                         .NewAssert(definition, spObject)
                         .ShouldNotBeNull(spObject)
                         .ShouldBeEqual(m => m.Name, o => o.Name)
                         .ShouldBeEqual(m => m.Title, o => o.Title);

            assert.ShouldBeEqual((p, s, d) =>
            {
                var srcProp = s.GetExpressionValue(def => def.JobType);

                var jobType   = ResolveJobType(definition);
                var spJobType = spObject.GetType();

                return(new PropertyValidationResult
                {
                    Tag = p.Tag,
                    Src = srcProp,
                    Dst = null,
                    IsValid = jobType == spJobType
                });
            });

            assert.ShouldBeEqual((p, s, d) =>
            {
                var srcProp    = s.GetExpressionValue(def => def.ScheduleString);
                var spSchedule = SPSchedule.FromString(definition.ScheduleString);

                return(new PropertyValidationResult
                {
                    Tag = p.Tag,
                    Src = srcProp,
                    Dst = null,
                    IsValid = spSchedule.Equals(spObject.Schedule)
                });
            });
        }
Beispiel #3
0
        private void DeployWebApplicationJob(object modelHost, SPWebApplication webApp, JobDefinition jobDefinition)
        {
            var currentJobInstance = FindWebApplicationJob(modelHost, webApp, jobDefinition);

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = currentJobInstance,
                ObjectType       = typeof(SPJobDefinition),
                ObjectDefinition = jobDefinition,
                ModelHost        = modelHost
            });

            if (currentJobInstance == null)
            {
                // install one
                var jobType = ResolveJobType(jobDefinition);

                // expecting only as timerjob is under web application
                //public cstr(string jobName, SPWebApplication webapp)

                if (jobDefinition.ConstructorParams.Count() == 0)
                {
                    currentJobInstance = (SPJobDefinition)Activator.CreateInstance(jobType);
                }
                else
                {
                    var parameters = new List <object>();

                    foreach (var param in jobDefinition.ConstructorParams)
                    {
                        switch (param)
                        {
                        case JobDefinitionCtorParams.JobName:
                            parameters.Add(jobDefinition.Name);
                            break;

                        case JobDefinitionCtorParams.WebApplication:
                            parameters.Add(webApp);
                            break;

                        default:
                            throw new SPMeta2NotImplementedException(string.Format("Job cstr parameter [{0}] is not supported yet.", param));
                        }
                    }

                    currentJobInstance = (SPJobDefinition)Activator.CreateInstance(jobType, parameters.ToArray());
                }

                if (!string.IsNullOrEmpty(jobDefinition.ScheduleString))
                {
                    currentJobInstance.Schedule = SPSchedule.FromString(jobDefinition.ScheduleString);
                }

                currentJobInstance.Title = jobDefinition.Title;

                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = currentJobInstance,
                    ObjectType       = typeof(SPJobDefinition),
                    ObjectDefinition = jobDefinition,
                    ModelHost        = modelHost
                });

                currentJobInstance.Update();
            }
            else
            {
                if (!string.IsNullOrEmpty(jobDefinition.ScheduleString))
                {
                    currentJobInstance.Schedule = SPSchedule.FromString(jobDefinition.ScheduleString);
                }

                currentJobInstance.Title = jobDefinition.Title;

                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = currentJobInstance,
                    ObjectType       = typeof(SPJobDefinition),
                    ObjectDefinition = jobDefinition,
                    ModelHost        = modelHost
                });

                currentJobInstance.Update();
            }
        }
        public override void DeployModel(object modelHost, DefinitionBase model)
        {
            var webAppModelHost = modelHost.WithAssertAndCast <WebApplicationModelHost>("modelHost", value => value.RequireNotNull());
            var definition      = model.WithAssertAndCast <JobDefinition>("model", value => value.RequireNotNull());

            var spObject = FindWebApplicationJob(modelHost, webAppModelHost.HostWebApplication, definition);

            var assert = ServiceFactory.AssertService
                         .NewAssert(definition, spObject)
                         .ShouldNotBeNull(spObject)
                         .ShouldBeEqual(m => m.Name, o => o.Name)
                         .ShouldBeEqual(m => m.Title, o => o.Title);

            assert.ShouldBeEqual((p, s, d) =>
            {
                var srcProp = s.GetExpressionValue(def => def.JobType);

                var jobType   = ResolveJobType(definition);
                var spJobType = spObject.GetType();

                return(new PropertyValidationResult
                {
                    Tag = p.Tag,
                    Src = srcProp,
                    Dst = null,
                    IsValid = jobType == spJobType
                });
            });

            assert.ShouldBeEqual((p, s, d) =>
            {
                var srcProp    = s.GetExpressionValue(def => def.ScheduleString);
                var spSchedule = SPSchedule.FromString(definition.ScheduleString);

                return(new PropertyValidationResult
                {
                    Tag = p.Tag,
                    Src = srcProp,
                    Dst = null,
                    IsValid = spSchedule.Equals(spObject.Schedule)
                });
            });

            if (definition.Properties.Any())
            {
                assert.ShouldBeEqual((p, s, d) =>
                {
                    var srcProp = s.GetExpressionValue(def => def.Properties);
                    var isValid = true;

                    foreach (var prop in s.Properties)
                    {
                        if (!d.Properties.ContainsKey(prop.Key))
                        {
                            isValid = false;
                            break;
                        }

                        var currentSrcProp = prop.Value;
                        var currentDstProp = d.Properties[prop.Key];

                        if (currentDstProp is string)
                        {
                            isValid = (string)currentDstProp == (string)currentSrcProp;
                        }
                        else if (currentDstProp is int)
                        {
                            isValid = (int)currentDstProp == (int)currentSrcProp;
                        }
                        else if (currentDstProp is double)
                        {
                            isValid = (double)currentDstProp == (double)currentSrcProp;
                        }
                        else
                        {
                            throw new Exception(string.Format("Type [{0}] is not supported yet", currentDstProp.GetType()));
                        }

                        if (!isValid)
                        {
                            break;
                        }
                    }

                    return(new PropertyValidationResult
                    {
                        Tag = p.Tag,
                        Src = srcProp,
                        Dst = null,
                        IsValid = isValid
                    });
                });
            }
            else
            {
                assert.SkipProperty(p => p.Properties, "Properties are empty. Skiping.");
            }
        }