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); } } }
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) }); }); }
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."); } }