diff --git a/SPMeta2/SPMeta2.Build/m2.buildbaseline.xml b/SPMeta2/SPMeta2.Build/m2.buildbaseline.xml
index c2904a19b..901cabf4d 100644
--- a/SPMeta2/SPMeta2.Build/m2.buildbaseline.xml
+++ b/SPMeta2/SPMeta2.Build/m2.buildbaseline.xml
@@ -1 +1 @@
-SPMeta2.dllSPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.AlternateUrlDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.AnonymousAccessSettingsDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.SharePointDesignerSettingsDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.DeveloperDashboardSettingsDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.AppDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.AuditSettingsDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ClearRecycleBinDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ListItemDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ComposedLookItemDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ComposedLookItemLinkDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ContentDatabaseDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.DeleteQuickLaunchNavigationNodesDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.DeleteWebPartsDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.DiscussionReplyItemDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.FieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.LookupFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.DependentLookupFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.DocumentParserDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.MultiChoiceFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.ChoiceFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.OutcomeChoiceFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.GeolocationFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.DiscussionItemDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ListItemFieldValuesDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.HtmlMasterPageDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.MasterPagePreviewDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.MasterPageDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.PeoplePickerSettingsDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ResetRoleInheritanceDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.SupportedUICultureDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.DeleteTopNavigationNodesDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.TreeViewSettingsDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.RootWebDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.DiagnosticsServiceBaseDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.EventReceiverDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.CalculatedFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.NumberFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.GuidFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.ComputedFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.URLFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.UserFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.DateTimeFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.BooleanFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.NoteFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.CurrencyFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.TextFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.InformationRightsManagementSettingsDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.MasterPageSettingsDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.RegionalSettingsDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.SecureStoreApplicationDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.TargetApplicationDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.TrustedAccessProviderDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.WebConfigModificationDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.WebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.BlogAdminWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.BlogLinksWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.BlogMonthQuickLaunchDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.DataFormWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.GettingStartedWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.ImageWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.MembersWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.PageViewerWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.PictureLibrarySlideshowWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.SilverlightWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.SimpleFormWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.SPTimelineWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.UserCodeWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.UserDocsWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.UserTasksWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.WebPartGalleryFileDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.XmlWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.UserDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.WorkflowAssociationDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.AppPrincipalDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.BreakRoleInheritanceDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ContentTypes.RemoveContentTypeFieldLinksDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ContentTypes.HideContentTypeFieldLinksDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ContentTypes.UniqueContentTypeFieldsOrderDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.FarmSolutionDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.BusinessDataFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ContentTypes.RemoveContentTypeLinksDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.JobDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ManagedAccountDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.SandboxSolutionDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ContentTypes.HideContentTypeLinksDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ContentTypes.UniqueContentTypeOrderDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.ClientWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.ScriptEditorWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.ContentEditorWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.ListViewWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.XsltListViewWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.WelcomePageDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ContentTypeDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ContentTypeFieldLinkDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ContentTypeLinkDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.FolderDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ListFieldLinkDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ModuleFileDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.PrefixDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.QuickLaunchNavigationNodeDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.SP2013WorkflowDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.SP2013WorkflowSubscriptionDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.TopNavigationNodeDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.UserCustomActionDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.FarmDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.PropertyDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.FeatureDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ListDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ListViewDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.SecurityGroupDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.SecurityGroupLinkDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.SecurityRoleDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.SecurityRoleLinkDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.SiteDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.WebApplicationDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.WebDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.WebPartPageDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.WikiPageDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ListItemFieldValueDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Services.ServiceModelHandlers.DiscussionBoardListDefinitionValidationModelHandler, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Services.ServiceModelHandlers.BooleanFieldDefinitionValidationModelHandler, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Services.ServiceModelHandlers.DefaultContentTypeIdPropertyModelHandler, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Services.ServiceModelHandlers.DefaultRequiredPropertiesModelHandler, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Services.ServiceModelHandlers.DefaultNotAbsoluteUrlPropertiesModelHandler, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Services.ServiceModelHandlers.DefaultVersionBasedPropertiesModelHandler, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Services.ServiceModelHandlers.DefaultFieldInternalNamePropertyModelHandler, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Services.ServiceModelHandlers.DefaultXmlBasedPropertiesModelHandler, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.dllSPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.DesignPackageDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.ProfileTypePropertyDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.CorePropertyDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.DocumentSetDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.DisplayTemplates.ControlDisplayTemplateDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.DisplayTemplates.FilterDisplayTemplateDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.ManagedPropertyDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.MetadataNavigationSettingsDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.ReusableHTMLItemDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.ReusableTextItemDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.AdvancedSearchBoxDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.CategoryWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.CommunityAdminWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.CommunityJoinWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.DocumentSetContentsWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.DocumentSetPropertiesWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.MyMembershipWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.ProjectSummaryWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.RefinementScriptWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.RSSAggregatorWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.SearchBoxScriptWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.SearchNavigationWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.SiteDocumentsDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.SocialCommentWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.TableOfContentsWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.TagCloudWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.CustomDocumentIdProviderDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.DisplayTemplates.JavaScriptDisplayTemplateDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.DisplayTemplates.ItemDisplayTemplateDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Fields.MediaFieldDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Fields.SummaryLinkFieldDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Fields.LinkFieldDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Fields.ImageFieldDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Fields.HTMLFieldDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.PageLayoutAndSiteTemplateSettingsDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.AudienceDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Fields.TaxonomyFieldDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.ImageRenditionDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.PublishingPageLayoutDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.PublishingPageDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.SearchConfigurationDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.SearchResultDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.SearchSettingsDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Taxonomy.TaxonomyTermLabelDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.WebNavigationSettingsDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.ContactFieldControlDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.ContentBySearchWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.ContentByQueryWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.ResultScriptWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.SiteFeedWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.SummaryLinkWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Taxonomy.TaxonomyTermDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Taxonomy.TaxonomyTermGroupDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Taxonomy.TaxonomyTermSetDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Taxonomy.TaxonomyTermStoreDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Services.ServiceModelHandlers.PublishingPageDefinitionValidationModelHandler, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.dllSPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.AnonymousAccessSettingsModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.AppModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.AppPrincipalModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Base.WebPartGalleryFileModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.BreakRoleInheritanceModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ClearRecycleBinModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ListItemModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ComposedLookItemLinkModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ContentTypeFieldLinkModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ContentTypeLinkModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ContentTypeModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ContentTypes.HideContentTypeFieldLinksModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ContentTypes.RemoveContentTypeFieldLinksModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ContentTypes.UniqueContentTypeFieldsOrderModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ContentTypes.HideContentTypeLinksModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ContentTypes.RemoveContentTypeLinksModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ContentTypes.UniqueContentTypeOrderModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.QuickLaunchNavigationNodeModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.DeleteQuickLaunchNavigationNodesModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.TopNavigationNodeModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.DeleteTopNavigationNodesModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.DeleteWebPartsModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.DiscussionReplyItemModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.EventReceiverModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.FeatureModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.FieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.LookupFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.DependentLookupFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.MultiChoiceFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.ChoiceFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.OutcomeChoiceFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.GeolocationFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.CalculatedFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.ComputedFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.NumberFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.GuidFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.URLFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.UserFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.BooleanFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.DateTimeFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.TextFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.NoteFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.CurrencyFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.BusinessDataFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.FolderModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.InformationRightsManagementSettingsModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ListFieldLinkModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ListItemFieldValuesModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ListItemFieldValueModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.DiscussionItemModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.SharePointDesignerSettingsModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.UserModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ListModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ListViewModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.HtmlMasterPageModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.MasterPagePreviewModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.MasterPageSettingsModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.PropertyModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.MasterPageModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.RegionalSettingsModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ResetRoleInheritanceModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ComposedLookItemModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.SecurityGroupLinkModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.SecurityGroupModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.SecurityRoleLinkModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.SecurityRoleModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.SiteModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.SP2013WorkflowSubscriptionDefinitionModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.SupportedUICultureModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.TreeViewSettingsModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.UserCustomActionModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.RootWebModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.WebModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.WebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.WebPartPageModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.BlogAdminWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.BlogLinksWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.BlogMonthQuickLaunchModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.DataFormWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.GettingStartedWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.ImageWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.MembersWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.PageViewerWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.PictureLibrarySlideshowWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.SilverlightWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.SimpleFormWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.SPTimelineWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.UserCodePartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.ClientWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.ScriptEditorWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.ContentEditorWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.ListViewWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.UserDocsWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.UserTasksWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.XmlWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.WelcomePageModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.WorkflowAssociationModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.WikiPageModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.XsltListViewWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ModuleFileModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.SP2013WorkflowDefinitionHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.dllSPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.DisplayTemplates.ControlDisplayTemplateModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.DisplayTemplates.FilterDisplayTemplateModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.DisplayTemplates.JavaScriptDisplayTemplateModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.DisplayTemplates.ItemDisplayTemplateModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.DesignPackageModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Fields.SummaryLinkFieldModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Fields.MediaFieldModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Fields.LinkFieldModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Fields.HTMLFieldModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Fields.ImageFieldModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Fields.TaxonomyFieldModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.DocumentSetModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.ImageRenditionModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.MetadataNavigationSettingsModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.PageLayoutAndSiteTemplateSettingsModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.PublishingPageLayoutModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.PublishingPageModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.ReusableHTMLItemModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.ReusableTextItemModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.SearchSettingsModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.SearchConfigurationModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.SearchResultModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Taxonomy.TaxonomyGroupModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Taxonomy.TaxonomyTermLabelModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Taxonomy.TaxonomyTermModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Taxonomy.TaxonomyTermSetModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Taxonomy.TaxonomyTermStoreModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.WebNavigationSettingsModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.AdvancedSearchBoxModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.CategoryWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.CommunityAdminWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.CommunityJoinWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.ContentBySearchWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.DocumentSetContentsWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.DocumentSetPropertiesWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.MyMembershipWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.RefinementScriptWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.ResultScriptWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.ProjectSummaryWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.RSSAggregatorWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.SearchBoxScriptWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.SearchNavigationWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.SiteDocumentsModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.SocialCommentWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.SummaryLinkWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.ContactFieldControlModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.ContentByQueryWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.SiteFeedWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.TableOfContentsWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.TagCloudWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.SandboxSolutionModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.dllSPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.AnonymousAccessSettingsModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.AuditSettingsModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.TopNavigationNodeModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.DeleteTopNavigationNodesModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.QuickLaunchNavigationNodeModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.DeleteQuickLaunchNavigationNodesModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ClearRecycleBinModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ComposedLookItemLinkModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.DeleteWebPartsModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ListItemModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.DiscussionReplyItemModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.DocumentParserModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.AlternateUrlModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.AppModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.AppPrincipalModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ContentTypes.HideContentTypeFieldLinksModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ContentTypes.RemoveContentTypeFieldLinksModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ContentTypes.RemoveContentTypeLinksModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ContentTypes.HideContentTypeLinksModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ContentTypes.UniqueContentTypeFieldsOrderModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.DiagnosticsServiceBaseModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.EventReceiverModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.FarmSolutionModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.FieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.LookupFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.DependentLookupFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.GeolocationFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.MultiChoiceFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.ChoiceFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.OutcomeChoiceFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.URLFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.CalculatedFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.ComputedFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.DateTimeFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.BooleanFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.GuidFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.NumberFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.TextFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.NoteFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.CurrencyFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.UserFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ContentDatabaseModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.InformationRightsManagementSettingsModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ListItemFieldValuesModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.HtmlMasterPageModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.DiscussionItemModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.MasterPagePreviewModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.MasterPageModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.PeoplePickerSettingsModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ResetRoleInheritanceModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ComposedLookItemModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.SharePointDesignerSettingsModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.UserModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.SupportedUICultureModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.TreeViewSettingsModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ManagedAccountModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.MasterPageSettingsModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.PropertyModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.BreakRoleInheritanceModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ContentTypeFieldLinkModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ContentTypeLinkModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ContentTypeModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.FeatureModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.BusinessDataFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.FolderModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.JobModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ListFieldLinkModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ListItemFieldValueModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ModuleFileModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.PrefixModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.RegionalSettingsModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.SandboxSolutionModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.SecureStoreApplicationModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.SP2013WorkflowDefinitionHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.SP2013WorkflowSubscriptionDefinitionModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.TargetApplicationModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ContentTypes.UniqueContentTypeOrderModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.UserCustomActionModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.DeveloperDashboardSettingsModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.TrustedAccessProviderModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.WebApplicationModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.WebConfigModificationModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.RootWebModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.WebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.FarmModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ListModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ListViewModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.SecurityGroupLinkModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.SecurityGroupModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.SecurityRoleLinkModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.SecurityRoleModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.SiteModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.WebModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.WebPartPageModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.BlogAdminWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.BlogLinksWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.BlogMonthQuickLaunchModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.ClientWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.DataFormWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.GettingStartedWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.ImageWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.ListViewWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.MembersWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.PageViewerWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.PictureLibrarySlideshowWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.SilverlightWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.SimpleFormWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.SPTimelineWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.UserCodePartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.UserDocsWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.UserTasksWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.WebPartGalleryFileModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.XmlWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.XsltListViewWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.ScriptEditorWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.ContentEditorWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.WelcomePageModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.WikiPageModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.WorkflowAssociationModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.dllSPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.DesignPackageModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.CorePropertyModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.DocumentSetModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.DisplayTemplates.ControlDisplayTemplateModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.DisplayTemplates.FilterDisplayTemplateModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.DisplayTemplates.JavaScriptDisplayTemplateModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.DisplayTemplates.ItemDisplayTemplateModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Fields.SummaryLinkFieldModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Fields.MediaFieldDefinitionModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Fields.HTMLFieldModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Fields.ImageFieldModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Fields.LinkFieldModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.ManagedPropertyModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.MetadataNavigationSettingsModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.ReusableTextItemModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.ReusableHTMLItemModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.SearchSettingsModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.CustomDocumentIdProviderModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.PageLayoutAndSiteTemplateSettingsModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Fields.TaxonomyFieldModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.AudienceModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.ImageRenditionModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.PublishingPageLayoutModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.PublishingPageModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.SearchResultModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.SearchConfigurationModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Taxonomy.TaxonomyTermLabelModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Taxonomy.TaxonomyTermStoreModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Taxonomy.TaxonomyTermSetModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Taxonomy.TaxonomyTermModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Taxonomy.TaxonomyGroupModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.WebNavigationSettingsModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.AdvancedSearchBoxModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.CategoryWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.CommunityAdminWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.CommunityJoinWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.ContentBySearchWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.DocumentSetContentsWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.DocumentSetPropertiesWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.MyMembershipWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.RefinementScriptWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.ResultScriptWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.RSSAggregatorWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.SearchBoxScriptWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.SearchNavigationWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.SiteDocumentsModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.SocialCommentWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.SummaryLinkWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.ContactFieldControlModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.ContentByQueryWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.SiteFeedWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.TableOfContentsWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.TagCloudWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.ProjectSummaryWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531a
\ No newline at end of file
+SPMeta2.dllSPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.AlternateUrlDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.AnonymousAccessSettingsDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.SharePointDesignerSettingsDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.DeveloperDashboardSettingsDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.AppDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.AuditSettingsDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ClearRecycleBinDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ListItemDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ComposedLookItemDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ComposedLookItemLinkDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ContentDatabaseDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.DeleteQuickLaunchNavigationNodesDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.DeleteWebPartsDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.DiscussionReplyItemDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.FieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.LookupFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.DependentLookupFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.DocumentParserDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.MultiChoiceFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.ChoiceFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.OutcomeChoiceFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.GeolocationFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.DiscussionItemDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ListItemFieldValuesDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.HtmlMasterPageDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.MasterPagePreviewDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.MasterPageDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.PeoplePickerSettingsDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ResetRoleInheritanceDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.SupportedUICultureDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.DeleteTopNavigationNodesDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.TreeViewSettingsDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.RootWebDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.DiagnosticsServiceBaseDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.EventReceiverDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.CalculatedFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.NumberFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.GuidFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.ComputedFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.URLFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.UserFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.DateTimeFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.BooleanFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.NoteFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.CurrencyFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.TextFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.InformationRightsManagementSettingsDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.MasterPageSettingsDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.RegionalSettingsDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.SecureStoreApplicationDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.TargetApplicationDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.TrustedAccessProviderDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.WebConfigModificationDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.WebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.BlogAdminWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.BlogLinksWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.BlogMonthQuickLaunchDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.DataFormWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.GettingStartedWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.ImageWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.MembersWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.PageViewerWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.PictureLibrarySlideshowWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.SilverlightWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.SimpleFormWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.SPTimelineWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.UserCodeWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.UserDocsWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.UserTasksWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.WebPartGalleryFileDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.XmlWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.UserDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.WorkflowAssociationDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.AppPrincipalDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.BreakRoleInheritanceDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ContentTypes.RemoveContentTypeFieldLinksDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ContentTypes.HideContentTypeFieldLinksDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ContentTypes.UniqueContentTypeFieldsOrderDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.FarmSolutionDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Fields.BusinessDataFieldDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ContentTypes.RemoveContentTypeLinksDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.JobDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ManagedAccountDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.SandboxSolutionDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ContentTypes.HideContentTypeLinksDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ContentTypes.UniqueContentTypeOrderDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.ClientWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.ScriptEditorWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.ContentEditorWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.ListViewWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.Webparts.XsltListViewWebPartDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.WelcomePageDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ContentTypeDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ContentTypeFieldLinkDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ContentTypeLinkDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.FolderDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ListFieldLinkDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ModuleFileDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.PrefixDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.QuickLaunchNavigationNodeDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.SP2013WorkflowDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.SP2013WorkflowSubscriptionDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.TopNavigationNodeDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.UserCustomActionDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.FarmDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.PropertyDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.FeatureDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ListDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ListViewDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.SecurityGroupDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.SecurityGroupLinkDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.SecurityRoleDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.SecurityRoleLinkDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.SiteDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.WebApplicationDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.WebDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.WebPartPageDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.WikiPageDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Definitions.ListItemFieldValueDefinition, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Services.ServiceModelHandlers.DiscussionBoardListDefinitionValidationModelHandler, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Services.ServiceModelHandlers.BooleanFieldDefinitionValidationModelHandler, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Services.ServiceModelHandlers.DefaultContentTypeIdPropertyModelHandler, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Services.ServiceModelHandlers.DefaultRequiredPropertiesModelHandler, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Services.ServiceModelHandlers.DefaultNotAbsoluteUrlPropertiesModelHandler, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Services.ServiceModelHandlers.DefaultVersionBasedPropertiesModelHandler, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Services.ServiceModelHandlers.DefaultFieldInternalNamePropertyModelHandler, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Services.ServiceModelHandlers.DefaultXmlBasedPropertiesModelHandler, SPMeta2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.dllSPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.DesignPackageDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.ProfileTypePropertyDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.CorePropertyDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.DocumentSetDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.DisplayTemplates.ControlDisplayTemplateDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.DisplayTemplates.FilterDisplayTemplateDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.ManagedPropertyDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.MetadataNavigationSettingsDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.ReusableHTMLItemDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.ReusableTextItemDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.AdvancedSearchBoxDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.CategoryWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.CommunityAdminWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.CommunityJoinWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.DocumentSetContentsWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.DocumentSetPropertiesWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.MyMembershipWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.ProjectSummaryWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.RefinementScriptWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.RSSAggregatorWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.SearchBoxScriptWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.SearchNavigationWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.SiteDocumentsDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.SocialCommentWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.TableOfContentsWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.TagCloudWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.CustomDocumentIdProviderDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.DisplayTemplates.JavaScriptDisplayTemplateDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.DisplayTemplates.ItemDisplayTemplateDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Fields.MediaFieldDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Fields.SummaryLinkFieldDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Fields.LinkFieldDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Fields.ImageFieldDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Fields.HTMLFieldDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.PageLayoutAndSiteTemplateSettingsDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.AudienceDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Fields.TaxonomyFieldDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.ImageRenditionDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.PublishingPageLayoutDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.PublishingPageDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.SearchConfigurationDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.SearchResultDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.SearchSettingsDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Taxonomy.TaxonomyTermLabelDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.WebNavigationSettingsDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.ContactFieldControlDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.ContentBySearchWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.ContentByQueryWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.ResultScriptWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.SiteFeedWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Webparts.SummaryLinkWebPartDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Taxonomy.TaxonomyTermDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Taxonomy.TaxonomyTermGroupDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Taxonomy.TaxonomyTermSetDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Definitions.Taxonomy.TaxonomyTermStoreDefinition, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.Standard.Services.ServiceModelHandlers.PublishingPageDefinitionValidationModelHandler, SPMeta2.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.dllSPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.AnonymousAccessSettingsModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.AppModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.AppPrincipalModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Base.WebPartGalleryFileModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.BreakRoleInheritanceModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ClearRecycleBinModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ListItemModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ComposedLookItemLinkModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ContentTypeFieldLinkModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ContentTypeLinkModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ContentTypeModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ContentTypes.HideContentTypeFieldLinksModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ContentTypes.RemoveContentTypeFieldLinksModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ContentTypes.UniqueContentTypeFieldsOrderModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ContentTypes.HideContentTypeLinksModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ContentTypes.RemoveContentTypeLinksModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ContentTypes.UniqueContentTypeOrderModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.QuickLaunchNavigationNodeModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.DeleteQuickLaunchNavigationNodesModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.TopNavigationNodeModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.DeleteTopNavigationNodesModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.DeleteWebPartsModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.DiscussionReplyItemModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.EventReceiverModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.FeatureModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.FieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.LookupFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.DependentLookupFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.MultiChoiceFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.ChoiceFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.OutcomeChoiceFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.GeolocationFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.CalculatedFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.ComputedFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.NumberFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.GuidFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.URLFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.UserFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.BooleanFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.DateTimeFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.TextFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.NoteFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.CurrencyFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Fields.BusinessDataFieldModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.FolderModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.InformationRightsManagementSettingsModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ListFieldLinkModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ListItemFieldValuesModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ListItemFieldValueModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.DiscussionItemModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.SharePointDesignerSettingsModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.UserModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ListModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ListViewModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.HtmlMasterPageModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.MasterPagePreviewModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.MasterPageSettingsModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.PropertyModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.MasterPageModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.RegionalSettingsModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ResetRoleInheritanceModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ComposedLookItemModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.SecurityGroupLinkModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.SecurityGroupModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.SecurityRoleLinkModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.SecurityRoleModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.SiteModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.SP2013WorkflowSubscriptionDefinitionModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.SupportedUICultureModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.TreeViewSettingsModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.UserCustomActionModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.RootWebModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.WebModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.WebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.WebPartPageModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.BlogAdminWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.BlogLinksWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.BlogMonthQuickLaunchModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.DataFormWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.GettingStartedWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.ImageWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.MembersWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.PageViewerWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.PictureLibrarySlideshowWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.SilverlightWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.SimpleFormWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.SPTimelineWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.UserCodePartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.ClientWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.ScriptEditorWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.ContentEditorWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.ListViewWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.UserDocsWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.UserTasksWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.XmlWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.WelcomePageModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.WorkflowAssociationModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.WikiPageModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.Webparts.XsltListViewWebPartModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.ModuleFileModelHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.ModelHandlers.SP2013WorkflowDefinitionHandler, SPMeta2.CSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.dllSPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.DisplayTemplates.ControlDisplayTemplateModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.DisplayTemplates.FilterDisplayTemplateModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.DisplayTemplates.JavaScriptDisplayTemplateModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.DisplayTemplates.ItemDisplayTemplateModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.SandboxSolutionModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.DesignPackageModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Fields.SummaryLinkFieldModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Fields.MediaFieldModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Fields.LinkFieldModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Fields.HTMLFieldModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Fields.ImageFieldModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Fields.TaxonomyFieldModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.DocumentSetModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.ImageRenditionModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.MetadataNavigationSettingsModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.PageLayoutAndSiteTemplateSettingsModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.PublishingPageLayoutModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.PublishingPageModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.ReusableHTMLItemModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.ReusableTextItemModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.SearchSettingsModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.SearchConfigurationModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.SearchResultModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Taxonomy.TaxonomyGroupModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Taxonomy.TaxonomyTermLabelModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Taxonomy.TaxonomyTermModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Taxonomy.TaxonomyTermSetModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Taxonomy.TaxonomyTermStoreModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.WebNavigationSettingsModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.AdvancedSearchBoxModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.CategoryWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.CommunityAdminWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.CommunityJoinWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.ContentBySearchWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.DocumentSetContentsWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.DocumentSetPropertiesWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.MyMembershipWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.RefinementScriptWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.ResultScriptWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.ProjectSummaryWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.RSSAggregatorWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.SearchBoxScriptWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.SearchNavigationWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.SiteDocumentsModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.SocialCommentWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.SummaryLinkWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.ContactFieldControlModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.ContentByQueryWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.SiteFeedWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.TableOfContentsWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.CSOM.Standard.ModelHandlers.Webparts.TagCloudWebPartModelHandler, SPMeta2.CSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.dllSPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.AnonymousAccessSettingsModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.AuditSettingsModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.TopNavigationNodeModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.DeleteTopNavigationNodesModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.QuickLaunchNavigationNodeModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.DeleteQuickLaunchNavigationNodesModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ClearRecycleBinModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ComposedLookItemLinkModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.DeleteWebPartsModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ListItemModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.DiscussionReplyItemModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.DocumentParserModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.AlternateUrlModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.AppModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.AppPrincipalModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ContentTypes.HideContentTypeFieldLinksModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ContentTypes.RemoveContentTypeFieldLinksModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ContentTypes.RemoveContentTypeLinksModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ContentTypes.HideContentTypeLinksModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ContentTypes.UniqueContentTypeFieldsOrderModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.DiagnosticsServiceBaseModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.EventReceiverModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.FarmSolutionModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.FieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.LookupFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.DependentLookupFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.GeolocationFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.MultiChoiceFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.ChoiceFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.OutcomeChoiceFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.URLFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.CalculatedFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.ComputedFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.DateTimeFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.BooleanFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.GuidFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.NumberFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.TextFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.NoteFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.CurrencyFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.UserFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ContentDatabaseModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.InformationRightsManagementSettingsModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ListItemFieldValuesModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.HtmlMasterPageModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.DiscussionItemModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.MasterPagePreviewModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.MasterPageModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.PeoplePickerSettingsModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ResetRoleInheritanceModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ComposedLookItemModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.SharePointDesignerSettingsModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.UserModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.SupportedUICultureModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.TreeViewSettingsModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ManagedAccountModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.MasterPageSettingsModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.PropertyModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.BreakRoleInheritanceModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ContentTypeFieldLinkModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ContentTypeLinkModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ContentTypeModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.FeatureModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Fields.BusinessDataFieldModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.FolderModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.JobModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ListFieldLinkModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ListItemFieldValueModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ModuleFileModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.PrefixModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.RegionalSettingsModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.SandboxSolutionModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.SecureStoreApplicationModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.SP2013WorkflowDefinitionHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.SP2013WorkflowSubscriptionDefinitionModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.TargetApplicationModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ContentTypes.UniqueContentTypeOrderModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.UserCustomActionModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.DeveloperDashboardSettingsModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.TrustedAccessProviderModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.WebApplicationModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.WebConfigModificationModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.RootWebModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.WebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.FarmModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ListModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.ListViewModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.SecurityGroupLinkModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.SecurityGroupModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.SecurityRoleLinkModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.SecurityRoleModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.SiteModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.WebModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.WebPartPageModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.BlogAdminWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.BlogLinksWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.BlogMonthQuickLaunchModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.ClientWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.DataFormWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.GettingStartedWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.ImageWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.ListViewWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.MembersWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.PageViewerWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.PictureLibrarySlideshowWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.SilverlightWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.SimpleFormWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.SPTimelineWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.UserCodePartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.UserDocsWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.UserTasksWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.WebPartGalleryFileModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.XmlWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.XsltListViewWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.ScriptEditorWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.Webparts.ContentEditorWebPartModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.WelcomePageModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.WikiPageModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.ModelHandlers.WorkflowAssociationModelHandler, SPMeta2.SSOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.dllSPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.DesignPackageModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.CorePropertyModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.DocumentSetModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.DisplayTemplates.ControlDisplayTemplateModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.DisplayTemplates.FilterDisplayTemplateModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.DisplayTemplates.JavaScriptDisplayTemplateModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.DisplayTemplates.ItemDisplayTemplateModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Fields.SummaryLinkFieldModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Fields.MediaFieldDefinitionModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Fields.HTMLFieldModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Fields.ImageFieldModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Fields.LinkFieldModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.ManagedPropertyModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.MetadataNavigationSettingsModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.ReusableTextItemModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.ReusableHTMLItemModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.SearchSettingsModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.CustomDocumentIdProviderModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.PageLayoutAndSiteTemplateSettingsModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Fields.TaxonomyFieldModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.AudienceModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.ImageRenditionModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.PublishingPageLayoutModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.PublishingPageModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.SearchResultModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.SearchConfigurationModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Taxonomy.TaxonomyTermLabelModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Taxonomy.TaxonomyTermStoreModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Taxonomy.TaxonomyTermSetModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Taxonomy.TaxonomyTermModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Taxonomy.TaxonomyGroupModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.WebNavigationSettingsModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.AdvancedSearchBoxModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.CategoryWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.CommunityAdminWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.CommunityJoinWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.ContentBySearchWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.DocumentSetContentsWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.DocumentSetPropertiesWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.MyMembershipWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.RefinementScriptWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.ResultScriptWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.RSSAggregatorWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.SearchBoxScriptWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.SearchNavigationWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.SiteDocumentsModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.SocialCommentWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.SummaryLinkWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.ContactFieldControlModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.ContentByQueryWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.SiteFeedWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.TableOfContentsWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.TagCloudWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531aSPMeta2.SSOM.Standard.ModelHandlers.Webparts.ProjectSummaryWebPartModelHandler, SPMeta2.SSOM.Standard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d71faae3bf28531a
\ No newline at end of file
diff --git a/SPMeta2/SPMeta2.CSOM.Standard/ModelHandlers/Taxonomy/TaxonomyTermModelHandler.cs b/SPMeta2/SPMeta2.CSOM.Standard/ModelHandlers/Taxonomy/TaxonomyTermModelHandler.cs
index 85d2481b1..681dc19a7 100644
--- a/SPMeta2/SPMeta2.CSOM.Standard/ModelHandlers/Taxonomy/TaxonomyTermModelHandler.cs
+++ b/SPMeta2/SPMeta2.CSOM.Standard/ModelHandlers/Taxonomy/TaxonomyTermModelHandler.cs
@@ -1,350 +1,427 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using Microsoft.SharePoint.Client;
-using Microsoft.SharePoint.Client.Taxonomy;
-using SPMeta2.Common;
-using SPMeta2.CSOM.Extensions;
-using SPMeta2.CSOM.ModelHandlers;
-using SPMeta2.CSOM.Standard.ModelHosts;
-using SPMeta2.Definitions;
-using SPMeta2.Exceptions;
-using SPMeta2.Services;
-using SPMeta2.Standard.Definitions.Taxonomy;
-using SPMeta2.Standard.Utils;
-using SPMeta2.Utils;
-
-namespace SPMeta2.CSOM.Standard.ModelHandlers.Taxonomy
-{
- public class TaxonomyTermModelHandler : CSOMModelHandlerBase
- {
- #region properties
-
- public override Type TargetType
- {
- get { return typeof(TaxonomyTermDefinition); }
- }
-
- #endregion
-
- #region methods
-
- public override void DeployModel(object modelHost, DefinitionBase model)
- {
- var definition = model.WithAssertAndCast("model", value => value.RequireNotNull());
-
- if (!TaxonomyUtility.IsValidTermName(definition.Name))
- {
- throw new SPMeta2Exception(
- string.Format("Term name [{0}] cannot contain any of the following characters: {1}",
- definition.Name,
- string.Join(", ", TaxonomyUtility.InvalidTermNameStrings)));
- }
-
- if (modelHost is TermModelHost)
- DeployTermUnderTerm(modelHost, modelHost as TermModelHost, definition);
- else if (modelHost is TermSetModelHost)
- DeployTermUnderTermSet(modelHost, modelHost as TermSetModelHost, definition);
- else
- {
- throw new SPMeta2UnsupportedModelHostException(string.Format("Model host of type: [{0}] is not supported", modelHost.GetType()));
- }
- }
-
- protected virtual string NormalizeTermName(string termName)
- {
- return TaxonomyUtility.NormalizeName(termName);
- }
-
- public override void WithResolvingModelHost(ModelHostResolveContext modelHostContext)
- {
- var modelHost = modelHostContext.ModelHost;
- var model = modelHostContext.Model;
- var childModelType = modelHostContext.ChildModelType;
- var action = modelHostContext.Action;
-
-
- var definition = model.WithAssertAndCast("model", value => value.RequireNotNull());
-
- Term currentTerm = null;
- TermGroup group = null;
- TermSet termSet = null;
- TermStore termStore = null;
-
- TermModelHost localModelHost = new TermModelHost();
-
- if (modelHost is TermModelHost)
- {
- var h = (modelHost as TermModelHost);
-
- group = h.HostGroup;
- termSet = h.HostTermSet;
- termStore = h.HostTermStore;
-
- currentTerm = FindTermInTerm(h.HostTerm, definition);
-
- localModelHost.HostGroup = group;
- localModelHost.HostTermSet = termSet;
- localModelHost.HostTerm = currentTerm;
- localModelHost.HostTermStore = termStore;
- }
- else if (modelHost is TermSetModelHost)
- {
- var h = (modelHost as TermSetModelHost);
-
- termStore = h.HostTermStore;
- group = h.HostGroup;
- termSet = h.HostTermSet;
-
- currentTerm = FindTermInTermSet(h.HostTermSet, definition);
-
- localModelHost.HostGroup = group;
- localModelHost.HostTermSet = termSet;
- localModelHost.HostTerm = currentTerm;
- localModelHost.HostTermStore = termStore;
- }
-
- action(localModelHost);
- }
-
- private void DeployTermUnderTermSet(object modelHost, TermSetModelHost groupModelHost, TaxonomyTermDefinition termModel)
- {
- var termStore = groupModelHost.HostTermStore;
- var termSet = groupModelHost.HostTermSet;
-
- var currentTerm = FindTermInTermSet(termSet, termModel);
- var termName = NormalizeTermName(termModel.Name);
-
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioning,
- Object = currentTerm,
- ObjectType = typeof(Term),
- ObjectDefinition = termModel,
- ModelHost = modelHost
- });
-
- if (currentTerm == null)
- {
- TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new Term");
-
- currentTerm = termModel.Id.HasValue
- ? termSet.CreateTerm(termName, termModel.LCID, termModel.Id.Value)
- : termSet.CreateTerm(termName, termModel.LCID, Guid.NewGuid());
-
- MapTermProperties(currentTerm, termModel);
-
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioned,
- Object = currentTerm,
- ObjectType = typeof(Term),
- ObjectDefinition = termModel,
- ModelHost = modelHost
- });
- }
- else
- {
- TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Processing existing Term");
-
- MapTermProperties(currentTerm, termModel);
-
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioned,
- Object = currentTerm,
- ObjectType = typeof(Term),
- ObjectDefinition = termModel,
- ModelHost = modelHost
- });
- }
-
- termStore.CommitAll();
- termStore.Context.ExecuteQueryWithTrace();
- }
-
- private void MapTermProperties(Term currentTerm, TaxonomyTermDefinition termModel)
- {
- if (!string.IsNullOrEmpty(termModel.Description))
- currentTerm.SetDescription(termModel.Description, termModel.LCID);
-
- if (!string.IsNullOrEmpty(termModel.CustomSortOrder))
- currentTerm.CustomSortOrder = termModel.CustomSortOrder;
-
- if (termModel.IsAvailableForTagging.HasValue)
- currentTerm.IsAvailableForTagging = termModel.IsAvailableForTagging.Value;
-
-
- foreach (var customProp in termModel.CustomProperties.Where(p => p.Override))
- {
- currentTerm.SetCustomProperty(customProp.Name, customProp.Value);
- }
-
- foreach (var customProp in termModel.LocalCustomProperties.Where(p => p.Override))
- {
- currentTerm.SetLocalCustomProperty(customProp.Name, customProp.Value);
- }
- }
-
- private void DeployTermUnderTerm(object modelHost, TermModelHost groupModelHost, TaxonomyTermDefinition termModel)
- {
- var termStore = groupModelHost.HostTermStore;
- var termSet = groupModelHost.HostTerm;
-
- var currentTerm = FindTermInTerm(termSet, termModel);
- var termName = NormalizeTermName(termModel.Name);
-
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioning,
- Object = currentTerm,
- ObjectType = typeof(Term),
- ObjectDefinition = termModel,
- ModelHost = modelHost
- });
-
- if (currentTerm == null)
- {
- TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new Term");
-
- currentTerm = termModel.Id.HasValue
- ? termSet.CreateTerm(termName, termModel.LCID, termModel.Id.Value)
- : termSet.CreateTerm(termName, termModel.LCID, Guid.NewGuid());
-
- MapTermProperties(currentTerm, termModel);
-
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioned,
- Object = currentTerm,
- ObjectType = typeof(Term),
- ObjectDefinition = termModel,
- ModelHost = modelHost
- });
- }
- else
- {
- TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Processing existing Term");
-
- MapTermProperties(currentTerm, termModel);
-
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioned,
- Object = currentTerm,
- ObjectType = typeof(Term),
- ObjectDefinition = termModel,
- ModelHost = modelHost
- });
- }
-
- termStore.CommitAll();
- termStore.Context.ExecuteQueryWithTrace();
- }
-
-
- protected Term FindTermInTerm(Term term, TaxonomyTermDefinition termModel)
- {
- Term result = null;
- IEnumerable results = null;
-
- var context = term.Context;
- // TODO
-
- if (termModel.Id.HasValue)
- {
- var id = termModel.Id.Value;
-
- results = context.LoadQuery(term.Terms.Where(t => t.Id == id));
- context.ExecuteQueryWithTrace();
-
- }
- else if (!string.IsNullOrEmpty(termModel.Name))
- {
- var termName = NormalizeTermName(termModel.Name);
-
- results = context.LoadQuery(term.Terms.Where(t => t.Name == termName));
- context.ExecuteQueryWithTrace();
- }
-
- result = results.FirstOrDefault();
-
- if (result != null)
- {
- context.Load(result);
- context.ExecuteQueryWithTrace();
-
- return result;
- }
-
- return null;
- }
-
- protected Term FindTermInTermSet(TermSet termSet, TaxonomyTermDefinition termModel)
- {
- Term result = null;
-
- var context = termSet.Context;
-
- if (termModel.Id.HasValue)
- {
- var scope = new ExceptionHandlingScope(context);
- using (scope.StartScope())
- {
- using (scope.StartTry())
- {
- result = termSet.Terms.GetById(termModel.Id.Value);
- context.Load(result);
- }
-
- using (scope.StartCatch())
- {
-
- }
- }
-
- context.ExecuteQueryWithTrace();
- }
- else if (!string.IsNullOrEmpty(termModel.Name))
- {
- var termName = NormalizeTermName(termModel.Name);
-
- var terms = termSet.GetTerms(new LabelMatchInformation(context)
- {
- Lcid = termModel.LCID,
- TermLabel = termName,
- TrimUnavailable = false
- });
-
- context.Load(terms);
- context.ExecuteQueryWithTrace();
-
- result = terms.FirstOrDefault();
- }
-
- if (result != null && result.ServerObjectIsNull == false)
- {
- context.Load(result);
- context.ExecuteQueryWithTrace();
-
- return result;
- }
-
- return null;
- }
-
- #endregion
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Microsoft.SharePoint.Client;
+using Microsoft.SharePoint.Client.Taxonomy;
+using SPMeta2.Common;
+using SPMeta2.CSOM.Extensions;
+using SPMeta2.CSOM.ModelHandlers;
+using SPMeta2.CSOM.Standard.ModelHosts;
+using SPMeta2.Definitions;
+using SPMeta2.Exceptions;
+using SPMeta2.Services;
+using SPMeta2.Standard.Definitions.Taxonomy;
+using SPMeta2.Standard.Utils;
+using SPMeta2.Utils;
+
+namespace SPMeta2.CSOM.Standard.ModelHandlers.Taxonomy
+{
+ public class TaxonomyTermModelHandler : CSOMModelHandlerBase
+ {
+ #region properties
+
+ public override Type TargetType
+ {
+ get { return typeof(TaxonomyTermDefinition); }
+ }
+
+ #endregion
+
+ #region methods
+
+ public override void DeployModel(object modelHost, DefinitionBase model)
+ {
+ var definition = model.WithAssertAndCast("model", value => value.RequireNotNull());
+
+ if (!TaxonomyUtility.IsValidTermName(definition.Name))
+ {
+ throw new SPMeta2Exception(
+ string.Format("Term name [{0}] cannot contain any of the following characters: {1}",
+ definition.Name,
+ string.Join(", ", TaxonomyUtility.InvalidTermNameStrings)));
+ }
+
+ if (modelHost is TermModelHost)
+ DeployTermUnderTerm(modelHost, modelHost as TermModelHost, definition);
+ else if (modelHost is TermSetModelHost)
+ DeployTermUnderTermSet(modelHost, modelHost as TermSetModelHost, definition);
+ else
+ {
+ throw new SPMeta2UnsupportedModelHostException(string.Format("Model host of type: [{0}] is not supported", modelHost.GetType()));
+ }
+ }
+
+ protected virtual string NormalizeTermName(string termName)
+ {
+ return TaxonomyUtility.NormalizeName(termName);
+ }
+
+ public override void WithResolvingModelHost(ModelHostResolveContext modelHostContext)
+ {
+ var modelHost = modelHostContext.ModelHost;
+ var model = modelHostContext.Model;
+ var childModelType = modelHostContext.ChildModelType;
+ var action = modelHostContext.Action;
+
+
+ var definition = model.WithAssertAndCast("model", value => value.RequireNotNull());
+
+ Term currentTerm = null;
+ TermGroup group = null;
+ TermSet termSet = null;
+ TermStore termStore = null;
+
+ TermModelHost localModelHost = new TermModelHost();
+
+ if (modelHost is TermModelHost)
+ {
+ var h = (modelHost as TermModelHost);
+
+ group = h.HostGroup;
+ termSet = h.HostTermSet;
+ termStore = h.HostTermStore;
+
+ currentTerm = FindTermInTerm(h.HostTerm, definition);
+
+ localModelHost.HostGroup = group;
+ localModelHost.HostTermSet = termSet;
+ localModelHost.HostTerm = currentTerm;
+ localModelHost.HostTermStore = termStore;
+ }
+ else if (modelHost is TermSetModelHost)
+ {
+ var h = (modelHost as TermSetModelHost);
+
+ termStore = h.HostTermStore;
+ group = h.HostGroup;
+ termSet = h.HostTermSet;
+
+ currentTerm = FindTermInTermSet(h.HostTermSet, definition);
+
+ localModelHost.HostGroup = group;
+ localModelHost.HostTermSet = termSet;
+ localModelHost.HostTerm = currentTerm;
+ localModelHost.HostTermStore = termStore;
+ }
+
+ action(localModelHost);
+ }
+
+ private void DeployTermUnderTermSet(object modelHost, TermSetModelHost groupModelHost, TaxonomyTermDefinition termModel)
+ {
+ var termStore = groupModelHost.HostTermStore;
+ var termSet = groupModelHost.HostTermSet;
+
+ var currentTerm = FindTermInTermSet(termSet, termModel);
+ var termName = NormalizeTermName(termModel.Name);
+
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioning,
+ Object = currentTerm,
+ ObjectType = typeof(Term),
+ ObjectDefinition = termModel,
+ ModelHost = modelHost
+ });
+
+ if (currentTerm == null)
+ {
+ TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new Term");
+
+ currentTerm = termModel.Id.HasValue
+ ? termSet.CreateTerm(termName, termModel.LCID, termModel.Id.Value)
+ : termSet.CreateTerm(termName, termModel.LCID, Guid.NewGuid());
+
+ MapTermProperties(currentTerm, termModel, true);
+
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioned,
+ Object = currentTerm,
+ ObjectType = typeof(Term),
+ ObjectDefinition = termModel,
+ ModelHost = modelHost
+ });
+ }
+ else
+ {
+ TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Processing existing Term");
+
+ MapTermProperties(currentTerm, termModel, false);
+
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioned,
+ Object = currentTerm,
+ ObjectType = typeof(Term),
+ ObjectDefinition = termModel,
+ ModelHost = modelHost
+ });
+ }
+
+ termStore.CommitAll();
+ termStore.Context.ExecuteQueryWithTrace();
+ }
+
+ private void MapTermProperties(Term currentTerm, TaxonomyTermDefinition termModel, bool isNewObject)
+ {
+ if (!string.IsNullOrEmpty(termModel.Description))
+ currentTerm.SetDescription(termModel.Description, termModel.LCID);
+
+ if (!string.IsNullOrEmpty(termModel.CustomSortOrder))
+ currentTerm.CustomSortOrder = termModel.CustomSortOrder;
+
+ if (termModel.IsAvailableForTagging.HasValue)
+ currentTerm.IsAvailableForTagging = termModel.IsAvailableForTagging.Value;
+
+ UpdateTermProperties(currentTerm, termModel, false, isNewObject);
+ UpdateTermProperties(currentTerm, termModel, true, isNewObject);
+ }
+
+ private void UpdateTermProperties(Term currentTerm, TaxonomyTermDefinition termModel, bool isLocalProperties, bool isNewObject)
+ {
+ // TaxonomyTermCustomProperty.Overwrite set to false - No properties are created. #932
+ // https://github.com/SubPointSolutions/spmeta2/issues/932
+
+ // 1 - set everything what is not there
+ var srcProperties = termModel.CustomProperties;
+ IDictionary dstProperties = null;
+
+ if (!isNewObject)
+ dstProperties = currentTerm.CustomProperties;
+
+ if (isLocalProperties)
+ {
+ TraceService.Information((int)LogEventId.ModelProvision, "Processing local custom properties");
+
+ srcProperties = termModel.LocalCustomProperties;
+
+ if (!isNewObject)
+ dstProperties = currentTerm.LocalCustomProperties;
+ }
+ else
+ {
+ TraceService.Information((int)LogEventId.ModelProvision, "Processing custom properties");
+
+ srcProperties = termModel.CustomProperties;
+
+ if (!isNewObject)
+ dstProperties = currentTerm.CustomProperties;
+ }
+
+ foreach (var prop in srcProperties)
+ {
+ var propName = prop.Name;
+ var propValue = prop.Value;
+
+ var propExist = false;
+
+ if (isNewObject)
+ {
+ propExist = false;
+ }
+ else
+ {
+ propExist = dstProperties.Keys
+ .FirstOrDefault(k => k.ToUpper() == propName.ToUpper())
+ != null;
+ }
+
+ if (!propExist)
+ {
+ TraceService.Information((int)LogEventId.ModelProvision,
+ string.Format("Property [{0}] does not exist. Adding with value:[{1}]",
+ new object[] { prop.Name, prop.Value }));
+
+ if (isLocalProperties)
+ currentTerm.SetLocalCustomProperty(propName, propValue);
+ else
+ currentTerm.SetCustomProperty(propName, propValue);
+ }
+ else
+ {
+ TraceService.Information((int)LogEventId.ModelProvision,
+ string.Format("Property [{0}] exists. No need to add it. Optionally, it will be owerwritten if .Override is set 'true'",
+ new object[] { propName, propValue }));
+ }
+ }
+
+ // 2 - override as needed
+ foreach (var prop in srcProperties.Where(p => p.Override))
+ {
+ var propName = prop.Name;
+ var propValue = prop.Value;
+
+ TraceService.Information((int)LogEventId.ModelProvision,
+ string.Format("Overwriting property [{0}] with value:[{1}] as .Override is set 'true'",
+ new object[] { propName, propValue }));
+
+ if (isLocalProperties)
+ currentTerm.SetLocalCustomProperty(propName, propValue);
+ else
+ currentTerm.SetCustomProperty(propName, propValue);
+ }
+ }
+
+ private void DeployTermUnderTerm(object modelHost, TermModelHost groupModelHost, TaxonomyTermDefinition termModel)
+ {
+ var termStore = groupModelHost.HostTermStore;
+ var termSet = groupModelHost.HostTerm;
+
+ var currentTerm = FindTermInTerm(termSet, termModel);
+ var termName = NormalizeTermName(termModel.Name);
+
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioning,
+ Object = currentTerm,
+ ObjectType = typeof(Term),
+ ObjectDefinition = termModel,
+ ModelHost = modelHost
+ });
+
+ if (currentTerm == null)
+ {
+ TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new Term");
+
+ currentTerm = termModel.Id.HasValue
+ ? termSet.CreateTerm(termName, termModel.LCID, termModel.Id.Value)
+ : termSet.CreateTerm(termName, termModel.LCID, Guid.NewGuid());
+
+ MapTermProperties(currentTerm, termModel, true);
+
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioned,
+ Object = currentTerm,
+ ObjectType = typeof(Term),
+ ObjectDefinition = termModel,
+ ModelHost = modelHost
+ });
+ }
+ else
+ {
+ TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Processing existing Term");
+
+ MapTermProperties(currentTerm, termModel, false);
+
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioned,
+ Object = currentTerm,
+ ObjectType = typeof(Term),
+ ObjectDefinition = termModel,
+ ModelHost = modelHost
+ });
+ }
+
+ termStore.CommitAll();
+ termStore.Context.ExecuteQueryWithTrace();
+ }
+
+
+ protected Term FindTermInTerm(Term term, TaxonomyTermDefinition termModel)
+ {
+ Term result = null;
+ IEnumerable results = null;
+
+ var context = term.Context;
+ // TODO
+
+ if (termModel.Id.HasValue)
+ {
+ var id = termModel.Id.Value;
+
+ results = context.LoadQuery(term.Terms.Where(t => t.Id == id));
+ context.ExecuteQueryWithTrace();
+
+ }
+ else if (!string.IsNullOrEmpty(termModel.Name))
+ {
+ var termName = NormalizeTermName(termModel.Name);
+
+ results = context.LoadQuery(term.Terms.Where(t => t.Name == termName));
+ context.ExecuteQueryWithTrace();
+ }
+
+ result = results.FirstOrDefault();
+
+ if (result != null)
+ {
+ context.Load(result);
+ context.ExecuteQueryWithTrace();
+
+ return result;
+ }
+
+ return null;
+ }
+
+ protected Term FindTermInTermSet(TermSet termSet, TaxonomyTermDefinition termModel)
+ {
+ Term result = null;
+
+ var context = termSet.Context;
+
+ if (termModel.Id.HasValue)
+ {
+ var scope = new ExceptionHandlingScope(context);
+ using (scope.StartScope())
+ {
+ using (scope.StartTry())
+ {
+ result = termSet.Terms.GetById(termModel.Id.Value);
+ context.Load(result);
+ }
+
+ using (scope.StartCatch())
+ {
+
+ }
+ }
+
+ context.ExecuteQueryWithTrace();
+ }
+ else if (!string.IsNullOrEmpty(termModel.Name))
+ {
+ var termName = NormalizeTermName(termModel.Name);
+
+ var terms = termSet.GetTerms(new LabelMatchInformation(context)
+ {
+ Lcid = termModel.LCID,
+ TermLabel = termName,
+ TrimUnavailable = false
+ });
+
+ context.Load(terms);
+ context.ExecuteQueryWithTrace();
+
+ result = terms.FirstOrDefault();
+ }
+
+ if (result != null && result.ServerObjectIsNull == false)
+ {
+ context.Load(result);
+ context.ExecuteQueryWithTrace();
+
+ return result;
+ }
+
+ return null;
+ }
+
+ #endregion
+ }
+}
diff --git a/SPMeta2/SPMeta2.CSOM.Standard/Properties/AssemblyInfo.cs b/SPMeta2/SPMeta2.CSOM.Standard/Properties/AssemblyInfo.cs
index a15e9911d..f3580cb50 100644
--- a/SPMeta2/SPMeta2.CSOM.Standard/Properties/AssemblyInfo.cs
+++ b/SPMeta2/SPMeta2.CSOM.Standard/Properties/AssemblyInfo.cs
@@ -32,4 +32,4 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.2.16305.1232")]
+[assembly: AssemblyFileVersion("1.2.17040.0900")]
diff --git a/SPMeta2/SPMeta2.CSOM/ModelHandlers/Base/MasterPageModelHandlerBase.cs b/SPMeta2/SPMeta2.CSOM/ModelHandlers/Base/MasterPageModelHandlerBase.cs
index cdb493def..de463ad2f 100644
--- a/SPMeta2/SPMeta2.CSOM/ModelHandlers/Base/MasterPageModelHandlerBase.cs
+++ b/SPMeta2/SPMeta2.CSOM/ModelHandlers/Base/MasterPageModelHandlerBase.cs
@@ -10,6 +10,7 @@
using SPMeta2.Definitions;
using SPMeta2.Enumerations;
using SPMeta2.Utils;
+using SPMeta2.Services;
namespace SPMeta2.CSOM.ModelHandlers.Base
{
@@ -146,20 +147,35 @@ public override void DeployModel(object modelHost, DefinitionBase model)
context.Load(newFileItem);
context.ExecuteQueryWithTrace();
- var site = folderModelHost.HostSite;
- var currentPageLayoutItem = FindPageLayoutItem(site, definition.FileName);
+ //var site = folderModelHost.HostSite;
+ //var currentPageLayoutItem = FindPageLayoutItem(site, definition.FileName);
+ //var currentPageLayoutItemContext = currentPageLayoutItem.Context;
+ //var publishingFile = currentPageLayoutItem.File;
- var currentPageLayoutItemContext = currentPageLayoutItem.Context;
- var publishingFile = currentPageLayoutItem.File;
+ //currentPageLayoutItemContext.Load(currentPageLayoutItem);
+ //currentPageLayoutItemContext.Load(currentPageLayoutItem, i => i.DisplayName);
+ //currentPageLayoutItemContext.Load(publishingFile);
- currentPageLayoutItemContext.Load(currentPageLayoutItem);
- currentPageLayoutItemContext.Load(currentPageLayoutItem, i => i.DisplayName);
- currentPageLayoutItemContext.Load(publishingFile);
+ //currentPageLayoutItemContext.ExecuteQueryWithTrace();
- currentPageLayoutItemContext.ExecuteQueryWithTrace();
+ // ** SIC.. found with Problem with url in MasterPageSettings #936
+ // https://github.com/SubPointSolutions/spmeta2/issues/936
+
+ // * /_catalogs/masterpage - would have 'Title' field (and correct content types)
+ // * /my-sub-web/_catalogs/masterpage - would NOT have 'Title' fiels so that provision fails
+
+ // so performing Title update only for the root web
+ if (folderModelHost.HostSite.ServerRelativeUrl == folderModelHost.HostWeb.ServerRelativeUrl)
+ {
+ TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Updating master page 'Title' on the root web.", null);
+ newFileItem[BuiltInInternalFieldNames.Title] = definition.Title;
+ }
+ else
+ {
+ TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Skipping master page 'Title' update. Subweb is detcted.", null);
+ }
- newFileItem[BuiltInInternalFieldNames.Title] = definition.Title;
newFileItem["MasterPageDescription"] = definition.Description;
newFileItem[BuiltInInternalFieldNames.ContentTypeId] = PageContentTypeId;
diff --git a/SPMeta2/SPMeta2.CSOM/ModelHandlers/ListViewModelHandler.cs b/SPMeta2/SPMeta2.CSOM/ModelHandlers/ListViewModelHandler.cs
index 00b93a0d7..dd003f5c4 100644
--- a/SPMeta2/SPMeta2.CSOM/ModelHandlers/ListViewModelHandler.cs
+++ b/SPMeta2/SPMeta2.CSOM/ModelHandlers/ListViewModelHandler.cs
@@ -1,369 +1,372 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text.RegularExpressions;
-
-using Microsoft.SharePoint.Client;
-
-using SPMeta2.Common;
-using SPMeta2.CSOM.Extensions;
-using SPMeta2.CSOM.ModelHosts;
-using SPMeta2.Definitions;
-using SPMeta2.Definitions.Base;
-using SPMeta2.Exceptions;
-using SPMeta2.ModelHosts;
-using SPMeta2.Services;
-using SPMeta2.Utils;
-using SPMeta2.Enumerations;
-
-namespace SPMeta2.CSOM.ModelHandlers
-{
- public class ListViewModelHandler : CSOMModelHandlerBase
- {
- #region constructors
-
- public ListViewModelHandler()
- {
- ListViewScopeTypesConvertService = ServiceContainer.Instance.GetService();
- }
-
- #endregion
-
- #region methods
-
- public ListViewScopeTypesConvertService ListViewScopeTypesConvertService { get; set; }
-
- #endregion
-
- #region methods
-
- public override void WithResolvingModelHost(ModelHostResolveContext modelHostContext)
- {
- var modelHost = modelHostContext.ModelHost;
- var model = modelHostContext.Model;
- var childModelType = modelHostContext.ChildModelType;
- var action = modelHostContext.Action;
-
- var listModelHost = modelHost.WithAssertAndCast("modelHost", value => value.RequireNotNull());
-
- var web = listModelHost.HostWeb;
- var list = listModelHost.HostList;
-
- var listViewDefinition = model as ListViewDefinition;
- var context = web.Context;
-
- if (typeof(WebPartDefinitionBase).IsAssignableFrom(childModelType)
- || childModelType == typeof(DeleteWebPartsDefinition))
- {
- var targetView = FindView(list, listViewDefinition);
- string serverRelativeFileUrl;
-
- Folder targetFolder = null;
-
- if (list.BaseType == BaseType.DocumentLibrary)
- {
- targetFolder = FolderModelHandler.GetLibraryFolder(list.RootFolder, "Forms");
- }
-
- if (targetView != null)
- serverRelativeFileUrl = targetView.ServerRelativeUrl;
- else
- {
-
-
- context.Load(list.RootFolder);
- context.ExecuteQueryWithTrace();
-
- // maybe forms files?
- // they aren't views, but files
-
- if (list.BaseType == BaseType.DocumentLibrary)
- {
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text.RegularExpressions;
+
+using Microsoft.SharePoint.Client;
+
+using SPMeta2.Common;
+using SPMeta2.CSOM.Extensions;
+using SPMeta2.CSOM.ModelHosts;
+using SPMeta2.Definitions;
+using SPMeta2.Definitions.Base;
+using SPMeta2.Exceptions;
+using SPMeta2.ModelHosts;
+using SPMeta2.Services;
+using SPMeta2.Utils;
+using SPMeta2.Enumerations;
+
+namespace SPMeta2.CSOM.ModelHandlers
+{
+ public class ListViewModelHandler : CSOMModelHandlerBase
+ {
+ #region constructors
+
+ public ListViewModelHandler()
+ {
+ ListViewScopeTypesConvertService = ServiceContainer.Instance.GetService();
+ }
+
+ #endregion
+
+ #region methods
+
+ public ListViewScopeTypesConvertService ListViewScopeTypesConvertService { get; set; }
+
+ #endregion
+
+ #region methods
+
+ public override void WithResolvingModelHost(ModelHostResolveContext modelHostContext)
+ {
+ var modelHost = modelHostContext.ModelHost;
+ var model = modelHostContext.Model;
+ var childModelType = modelHostContext.ChildModelType;
+ var action = modelHostContext.Action;
+
+ var listModelHost = modelHost.WithAssertAndCast("modelHost", value => value.RequireNotNull());
+
+ var web = listModelHost.HostWeb;
+ var list = listModelHost.HostList;
+
+ var listViewDefinition = model as ListViewDefinition;
+ var context = web.Context;
+
+ if (typeof(WebPartDefinitionBase).IsAssignableFrom(childModelType)
+ || childModelType == typeof(DeleteWebPartsDefinition))
+ {
+ var targetView = FindView(list, listViewDefinition);
+ string serverRelativeFileUrl;
+
+ Folder targetFolder = null;
+
+ if (list.BaseType == BaseType.DocumentLibrary)
+ {
+ targetFolder = FolderModelHandler.GetLibraryFolder(list.RootFolder, "Forms");
+ }
+
+ if (targetView != null)
+ serverRelativeFileUrl = targetView.ServerRelativeUrl;
+ else
+ {
+
+
+ context.Load(list.RootFolder);
+ context.ExecuteQueryWithTrace();
+
+ // maybe forms files?
+ // they aren't views, but files
+
+ if (list.BaseType == BaseType.DocumentLibrary)
+ {
serverRelativeFileUrl = UrlUtility.CombineUrl(new[]
{
list.RootFolder.ServerRelativeUrl,
"Forms",
listViewDefinition.Url
- });
- }
- else
- {
+ });
+ }
+ else
+ {
serverRelativeFileUrl = UrlUtility.CombineUrl(new[]
{
list.RootFolder.ServerRelativeUrl,
listViewDefinition.Url
- });
- }
- }
-
- var file = web.GetFileByServerRelativeUrl(serverRelativeFileUrl);
- context.Load(file);
- context.ExecuteQueryWithTrace();
-
-
-
- var listItemHost = ModelHostBase.Inherit(listModelHost, itemHost =>
- {
- itemHost.HostFolder = targetFolder;
- //itemHost.HostListItem = folderModelHost.CurrentListItem;
- itemHost.HostFile = file;
-
- itemHost.HostList = list;
- });
-
- action(listItemHost);
- }
- else
- {
- action(listModelHost);
- }
- }
-
- protected string GetSafeViewUrl(string url)
- {
- return Regex.Replace(url, ".aspx", string.Empty, RegexOptions.IgnoreCase);
- }
-
-
- protected View FindView(List list, ListViewDefinition listViewModel)
- {
- // lookup by title
- var currentView = FindViewByTitle(list.Views, listViewModel.Title);
-
- // lookup by URL match
- if (currentView == null && !string.IsNullOrEmpty(listViewModel.Url))
- {
- TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Resolving view by URL: [{0}]", listViewModel.Url);
-
- var safeUrl = listViewModel.Url.ToUpper();
-
- foreach (var view in list.Views)
- {
- if (view.ServerRelativeUrl.ToUpper().EndsWith(safeUrl))
- {
- return view;
- }
- }
-
- return null;
- }
-
- return currentView;
- }
-
- public override void DeployModel(object modelHost, DefinitionBase model)
- {
- var listMOdelHost = modelHost.WithAssertAndCast("modelHost", value => value.RequireNotNull());
- var listViewModel = model.WithAssertAndCast("model", value => value.RequireNotNull());
-
- var list = listMOdelHost.HostList;
-
- var currentView = FindView(list, listViewModel);
-
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioning,
- Object = currentView,
- ObjectType = typeof(View),
- ObjectDefinition = listViewModel,
- ModelHost = modelHost
- });
-
- if (currentView == null)
- {
- TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new list view");
-
- var newView = new ViewCreationInformation
- {
- Title = string.IsNullOrEmpty(listViewModel.Url) ? listViewModel.Title : GetSafeViewUrl(listViewModel.Url),
- RowLimit = (uint)listViewModel.RowLimit,
- SetAsDefaultView = listViewModel.IsDefault,
- Paged = listViewModel.IsPaged
- };
-
- if (!string.IsNullOrEmpty(listViewModel.Query))
- newView.Query = listViewModel.Query;
-
- if (listViewModel.Fields != null && listViewModel.Fields.Any())
- newView.ViewFields = listViewModel.Fields.ToArray();
-
- if (!string.IsNullOrEmpty(listViewModel.Type))
- {
- newView.ViewTypeKind = (ViewType)Enum.Parse(typeof(ViewType),
- string.IsNullOrEmpty(listViewModel.Type) ? BuiltInViewType.Html : listViewModel.Type);
- }
-
- currentView = list.Views.Add(newView);
-
- MapListViewProperties(list, currentView, listViewModel);
-
- currentView.Update();
-
- list.Context.ExecuteQueryWithTrace();
- currentView = FindView(list, listViewModel);
-
- list.Context.Load(currentView);
- list.Context.ExecuteQueryWithTrace();
-
- }
- else
- {
- list.Context.Load(currentView);
- list.Context.ExecuteQueryWithTrace();
-
- TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Processing existing list view");
- MapListViewProperties(list, currentView, listViewModel);
- }
-
- ProcessLocalization(currentView, listViewModel);
-
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioned,
- Object = currentView,
- ObjectType = typeof(View),
- ObjectDefinition = listViewModel,
- ModelHost = modelHost
- });
-
- TraceService.Verbose((int)LogEventId.ModelProvisionCoreCall, "Calling currentView.Update()");
- currentView.Update();
-
- list.Context.ExecuteQueryWithTrace();
- }
-
- public virtual void MapListViewProperties(List list, View listView, ListViewDefinition definition)
- {
- if (definition.RowLimit > 0)
- listView.RowLimit = (uint)definition.RowLimit;
-
- listView.DefaultView = definition.IsDefault;
- listView.Paged = definition.IsPaged;
-
- if (!string.IsNullOrEmpty(definition.Query))
- listView.ViewQuery = definition.Query;
-
- if (definition.Fields != null && definition.Fields.Any())
- {
- listView.ViewFields.RemoveAll();
-
- foreach (var f in definition.Fields)
- listView.ViewFields.Add(f);
- }
-
- if (!string.IsNullOrEmpty(definition.ViewData))
- listView.ViewData = definition.ViewData;
-
- if (!string.IsNullOrEmpty(definition.ContentTypeName))
- listView.ContentTypeId = LookupListContentTypeByName(list, definition.ContentTypeName);
-
- if (!string.IsNullOrEmpty(definition.ContentTypeId))
- listView.ContentTypeId = LookupListContentTypeById(list, definition.ContentTypeId);
-
-#if !NET35
- if (!string.IsNullOrEmpty(definition.JSLink))
- listView.JSLink = definition.JSLink;
-#endif
-
- if (definition.DefaultViewForContentType.HasValue)
- listView.DefaultViewForContentType = definition.DefaultViewForContentType.Value;
-
- // There is no value in setting Aggregations if AggregationsStatus is not to "On"
- if (!string.IsNullOrEmpty(definition.AggregationsStatus) && definition.AggregationsStatus == "On")
- {
- listView.AggregationsStatus = definition.AggregationsStatus;
-
- if (!string.IsNullOrEmpty(definition.Aggregations))
- listView.Aggregations = definition.Aggregations;
- }
-
- listView.Hidden = definition.Hidden;
-
- if (!string.IsNullOrEmpty(definition.Scope))
- {
- var scopeValue = ListViewScopeTypesConvertService.NormilizeValueToCSOMType(definition.Scope);
-
- listView.Scope = (ViewScope)Enum.Parse(
- typeof(ViewScope), scopeValue);
- }
-
- listView.Title = definition.Title;
- }
-
- protected ContentTypeId LookupListContentTypeByName(List targetList, string name)
- {
- if (!targetList.IsPropertyAvailable("ContentTypes"))
- {
- targetList.Context.Load(targetList, l => l.ContentTypes);
- targetList.Context.ExecuteQueryWithTrace();
- }
-
- var targetContentType = targetList.ContentTypes.FindByName(name);
-
- if (targetContentType == null)
- throw new SPMeta2Exception(string.Format("Cannot find content type by name ['{0}'] in list: [{1}]",
- name, targetList.Title));
-
- return targetContentType.Id;
- }
-
- protected ContentTypeId LookupListContentTypeById(List targetList, string contentTypeId)
- {
- var context = targetList.Context;
-
- // lookup list content type?
- var result = targetList.ContentTypes.GetById(contentTypeId);
- context.ExecuteQueryWithTrace();
-
- if (result.ServerObjectIsNull == true)
- {
- result = targetList.ParentWeb.ContentTypes.GetById(contentTypeId);
- context.ExecuteQueryWithTrace();
- }
-
- // lookup site content type (BuiltInContentTypeId.RootOfList)
-
- if (result.ServerObjectIsNull == true)
- throw new SPMeta2Exception(string.Format("Cannot find content type by id ['{0}'] in list: [{1}]",
- contentTypeId, targetList.Title));
-
- context.Load(result);
- context.ExecuteQueryWithTrace();
-
- return result.Id;
- }
-
- protected View FindViewByTitle(IEnumerable viewCollection, string listViewTitle)
- {
- TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Resolving view by Title: [{0}]", listViewTitle);
-
- foreach (var view in viewCollection)
- {
- if (String.Compare(view.Title, listViewTitle, StringComparison.OrdinalIgnoreCase) == 0)
- {
- return view;
- }
- }
-
- return null;
- }
-
- #endregion
- protected virtual void ProcessLocalization(View obj, ListViewDefinition definition)
- {
+ });
+ }
+ }
+
+ var file = web.GetFileByServerRelativeUrl(serverRelativeFileUrl);
+ context.Load(file);
+ context.ExecuteQueryWithTrace();
+
+
+
+ var listItemHost = ModelHostBase.Inherit(listModelHost, itemHost =>
+ {
+ itemHost.HostFolder = targetFolder;
+ //itemHost.HostListItem = folderModelHost.CurrentListItem;
+ itemHost.HostFile = file;
+
+ itemHost.HostList = list;
+ });
+
+ action(listItemHost);
+ }
+ else
+ {
+ action(listModelHost);
+ }
+ }
+
+ protected string GetSafeViewUrl(string url)
+ {
+ return Regex.Replace(url, ".aspx", string.Empty, RegexOptions.IgnoreCase);
+ }
+
+
+ protected View FindView(List list, ListViewDefinition listViewModel)
+ {
+ // lookup by title
+ var currentView = FindViewByTitle(list.Views, listViewModel.Title);
+
+ // lookup by URL match
+ if (currentView == null && !string.IsNullOrEmpty(listViewModel.Url))
+ {
+ TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Resolving view by URL: [{0}]", listViewModel.Url);
+
+ var safeUrl = listViewModel.Url.ToUpper();
+
+ foreach (var view in list.Views)
+ {
+ if (view.ServerRelativeUrl.ToUpper().EndsWith(safeUrl))
+ {
+ return view;
+ }
+ }
+
+ return null;
+ }
+
+ return currentView;
+ }
+
+ public override void DeployModel(object modelHost, DefinitionBase model)
+ {
+ var listMOdelHost = modelHost.WithAssertAndCast("modelHost", value => value.RequireNotNull());
+ var listViewModel = model.WithAssertAndCast("model", value => value.RequireNotNull());
+
+ var list = listMOdelHost.HostList;
+
+ var currentView = FindView(list, listViewModel);
+
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioning,
+ Object = currentView,
+ ObjectType = typeof(View),
+ ObjectDefinition = listViewModel,
+ ModelHost = modelHost
+ });
+
+ if (currentView == null)
+ {
+ TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new list view");
+
+ var newView = new ViewCreationInformation
+ {
+ Title = string.IsNullOrEmpty(listViewModel.Url) ? listViewModel.Title : GetSafeViewUrl(listViewModel.Url),
+ RowLimit = (uint)listViewModel.RowLimit,
+ SetAsDefaultView = listViewModel.IsDefault,
+ Paged = listViewModel.IsPaged
+ };
+
+ if (!string.IsNullOrEmpty(listViewModel.Query))
+ newView.Query = listViewModel.Query;
+
+ if (listViewModel.Fields != null && listViewModel.Fields.Any())
+ newView.ViewFields = listViewModel.Fields.ToArray();
+
+ if (!string.IsNullOrEmpty(listViewModel.Type))
+ {
+ newView.ViewTypeKind = (ViewType)Enum.Parse(typeof(ViewType),
+ string.IsNullOrEmpty(listViewModel.Type) ? BuiltInViewType.Html : listViewModel.Type);
+ }
+
+ currentView = list.Views.Add(newView);
+
+ MapListViewProperties(list, currentView, listViewModel);
+
+ currentView.Update();
+
+ list.Context.ExecuteQueryWithTrace();
+ currentView = FindView(list, listViewModel);
+
+ list.Context.Load(currentView);
+ list.Context.ExecuteQueryWithTrace();
+
+ }
+ else
+ {
+ list.Context.Load(currentView);
+ list.Context.ExecuteQueryWithTrace();
+
+ TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Processing existing list view");
+ MapListViewProperties(list, currentView, listViewModel);
+ }
+
+ ProcessLocalization(currentView, listViewModel);
+
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioned,
+ Object = currentView,
+ ObjectType = typeof(View),
+ ObjectDefinition = listViewModel,
+ ModelHost = modelHost
+ });
+
+ TraceService.Verbose((int)LogEventId.ModelProvisionCoreCall, "Calling currentView.Update()");
+ currentView.Update();
+
+ list.Context.ExecuteQueryWithTrace();
+ }
+
+ public virtual void MapListViewProperties(List list, View listView, ListViewDefinition definition)
+ {
+ if (definition.RowLimit > 0)
+ listView.RowLimit = (uint)definition.RowLimit;
+
+ listView.DefaultView = definition.IsDefault;
+ listView.Paged = definition.IsPaged;
+
+ if (definition.IncludeRootFolder.HasValue)
+ listView.IncludeRootFolder = definition.IncludeRootFolder.Value;
+
+ if (!string.IsNullOrEmpty(definition.Query))
+ listView.ViewQuery = definition.Query;
+
+ if (definition.Fields != null && definition.Fields.Any())
+ {
+ listView.ViewFields.RemoveAll();
+
+ foreach (var f in definition.Fields)
+ listView.ViewFields.Add(f);
+ }
+
+ if (!string.IsNullOrEmpty(definition.ViewData))
+ listView.ViewData = definition.ViewData;
+
+ if (!string.IsNullOrEmpty(definition.ContentTypeName))
+ listView.ContentTypeId = LookupListContentTypeByName(list, definition.ContentTypeName);
+
+ if (!string.IsNullOrEmpty(definition.ContentTypeId))
+ listView.ContentTypeId = LookupListContentTypeById(list, definition.ContentTypeId);
+
+#if !NET35
+ if (!string.IsNullOrEmpty(definition.JSLink))
+ listView.JSLink = definition.JSLink;
+#endif
+
+ if (definition.DefaultViewForContentType.HasValue)
+ listView.DefaultViewForContentType = definition.DefaultViewForContentType.Value;
+
+ // There is no value in setting Aggregations if AggregationsStatus is not to "On"
+ if (!string.IsNullOrEmpty(definition.AggregationsStatus) && definition.AggregationsStatus == "On")
+ {
+ listView.AggregationsStatus = definition.AggregationsStatus;
+
+ if (!string.IsNullOrEmpty(definition.Aggregations))
+ listView.Aggregations = definition.Aggregations;
+ }
+
+ listView.Hidden = definition.Hidden;
+
+ if (!string.IsNullOrEmpty(definition.Scope))
+ {
+ var scopeValue = ListViewScopeTypesConvertService.NormilizeValueToCSOMType(definition.Scope);
+
+ listView.Scope = (ViewScope)Enum.Parse(
+ typeof(ViewScope), scopeValue);
+ }
+
+ listView.Title = definition.Title;
+ }
+
+ protected ContentTypeId LookupListContentTypeByName(List targetList, string name)
+ {
+ if (!targetList.IsPropertyAvailable("ContentTypes"))
+ {
+ targetList.Context.Load(targetList, l => l.ContentTypes);
+ targetList.Context.ExecuteQueryWithTrace();
+ }
+
+ var targetContentType = targetList.ContentTypes.FindByName(name);
+
+ if (targetContentType == null)
+ throw new SPMeta2Exception(string.Format("Cannot find content type by name ['{0}'] in list: [{1}]",
+ name, targetList.Title));
+
+ return targetContentType.Id;
+ }
+
+ protected ContentTypeId LookupListContentTypeById(List targetList, string contentTypeId)
+ {
+ var context = targetList.Context;
+
+ // lookup list content type?
+ var result = targetList.ContentTypes.GetById(contentTypeId);
+ context.ExecuteQueryWithTrace();
+
+ if (result.ServerObjectIsNull == true)
+ {
+ result = targetList.ParentWeb.ContentTypes.GetById(contentTypeId);
+ context.ExecuteQueryWithTrace();
+ }
+
+ // lookup site content type (BuiltInContentTypeId.RootOfList)
+
+ if (result.ServerObjectIsNull == true)
+ throw new SPMeta2Exception(string.Format("Cannot find content type by id ['{0}'] in list: [{1}]",
+ contentTypeId, targetList.Title));
+
+ context.Load(result);
+ context.ExecuteQueryWithTrace();
+
+ return result.Id;
+ }
+
+ protected View FindViewByTitle(IEnumerable viewCollection, string listViewTitle)
+ {
+ TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Resolving view by Title: [{0}]", listViewTitle);
+
+ foreach (var view in viewCollection)
+ {
+ if (String.Compare(view.Title, listViewTitle, StringComparison.OrdinalIgnoreCase) == 0)
+ {
+ return view;
+ }
+ }
+
+ return null;
+ }
+
+ #endregion
+ protected virtual void ProcessLocalization(View obj, ListViewDefinition definition)
+ {
ProcessGenericLocalization(obj, new Dictionary>
{
{ "TitleResource", definition.TitleResource }
- });
- }
-
- public override Type TargetType
- {
- get { return typeof(ListViewDefinition); }
- }
- }
-}
+ });
+ }
+
+ public override Type TargetType
+ {
+ get { return typeof(ListViewDefinition); }
+ }
+ }
+}
diff --git a/SPMeta2/SPMeta2.CSOM/ModelHandlers/MasterPageSettingsModelHandler.cs b/SPMeta2/SPMeta2.CSOM/ModelHandlers/MasterPageSettingsModelHandler.cs
index d04e8eb43..cb61b1119 100644
--- a/SPMeta2/SPMeta2.CSOM/ModelHandlers/MasterPageSettingsModelHandler.cs
+++ b/SPMeta2/SPMeta2.CSOM/ModelHandlers/MasterPageSettingsModelHandler.cs
@@ -64,15 +64,19 @@ private void DeployMasterPageSettings(object modelHost, WebModelHost webModelHos
#if !NET35
if (!string.IsNullOrEmpty(masterPageSettings.SiteMasterPageUrl))
- {
- TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Setting web.MasterUrlL: [{0}]", masterPageSettings.SiteMasterPageUrl);
- web.CustomMasterUrl = UrlUtility.CombineUrl(siteRelativeUrl, masterPageSettings.SiteMasterPageUrl);
+ {
+ var url = ResolveUrlWithTokens(webModelHost, masterPageSettings.SiteMasterPageUrl);
+
+ TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Setting web.MasterUrl: [{0}]", url);
+ web.CustomMasterUrl = UrlUtility.CombineUrl(siteRelativeUrl, url);
}
if (!string.IsNullOrEmpty(masterPageSettings.SystemMasterPageUrl))
- {
- TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Setting web.CustomMasterUrl: [{0}]", masterPageSettings.SystemMasterPageUrl);
- web.MasterUrl = UrlUtility.CombineUrl(siteRelativeUrl, masterPageSettings.SystemMasterPageUrl);
+ {
+ var url = ResolveUrlWithTokens(webModelHost, masterPageSettings.SystemMasterPageUrl);
+
+ TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Setting web.CustomMasterUrl: [{0}]", url);
+ web.MasterUrl = UrlUtility.CombineUrl(siteRelativeUrl, url);
}
#endif
@@ -109,6 +113,21 @@ private void DeployMasterPageSettings(object modelHost, WebModelHost webModelHos
ModelHost = modelHost
});
}
+ }
+
+ protected virtual string ResolveUrlWithTokens(WebModelHost webModelHost, string url)
+ {
+ TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Original url: [{0}]", url);
+ url = TokenReplacementService.ReplaceTokens(new TokenReplacementContext
+ {
+ Value = url,
+ Context = webModelHost,
+ IsSiteRelativeUrl = true
+ }).Value;
+
+ TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Token replaced url: [{0}]", url);
+
+ return url;
}
#endregion
diff --git a/SPMeta2/SPMeta2.CSOM/ModelHandlers/ModuleFileModelHandler.cs b/SPMeta2/SPMeta2.CSOM/ModelHandlers/ModuleFileModelHandler.cs
index a25b286ac..7a1c7996a 100644
--- a/SPMeta2/SPMeta2.CSOM/ModelHandlers/ModuleFileModelHandler.cs
+++ b/SPMeta2/SPMeta2.CSOM/ModelHandlers/ModuleFileModelHandler.cs
@@ -1,610 +1,641 @@
-using System;
-using System.Linq;
-using Microsoft.SharePoint.Client;
-using SPMeta2.CSOM.Extensions;
-using SPMeta2.CSOM.ModelHosts;
-using SPMeta2.Definitions;
-using SPMeta2.Definitions.Base;
-using SPMeta2.Enumerations;
-using SPMeta2.ModelHandlers;
-using SPMeta2.Services;
-using SPMeta2.Utils;
-using SPMeta2.Common;
-using UrlUtility = SPMeta2.Utils.UrlUtility;
-using SPMeta2.Exceptions;
-
-namespace SPMeta2.CSOM.ModelHandlers
-{
- public class ModuleFileModelHandler : CSOMModelHandlerBase
- {
- #region properties
-
- private double ContentStreamFileSize = 1024 * 1024 * 1.5;
-
- public override Type TargetType
- {
- get { return typeof(ModuleFileDefinition); }
- }
-
- #endregion
-
- #region methods
-
- public override void DeployModel(object modelHost, DefinitionBase model)
- {
- var folderHost = modelHost.WithAssertAndCast("modelHost", value => value.RequireNotNull());
- var moduleFile = model.WithAssertAndCast("model", value => value.RequireNotNull());
-
- if (folderHost.CurrentList != null)
- ProcessFile(folderHost, moduleFile);
- else if (folderHost.CurrentWeb != null)
- ProcessWebFolder(folderHost, moduleFile);
- else if (folderHost.CurrentContentType != null)
- ProcessContentTypeFolder(folderHost, moduleFile);
- else
- {
- throw new ArgumentException("CurrentContentType/CurrentWeb/CurrentLibrary");
- }
- }
-
- private void ProcessWebFolder(FolderModelHost folderHost, ModuleFileDefinition moduleFile)
- {
- var web = folderHost.HostWeb;
- var folder = folderHost.CurrentWebFolder;
-
- var context = web.Context;
-
- if (!folder.IsPropertyAvailable("ServerRelativeUrl"))
- {
- context.Load(folder, f => f.ServerRelativeUrl);
- context.ExecuteQueryWithTrace();
- }
-
- var currentFile = web.GetFileByServerRelativeUrl(GetSafeFileUrl(folder, moduleFile));
-
- context.Load(currentFile, f => f.Exists);
- context.ExecuteQueryWithTrace();
-
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioning,
- Object = currentFile.Exists ? currentFile : null,
- ObjectType = typeof(File),
- ObjectDefinition = moduleFile,
- ModelHost = folderHost
- });
-
- if (moduleFile.Overwrite)
- {
- var fileCreatingInfo = new FileCreationInformation
- {
- Url = moduleFile.FileName,
- Overwrite = true
- };
-
-
- if (moduleFile.Content.Length < ContentStreamFileSize)
- {
- TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Using fileCreatingInfo.Content for small file less than: [{0}]", ContentStreamFileSize);
- fileCreatingInfo.Content = moduleFile.Content;
- }
- else
- {
+using System;
+using System.Linq;
+using Microsoft.SharePoint.Client;
+using SPMeta2.CSOM.Extensions;
+using SPMeta2.CSOM.ModelHosts;
+using SPMeta2.Definitions;
+using SPMeta2.Definitions.Base;
+using SPMeta2.Enumerations;
+using SPMeta2.ModelHandlers;
+using SPMeta2.Services;
+using SPMeta2.Utils;
+using SPMeta2.Common;
+using UrlUtility = SPMeta2.Utils.UrlUtility;
+using SPMeta2.Exceptions;
+
+namespace SPMeta2.CSOM.ModelHandlers
+{
+ public class ModuleFileModelHandler : CSOMModelHandlerBase
+ {
+ #region static
+
+ static ModuleFileModelHandler()
+ {
+ MaxMinorVersionCount = 50;
+ }
+
+ #endregion
+
+ #region properties
+
+ private double ContentStreamFileSize = 1024 * 1024 * 1.5;
+ private static int MaxMinorVersionCount { get; set; }
+
+ public override Type TargetType
+ {
+ get { return typeof(ModuleFileDefinition); }
+ }
+
+ #endregion
+
+ #region methods
+
+ public override void DeployModel(object modelHost, DefinitionBase model)
+ {
+ var folderHost = modelHost.WithAssertAndCast("modelHost", value => value.RequireNotNull());
+ var moduleFile = model.WithAssertAndCast("model", value => value.RequireNotNull());
+
+ if (folderHost.CurrentList != null)
+ ProcessFile(folderHost, moduleFile);
+ else if (folderHost.CurrentWeb != null)
+ ProcessWebFolder(folderHost, moduleFile);
+ else if (folderHost.CurrentContentType != null)
+ ProcessContentTypeFolder(folderHost, moduleFile);
+ else
+ {
+ throw new ArgumentException("CurrentContentType/CurrentWeb/CurrentLibrary");
+ }
+ }
+
+ private void ProcessWebFolder(FolderModelHost folderHost, ModuleFileDefinition moduleFile)
+ {
+ var web = folderHost.HostWeb;
+ var folder = folderHost.CurrentWebFolder;
+
+ var context = web.Context;
+
+ if (!folder.IsPropertyAvailable("ServerRelativeUrl"))
+ {
+ context.Load(folder, f => f.ServerRelativeUrl);
+ context.ExecuteQueryWithTrace();
+ }
+
+ var currentFile = web.GetFileByServerRelativeUrl(GetSafeFileUrl(folder, moduleFile));
+
+ context.Load(currentFile, f => f.Exists);
+ context.ExecuteQueryWithTrace();
+
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioning,
+ Object = currentFile.Exists ? currentFile : null,
+ ObjectType = typeof(File),
+ ObjectDefinition = moduleFile,
+ ModelHost = folderHost
+ });
+
+ if (moduleFile.Overwrite)
+ {
+ var fileCreatingInfo = new FileCreationInformation
+ {
+ Url = moduleFile.FileName,
+ Overwrite = true
+ };
+
+
+ if (moduleFile.Content.Length < ContentStreamFileSize)
+ {
+ TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Using fileCreatingInfo.Content for small file less than: [{0}]", ContentStreamFileSize);
+ fileCreatingInfo.Content = moduleFile.Content;
+ }
+ else
+ {
#if NET35
throw new SPMeta2Exception(string.Format("SP2010 CSOM implementation does no support file more than {0}. Checkout FileCreationInformation and avialabe Content size.", ContentStreamFileSize));
-#endif
-
-#if !NET35
- TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Using fileCreatingInfo.ContentStream for big file more than: [{0}]", ContentStreamFileSize);
- fileCreatingInfo.ContentStream = new System.IO.MemoryStream(moduleFile.Content);
-#endif
- }
-
-
-
- var file = folder.Files.Add(fileCreatingInfo);
-
- folder.Context.ExecuteQueryWithTrace();
-
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioned,
- Object = file,
- ObjectType = typeof(File),
- ObjectDefinition = moduleFile,
- ModelHost = folderHost
- });
- }
- else
- {
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioned,
- Object = currentFile.Exists ? currentFile : null,
- ObjectType = typeof(File),
- ObjectDefinition = moduleFile,
- ModelHost = folderHost
- });
- }
-
- folder.Update();
- folder.Context.ExecuteQueryWithTrace();
- }
-
- private void ProcessContentTypeFolder(FolderModelHost folderHost, ModuleFileDefinition moduleFile)
- {
- var web = folderHost.HostWeb;
- var folder = folderHost.CurrentContentTypeFolder;
-
- var context = web.Context;
-
- if (!folder.IsPropertyAvailable("ServerRelativeUrl"))
- {
- context.Load(folder, f => f.ServerRelativeUrl);
- context.ExecuteQueryWithTrace();
- }
-
- var currentFile = web.GetFileByServerRelativeUrl(GetSafeFileUrl(folder, moduleFile));
-
- context.Load(currentFile, f => f.Exists);
- context.ExecuteQueryWithTrace();
-
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioning,
- Object = currentFile.Exists ? currentFile : null,
- ObjectType = typeof(File),
- ObjectDefinition = moduleFile,
- ModelHost = folderHost
- });
-
- if (moduleFile.Overwrite)
- {
- var fileCreatingInfo = new FileCreationInformation
- {
- Url = moduleFile.FileName,
- Overwrite = true
- };
-
- if (moduleFile.Content.Length < ContentStreamFileSize)
- {
- TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Using fileCreatingInfo.Content for small file less than: [{0}]", ContentStreamFileSize);
- fileCreatingInfo.Content = moduleFile.Content;
- }
- else
- {
+#endif
+
+#if !NET35
+ TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Using fileCreatingInfo.ContentStream for big file more than: [{0}]", ContentStreamFileSize);
+ fileCreatingInfo.ContentStream = new System.IO.MemoryStream(moduleFile.Content);
+#endif
+ }
+
+
+
+ var file = folder.Files.Add(fileCreatingInfo);
+
+ folder.Context.ExecuteQueryWithTrace();
+
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioned,
+ Object = file,
+ ObjectType = typeof(File),
+ ObjectDefinition = moduleFile,
+ ModelHost = folderHost
+ });
+ }
+ else
+ {
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioned,
+ Object = currentFile.Exists ? currentFile : null,
+ ObjectType = typeof(File),
+ ObjectDefinition = moduleFile,
+ ModelHost = folderHost
+ });
+ }
+
+ folder.Update();
+ folder.Context.ExecuteQueryWithTrace();
+ }
+
+ private void ProcessContentTypeFolder(FolderModelHost folderHost, ModuleFileDefinition moduleFile)
+ {
+ var web = folderHost.HostWeb;
+ var folder = folderHost.CurrentContentTypeFolder;
+
+ var context = web.Context;
+
+ if (!folder.IsPropertyAvailable("ServerRelativeUrl"))
+ {
+ context.Load(folder, f => f.ServerRelativeUrl);
+ context.ExecuteQueryWithTrace();
+ }
+
+ var currentFile = web.GetFileByServerRelativeUrl(GetSafeFileUrl(folder, moduleFile));
+
+ context.Load(currentFile, f => f.Exists);
+ context.ExecuteQueryWithTrace();
+
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioning,
+ Object = currentFile.Exists ? currentFile : null,
+ ObjectType = typeof(File),
+ ObjectDefinition = moduleFile,
+ ModelHost = folderHost
+ });
+
+ if (moduleFile.Overwrite)
+ {
+ var fileCreatingInfo = new FileCreationInformation
+ {
+ Url = moduleFile.FileName,
+ Overwrite = true
+ };
+
+ if (moduleFile.Content.Length < ContentStreamFileSize)
+ {
+ TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Using fileCreatingInfo.Content for small file less than: [{0}]", ContentStreamFileSize);
+ fileCreatingInfo.Content = moduleFile.Content;
+ }
+ else
+ {
#if NET35
throw new SPMeta2Exception(string.Format("SP2010 CSOM implementation does no support file more than {0}. Checkout FileCreationInformation and avialabe Content size.", ContentStreamFileSize));
-#endif
-
-#if !NET35
- TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Using fileCreatingInfo.ContentStream for big file more than: [{0}]", ContentStreamFileSize);
- fileCreatingInfo.ContentStream = new System.IO.MemoryStream(moduleFile.Content);
-#endif
-
- }
-
- var file = folder.Files.Add(fileCreatingInfo);
-
- folder.Context.ExecuteQueryWithTrace();
-
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioned,
- Object = file,
- ObjectType = typeof(File),
- ObjectDefinition = moduleFile,
- ModelHost = folderHost
- });
- }
- else
- {
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioned,
- Object = currentFile.Exists ? currentFile : null,
- ObjectType = typeof(File),
- ObjectDefinition = moduleFile,
- ModelHost = folderHost
- });
- }
-
- folder.Update();
- folder.Context.ExecuteQueryWithTrace();
- }
-
- private string GetSafeFileUrl(Folder folder, ModuleFileDefinition moduleFile)
- {
- return UrlUtility.CombineUrl(folder.ServerRelativeUrl, moduleFile.FileName);
- }
-
- public override void WithResolvingModelHost(ModelHostResolveContext modelHostContext)
- {
- var modelHost = modelHostContext.ModelHost;
- var model = modelHostContext.Model;
- var childModelType = modelHostContext.ChildModelType;
- var action = modelHostContext.Action;
-
-
- var folderHost = modelHost.WithAssertAndCast("modelHost", value => value.RequireNotNull());
- var moduleFile = model.WithAssertAndCast("model", value => value.RequireNotNull());
-
- var web = folderHost.CurrentWeb;
- var file = ProcessFile(folderHost, moduleFile);
- var context = file.Context;
-
- if (childModelType == typeof(ListItemFieldValueDefinition))
- {
- var fileListItem = file.ListItemAllFields;
-
- context.Load(fileListItem, i => i.Id, i => i.ParentList);
- context.ExecuteQueryWithTrace();
-
- var list = fileListItem.ParentList;
- var item = list.GetItemById(fileListItem.Id);
-
- context.ExecuteQueryWithTrace();
-
- var listItemPropertyHost = new ListItemModelHost
- {
- HostListItem = item
- };
-
- action(listItemPropertyHost);
-
- item.Update();
-
- context.ExecuteQueryWithTrace();
- }
- else if (childModelType == typeof(PropertyDefinition))
- {
- var propModelHost = new PropertyModelHost
- {
- CurrentFile = file
- };
-
- action(propModelHost);
-
- context.ExecuteQueryWithTrace();
- }
- else
- {
- action(file);
-
- context.ExecuteQueryWithTrace();
- }
- }
-
- public static void WithSafeFileOperation(List list, File file, Func action)
- {
- WithSafeFileOperation(list, file, action, null, true);
- }
-
- public static void WithSafeFileOperation(List list, File file, Func action, bool doesFileHasListItem)
- {
- WithSafeFileOperation(list, file, action, null, doesFileHasListItem);
- }
-
- public static void WithSafeFileOperation(List list, File file, Func action, Action onCreated)
- {
- WithSafeFileOperation(list, file, action, onCreated, true);
- }
-
- public static void WithSafeFileOperation(List list, File file,
- Func action, Action onCreated,
- bool doesFileHasListItem)
- {
- var context = list.Context;
-
- context.Load(list, l => l.EnableMinorVersions);
- context.Load(list, l => l.EnableModeration);
- context.Load(list, l => l.BaseType);
-
- context.ExecuteQueryWithTrace();
-
- if (file != null)
- {
- context.Load(file, f => f.Exists);
- context.ExecuteQueryWithTrace();
-
- if (file.Exists)
- {
- context.Load(file);
-
- context.Load(file, f => f.CheckOutType);
- context.Load(file, f => f.CheckedOutByUser);
- context.Load(file, f => f.Level);
-
- context.ExecuteQueryWithTrace();
- }
- }
-
- // are we inside ocument libary, so that check in stuff is needed?
- var isDocumentLibrary = list != null && list.BaseType == BaseType.DocumentLibrary;
-
- if (isDocumentLibrary && doesFileHasListItem)
- {
-
- if (list != null && file != null && (file.Exists && file.CheckOutType != CheckOutType.None))
- {
- file.UndoCheckOut();
- file.RefreshLoad();
-
- context.ExecuteQueryWithTrace();
- }
-
- if (list != null && file != null && (list.EnableMinorVersions) &&
- (file.Exists && file.Level == FileLevel.Published))
- {
- file.UnPublish("Provision");
- file.RefreshLoad();
-
- context.ExecuteQueryWithTrace();
- }
-
- if (list != null && file != null && (file.Exists && file.CheckOutType == CheckOutType.None))
- {
- file.CheckOut();
- file.RefreshLoad();
-
- context.ExecuteQueryWithTrace();
- }
- }
-
- var spFile = action(file);
- context.ExecuteQueryWithTrace();
-
- context.Load(spFile);
- context.Load(spFile, f => f.Exists);
-
- context.ExecuteQueryWithTrace();
-
- if (spFile.Exists)
- {
- // super hack with doesFileHasListItem
- // once filed under Forms folder
- // CanDeploy_WebpartTo_ListForm_InLibrary / CanDeploy_WebpartTo_ListForm_InLibrary
- if (isDocumentLibrary && doesFileHasListItem)
- {
- if (spFile.ListItemAllFields != null)
- {
- // weird issues while deployin in a row for wiki
- if (list.BaseTemplate != 119)
- {
- spFile.ListItemAllFields.Update();
- }
- }
- }
-
- context.ExecuteQueryWithTrace();
-
- if (onCreated != null)
- onCreated(spFile);
-
- context.Load(spFile);
-
- context.Load(spFile, f => f.CheckOutType);
- context.Load(spFile, f => f.Level);
-
- context.ExecuteQueryWithTrace();
- }
-
- // super hack with doesFileHasListItem
- // once filed under Forms folder
- // CanDeploy_WebpartTo_ListForm_InLibrary / CanDeploy_WebpartTo_ListForm_InLibrary
- if (isDocumentLibrary && doesFileHasListItem)
- {
- if (list != null && spFile != null && (spFile.Exists && spFile.CheckOutType != CheckOutType.None))
- {
- spFile.CheckIn("Provision", CheckinType.MajorCheckIn);
- }
-
- if (list != null && spFile != null && (list.EnableMinorVersions))
- spFile.Publish("Provision");
-
-
- if (list != null && spFile != null && (list.EnableModeration))
- {
-
+#endif
+
+#if !NET35
+ TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Using fileCreatingInfo.ContentStream for big file more than: [{0}]", ContentStreamFileSize);
+ fileCreatingInfo.ContentStream = new System.IO.MemoryStream(moduleFile.Content);
+#endif
+
+ }
+
+ var file = folder.Files.Add(fileCreatingInfo);
+
+ folder.Context.ExecuteQueryWithTrace();
+
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioned,
+ Object = file,
+ ObjectType = typeof(File),
+ ObjectDefinition = moduleFile,
+ ModelHost = folderHost
+ });
+ }
+ else
+ {
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioned,
+ Object = currentFile.Exists ? currentFile : null,
+ ObjectType = typeof(File),
+ ObjectDefinition = moduleFile,
+ ModelHost = folderHost
+ });
+ }
+
+ folder.Update();
+ folder.Context.ExecuteQueryWithTrace();
+ }
+
+ private string GetSafeFileUrl(Folder folder, ModuleFileDefinition moduleFile)
+ {
+ return UrlUtility.CombineUrl(folder.ServerRelativeUrl, moduleFile.FileName);
+ }
+
+ public override void WithResolvingModelHost(ModelHostResolveContext modelHostContext)
+ {
+ var modelHost = modelHostContext.ModelHost;
+ var model = modelHostContext.Model;
+ var childModelType = modelHostContext.ChildModelType;
+ var action = modelHostContext.Action;
+
+
+ var folderHost = modelHost.WithAssertAndCast("modelHost", value => value.RequireNotNull());
+ var moduleFile = model.WithAssertAndCast("model", value => value.RequireNotNull());
+
+ var web = folderHost.CurrentWeb;
+ var file = ProcessFile(folderHost, moduleFile);
+ var context = file.Context;
+
+ if (childModelType == typeof(ListItemFieldValueDefinition))
+ {
+ var fileListItem = file.ListItemAllFields;
+
+ context.Load(fileListItem, i => i.Id, i => i.ParentList);
+ context.ExecuteQueryWithTrace();
+
+ var list = fileListItem.ParentList;
+ var item = list.GetItemById(fileListItem.Id);
+
+ context.ExecuteQueryWithTrace();
+
+ var listItemPropertyHost = new ListItemModelHost
+ {
+ HostListItem = item
+ };
+
+ action(listItemPropertyHost);
+
+ item.Update();
+
+ context.ExecuteQueryWithTrace();
+ }
+ else if (childModelType == typeof(PropertyDefinition))
+ {
+ var propModelHost = new PropertyModelHost
+ {
+ CurrentFile = file
+ };
+
+ action(propModelHost);
+
+ context.ExecuteQueryWithTrace();
+ }
+ else
+ {
+ action(file);
+
+ context.ExecuteQueryWithTrace();
+ }
+ }
+
+ public static void WithSafeFileOperation(List list, File file, Func action)
+ {
+ WithSafeFileOperation(list, file, action, null, true);
+ }
+
+ public static void WithSafeFileOperation(List list, File file, Func action, bool doesFileHasListItem)
+ {
+ WithSafeFileOperation(list, file, action, null, doesFileHasListItem);
+ }
+
+ public static void WithSafeFileOperation(List list, File file, Func action, Action onCreated)
+ {
+ WithSafeFileOperation(list, file, action, onCreated, true);
+ }
+
+ public static void WithSafeFileOperation(List list, File file,
+ Func action, Action onCreated,
+ bool doesFileHasListItem)
+ {
+ var context = list.Context;
+
+ context.Load(list, l => l.EnableMinorVersions);
+ context.Load(list, l => l.EnableModeration);
+ context.Load(list, l => l.BaseType);
+
+ context.ExecuteQueryWithTrace();
+
+ if (file != null)
+ {
+ context.Load(file, f => f.Exists);
+ context.ExecuteQueryWithTrace();
+
+ if (file.Exists)
+ {
+ context.Load(file);
+
+ context.Load(file, f => f.CheckOutType);
+ context.Load(file, f => f.CheckedOutByUser);
+ context.Load(file, f => f.Level);
+
+ context.ExecuteQueryWithTrace();
+ }
+ }
+
+ // are we inside ocument libary, so that check in stuff is needed?
+ var isDocumentLibrary = list != null && list.BaseType == BaseType.DocumentLibrary;
+
+ if (isDocumentLibrary && doesFileHasListItem)
+ {
+ if (list != null && file != null && (file.Exists && file.CheckOutType != CheckOutType.None))
+ {
+ file.UndoCheckOut();
+ file.RefreshLoad();
+
+ context.ExecuteQueryWithTrace();
+ }
+
+ if (list != null && file != null && (list.EnableMinorVersions) &&
+ (file.Exists && file.Level == FileLevel.Published))
+ {
+ file.UnPublish("Provision");
+ file.RefreshLoad();
+
+ context.ExecuteQueryWithTrace();
+
+ // Module file provision fails at minor version 511 #930
+ // https://github.com/SubPointSolutions/spmeta2/issues/930
+
+ // checking out .511 version will result in an exception
+ // can be cause by multiple provisions of the same file (such as on dev/test environment)
+ if (file.MinorVersion >= MaxMinorVersionCount)
+ {
+ file.Publish("Provision");
+ file.RefreshLoad();
+
+ if (list.EnableModeration)
+ {
+ // this is gonna be ugly for SP2010, sorry pals
+#if !NET35
+ file.Approve("Provision");
+ file.RefreshLoad();
+#endif
+ }
+
+ context.ExecuteQueryWithTrace();
+ }
+ }
+
+ if (list != null && file != null && (file.Exists && file.CheckOutType == CheckOutType.None))
+ {
+ file.CheckOut();
+ file.RefreshLoad();
+
+ context.ExecuteQueryWithTrace();
+ }
+ }
+
+ var spFile = action(file);
+ context.ExecuteQueryWithTrace();
+
+ context.Load(spFile);
+ context.Load(spFile, f => f.Exists);
+
+ context.ExecuteQueryWithTrace();
+
+ if (spFile.Exists)
+ {
+ // super hack with doesFileHasListItem
+ // once filed under Forms folder
+ // CanDeploy_WebpartTo_ListForm_InLibrary / CanDeploy_WebpartTo_ListForm_InLibrary
+ if (isDocumentLibrary && doesFileHasListItem)
+ {
+ if (spFile.ListItemAllFields != null)
+ {
+ // weird issues while deployin in a row for wiki
+ if (list.BaseTemplate != 119)
+ {
+ spFile.ListItemAllFields.Update();
+ }
+ }
+ }
+
+ context.ExecuteQueryWithTrace();
+
+ if (onCreated != null)
+ onCreated(spFile);
+
+ context.Load(spFile);
+
+ context.Load(spFile, f => f.CheckOutType);
+ context.Load(spFile, f => f.Level);
+
+ context.ExecuteQueryWithTrace();
+ }
+
+ // super hack with doesFileHasListItem
+ // once filed under Forms folder
+ // CanDeploy_WebpartTo_ListForm_InLibrary / CanDeploy_WebpartTo_ListForm_InLibrary
+ if (isDocumentLibrary && doesFileHasListItem)
+ {
+ if (list != null && spFile != null && (spFile.Exists && spFile.CheckOutType != CheckOutType.None))
+ {
+ spFile.CheckIn("Provision", CheckinType.MajorCheckIn);
+ }
+
+ if (list != null && spFile != null && (list.EnableMinorVersions))
+ spFile.Publish("Provision");
+
+
+ if (list != null && spFile != null && (list.EnableModeration))
+ {
+
#if NET35
// TODO, Approve() method is not exposed
throw new SPMeta2NotImplementedException("Not implemented for SP2010 - https://github.com/SubPointSolutions/spmeta2/issues/771");
-#endif
-
-#if !NET35
- spFile.Approve("Provision");
-#endif
-
- }
-
- }
-
- context.ExecuteQueryWithTrace();
- }
-
- protected File GetFile(FolderModelHost folderHost, ModuleFileDefinition moduleFile)
- {
- Folder folder = null;
-
- if (folderHost.CurrentList != null)
- folder = folderHost.CurrentListFolder;
- else if (folderHost.CurrentContentType != null)
- folder = folderHost.CurrentContentTypeFolder;
- else if (folderHost.CurrentWebFolder != null)
- folder = folderHost.CurrentWebFolder;
-
- var web = folderHost.HostWeb;
- var context = web.Context;
-
- var file = web.GetFileByServerRelativeUrl(GetSafeFileUrl(folder, moduleFile));
-
- context.Load(file, f => f.Exists);
- context.ExecuteQueryWithTrace();
-
- return file;
- }
-
- protected string ResolveContentTypeId(FolderModelHost folderHost, ModuleFileDefinition moduleFile)
- {
- var context = folderHost.CurrentListFolder.Context;
- var list = folderHost.CurrentList;
- var stringCustomContentType = string.Empty;
-
- if (!string.IsNullOrEmpty(moduleFile.ContentTypeId))
- {
- stringCustomContentType = moduleFile.ContentTypeId;
- }
- else if (!string.IsNullOrEmpty(moduleFile.ContentTypeName))
- {
- stringCustomContentType = ContentTypeLookupService.LookupContentTypeByName(list, moduleFile.ContentTypeName).Id.ToString();
- }
-
- return stringCustomContentType;
- }
-
- private File ProcessFile(FolderModelHost folderHost, ModuleFileDefinition definition)
- {
- var context = folderHost.CurrentListFolder.Context;
-
- var web = folderHost.CurrentWeb;
- var list = folderHost.CurrentList;
- var folder = folderHost.CurrentListFolder;
-
- context.Load(folder, f => f.ServerRelativeUrl);
-
-#if !NET35
- context.Load(folder, f => f.Properties);
-#endif
-
- context.ExecuteQueryWithTrace();
-
- var stringCustomContentType = ResolveContentTypeId(folderHost, definition);
-
- if (list != null)
- {
- context.Load(list, l => l.EnableMinorVersions);
- context.Load(list, l => l.EnableVersioning);
- context.Load(list, l => l.EnableModeration);
-
- context.ExecuteQueryWithTrace();
- }
-
- var file = web.GetFileByServerRelativeUrl(GetSafeFileUrl(folder, definition));
-
- context.Load(file, f => f.Exists);
- context.ExecuteQueryWithTrace();
-
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioning,
- Object = file.Exists ? file : null,
- ObjectType = typeof(File),
- ObjectDefinition = definition,
- ModelHost = folderHost
- });
-
-#if !NET35
- var doesFileHasListItem =
- //Forms folders
- !(folder != null
- &&
- (folder.Properties.FieldValues.ContainsKey("vti_winfileattribs")
- && folder.Properties.FieldValues["vti_winfileattribs"].ToString() == "00000012"));
-
-#endif
-
+#endif
+
+#if !NET35
+ spFile.Approve("Provision");
+#endif
+
+ }
+
+ }
+
+ context.ExecuteQueryWithTrace();
+ }
+
+ protected File GetFile(FolderModelHost folderHost, ModuleFileDefinition moduleFile)
+ {
+ Folder folder = null;
+
+ if (folderHost.CurrentList != null)
+ folder = folderHost.CurrentListFolder;
+ else if (folderHost.CurrentContentType != null)
+ folder = folderHost.CurrentContentTypeFolder;
+ else if (folderHost.CurrentWebFolder != null)
+ folder = folderHost.CurrentWebFolder;
+
+ var web = folderHost.HostWeb;
+ var context = web.Context;
+
+ var file = web.GetFileByServerRelativeUrl(GetSafeFileUrl(folder, moduleFile));
+
+ context.Load(file, f => f.Exists);
+ context.ExecuteQueryWithTrace();
+
+ return file;
+ }
+
+ protected string ResolveContentTypeId(FolderModelHost folderHost, ModuleFileDefinition moduleFile)
+ {
+ var context = folderHost.CurrentListFolder.Context;
+ var list = folderHost.CurrentList;
+ var stringCustomContentType = string.Empty;
+
+ if (!string.IsNullOrEmpty(moduleFile.ContentTypeId))
+ {
+ stringCustomContentType = moduleFile.ContentTypeId;
+ }
+ else if (!string.IsNullOrEmpty(moduleFile.ContentTypeName))
+ {
+ stringCustomContentType = ContentTypeLookupService.LookupContentTypeByName(list, moduleFile.ContentTypeName).Id.ToString();
+ }
+
+ return stringCustomContentType;
+ }
+
+ private File ProcessFile(FolderModelHost folderHost, ModuleFileDefinition definition)
+ {
+ var context = folderHost.CurrentListFolder.Context;
+
+ var web = folderHost.CurrentWeb;
+ var list = folderHost.CurrentList;
+ var folder = folderHost.CurrentListFolder;
+
+ context.Load(folder, f => f.ServerRelativeUrl);
+
+#if !NET35
+ context.Load(folder, f => f.Properties);
+#endif
+
+ context.ExecuteQueryWithTrace();
+
+ var stringCustomContentType = ResolveContentTypeId(folderHost, definition);
+
+ if (list != null)
+ {
+ context.Load(list, l => l.EnableMinorVersions);
+ context.Load(list, l => l.EnableVersioning);
+ context.Load(list, l => l.EnableModeration);
+
+ context.ExecuteQueryWithTrace();
+ }
+
+ var file = web.GetFileByServerRelativeUrl(GetSafeFileUrl(folder, definition));
+
+ context.Load(file, f => f.Exists);
+ context.ExecuteQueryWithTrace();
+
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioning,
+ Object = file.Exists ? file : null,
+ ObjectType = typeof(File),
+ ObjectDefinition = definition,
+ ModelHost = folderHost
+ });
+
+#if !NET35
+ var doesFileHasListItem =
+ //Forms folders
+ !(folder != null
+ &&
+ (folder.Properties.FieldValues.ContainsKey("vti_winfileattribs")
+ && folder.Properties.FieldValues["vti_winfileattribs"].ToString() == "00000012"));
+
+#endif
+
#if NET35
var doesFileHasListItem = true;
-#endif
-
- WithSafeFileOperation(list, file, f =>
- {
- var fileName = definition.FileName;
- var fileContent = definition.Content;
-
- var fileCreatingInfo = new FileCreationInformation
- {
- Url = fileName,
- Overwrite = file.Exists
- };
-
- if (fileContent.Length < ContentStreamFileSize)
- {
- TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Using fileCreatingInfo.Content for small file less than: [{0}]", ContentStreamFileSize);
- fileCreatingInfo.Content = fileContent;
- }
- else
- {
+#endif
+
+ WithSafeFileOperation(list, file, f =>
+ {
+ var fileName = definition.FileName;
+ var fileContent = definition.Content;
+
+ var fileCreatingInfo = new FileCreationInformation
+ {
+ Url = fileName,
+ Overwrite = file.Exists
+ };
+
+ if (fileContent.Length < ContentStreamFileSize)
+ {
+ TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Using fileCreatingInfo.Content for small file less than: [{0}]", ContentStreamFileSize);
+ fileCreatingInfo.Content = fileContent;
+ }
+ else
+ {
#if NET35
throw new SPMeta2Exception(string.Format("SP2010 CSOM implementation does no support file more than {0}. Checkout FileCreationInformation and avialabe Content size.", ContentStreamFileSize));
-#endif
-
-#if !NET35
- TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Using fileCreatingInfo.ContentStream for big file more than: [{0}]", ContentStreamFileSize);
- fileCreatingInfo.ContentStream = new System.IO.MemoryStream(fileContent);
-#endif
- }
-
- TraceService.Verbose((int)LogEventId.ModelProvisionCoreCall, "Overwriting file");
- var updatedFile = folder.Files.Add(fileCreatingInfo);
-
- FieldLookupService.EnsureDefaultValues(updatedFile.ListItemAllFields, definition.DefaultValues);
-
-
- if (!string.IsNullOrEmpty(stringCustomContentType))
- updatedFile.ListItemAllFields[BuiltInInternalFieldNames.ContentTypeId] = stringCustomContentType;
-
- if (!string.IsNullOrEmpty(definition.Title))
- updatedFile.ListItemAllFields[BuiltInInternalFieldNames.Title] = definition.Title;
-
-
- FieldLookupService.EnsureValues(updatedFile.ListItemAllFields, definition.Values, true);
-
- if (!string.IsNullOrEmpty(stringCustomContentType)
- || definition.DefaultValues.Count > 0
- || definition.Values.Count > 0
- || !string.IsNullOrEmpty(definition.Title))
- {
- updatedFile.ListItemAllFields.Update();
- }
-
-
- return updatedFile;
- }, doesFileHasListItem);
-
- var resultFile = web.GetFileByServerRelativeUrl(GetSafeFileUrl(folder, definition));
-
- context.Load(resultFile, f => f.Exists);
- context.ExecuteQueryWithTrace();
-
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioned,
- Object = resultFile,
- ObjectType = typeof(File),
- ObjectDefinition = definition,
- ModelHost = folderHost
- });
-
- return resultFile;
- }
-
- #endregion
- }
-}
+#endif
+
+#if !NET35
+ TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Using fileCreatingInfo.ContentStream for big file more than: [{0}]", ContentStreamFileSize);
+ fileCreatingInfo.ContentStream = new System.IO.MemoryStream(fileContent);
+#endif
+ }
+
+ TraceService.Verbose((int)LogEventId.ModelProvisionCoreCall, "Overwriting file");
+ var updatedFile = folder.Files.Add(fileCreatingInfo);
+
+ FieldLookupService.EnsureDefaultValues(updatedFile.ListItemAllFields, definition.DefaultValues);
+
+
+ if (!string.IsNullOrEmpty(stringCustomContentType))
+ updatedFile.ListItemAllFields[BuiltInInternalFieldNames.ContentTypeId] = stringCustomContentType;
+
+ if (!string.IsNullOrEmpty(definition.Title))
+ updatedFile.ListItemAllFields[BuiltInInternalFieldNames.Title] = definition.Title;
+
+
+ FieldLookupService.EnsureValues(updatedFile.ListItemAllFields, definition.Values, true);
+
+ if (!string.IsNullOrEmpty(stringCustomContentType)
+ || definition.DefaultValues.Count > 0
+ || definition.Values.Count > 0
+ || !string.IsNullOrEmpty(definition.Title))
+ {
+ updatedFile.ListItemAllFields.Update();
+ }
+
+
+ return updatedFile;
+ }, doesFileHasListItem);
+
+ var resultFile = web.GetFileByServerRelativeUrl(GetSafeFileUrl(folder, definition));
+
+ context.Load(resultFile, f => f.Exists);
+ context.ExecuteQueryWithTrace();
+
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioned,
+ Object = resultFile,
+ ObjectType = typeof(File),
+ ObjectDefinition = definition,
+ ModelHost = folderHost
+ });
+
+ return resultFile;
+ }
+
+ #endregion
+ }
+}
diff --git a/SPMeta2/SPMeta2.CSOM/Properties/AssemblyInfo.cs b/SPMeta2/SPMeta2.CSOM/Properties/AssemblyInfo.cs
index 9501c1fe1..723773202 100644
--- a/SPMeta2/SPMeta2.CSOM/Properties/AssemblyInfo.cs
+++ b/SPMeta2/SPMeta2.CSOM/Properties/AssemblyInfo.cs
@@ -33,4 +33,4 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.2.16305.1232")]
+[assembly: AssemblyFileVersion("1.2.17040.0900")]
diff --git a/SPMeta2/SPMeta2.CSOM/Services/CSOMTokenReplacementService.cs b/SPMeta2/SPMeta2.CSOM/Services/CSOMTokenReplacementService.cs
index 247e660ed..09da6d9f1 100644
--- a/SPMeta2/SPMeta2.CSOM/Services/CSOMTokenReplacementService.cs
+++ b/SPMeta2/SPMeta2.CSOM/Services/CSOMTokenReplacementService.cs
@@ -83,7 +83,12 @@ public override TokenReplacementResult ReplaceTokens(TokenReplacementContext con
foreach (var tokenInfo in TokenProcessInfos)
{
if (!string.IsNullOrEmpty(result.Value))
- result.Value = tokenInfo.RegEx.Replace(result.Value, ResolveToken(context.Context, tokenInfo.Name));
+ {
+ result.Value = tokenInfo.RegEx.Replace(result.Value, ResolveToken(context, context.Context, tokenInfo.Name));
+
+ result.Value = result.Value.Replace(@"//", @"/");
+ result.Value = result.Value.Replace(@"\\", @"\");
+ }
}
if (OnTokenReplaced != null)
@@ -97,10 +102,13 @@ public override TokenReplacementResult ReplaceTokens(TokenReplacementContext con
return result;
}
- protected virtual string ResolveToken(object contextObject, string token)
+ protected virtual string ResolveToken(TokenReplacementContext tokenContext, object contextObject, string token)
{
if (string.Equals(token, "~sitecollection", StringComparison.CurrentCultureIgnoreCase))
{
+ if (tokenContext.IsSiteRelativeUrl)
+ return "/";
+
var site = ExtractSite(contextObject);
if (site.ServerRelativeUrl == "/")
@@ -113,6 +121,12 @@ protected virtual string ResolveToken(object contextObject, string token)
{
var web = ExtractWeb(contextObject);
+ if (tokenContext.IsSiteRelativeUrl)
+ {
+ var site = ExtractSite(contextObject);
+ return "/" + web.ServerRelativeUrl.Replace(site.ServerRelativeUrl, string.Empty);
+ }
+
if (web.ServerRelativeUrl == "/")
return string.Empty;
diff --git a/SPMeta2/SPMeta2.Containers.CSOM/Properties/AssemblyInfo.cs b/SPMeta2/SPMeta2.Containers.CSOM/Properties/AssemblyInfo.cs
index 108e7ff1f..45e1fda01 100644
--- a/SPMeta2/SPMeta2.Containers.CSOM/Properties/AssemblyInfo.cs
+++ b/SPMeta2/SPMeta2.Containers.CSOM/Properties/AssemblyInfo.cs
@@ -33,4 +33,4 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.2.16305.1232")]
\ No newline at end of file
+[assembly: AssemblyFileVersion("1.2.17040.0900")]
\ No newline at end of file
diff --git a/SPMeta2/SPMeta2.Containers.O365/Properties/AssemblyInfo.cs b/SPMeta2/SPMeta2.Containers.O365/Properties/AssemblyInfo.cs
index 706c6dc09..ff23d1947 100644
--- a/SPMeta2/SPMeta2.Containers.O365/Properties/AssemblyInfo.cs
+++ b/SPMeta2/SPMeta2.Containers.O365/Properties/AssemblyInfo.cs
@@ -33,4 +33,4 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.2.16305.1232")]
+[assembly: AssemblyFileVersion("1.2.17040.0900")]
diff --git a/SPMeta2/SPMeta2.Containers.O365v16/Properties/AssemblyInfo.cs b/SPMeta2/SPMeta2.Containers.O365v16/Properties/AssemblyInfo.cs
index 1bac1ea68..123738bec 100644
--- a/SPMeta2/SPMeta2.Containers.O365v16/Properties/AssemblyInfo.cs
+++ b/SPMeta2/SPMeta2.Containers.O365v16/Properties/AssemblyInfo.cs
@@ -33,4 +33,4 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.2.16305.1232")]
\ No newline at end of file
+[assembly: AssemblyFileVersion("1.2.17040.0900")]
\ No newline at end of file
diff --git a/SPMeta2/SPMeta2.Containers.SSOM/Properties/AssemblyInfo.cs b/SPMeta2/SPMeta2.Containers.SSOM/Properties/AssemblyInfo.cs
index 4f5b0f14b..9deaf7ebc 100644
--- a/SPMeta2/SPMeta2.Containers.SSOM/Properties/AssemblyInfo.cs
+++ b/SPMeta2/SPMeta2.Containers.SSOM/Properties/AssemblyInfo.cs
@@ -33,4 +33,4 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.2.16305.1232")]
+[assembly: AssemblyFileVersion("1.2.17040.0900")]
diff --git a/SPMeta2/SPMeta2.Containers.Standard/Properties/AssemblyInfo.cs b/SPMeta2/SPMeta2.Containers.Standard/Properties/AssemblyInfo.cs
index 477738e72..3ef96a102 100644
--- a/SPMeta2/SPMeta2.Containers.Standard/Properties/AssemblyInfo.cs
+++ b/SPMeta2/SPMeta2.Containers.Standard/Properties/AssemblyInfo.cs
@@ -33,4 +33,4 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.2.16305.1232")]
+[assembly: AssemblyFileVersion("1.2.17040.0900")]
diff --git a/SPMeta2/SPMeta2.Containers/Properties/AssemblyInfo.cs b/SPMeta2/SPMeta2.Containers/Properties/AssemblyInfo.cs
index fbbc0bc97..30ad9390f 100644
--- a/SPMeta2/SPMeta2.Containers/Properties/AssemblyInfo.cs
+++ b/SPMeta2/SPMeta2.Containers/Properties/AssemblyInfo.cs
@@ -33,4 +33,4 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.2.16305.1232")]
+[assembly: AssemblyFileVersion("1.2.17040.0900")]
diff --git a/SPMeta2/SPMeta2.Containers/Services/RegressionTestService.cs b/SPMeta2/SPMeta2.Containers/Services/RegressionTestService.cs
index e1e254520..d0649c195 100644
--- a/SPMeta2/SPMeta2.Containers/Services/RegressionTestService.cs
+++ b/SPMeta2/SPMeta2.Containers/Services/RegressionTestService.cs
@@ -485,6 +485,11 @@ private void PleaseMakeSureDefinitionsWereNotChangedByModelHandlers(IEnumerable<
}
public void TestModels(IEnumerable models)
+ {
+ TestModels(models, false);
+ }
+
+ public void TestModels(IEnumerable models, bool deployOnce)
{
// force XML serialiation
GetSerializedAndRestoredModels(models);
@@ -533,15 +538,21 @@ public void TestModels(IEnumerable models)
}
- if (this.EnableDefinitionValidation)
+ if (!deployOnce)
{
- var hasMissedOrInvalidProps = ResolveModelValidation(model, hooks);
- AssertService.IsFalse(hasMissedOrInvalidProps);
+ if (this.EnableDefinitionValidation)
+ {
+ var hasMissedOrInvalidProps = ResolveModelValidation(model, hooks);
+ AssertService.IsFalse(hasMissedOrInvalidProps);
+ }
}
});
- if (EnableDefinitionImmutabilityValidation)
- PleaseMakeSureDefinitionsWereNotChangedByModelHandlers(new[] { model });
+ if (!deployOnce)
+ {
+ if (EnableDefinitionImmutabilityValidation)
+ PleaseMakeSureDefinitionsWereNotChangedByModelHandlers(new[] { model });
+ }
}
}
diff --git a/SPMeta2/SPMeta2.O365/Properties/AssemblyInfo.cs b/SPMeta2/SPMeta2.O365/Properties/AssemblyInfo.cs
index e4884e2eb..ce90b40b6 100644
--- a/SPMeta2/SPMeta2.O365/Properties/AssemblyInfo.cs
+++ b/SPMeta2/SPMeta2.O365/Properties/AssemblyInfo.cs
@@ -33,4 +33,4 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.2.16305.1232")]
+[assembly: AssemblyFileVersion("1.2.17040.0900")]
diff --git a/SPMeta2/SPMeta2.Regression.CSOM.Standard/Properties/AssemblyInfo.cs b/SPMeta2/SPMeta2.Regression.CSOM.Standard/Properties/AssemblyInfo.cs
index 7b28a3cdf..95e79b184 100644
--- a/SPMeta2/SPMeta2.Regression.CSOM.Standard/Properties/AssemblyInfo.cs
+++ b/SPMeta2/SPMeta2.Regression.CSOM.Standard/Properties/AssemblyInfo.cs
@@ -33,4 +33,4 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.2.16305.1232")]
+[assembly: AssemblyFileVersion("1.2.17040.0900")]
diff --git a/SPMeta2/SPMeta2.Regression.CSOM/Properties/AssemblyInfo.cs b/SPMeta2/SPMeta2.Regression.CSOM/Properties/AssemblyInfo.cs
index 6afa87f11..644c19884 100644
--- a/SPMeta2/SPMeta2.Regression.CSOM/Properties/AssemblyInfo.cs
+++ b/SPMeta2/SPMeta2.Regression.CSOM/Properties/AssemblyInfo.cs
@@ -33,4 +33,4 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.2.16305.1232")]
+[assembly: AssemblyFileVersion("1.2.17040.0900")]
diff --git a/SPMeta2/SPMeta2.Regression.CSOM/Validation/ClientListViewDefinitionValidator.cs b/SPMeta2/SPMeta2.Regression.CSOM/Validation/ClientListViewDefinitionValidator.cs
index 72eed2698..56c548355 100644
--- a/SPMeta2/SPMeta2.Regression.CSOM/Validation/ClientListViewDefinitionValidator.cs
+++ b/SPMeta2/SPMeta2.Regression.CSOM/Validation/ClientListViewDefinitionValidator.cs
@@ -41,7 +41,9 @@ public override void DeployModel(object modelHost, DefinitionBase model)
v => v.AggregationsStatus,
v => v.Aggregations,
v => v.ViewType,
+ v => v.IncludeRootFolder,
v => v.ViewData));
+
context.ExecuteQueryWithTrace();
var spObject = FindViewByTitle(list.Views, definition.Title);
@@ -137,6 +139,11 @@ public override void DeployModel(object modelHost, DefinitionBase model)
assert.ShouldBeEqualIfNotNullOrEmpty(m => m.JSLink, o => o.JSLink);
+ if (definition.IncludeRootFolder.HasValue)
+ assert.ShouldBeEqual(m => m.IncludeRootFolder, o => o.IncludeRootFolder);
+ else
+ assert.SkipProperty(m => m.IncludeRootFolder, "IncludeRootFolder is null or empty. Skipping.");
+
if (!string.IsNullOrEmpty(definition.Query))
{
assert.ShouldBeEqual((p, s, d) =>
diff --git a/SPMeta2/SPMeta2.Regression.CSOM/Validation/ClientMasterPageDefinitionValidator.cs b/SPMeta2/SPMeta2.Regression.CSOM/Validation/ClientMasterPageDefinitionValidator.cs
index 06aa7cdda..26448bf25 100644
--- a/SPMeta2/SPMeta2.Regression.CSOM/Validation/ClientMasterPageDefinitionValidator.cs
+++ b/SPMeta2/SPMeta2.Regression.CSOM/Validation/ClientMasterPageDefinitionValidator.cs
@@ -1,240 +1,250 @@
-using System;
-using Microsoft.SharePoint.Client;
-using SPMeta2.Containers.Assertion;
-using SPMeta2.CSOM.ModelHandlers;
-using SPMeta2.CSOM.ModelHosts;
-using SPMeta2.Definitions;
-using SPMeta2.Standard.Definitions;
-using SPMeta2.Utils;
-using System.Collections.Generic;
-using System.Linq;
-using SPMeta2.Syntax.Default.Utils;
-using System.Text;
-using SPMeta2.CSOM.Extensions;
-using SPMeta2.Regression.CSOM.Extensions;
-
-namespace SPMeta2.Regression.CSOM.Validation
-{
- public class ClientMasterPageDefinitionValidator : MasterPageModelHandler
- {
- #region methods
-
- public override void DeployModel(object modelHost, DefinitionBase model)
- {
- var folderModelHost = modelHost.WithAssertAndCast("modelHost", value => value.RequireNotNull());
-
- var folder = folderModelHost.CurrentListFolder;
- var definition = model.WithAssertAndCast("model", value => value.RequireNotNull());
-
- var spObject = FindPage(folderModelHost.CurrentList, folder, definition);
- var spFile = FindPageFile(folderModelHost.CurrentList, folder, definition);
-
- var context = spObject.Context;
-
- context.Load(spObject);
- context.Load(spObject, o => o.DisplayName);
-
- context.Load(spFile);
- context.Load(spFile, o => o.ServerRelativeUrl);
-
- context.ExecuteQueryWithTrace();
-
- var stringCustomContentType = string.Empty;
-
- if (!string.IsNullOrEmpty(definition.ContentTypeName)
- || !string.IsNullOrEmpty(definition.ContentTypeId))
- {
- if (!string.IsNullOrEmpty(definition.ContentTypeName))
- {
- stringCustomContentType = ContentTypeLookupService
- .LookupContentTypeByName(folderModelHost.CurrentList, definition.ContentTypeName)
- .Name;
- }
- }
-
-
- var assert = ServiceFactory.AssertService
- .NewAssert(definition, spObject)
- .ShouldNotBeNull(spObject)
- .ShouldBeEqual(m => m.FileName, o => o.GetFileName())
- .ShouldBeEqual(m => m.DefaultCSSFile, o => o.GetDefaultCSSFile())
- .ShouldBeEqual(m => m.Description, o => o.GetMasterPageDescription())
- .ShouldBeEqual(m => m.Title, o => o.GetTitle());
-
- if (definition.UIVersion.Count > 0)
- {
- assert.ShouldBeEqual((p, s, d) =>
- {
- var srcProp = s.GetExpressionValue(def => def.UIVersion);
- var dstPropValue = d.GetUIVersion();
-
- var isValid = true;
-
- foreach (var v in s.UIVersion)
- {
- if (!dstPropValue.Contains(v))
- {
- isValid = false;
- break;
- }
- }
-
- return new PropertyValidationResult
- {
- Tag = p.Tag,
- Src = srcProp,
- Dst = null,
- IsValid = isValid
- };
- });
- }
- else
- {
- assert.SkipProperty(d => d.UIVersion, "UIVersion.Count is 0. Skipping");
- }
-
-
- assert.ShouldBeEqual((p, s, d) =>
- {
- var srcProp = s.GetExpressionValue(m => m.Content);
- //var dstProp = d.GetExpressionValue(ct => ct.GetId());
-
- var isContentValid = false;
-
- byte[] dstContent = null;
-
- using (var stream = File.OpenBinaryDirect(folderModelHost.HostClientContext, spFile.ServerRelativeUrl).Stream)
- dstContent = ModuleFileUtils.ReadFully(stream);
-
- var srcStringContent = Encoding.UTF8.GetString(s.Content);
- var dstStringContent = Encoding.UTF8.GetString(dstContent);
-
- isContentValid = dstStringContent.Contains(srcStringContent);
-
- return new PropertyValidationResult
- {
- Tag = p.Tag,
- Src = srcProp,
- // Dst = dstProp,
- IsValid = isContentValid
- };
- });
-
-
- if (!string.IsNullOrEmpty(definition.ContentTypeName))
- {
- assert.ShouldBeEqual(m => m.ContentTypeName, o => o.GetContentTypeName());
- }
- else
- {
- assert.SkipProperty(m => m.ContentTypeName, "ContentTypeName is NULL. Skipping.");
- }
-
- if (!string.IsNullOrEmpty(definition.ContentTypeId))
- {
- // TODO
- }
- else
- {
- assert.SkipProperty(m => m.ContentTypeId, "ContentTypeId is null or empty. Skipping.");
- }
-
- if (!string.IsNullOrEmpty(definition.ContentTypeName))
- {
- assert.ShouldBeEqual((p, s, d) =>
- {
- var srcProp = s.GetExpressionValue(def => def.ContentTypeName);
- var currentContentTypeName = d.ContentType.Name;
-
- var isValis = stringCustomContentType == currentContentTypeName;
-
- return new PropertyValidationResult
- {
- Tag = p.Tag,
- Src = srcProp,
- Dst = null,
- IsValid = isValis
- };
- });
- }
- else
- {
- assert.SkipProperty(m => m.ContentTypeName, "ContentTypeName is null or empty. Skipping.");
- }
-
- if (definition.DefaultValues.Count > 0)
- {
- assert.ShouldBeEqual((p, s, d) =>
- {
- var isValid = true;
-
- foreach (var srcValue in s.DefaultValues)
- {
- // big TODO here for == !=
-
- if (!string.IsNullOrEmpty(srcValue.FieldName))
- {
- if (d[srcValue.FieldName].ToString() != srcValue.Value.ToString())
- isValid = false;
- }
-
- if (!isValid)
- break;
- }
-
- var srcProp = s.GetExpressionValue(def => def.DefaultValues);
-
- return new PropertyValidationResult
- {
- Tag = p.Tag,
- Src = srcProp,
- Dst = null,
- IsValid = isValid
- };
- });
- }
- else
- {
- assert.SkipProperty(m => m.DefaultValues, "DefaultValues.Count == 0. Skipping.");
- }
-
- if (definition.Values.Count > 0)
- {
- assert.ShouldBeEqual((p, s, d) =>
- {
- var isValid = true;
-
- foreach (var srcValue in s.Values)
- {
- // big TODO here for == !=
-
- if (!string.IsNullOrEmpty(srcValue.FieldName))
- {
- if (d[srcValue.FieldName].ToString() != srcValue.Value.ToString())
- isValid = false;
- }
-
- if (!isValid)
- break;
- }
-
- var srcProp = s.GetExpressionValue(def => def.Values);
-
- return new PropertyValidationResult
- {
- Tag = p.Tag,
- Src = srcProp,
- Dst = null,
- IsValid = isValid
- };
- });
- }
- else
- {
- assert.SkipProperty(m => m.Values, "Values.Count == 0. Skipping.");
- }
- }
-
- #endregion
- }
-}
+using System;
+using Microsoft.SharePoint.Client;
+using SPMeta2.Containers.Assertion;
+using SPMeta2.CSOM.ModelHandlers;
+using SPMeta2.CSOM.ModelHosts;
+using SPMeta2.Definitions;
+using SPMeta2.Standard.Definitions;
+using SPMeta2.Utils;
+using System.Collections.Generic;
+using System.Linq;
+using SPMeta2.Syntax.Default.Utils;
+using System.Text;
+using SPMeta2.CSOM.Extensions;
+using SPMeta2.Regression.CSOM.Extensions;
+
+namespace SPMeta2.Regression.CSOM.Validation
+{
+ public class ClientMasterPageDefinitionValidator : MasterPageModelHandler
+ {
+ #region methods
+
+ public override void DeployModel(object modelHost, DefinitionBase model)
+ {
+ var folderModelHost = modelHost.WithAssertAndCast("modelHost", value => value.RequireNotNull());
+
+ var folder = folderModelHost.CurrentListFolder;
+ var definition = model.WithAssertAndCast("model", value => value.RequireNotNull());
+
+ var spObject = FindPage(folderModelHost.CurrentList, folder, definition);
+ var spFile = FindPageFile(folderModelHost.CurrentList, folder, definition);
+
+ var context = spObject.Context;
+
+ context.Load(spObject);
+ context.Load(spObject, o => o.DisplayName);
+
+ context.Load(spFile);
+ context.Load(spFile, o => o.ServerRelativeUrl);
+
+ context.ExecuteQueryWithTrace();
+
+ var stringCustomContentType = string.Empty;
+
+ if (!string.IsNullOrEmpty(definition.ContentTypeName)
+ || !string.IsNullOrEmpty(definition.ContentTypeId))
+ {
+ if (!string.IsNullOrEmpty(definition.ContentTypeName))
+ {
+ stringCustomContentType = ContentTypeLookupService
+ .LookupContentTypeByName(folderModelHost.CurrentList, definition.ContentTypeName)
+ .Name;
+ }
+ }
+
+
+ var assert = ServiceFactory.AssertService
+ .NewAssert(definition, spObject)
+ .ShouldNotBeNull(spObject)
+ .ShouldBeEqual(m => m.FileName, o => o.GetFileName())
+ .ShouldBeEqual(m => m.DefaultCSSFile, o => o.GetDefaultCSSFile())
+ .ShouldBeEqual(m => m.Description, o => o.GetMasterPageDescription());
+
+
+ if (folderModelHost.HostSite.ServerRelativeUrl == folderModelHost.HostWeb.ServerRelativeUrl)
+ {
+ assert.ShouldBeEqual(m => m.Title, o => o.GetTitle());
+ }
+ else
+ {
+ assert.SkipProperty(m => m.Title, "Skipping master page 'Title' update. Subweb is detcted.");
+ }
+
+
+ if (definition.UIVersion.Count > 0)
+ {
+ assert.ShouldBeEqual((p, s, d) =>
+ {
+ var srcProp = s.GetExpressionValue(def => def.UIVersion);
+ var dstPropValue = d.GetUIVersion();
+
+ var isValid = true;
+
+ foreach (var v in s.UIVersion)
+ {
+ if (!dstPropValue.Contains(v))
+ {
+ isValid = false;
+ break;
+ }
+ }
+
+ return new PropertyValidationResult
+ {
+ Tag = p.Tag,
+ Src = srcProp,
+ Dst = null,
+ IsValid = isValid
+ };
+ });
+ }
+ else
+ {
+ assert.SkipProperty(d => d.UIVersion, "UIVersion.Count is 0. Skipping");
+ }
+
+
+ assert.ShouldBeEqual((p, s, d) =>
+ {
+ var srcProp = s.GetExpressionValue(m => m.Content);
+ //var dstProp = d.GetExpressionValue(ct => ct.GetId());
+
+ var isContentValid = false;
+
+ byte[] dstContent = null;
+
+ using (var stream = File.OpenBinaryDirect(folderModelHost.HostClientContext, spFile.ServerRelativeUrl).Stream)
+ dstContent = ModuleFileUtils.ReadFully(stream);
+
+ var srcStringContent = Encoding.UTF8.GetString(s.Content);
+ var dstStringContent = Encoding.UTF8.GetString(dstContent);
+
+ isContentValid = dstStringContent.Contains(srcStringContent);
+
+ return new PropertyValidationResult
+ {
+ Tag = p.Tag,
+ Src = srcProp,
+ // Dst = dstProp,
+ IsValid = isContentValid
+ };
+ });
+
+
+ if (!string.IsNullOrEmpty(definition.ContentTypeName))
+ {
+ assert.ShouldBeEqual(m => m.ContentTypeName, o => o.GetContentTypeName());
+ }
+ else
+ {
+ assert.SkipProperty(m => m.ContentTypeName, "ContentTypeName is NULL. Skipping.");
+ }
+
+ if (!string.IsNullOrEmpty(definition.ContentTypeId))
+ {
+ // TODO
+ }
+ else
+ {
+ assert.SkipProperty(m => m.ContentTypeId, "ContentTypeId is null or empty. Skipping.");
+ }
+
+ if (!string.IsNullOrEmpty(definition.ContentTypeName))
+ {
+ assert.ShouldBeEqual((p, s, d) =>
+ {
+ var srcProp = s.GetExpressionValue(def => def.ContentTypeName);
+ var currentContentTypeName = d.ContentType.Name;
+
+ var isValis = stringCustomContentType == currentContentTypeName;
+
+ return new PropertyValidationResult
+ {
+ Tag = p.Tag,
+ Src = srcProp,
+ Dst = null,
+ IsValid = isValis
+ };
+ });
+ }
+ else
+ {
+ assert.SkipProperty(m => m.ContentTypeName, "ContentTypeName is null or empty. Skipping.");
+ }
+
+ if (definition.DefaultValues.Count > 0)
+ {
+ assert.ShouldBeEqual((p, s, d) =>
+ {
+ var isValid = true;
+
+ foreach (var srcValue in s.DefaultValues)
+ {
+ // big TODO here for == !=
+
+ if (!string.IsNullOrEmpty(srcValue.FieldName))
+ {
+ if (d[srcValue.FieldName].ToString() != srcValue.Value.ToString())
+ isValid = false;
+ }
+
+ if (!isValid)
+ break;
+ }
+
+ var srcProp = s.GetExpressionValue(def => def.DefaultValues);
+
+ return new PropertyValidationResult
+ {
+ Tag = p.Tag,
+ Src = srcProp,
+ Dst = null,
+ IsValid = isValid
+ };
+ });
+ }
+ else
+ {
+ assert.SkipProperty(m => m.DefaultValues, "DefaultValues.Count == 0. Skipping.");
+ }
+
+ if (definition.Values.Count > 0)
+ {
+ assert.ShouldBeEqual((p, s, d) =>
+ {
+ var isValid = true;
+
+ foreach (var srcValue in s.Values)
+ {
+ // big TODO here for == !=
+
+ if (!string.IsNullOrEmpty(srcValue.FieldName))
+ {
+ if (d[srcValue.FieldName].ToString() != srcValue.Value.ToString())
+ isValid = false;
+ }
+
+ if (!isValid)
+ break;
+ }
+
+ var srcProp = s.GetExpressionValue(def => def.Values);
+
+ return new PropertyValidationResult
+ {
+ Tag = p.Tag,
+ Src = srcProp,
+ Dst = null,
+ IsValid = isValid
+ };
+ });
+ }
+ else
+ {
+ assert.SkipProperty(m => m.Values, "Values.Count == 0. Skipping.");
+ }
+ }
+
+ #endregion
+ }
+}
diff --git a/SPMeta2/SPMeta2.Regression.CSOM/Validation/ClientMasterPageSettingsDefinitionValidator.cs b/SPMeta2/SPMeta2.Regression.CSOM/Validation/ClientMasterPageSettingsDefinitionValidator.cs
index 9e92c5d3b..e48412b76 100644
--- a/SPMeta2/SPMeta2.Regression.CSOM/Validation/ClientMasterPageSettingsDefinitionValidator.cs
+++ b/SPMeta2/SPMeta2.Regression.CSOM/Validation/ClientMasterPageSettingsDefinitionValidator.cs
@@ -1,33 +1,96 @@
-using Microsoft.SharePoint.Client;
-using SPMeta2.CSOM.ModelHandlers;
-using SPMeta2.CSOM.ModelHosts;
-using SPMeta2.Definitions;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-using SPMeta2.Definitions.Base;
-using SPMeta2.Utils;
-
-namespace SPMeta2.Regression.CSOM.Validation
-{
- public class ClientMasterPageSettingsDefinitionValidator : MasterPageSettingsModelHandler
- {
- public override void DeployModel(object modelHost, DefinitionBase model)
- {
- var webModelHost = modelHost.WithAssertAndCast("modelHost", value => value.RequireNotNull());
- var definition = model.WithAssertAndCast("model", value => value.RequireNotNull());
-
- var spObject = webModelHost.HostWeb;
-
- var assert = ServiceFactory.AssertService.NewAssert(model, definition, spObject);
-
- assert
- .ShouldNotBeNull(spObject)
-
- .ShouldBeEndOfIfNotNullOrEmpty(m => m.SiteMasterPageUrl, o => o.CustomMasterUrl)
- .ShouldBeEndOfIfNotNullOrEmpty(m => m.SystemMasterPageUrl, o => o.MasterUrl);
- }
- }
-}
+using Microsoft.SharePoint.Client;
+using SPMeta2.CSOM.ModelHandlers;
+using SPMeta2.CSOM.ModelHosts;
+using SPMeta2.Definitions;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using SPMeta2.Definitions.Base;
+using SPMeta2.Utils;
+using SPMeta2.Containers.Assertion;
+
+namespace SPMeta2.Regression.CSOM.Validation
+{
+ public class ClientMasterPageSettingsDefinitionValidator : MasterPageSettingsModelHandler
+ {
+ public override void DeployModel(object modelHost, DefinitionBase model)
+ {
+ var webModelHost = modelHost.WithAssertAndCast("modelHost", value => value.RequireNotNull());
+ var definition = model.WithAssertAndCast("model", value => value.RequireNotNull());
+
+ var spObject = webModelHost.HostWeb;
+
+ var assert = ServiceFactory.AssertService
+ .NewAssert(model, definition, spObject)
+ .ShouldNotBeNull(spObject);
+
+ if (!string.IsNullOrEmpty(definition.SiteMasterPageUrl))
+ {
+ if (definition.SiteMasterPageUrl.StartsWith("/"))
+ {
+ assert.ShouldBeEndOf(m => m.SiteMasterPageUrl, o => o.CustomMasterUrl);
+ }
+ else
+ {
+ // check for ~site/~sitecollection tokens
+ var url = ResolveUrlWithTokens(webModelHost, definition.SiteMasterPageUrl);
+
+ assert.ShouldBeEqual((p, s, d) =>
+ {
+ var srcProp = s.GetExpressionValue(def => def.SiteMasterPageUrl);
+ var dstProp = d.GetExpressionValue(def => def.CustomMasterUrl);
+
+ var isValid = url == (string)dstProp.Value;
+
+ return new PropertyValidationResult
+ {
+ Tag = p.Tag,
+ Src = srcProp,
+ Dst = dstProp,
+ IsValid = isValid
+ };
+ });
+ }
+ }
+ else
+ {
+ assert.SkipProperty(m => m.SiteMasterPageUrl, "SiteMasterPageUrl is NULL or empty");
+ }
+
+ if (!string.IsNullOrEmpty(definition.SystemMasterPageUrl))
+ {
+ if (definition.SystemMasterPageUrl.StartsWith("/"))
+ {
+ assert.ShouldBeEndOf(m => m.SystemMasterPageUrl, o => o.MasterUrl);
+ }
+ else
+ {
+ // check for ~site/~sitecollection tokens
+ var url = ResolveUrlWithTokens(webModelHost, definition.SystemMasterPageUrl);
+
+ assert.ShouldBeEqual((p, s, d) =>
+ {
+ var srcProp = s.GetExpressionValue(def => def.SystemMasterPageUrl);
+ var dstProp = d.GetExpressionValue(def => def.MasterUrl);
+
+ var isValid = (string)url == (string)dstProp.Value;
+
+ return new PropertyValidationResult
+ {
+ Tag = p.Tag,
+ Src = srcProp,
+ Dst = dstProp,
+ IsValid = isValid
+ };
+ });
+ }
+ }
+ else
+ {
+ assert.SkipProperty(m => m.SystemMasterPageUrl, "SiteMasterPageUrl is NULL or empty");
+ }
+ }
+ }
+}
diff --git a/SPMeta2/SPMeta2.Regression.Impl.Tests/Properties/AssemblyInfo.cs b/SPMeta2/SPMeta2.Regression.Impl.Tests/Properties/AssemblyInfo.cs
index 2b02549d0..d4b011d59 100644
--- a/SPMeta2/SPMeta2.Regression.Impl.Tests/Properties/AssemblyInfo.cs
+++ b/SPMeta2/SPMeta2.Regression.Impl.Tests/Properties/AssemblyInfo.cs
@@ -33,4 +33,4 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.2.16305.1232")]
+[assembly: AssemblyFileVersion("1.2.17040.0900")]
diff --git a/SPMeta2/SPMeta2.Regression.SSOM.Standard/Properties/AssemblyInfo.cs b/SPMeta2/SPMeta2.Regression.SSOM.Standard/Properties/AssemblyInfo.cs
index 4a4342246..424557333 100644
--- a/SPMeta2/SPMeta2.Regression.SSOM.Standard/Properties/AssemblyInfo.cs
+++ b/SPMeta2/SPMeta2.Regression.SSOM.Standard/Properties/AssemblyInfo.cs
@@ -33,4 +33,4 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.2.16305.1232")]
+[assembly: AssemblyFileVersion("1.2.17040.0900")]
diff --git a/SPMeta2/SPMeta2.Regression.SSOM/Properties/AssemblyInfo.cs b/SPMeta2/SPMeta2.Regression.SSOM/Properties/AssemblyInfo.cs
index 775aefb01..679745665 100644
--- a/SPMeta2/SPMeta2.Regression.SSOM/Properties/AssemblyInfo.cs
+++ b/SPMeta2/SPMeta2.Regression.SSOM/Properties/AssemblyInfo.cs
@@ -33,4 +33,4 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.2.16305.1232")]
+[assembly: AssemblyFileVersion("1.2.17040.0900")]
diff --git a/SPMeta2/SPMeta2.Regression.SSOM/Validation/ListViewDefinitionValidator.cs b/SPMeta2/SPMeta2.Regression.SSOM/Validation/ListViewDefinitionValidator.cs
index 5b849ca23..736ad0090 100644
--- a/SPMeta2/SPMeta2.Regression.SSOM/Validation/ListViewDefinitionValidator.cs
+++ b/SPMeta2/SPMeta2.Regression.SSOM/Validation/ListViewDefinitionValidator.cs
@@ -186,7 +186,12 @@ public override void DeployModel(object modelHost, DefinitionBase model)
if (definition.TabularView.HasValue)
assert.ShouldBeEqual(m => m.TabularView, o => o.TabularView);
else
- assert.SkipProperty(m => m.TabularView, "TabularView is null or empty. Skipping.");
+ assert.SkipProperty(m => m.TabularView, "TabularView is null or empty. Skipping.");
+
+ if (definition.IncludeRootFolder.HasValue)
+ assert.ShouldBeEqual(m => m.IncludeRootFolder, o => o.IncludeRootFolder);
+ else
+ assert.SkipProperty(m => m.IncludeRootFolder, "IncludeRootFolder is null or empty. Skipping.");
if (string.IsNullOrEmpty(definition.ContentTypeName))
assert.SkipProperty(m => m.ContentTypeName, "ContentTypeName is null or empty. Skipping.");
diff --git a/SPMeta2/SPMeta2.Regression.SSOM/Validation/MasterPageSettingsDefinitionValidator.cs b/SPMeta2/SPMeta2.Regression.SSOM/Validation/MasterPageSettingsDefinitionValidator.cs
index 5fd23d347..d67f3f986 100644
--- a/SPMeta2/SPMeta2.Regression.SSOM/Validation/MasterPageSettingsDefinitionValidator.cs
+++ b/SPMeta2/SPMeta2.Regression.SSOM/Validation/MasterPageSettingsDefinitionValidator.cs
@@ -1,41 +1,91 @@
-using SPMeta2.Definitions;
-using SPMeta2.Definitions.Base;
-using SPMeta2.SSOM.ModelHandlers;
-using SPMeta2.SSOM.ModelHosts;
-using SPMeta2.Utils;
-
-namespace SPMeta2.Regression.SSOM.Validation
-{
- public class MasterPageSettingsDefinitionValidator : MasterPageSettingsModelHandler
- {
- public override void DeployModel(object modelHost, DefinitionBase model)
- {
- var webModelHost = modelHost.WithAssertAndCast("modelHost", value => value.RequireNotNull());
- var definition = model.WithAssertAndCast("model", value => value.RequireNotNull());
-
- var spObject = webModelHost.HostWeb;
-
- var assert = ServiceFactory.AssertService
- .NewAssert(model, definition, spObject)
- .ShouldNotBeNull(spObject);
-
- if (!string.IsNullOrEmpty(definition.SiteMasterPageUrl))
- {
- assert.ShouldBeEndOf(m => m.SiteMasterPageUrl, o => o.CustomMasterUrl);
- }
- else
- {
- assert.SkipProperty(m => m.SiteMasterPageUrl, "SiteMasterPageUrl is NULL or empty");
- }
-
- if (!string.IsNullOrEmpty(definition.SystemMasterPageUrl))
- {
- assert.ShouldBeEndOf(m => m.SystemMasterPageUrl, o => o.MasterUrl);
- }
- else
- {
- assert.SkipProperty(m => m.SystemMasterPageUrl, "SystemMasterPageUrl is NULL or empty");
- }
- }
- }
-}
+using SPMeta2.Containers.Assertion;
+using SPMeta2.Definitions;
+using SPMeta2.Definitions.Base;
+using SPMeta2.SSOM.ModelHandlers;
+using SPMeta2.SSOM.ModelHosts;
+using SPMeta2.Utils;
+using System;
+
+namespace SPMeta2.Regression.SSOM.Validation
+{
+ public class MasterPageSettingsDefinitionValidator : MasterPageSettingsModelHandler
+ {
+ public override void DeployModel(object modelHost, DefinitionBase model)
+ {
+ var webModelHost = modelHost.WithAssertAndCast("modelHost", value => value.RequireNotNull());
+ var definition = model.WithAssertAndCast("model", value => value.RequireNotNull());
+
+ var spObject = webModelHost.HostWeb;
+
+ var assert = ServiceFactory.AssertService
+ .NewAssert(model, definition, spObject)
+ .ShouldNotBeNull(spObject);
+
+ if (!string.IsNullOrEmpty(definition.SiteMasterPageUrl))
+ {
+ if (definition.SiteMasterPageUrl.StartsWith("/"))
+ {
+ assert.ShouldBeEndOf(m => m.SiteMasterPageUrl, o => o.CustomMasterUrl);
+ }
+ else
+ {
+ // check for ~site/~sitecollection tokens
+ var url = ResolveUrlWithTokens(webModelHost.HostWeb, definition.SiteMasterPageUrl);
+
+ assert.ShouldBeEqual((p, s, d) =>
+ {
+ var srcProp = s.GetExpressionValue(def => def.SiteMasterPageUrl);
+ var dstProp = d.GetExpressionValue(def => def.CustomMasterUrl);
+
+ var isValid = url == (string)dstProp.Value;
+
+ return new PropertyValidationResult
+ {
+ Tag = p.Tag,
+ Src = srcProp,
+ Dst = dstProp,
+ IsValid = isValid
+ };
+ });
+ }
+ }
+ else
+ {
+ assert.SkipProperty(m => m.SiteMasterPageUrl, "SiteMasterPageUrl is NULL or empty");
+ }
+
+ if (!string.IsNullOrEmpty(definition.SystemMasterPageUrl))
+ {
+ if (definition.SystemMasterPageUrl.StartsWith("/"))
+ {
+ assert.ShouldBeEndOf(m => m.SystemMasterPageUrl, o => o.MasterUrl);
+ }
+ else
+ {
+ // check for ~site/~sitecollection tokens
+ var url = ResolveUrlWithTokens(webModelHost.HostWeb, definition.SystemMasterPageUrl);
+
+ assert.ShouldBeEqual((p, s, d) =>
+ {
+ var srcProp = s.GetExpressionValue(def => def.SystemMasterPageUrl);
+ var dstProp = d.GetExpressionValue(def => def.MasterUrl);
+
+ var isValid = (string)url == (string)dstProp.Value;
+
+ return new PropertyValidationResult
+ {
+ Tag = p.Tag,
+ Src = srcProp,
+ Dst = dstProp,
+ IsValid = isValid
+ };
+ });
+ }
+ }
+ else
+ {
+ assert.SkipProperty(m => m.SystemMasterPageUrl, "SiteMasterPageUrl is NULL or empty");
+ }
+ }
+ }
+}
diff --git a/SPMeta2/SPMeta2.Regression.Tests/Base/SPMeta2RegresionTestBase.cs b/SPMeta2/SPMeta2.Regression.Tests/Base/SPMeta2RegresionTestBase.cs
index 290920f44..cef6e5f36 100644
--- a/SPMeta2/SPMeta2.Regression.Tests/Base/SPMeta2RegresionTestBase.cs
+++ b/SPMeta2/SPMeta2.Regression.Tests/Base/SPMeta2RegresionTestBase.cs
@@ -99,8 +99,12 @@ public SPMeta2ProvisionRegresionTestBase()
TestOptions.EnableSerializeDeserializeAndStillDeployTests = false;
TestOptions.EnableContentTypeHubTests = true;
-
TestOptions.EnablWebConfigModificationTest = false;
+
+ // too long, disabled by default
+ // Module file provision fails at minor version 511 #930
+ // https://github.com/SubPointSolutions/spmeta2/issues/930
+ TestOptions.EnableModuleFile511Tests = false;
}
#endregion
@@ -156,6 +160,8 @@ protected class RunOptions
public bool EnablWebConfigModificationTest { get; set; }
public bool EnableContentTypeHubTests { get; set; }
+
+ public bool EnableModuleFile511Tests { get; set; }
}
#endregion
@@ -297,7 +303,12 @@ protected void WithExcpectedExceptions(IEnumerable exceptionTypes, Action
protected void TestModel(ModelNode model)
{
- TestModels(new ModelNode[] { model });
+ TestModel(model, false);
+ }
+
+ protected void TestModel(ModelNode model, bool deployOnce)
+ {
+ TestModels(new ModelNode[] { model }, deployOnce);
}
protected void TestModel(ModelNode firstModel, ModelNode secondModel)
@@ -342,10 +353,18 @@ private void ProcessPropertyNullableValidation(IEnumerable models)
protected void TestModels(IEnumerable models)
{
- RegressionService.TestModels(models);
+ TestModels(models, false);
+ }
+
+ protected void TestModels(IEnumerable models, bool deployOnce)
+ {
+ RegressionService.TestModels(models, deployOnce);
- PleaseMakeSureWeCanUpdatePropertiesForTheSharePointSake(models);
- PleaseMakeSureWeCanSerializeDeserializeAndStillDeploy(models);
+ if (!deployOnce)
+ {
+ PleaseMakeSureWeCanUpdatePropertiesForTheSharePointSake(models);
+ PleaseMakeSureWeCanSerializeDeserializeAndStillDeploy(models);
+ }
}
private void PleaseMakeSureWeCanSerializeDeserializeAndStillDeploy(IEnumerable models)
diff --git a/SPMeta2/SPMeta2.Regression.Tests/Impl/Scenarios/ListScenariosTest.cs b/SPMeta2/SPMeta2.Regression.Tests/Impl/Scenarios/ListScenariosTest.cs
index 98ca33b23..57ef8e57f 100644
--- a/SPMeta2/SPMeta2.Regression.Tests/Impl/Scenarios/ListScenariosTest.cs
+++ b/SPMeta2/SPMeta2.Regression.Tests/Impl/Scenarios/ListScenariosTest.cs
@@ -16,6 +16,7 @@
using SPMeta2.Syntax.Default;
using SPMeta2.Syntax.Default.Modern;
using SPMeta2.Syntax.Default.Utils;
+using SPMeta2.Exceptions;
namespace SPMeta2.Regression.Tests.Impl.Scenarios
{
@@ -453,6 +454,25 @@ public void CanDeploy_CalendarList()
});
}
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.Lists")]
+ public void CanDeploy_NoListTemplateList()
+ {
+ // .NoListTemplate is 0 which isn't allowed by SharePoint
+
+ // Can't provision list with NoListTemplate template type #944
+ // https://github.com/SubPointSolutions/spmeta2/issues/944
+ WithExcpectedException(typeof(SPMeta2AggregateException), () =>
+ {
+ TestRandomDefinition(def =>
+ {
+ def.EnableMinorVersions = false;
+
+ def.TemplateType = BuiltInListTemplateTypeId.NoListTemplate;
+ });
+ });
+ }
+
[TestMethod]
[TestCategory("Regression.Scenarios.Lists")]
public void CanDeploy_LinksList()
diff --git a/SPMeta2/SPMeta2.Regression.Tests/Impl/Scenarios/MasterPageSettingsDefinitionScenariosTest.cs b/SPMeta2/SPMeta2.Regression.Tests/Impl/Scenarios/MasterPageSettingsDefinitionScenariosTest.cs
index 4e23cc606..0dbeefac2 100644
--- a/SPMeta2/SPMeta2.Regression.Tests/Impl/Scenarios/MasterPageSettingsDefinitionScenariosTest.cs
+++ b/SPMeta2/SPMeta2.Regression.Tests/Impl/Scenarios/MasterPageSettingsDefinitionScenariosTest.cs
@@ -1,82 +1,253 @@
-using Microsoft.VisualStudio.TestTools.UnitTesting;
-using SPMeta2.Containers;
-using SPMeta2.Definitions;
-using SPMeta2.Regression.Tests.Base;
-using SPMeta2.Regression.Tests.Impl.Scenarios.Base;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-using SPMeta2.Syntax.Default;
-
-namespace SPMeta2.Regression.Tests.Impl.Scenarios
-{
- [TestClass]
- public class MasterPageSettingsDefinitionScenariosTest : SPMeta2RegresionScenarioTestBase
- {
- #region internal
-
- [ClassInitializeAttribute]
- public static void Init(TestContext context)
- {
- InternalInit();
- }
-
- [ClassCleanupAttribute]
- public static void Cleanup()
- {
- InternalCleanup();
- }
-
- #endregion
-
- #region default
-
- [TestMethod]
- [TestCategory("Regression.Scenarios.MasterPageSettings")]
- public void CanDeploy_MasterPageSettings_SiteMasterPageUrl_Only()
- {
- var settings = BuiltInDefinitions.BuiltInMasterPageDefinitions.Minimal.Inherit(def =>
- {
- def.SystemMasterPageUrl = string.Empty;
- });
-
- var model = SPMeta2Model
- .NewWebModel(web =>
- {
- web.AddRandomWeb(newWeb =>
- {
- newWeb.AddMasterPageSettings(settings);
- });
-
- });
-
- TestModel(model);
- }
-
- [TestMethod]
- [TestCategory("Regression.Scenarios.MasterPageSettings")]
- public void CanDeploy_MasterPageSettings_SystemMasterPageUrl_Only()
- {
- var settings = BuiltInDefinitions.BuiltInMasterPageDefinitions.Minimal.Inherit(def =>
- {
- def.SiteMasterPageUrl = string.Empty;
- });
-
- var model = SPMeta2Model
- .NewWebModel(web =>
- {
- web.AddRandomWeb(newWeb =>
- {
- newWeb.AddMasterPageSettings(settings);
- });
-
- });
-
- TestModel(model);
- }
-
- #endregion
- }
-}
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using SPMeta2.Containers;
+using SPMeta2.Definitions;
+using SPMeta2.Regression.Tests.Base;
+using SPMeta2.Regression.Tests.Impl.Scenarios.Base;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using SPMeta2.Syntax.Default;
+using SPMeta2.BuiltInDefinitions;
+
+using SPMeta2.Containers.Extensions;
+
+namespace SPMeta2.Regression.Tests.Impl.Scenarios
+{
+ [TestClass]
+ public class MasterPageSettingsDefinitionScenariosTest : SPMeta2RegresionScenarioTestBase
+ {
+ #region internal
+
+ [ClassInitializeAttribute]
+ public static void Init(TestContext context)
+ {
+ InternalInit();
+ }
+
+ [ClassCleanupAttribute]
+ public static void Cleanup()
+ {
+ InternalCleanup();
+ }
+
+ #endregion
+
+ #region default
+
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.MasterPageSettings")]
+ public void CanDeploy_MasterPageSettings_SiteMasterPageUrl_Only()
+ {
+ var settings = BuiltInDefinitions.BuiltInMasterPageDefinitions.Minimal.Inherit(def =>
+ {
+ def.SystemMasterPageUrl = string.Empty;
+ });
+
+ var model = SPMeta2Model
+ .NewWebModel(web =>
+ {
+ web.AddRandomWeb(newWeb =>
+ {
+ newWeb.AddMasterPageSettings(settings);
+ });
+
+ });
+
+ TestModel(model);
+ }
+
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.MasterPageSettings")]
+ public void CanDeploy_MasterPageSettings_SystemMasterPageUrl_Only()
+ {
+ var settings = BuiltInDefinitions.BuiltInMasterPageDefinitions.Minimal.Inherit(def =>
+ {
+ def.SiteMasterPageUrl = string.Empty;
+ });
+
+ var model = SPMeta2Model
+ .NewWebModel(web =>
+ {
+ web.AddRandomWeb(newWeb =>
+ {
+ newWeb.AddMasterPageSettings(settings);
+ });
+
+ });
+
+ TestModel(model);
+ }
+
+ #endregion
+
+ #region subwebs
+
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.MasterPageSettings.SubWebs")]
+ public void CanDeploy_MasterPageSettings_SystemMasterPageUrl_Only_OnSubWeb()
+ {
+ var settings = BuiltInDefinitions.BuiltInMasterPageDefinitions.Minimal.Inherit(def =>
+ {
+ def.SystemMasterPageUrl = BuiltInMasterPageDefinitions.Minimal.SiteMasterPageUrl;
+ def.SiteMasterPageUrl = string.Empty;
+ });
+
+ var model = SPMeta2Model.NewWebModel(rootWeb =>
+ {
+ rootWeb.AddRandomWeb(web =>
+ {
+ web.AddMasterPageSettings(settings);
+ });
+
+ });
+
+ TestModel(model);
+ }
+
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.MasterPageSettings.SubWebs")]
+ public void CanDeploy_MasterPageSettings_SystemMasterPageUrl_Only_OnSubWeb_With_SiteCollectionToken()
+ {
+ var settings = BuiltInDefinitions.BuiltInMasterPageDefinitions.Minimal.Inherit(def =>
+ {
+ def.SystemMasterPageUrl = "~sitecollection/_catalogs/masterpage/oslo.master";;
+ def.SiteMasterPageUrl = string.Empty;
+ });
+
+ var model = SPMeta2Model.NewWebModel(rootWeb =>
+ {
+ rootWeb.AddRandomWeb(web =>
+ {
+ web.AddMasterPageSettings(settings);
+ });
+
+ });
+
+ TestModel(model);
+ }
+
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.MasterPageSettings.SubWebs")]
+ public void CanDeploy_MasterPageSettings_SystemMasterPageUrl_Only_OnSubWeb_With_SiteToken()
+ {
+ var masterPage = ModelGeneratorService.GetRandomDefinition(def =>
+ {
+
+ });
+
+ var settings = BuiltInDefinitions.BuiltInMasterPageDefinitions.Minimal.Inherit(def =>
+ {
+ def.SystemMasterPageUrl = "~site/_catalogs/masterpage/" + masterPage.FileName;
+ def.SiteMasterPageUrl = string.Empty;
+ });
+
+ var model = SPMeta2Model.NewWebModel(rootWeb =>
+ {
+ rootWeb.AddRandomWeb(web =>
+ {
+ web.AddHostList(BuiltInListDefinitions.Catalogs.MasterPage, list =>
+ {
+ list.RegExcludeFromValidation();
+ list.AddMasterPage(masterPage, page =>
+ {
+ page.RegExcludeFromValidation();
+ });
+ });
+
+ web.AddMasterPageSettings(settings);
+ });
+
+ });
+
+ TestModel(model);
+ }
+
+ #region SiteMasterPageUrl
+
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.MasterPageSettings.SubWebs")]
+ public void CanDeploy_MasterPageSettings_SiteMasterPageUrl_Only_OnSubWeb()
+ {
+ var settings = BuiltInDefinitions.BuiltInMasterPageDefinitions.Minimal.Inherit(def =>
+ {
+ def.SystemMasterPageUrl = string.Empty;
+ def.SiteMasterPageUrl = BuiltInMasterPageDefinitions.Minimal.SiteMasterPageUrl;
+ });
+
+ var model = SPMeta2Model.NewWebModel(rootWeb =>
+ {
+ rootWeb.AddRandomWeb(web =>
+ {
+ web.AddMasterPageSettings(settings);
+ });
+
+ });
+
+ TestModel(model);
+ }
+
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.MasterPageSettings.SubWebs")]
+ public void CanDeploy_MasterPageSettings_SiteMasterPageUrl_Only_OnSubWeb_With_SiteCollectionToken()
+ {
+ var settings = BuiltInDefinitions.BuiltInMasterPageDefinitions.Minimal.Inherit(def =>
+ {
+ def.SystemMasterPageUrl = string.Empty;
+ def.SiteMasterPageUrl = "~sitecollection/_catalogs/masterpage/oslo.master";
+ });
+
+ var model = SPMeta2Model.NewWebModel(rootWeb =>
+ {
+ rootWeb.AddRandomWeb(web =>
+ {
+ web.AddMasterPageSettings(settings);
+ });
+
+ });
+
+ TestModel(model);
+ }
+
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.MasterPageSettings.SubWebs")]
+ public void CanDeploy_MasterPageSettings_SiteMasterPageUrl_Only_OnSubWeb_With_SiteToken()
+ {
+ var masterPage = ModelGeneratorService.GetRandomDefinition(def =>
+ {
+
+ });
+
+ var settings = BuiltInDefinitions.BuiltInMasterPageDefinitions.Minimal.Inherit(def =>
+ {
+ def.SystemMasterPageUrl = string.Empty;
+ def.SiteMasterPageUrl = "~site/_catalogs/masterpage/" + masterPage.FileName;
+ });
+
+ var model = SPMeta2Model.NewWebModel(rootWeb =>
+ {
+ rootWeb.AddRandomWeb(web =>
+ {
+ web.AddHostList(BuiltInListDefinitions.Catalogs.MasterPage, list =>
+ {
+ list.RegExcludeFromValidation();
+ list.AddMasterPage(masterPage, page =>
+ {
+ page.RegExcludeFromValidation();
+ });
+ });
+
+ web.AddMasterPageSettings(settings);
+ });
+
+ });
+
+ TestModel(model);
+ }
+
+ #endregion
+
+ #endregion
+ }
+}
diff --git a/SPMeta2/SPMeta2.Regression.Tests/Impl/Scenarios/ModuleFileScenariousTest.cs b/SPMeta2/SPMeta2.Regression.Tests/Impl/Scenarios/ModuleFileScenariousTest.cs
index e66485f19..5baf4976a 100644
--- a/SPMeta2/SPMeta2.Regression.Tests/Impl/Scenarios/ModuleFileScenariousTest.cs
+++ b/SPMeta2/SPMeta2.Regression.Tests/Impl/Scenarios/ModuleFileScenariousTest.cs
@@ -1,60 +1,62 @@
-using Microsoft.VisualStudio.TestTools.UnitTesting;
-using SPMeta2.BuiltInDefinitions;
-using SPMeta2.Containers;
-using SPMeta2.Definitions;
-using SPMeta2.Enumerations;
-using SPMeta2.Regression.Tests.Impl.Scenarios.Base;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using SPMeta2.Definitions.Fields;
-using SPMeta2.Models;
-using SPMeta2.Syntax.Default;
-using SPMeta2.Regression.Tests.Data;
-using SPMeta2.Regression.Tests.Prototypes;
-using SPMeta2.Syntax.Extended;
-
-namespace SPMeta2.Regression.Tests.Impl.Scenarios
-{
- [TestClass]
- public class ModuleFileScenariousTest : SPMeta2RegresionScenarioTestBase
- {
- #region constructors
-
- public ModuleFileScenariousTest()
- {
- RegressionService.ProvisionGenerationCount = 2;
- }
-
- #endregion
-
- #region internal
-
- [ClassInitializeAttribute]
- public static void Init(TestContext context)
- {
- InternalInit();
- }
-
- [ClassCleanupAttribute]
- public static void Cleanup()
- {
- InternalCleanup();
- }
-
- #endregion
-
- #region content types and values
-
-
- [TestMethod]
- [TestCategory("Regression.Scenarios.ModuleFiles.Typed")]
- public void CanDeploy_ModuleFile_AsJavaScriptDisplayTemplate()
- {
- var moduleFile = ModelGeneratorService.GetRandomDefinition(def =>
- {
- def.ContentTypeName = "JavaScript Display Template";
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using SPMeta2.BuiltInDefinitions;
+using SPMeta2.Containers;
+using SPMeta2.Definitions;
+using SPMeta2.Enumerations;
+using SPMeta2.Regression.Tests.Impl.Scenarios.Base;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using SPMeta2.Definitions.Fields;
+using SPMeta2.Models;
+using SPMeta2.Syntax.Default;
+using SPMeta2.Regression.Tests.Data;
+using SPMeta2.Regression.Tests.Prototypes;
+using SPMeta2.Syntax.Extended;
+
+using SPMeta2.Containers.Extensions;
+
+namespace SPMeta2.Regression.Tests.Impl.Scenarios
+{
+ [TestClass]
+ public class ModuleFileScenariousTest : SPMeta2RegresionScenarioTestBase
+ {
+ #region constructors
+
+ public ModuleFileScenariousTest()
+ {
+ RegressionService.ProvisionGenerationCount = 2;
+ }
+
+ #endregion
+
+ #region internal
+
+ [ClassInitializeAttribute]
+ public static void Init(TestContext context)
+ {
+ InternalInit();
+ }
+
+ [ClassCleanupAttribute]
+ public static void Cleanup()
+ {
+ InternalCleanup();
+ }
+
+ #endregion
+
+ #region content types and values
+
+
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.ModuleFiles.Typed")]
+ public void CanDeploy_ModuleFile_AsJavaScriptDisplayTemplate()
+ {
+ var moduleFile = ModelGeneratorService.GetRandomDefinition(def =>
+ {
+ def.ContentTypeName = "JavaScript Display Template";
def.DefaultValues = new List
{
new FieldValue
@@ -73,436 +75,558 @@ public void CanDeploy_ModuleFile_AsJavaScriptDisplayTemplate()
Value ="Override"
},
- };
- });
-
- var webModel = SPMeta2Model.NewWebModel(web =>
- {
- web.AddHostList(BuiltInListDefinitions.Catalogs.MasterPage, list =>
- {
- list.AddModuleFile(moduleFile);
- });
- });
-
- TestModel(webModel);
- }
-
- #endregion
-
- #region size
-
- protected void DeployModuleFile(long lenght)
- {
- TestRandomDefinition(def =>
- {
- def.Content = Rnd.Content(lenght);
- });
- }
-
- [TestMethod]
- [TestCategory("Regression.Scenarios.ModuleFiles.Size")]
- public void CanDeploy_2Mb_ModuleFile()
- {
- DeployModuleFile(1024 * 1024 * 2);
- }
-
- //[TestMethod]
- //[TestCategory("Regression.Rnd.List")]
- //public void CanDeploy_5Mb_ModuleFile()
- //{
- // DeployModuleFile(1024 * 1024 * 5);
- //}
-
-
- //[TestMethod]
- //[TestCategory("Regression.Rnd.List")]
- //public void CanDeploy_15Mb_ModuleFile()
- //{
- // DeployModuleFile(1024 * 1024 * 15);
- //}
-
- //[TestMethod]
- //[TestCategory("Regression.Rnd.List")]
- //public void CanDeploy_25Mb_ModuleFile()
- //{
- // DeployModuleFile(1024 * 1024 * 25);
- //}
-
- //[TestMethod]
- //[TestCategory("Regression.Rnd.List")]
- //public void CanDeploy_50Mb_ModuleFile()
- //{
- // DeployModuleFile(1024 * 1024 * 50);
- //}
-
- #endregion
-
- #region hosts
-
-
- [TestMethod]
- [TestCategory("Regression.Scenarios.ModuleFiles.Hosts")]
- public void CanDeploy_ModuleFile_ToLibrary()
- {
- var list = ModelGeneratorService.GetRandomDefinition(def =>
- {
- def.TemplateType = BuiltInListTemplateTypeId.DocumentLibrary;
- });
-
- var model = SPMeta2Model
- .NewWebModel(web =>
- {
- web.AddList(list, rndList =>
- {
- rndList.AddRandomModuleFile();
- });
-
- });
-
- TestModel(model);
- }
-
- [TestMethod]
- [TestCategory("Regression.Scenarios.ModuleFiles.Hosts")]
- public void CanDeploy_ModuleFile_ToList()
- {
- var list = ModelGeneratorService.GetRandomDefinition(def =>
- {
- def.TemplateType = BuiltInListTemplateTypeId.GenericList;
- });
-
- var model = SPMeta2Model
- .NewWebModel(web =>
- {
- web.AddList(list, rndList =>
- {
- rndList.AddRandomModuleFile();
- });
-
- });
-
- TestModel(model);
- }
-
- [TestMethod]
- [TestCategory("Regression.Scenarios.ModuleFiles.OOTBLists")]
- public void CanDeploy_ModuleFile_ToStyleLibrary()
- {
- var model = SPMeta2Model
- .NewWebModel(web =>
- {
- web.AddHostStyleLibraryList(rndList =>
- {
- rndList.AddRandomModuleFile();
- });
-
- });
-
- TestModel(model);
- }
-
- [TestMethod]
- [TestCategory("Regression.Scenarios.ModuleFiles.Hosts.Lists")]
- public void CanDeploy_ModuleFile_ToGenericList()
- {
- var list = ModelGeneratorService.GetRandomDefinition(def =>
- {
- def.TemplateType = BuiltInListTemplateTypeId.GenericList;
- });
-
- TestModuleFileDeploymentToList(list);
- }
-
-
- private void TestModuleFileDeploymentToList(ListDefinition list)
- {
- var blogSite = ModelGeneratorService.GetRandomDefinition(def =>
- {
- def.WebTemplate = BuiltInWebTemplates.Collaboration.Blog;
- });
-
- var model = SPMeta2Model
- .NewWebModel(web =>
- {
- web.AddWeb(blogSite, blogWeb =>
- {
- blogWeb.AddList(list, rndList =>
- {
- rndList.AddModuleFile(new ModuleFileDefinition
- {
- FileName = "AllItems.aspx",
- Content = Encoding.Default.GetBytes(PageTemplates.CustomAllItemsPage),
- Overwrite = true
- });
-
- rndList.AddWelcomePage(new WelcomePageDefinition
- {
- Url = "AllItems.aspx"
- });
- });
- });
-
- });
-
- TestModels(new ModelNode[] { model });
- }
-
- [TestMethod]
- [TestCategory("Regression.Scenarios.ModuleFiles.Hosts.Lists")]
- public void CanDeploy_ModuleFile_ToIssueTrackingList()
- {
- var list = ModelGeneratorService.GetRandomDefinition(def =>
- {
- def.TemplateType = BuiltInListTemplateTypeId.IssueTracking;
- });
-
- TestModuleFileDeploymentToList(list);
- }
-
- [TestMethod]
- [TestCategory("Regression.Scenarios.ModuleFiles.Hosts.Blog")]
- public void CanDeploy_ModuleFile_ToPostList()
- {
- var list = ModelGeneratorService.GetRandomDefinition(def =>
- {
- def.CustomUrl = "Lists/Posts";
-
- def.ContentTypesEnabled = false;
-
- def.TemplateType = 0;
- def.TemplateName = BuiltInListTemplates.Posts.InternalName;
- });
-
- TestModuleFileDeploymentToList(list);
- }
-
-
- [TestMethod]
- [TestCategory("Regression.Scenarios.ModuleFiles.Hosts.Blog")]
- public void CanDeploy_ModuleFile_ToCommentsList()
- {
- var list = ModelGeneratorService.GetRandomDefinition(def =>
- {
- def.CustomUrl = "Lists/Comments";
-
- def.ContentTypesEnabled = false;
-
- def.TemplateType = 0;
- def.TemplateName = BuiltInListTemplates.Comments.InternalName;
- });
-
- TestModuleFileDeploymentToList(list);
- }
-
- [TestMethod]
- [TestCategory("Regression.Scenarios.ModuleFiles.Hosts.Blog")]
- public void CanDeploy_ModuleFile_ToCategoriesList()
- {
- var list = ModelGeneratorService.GetRandomDefinition(def =>
- {
- def.CustomUrl = "Lists/Categories";
-
- def.ContentTypesEnabled = false;
-
- def.TemplateType = 0;
- def.TemplateName = BuiltInListTemplates.Categories.InternalName;
- });
-
- TestModuleFileDeploymentToList(list);
- }
-
- [TestMethod]
- [TestCategory("Regression.Scenarios.ModuleFiles.Hosts")]
- public void CanDeploy_ModuleFile_ToLibraryFolder()
- {
- var list = ModelGeneratorService.GetRandomDefinition(def =>
- {
- def.TemplateType = BuiltInListTemplateTypeId.DocumentLibrary;
- });
-
- var model = SPMeta2Model
- .NewWebModel(web =>
- {
- web.AddList(list, rndList =>
- {
- rndList.AddRandomFolder(folder =>
- {
- folder.AddRandomModuleFile();
- });
- });
-
- });
-
- TestModel(model);
- }
-
- [TestMethod]
- [TestCategory("Regression.Scenarios.ModuleFiles.Hosts")]
- public void CanDeploy_ModuleFile_ToLibrary_FormsFolder()
- {
- var list = ModelGeneratorService.GetRandomDefinition(def =>
- {
- def.TemplateType = BuiltInListTemplateTypeId.DocumentLibrary;
- });
-
- var model = SPMeta2Model
- .NewWebModel(web =>
- {
- web.AddList(list, rndList =>
- {
- rndList.AddHostFolder(BuiltInFolderDefinitions.Forms, folder =>
- {
- folder.AddRandomModuleFile();
- });
- });
-
- });
-
- TestModel(model);
- }
-
- [TestMethod]
- [TestCategory("Regression.Scenarios.ModuleFiles.Hosts")]
- public void CanDeploy_ModuleFile_ToWeb()
- {
- var model = SPMeta2Model
- .NewWebModel(web =>
- {
- web.AddRandomModuleFile();
- });
-
- TestModel(model);
- }
-
- [TestMethod]
- [TestCategory("Regression.Scenarios.ModuleFiles.Hosts")]
- public void CanDeploy_ModuleFile_ToContentType()
- {
- var model = SPMeta2Model
- .NewSiteModel(site =>
- {
- site.AddRandomContentType(contentType =>
- {
- contentType.AddRandomModuleFile();
- });
- });
-
- TestModel(model);
- }
-
- #endregion
-
- #region field values
-
-
- [TestMethod]
- [TestCategory("Regression.Scenarios.ModuleFiles.Values")]
- public void CanDeploy_ModuleFile_With_RequiredFieldValues()
- {
- var requiredText = RItemValues.GetRequiredTextField(ModelGeneratorService);
-
- var text1 = RItemValues.GetRandomTextField(ModelGeneratorService);
- var text2 = RItemValues.GetRandomTextField(ModelGeneratorService);
-
- var contentTypeDef = ModelGeneratorService.GetRandomDefinition(def =>
- {
- def.ParentContentTypeId = BuiltInContentTypeId.Item;
- });
-
- var itemDef = ModelGeneratorService.GetRandomDefinition(def =>
- {
- def.Title = Rnd.String();
- def.ContentTypeName = contentTypeDef.Name;
-
- def.DefaultValues.Add(new FieldValue()
- {
- FieldName = requiredText.InternalName,
- Value = Rnd.String()
- });
-
- def.Values.Add(new FieldValue()
- {
- FieldName = text1.InternalName,
- Value = Rnd.String()
- });
-
- def.Values.Add(new FieldValue()
- {
- FieldName = text2.InternalName,
- Value = Rnd.String()
- });
-
- });
-
- var listDef = ModelGeneratorService.GetRandomDefinition(def =>
- {
- def.ContentTypesEnabled = true;
- def.TemplateType = BuiltInListTemplateTypeId.DocumentLibrary;
- });
-
- var siteModel = SPMeta2Model.NewSiteModel(site =>
- {
- site.AddField(requiredText);
- site.AddField(text1);
- site.AddField(text2);
-
- site.AddContentType(contentTypeDef, contentType =>
- {
- contentType.AddContentTypeFieldLink(requiredText);
- contentType.AddContentTypeFieldLink(text1);
- contentType.AddContentTypeFieldLink(text2);
- });
- });
-
- var webModel = SPMeta2Model.NewWebModel(web =>
- {
- web.AddList(listDef, list =>
- {
- list.AddContentTypeLink(contentTypeDef);
- list.AddModuleFile(itemDef);
- });
- });
-
- TestModel(siteModel, webModel);
- }
-
- [TestMethod]
- [TestCategory("Regression.Scenarios.ModuleFiles.Values")]
- public void CanDeploy_ModuleFile_With_ContentType_ByName()
- {
- var contentTypeDef = ModelGeneratorService.GetRandomDefinition(def =>
- {
- def.ParentContentTypeId = BuiltInContentTypeId.Document;
- });
-
- var itemDef = ModelGeneratorService.GetRandomDefinition(def =>
- {
- def.ContentTypeName = contentTypeDef.Name;
- });
-
- var listDef = ModelGeneratorService.GetRandomDefinition(def =>
- {
- def.ContentTypesEnabled = true;
- def.TemplateType = BuiltInListTemplateTypeId.DocumentLibrary;
- });
-
- var siteModel = SPMeta2Model.NewSiteModel(site =>
- {
- site.AddContentType(contentTypeDef);
- });
-
- var webModel = SPMeta2Model.NewWebModel(web =>
- {
- web.AddList(listDef, list =>
- {
- list.AddContentTypeLink(contentTypeDef);
- list.AddModuleFile(itemDef);
- });
- });
-
- TestModel(siteModel, webModel);
- }
-
- #endregion
- }
-}
+ };
+ });
+
+ var webModel = SPMeta2Model.NewWebModel(web =>
+ {
+ web.AddHostList(BuiltInListDefinitions.Catalogs.MasterPage, list =>
+ {
+ list.AddModuleFile(moduleFile);
+ });
+ });
+
+ TestModel(webModel);
+ }
+
+ #endregion
+
+ #region size
+
+ protected void DeployModuleFile(long lenght)
+ {
+ TestRandomDefinition(def =>
+ {
+ def.Content = Rnd.Content(lenght);
+ });
+ }
+
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.ModuleFiles.Size")]
+ public void CanDeploy_2Mb_ModuleFile()
+ {
+ DeployModuleFile(1024 * 1024 * 2);
+ }
+
+ //[TestMethod]
+ //[TestCategory("Regression.Rnd.List")]
+ //public void CanDeploy_5Mb_ModuleFile()
+ //{
+ // DeployModuleFile(1024 * 1024 * 5);
+ //}
+
+
+ //[TestMethod]
+ //[TestCategory("Regression.Rnd.List")]
+ //public void CanDeploy_15Mb_ModuleFile()
+ //{
+ // DeployModuleFile(1024 * 1024 * 15);
+ //}
+
+ //[TestMethod]
+ //[TestCategory("Regression.Rnd.List")]
+ //public void CanDeploy_25Mb_ModuleFile()
+ //{
+ // DeployModuleFile(1024 * 1024 * 25);
+ //}
+
+ //[TestMethod]
+ //[TestCategory("Regression.Rnd.List")]
+ //public void CanDeploy_50Mb_ModuleFile()
+ //{
+ // DeployModuleFile(1024 * 1024 * 50);
+ //}
+
+ #endregion
+
+ #region hosts
+
+
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.ModuleFiles.Hosts")]
+ public void CanDeploy_ModuleFile_ToLibrary()
+ {
+ var list = ModelGeneratorService.GetRandomDefinition(def =>
+ {
+ def.TemplateType = BuiltInListTemplateTypeId.DocumentLibrary;
+ });
+
+ var model = SPMeta2Model
+ .NewWebModel(web =>
+ {
+ web.AddList(list, rndList =>
+ {
+ rndList.AddRandomModuleFile();
+ });
+
+ });
+
+ TestModel(model);
+ }
+
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.ModuleFiles.Hosts")]
+ public void CanDeploy_ModuleFile_ToList()
+ {
+ var list = ModelGeneratorService.GetRandomDefinition(def =>
+ {
+ def.TemplateType = BuiltInListTemplateTypeId.GenericList;
+ });
+
+ var model = SPMeta2Model
+ .NewWebModel(web =>
+ {
+ web.AddList(list, rndList =>
+ {
+ rndList.AddRandomModuleFile();
+ });
+
+ });
+
+ TestModel(model);
+ }
+
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.ModuleFiles.OOTBLists")]
+ public void CanDeploy_ModuleFile_ToStyleLibrary()
+ {
+ var model = SPMeta2Model
+ .NewWebModel(web =>
+ {
+ web.AddHostStyleLibraryList(rndList =>
+ {
+ rndList.AddRandomModuleFile();
+ });
+
+ });
+
+ TestModel(model);
+ }
+
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.ModuleFiles.Hosts.Lists")]
+ public void CanDeploy_ModuleFile_ToGenericList()
+ {
+ var list = ModelGeneratorService.GetRandomDefinition(def =>
+ {
+ def.TemplateType = BuiltInListTemplateTypeId.GenericList;
+ });
+
+ TestModuleFileDeploymentToList(list);
+ }
+
+
+ private void TestModuleFileDeploymentToList(ListDefinition list)
+ {
+ var blogSite = ModelGeneratorService.GetRandomDefinition(def =>
+ {
+ def.WebTemplate = BuiltInWebTemplates.Collaboration.Blog;
+ });
+
+ var model = SPMeta2Model
+ .NewWebModel(web =>
+ {
+ web.AddWeb(blogSite, blogWeb =>
+ {
+ blogWeb.AddList(list, rndList =>
+ {
+ rndList.AddModuleFile(new ModuleFileDefinition
+ {
+ FileName = "AllItems.aspx",
+ Content = Encoding.Default.GetBytes(PageTemplates.CustomAllItemsPage),
+ Overwrite = true
+ });
+
+ rndList.AddWelcomePage(new WelcomePageDefinition
+ {
+ Url = "AllItems.aspx"
+ });
+ });
+ });
+
+ });
+
+ TestModels(new ModelNode[] { model });
+ }
+
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.ModuleFiles.Hosts.Lists")]
+ public void CanDeploy_ModuleFile_ToIssueTrackingList()
+ {
+ var list = ModelGeneratorService.GetRandomDefinition(def =>
+ {
+ def.TemplateType = BuiltInListTemplateTypeId.IssueTracking;
+ });
+
+ TestModuleFileDeploymentToList(list);
+ }
+
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.ModuleFiles.Hosts.Blog")]
+ public void CanDeploy_ModuleFile_ToPostList()
+ {
+ var list = ModelGeneratorService.GetRandomDefinition(def =>
+ {
+ def.CustomUrl = "Lists/Posts";
+
+ def.ContentTypesEnabled = false;
+
+ def.TemplateType = 0;
+ def.TemplateName = BuiltInListTemplates.Posts.InternalName;
+ });
+
+ TestModuleFileDeploymentToList(list);
+ }
+
+
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.ModuleFiles.Hosts.Blog")]
+ public void CanDeploy_ModuleFile_ToCommentsList()
+ {
+ var list = ModelGeneratorService.GetRandomDefinition(def =>
+ {
+ def.CustomUrl = "Lists/Comments";
+
+ def.ContentTypesEnabled = false;
+
+ def.TemplateType = 0;
+ def.TemplateName = BuiltInListTemplates.Comments.InternalName;
+ });
+
+ TestModuleFileDeploymentToList(list);
+ }
+
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.ModuleFiles.Hosts.Blog")]
+ public void CanDeploy_ModuleFile_ToCategoriesList()
+ {
+ var list = ModelGeneratorService.GetRandomDefinition(def =>
+ {
+ def.CustomUrl = "Lists/Categories";
+
+ def.ContentTypesEnabled = false;
+
+ def.TemplateType = 0;
+ def.TemplateName = BuiltInListTemplates.Categories.InternalName;
+ });
+
+ TestModuleFileDeploymentToList(list);
+ }
+
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.ModuleFiles.Hosts")]
+ public void CanDeploy_ModuleFile_ToLibraryFolder()
+ {
+ var list = ModelGeneratorService.GetRandomDefinition(def =>
+ {
+ def.TemplateType = BuiltInListTemplateTypeId.DocumentLibrary;
+ });
+
+ var model = SPMeta2Model
+ .NewWebModel(web =>
+ {
+ web.AddList(list, rndList =>
+ {
+ rndList.AddRandomFolder(folder =>
+ {
+ folder.AddRandomModuleFile();
+ });
+ });
+
+ });
+
+ TestModel(model);
+ }
+
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.ModuleFiles.Hosts")]
+ public void CanDeploy_ModuleFile_ToLibrary_FormsFolder()
+ {
+ var list = ModelGeneratorService.GetRandomDefinition(def =>
+ {
+ def.TemplateType = BuiltInListTemplateTypeId.DocumentLibrary;
+ });
+
+ var model = SPMeta2Model
+ .NewWebModel(web =>
+ {
+ web.AddList(list, rndList =>
+ {
+ rndList.AddHostFolder(BuiltInFolderDefinitions.Forms, folder =>
+ {
+ folder.AddRandomModuleFile();
+ });
+ });
+
+ });
+
+ TestModel(model);
+ }
+
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.ModuleFiles.Hosts")]
+ public void CanDeploy_ModuleFile_ToWeb()
+ {
+ var model = SPMeta2Model
+ .NewWebModel(web =>
+ {
+ web.AddRandomModuleFile();
+ });
+
+ TestModel(model);
+ }
+
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.ModuleFiles.Hosts")]
+ public void CanDeploy_ModuleFile_ToContentType()
+ {
+ var model = SPMeta2Model
+ .NewSiteModel(site =>
+ {
+ site.AddRandomContentType(contentType =>
+ {
+ contentType.AddRandomModuleFile();
+ });
+ });
+
+ TestModel(model);
+ }
+
+ #endregion
+
+ #region field values
+
+
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.ModuleFiles.Values")]
+ public void CanDeploy_ModuleFile_With_RequiredFieldValues()
+ {
+ var requiredText = RItemValues.GetRequiredTextField(ModelGeneratorService);
+
+ var text1 = RItemValues.GetRandomTextField(ModelGeneratorService);
+ var text2 = RItemValues.GetRandomTextField(ModelGeneratorService);
+
+ var contentTypeDef = ModelGeneratorService.GetRandomDefinition(def =>
+ {
+ def.ParentContentTypeId = BuiltInContentTypeId.Item;
+ });
+
+ var itemDef = ModelGeneratorService.GetRandomDefinition(def =>
+ {
+ def.Title = Rnd.String();
+ def.ContentTypeName = contentTypeDef.Name;
+
+ def.DefaultValues.Add(new FieldValue()
+ {
+ FieldName = requiredText.InternalName,
+ Value = Rnd.String()
+ });
+
+ def.Values.Add(new FieldValue()
+ {
+ FieldName = text1.InternalName,
+ Value = Rnd.String()
+ });
+
+ def.Values.Add(new FieldValue()
+ {
+ FieldName = text2.InternalName,
+ Value = Rnd.String()
+ });
+
+ });
+
+ var listDef = ModelGeneratorService.GetRandomDefinition(def =>
+ {
+ def.ContentTypesEnabled = true;
+ def.TemplateType = BuiltInListTemplateTypeId.DocumentLibrary;
+ });
+
+ var siteModel = SPMeta2Model.NewSiteModel(site =>
+ {
+ site.AddField(requiredText);
+ site.AddField(text1);
+ site.AddField(text2);
+
+ site.AddContentType(contentTypeDef, contentType =>
+ {
+ contentType.AddContentTypeFieldLink(requiredText);
+ contentType.AddContentTypeFieldLink(text1);
+ contentType.AddContentTypeFieldLink(text2);
+ });
+ });
+
+ var webModel = SPMeta2Model.NewWebModel(web =>
+ {
+ web.AddList(listDef, list =>
+ {
+ list.AddContentTypeLink(contentTypeDef);
+ list.AddModuleFile(itemDef);
+ });
+ });
+
+ TestModel(siteModel, webModel);
+ }
+
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.ModuleFiles.Values")]
+ public void CanDeploy_ModuleFile_With_ContentType_ByName()
+ {
+ var contentTypeDef = ModelGeneratorService.GetRandomDefinition(def =>
+ {
+ def.ParentContentTypeId = BuiltInContentTypeId.Document;
+ });
+
+ var itemDef = ModelGeneratorService.GetRandomDefinition(def =>
+ {
+ def.ContentTypeName = contentTypeDef.Name;
+ });
+
+ var listDef = ModelGeneratorService.GetRandomDefinition(def =>
+ {
+ def.ContentTypesEnabled = true;
+ def.TemplateType = BuiltInListTemplateTypeId.DocumentLibrary;
+ });
+
+ var siteModel = SPMeta2Model.NewSiteModel(site =>
+ {
+ site.AddContentType(contentTypeDef);
+ });
+
+ var webModel = SPMeta2Model.NewWebModel(web =>
+ {
+ web.AddList(listDef, list =>
+ {
+ list.AddContentTypeLink(contentTypeDef);
+ list.AddModuleFile(itemDef);
+ });
+ });
+
+ TestModel(siteModel, webModel);
+ }
+
+ #endregion
+
+
+ }
+
+ [TestClass]
+ public class ModuleFileVersioningScenariousTest : SPMeta2RegresionScenarioTestBase
+ {
+ #region constructors
+
+ public ModuleFileVersioningScenariousTest()
+ {
+ RegressionService.ProvisionGenerationCount = 1;
+
+ RegressionService.EnableDefinitionValidation = false;
+ RegressionService.EnableEventValidation = false;
+ }
+
+ #endregion
+
+ #region internal
+
+ [ClassInitializeAttribute]
+ public static void Init(TestContext context)
+ {
+ InternalInit();
+ }
+
+ [ClassCleanupAttribute]
+ public static void Cleanup()
+ {
+ InternalCleanup();
+ }
+
+ #endregion
+
+ #region versioning
+
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.ModuleFiles.Versioning")]
+ public void CanDeploy_ModuleFile_MoreThan_511_Times_NoModeration()
+ {
+ if (!TestOptions.EnableModuleFile511Tests)
+ return;
+
+ var list = ModelGeneratorService.GetRandomDefinition(def =>
+ {
+ def.EnableVersioning = true;
+ def.EnableMinorVersions = true;
+
+ def.EnableModeration = false;
+
+ def.TemplateType = BuiltInListTemplateTypeId.DocumentLibrary;
+ });
+
+ CanDeploy_ModuleFile_MoreThan_511_Times(list);
+ }
+
+ [TestMethod]
+ [TestCategory("Regression.Scenarios.ModuleFiles.Versioning")]
+ public void CanDeploy_ModuleFile_MoreThan_511_Times_WithModeration()
+ {
+ if (!TestOptions.EnableModuleFile511Tests)
+ return;
+
+ var list = ModelGeneratorService.GetRandomDefinition(def =>
+ {
+ def.EnableVersioning = true;
+ def.EnableMinorVersions = true;
+
+ def.EnableModeration = true;
+
+ def.TemplateType = BuiltInListTemplateTypeId.DocumentLibrary;
+ });
+
+ CanDeploy_ModuleFile_MoreThan_511_Times(list);
+ }
+
+ public void CanDeploy_ModuleFile_MoreThan_511_Times(ListDefinition list)
+ {
+ // Module file provision fails at minor version 511 #930
+ // https://github.com/SubPointSolutions/spmeta2/issues/930
+
+ var moduleFileName = string.Format("{0}.txt", Rnd.String());
+ var moduleFiles = new List();
+
+ var filesCount = 520;
+
+ for (var i = 0; i < filesCount; i++)
+ {
+ var moduleFileDef = ModelGeneratorService.GetRandomDefinition(def =>
+ {
+ def.FileName = moduleFileName;
+ def.Content = new byte[3] { 1, 2, 3 };
+ });
+
+ moduleFiles.Add(moduleFileDef);
+ }
+
+ // RegExcludeFromValidation - exclude all defs from the validation
+ // don't need to check them as we test ability to perfrom more than 511 updates
+
+ var model = SPMeta2Model.NewWebModel(web =>
+ {
+ web.AddList(list, rndList =>
+ {
+ rndList.RegExcludeFromValidation();
+
+ foreach (var moduleFile in moduleFiles)
+ {
+ rndList.AddModuleFile(moduleFile, file =>
+ {
+ file.RegExcludeFromValidation();
+ });
+ }
+ });
+
+ });
+
+ TestModel(model, true);
+ }
+
+ #endregion
+ }
+}
diff --git a/SPMeta2/SPMeta2.Regression.Tests/Impl/Scenarios/TaxonomyTermScenariousTest.cs b/SPMeta2/SPMeta2.Regression.Tests/Impl/Scenarios/TaxonomyTermScenariousTest.cs
index acf4fe9cd..36ef6a012 100644
--- a/SPMeta2/SPMeta2.Regression.Tests/Impl/Scenarios/TaxonomyTermScenariousTest.cs
+++ b/SPMeta2/SPMeta2.Regression.Tests/Impl/Scenarios/TaxonomyTermScenariousTest.cs
@@ -40,7 +40,7 @@ public static void Cleanup()
#region default
- [TestCategory("Regression.Scenarios.Taxonomy.Term")]
+ [TestCategory("Regression.Scenarios.Taxonomy.Term.CustomProperties")]
[TestMethod]
public void CanDeploy_TaxonomyTerms_WithCustomProperties()
{
diff --git a/SPMeta2/SPMeta2.Regression.Tests/Impl/Syntax/ContentTypeDefinitionSyntaxTests.cs b/SPMeta2/SPMeta2.Regression.Tests/Impl/Syntax/ContentTypeDefinitionSyntaxTests.cs
new file mode 100644
index 000000000..fbdb0ccfb
--- /dev/null
+++ b/SPMeta2/SPMeta2.Regression.Tests/Impl/Syntax/ContentTypeDefinitionSyntaxTests.cs
@@ -0,0 +1,74 @@
+using System;
+using System.IO;
+using System.Linq;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using SPMeta2.Containers;
+using SPMeta2.Definitions;
+using SPMeta2.Services.Impl;
+using SPMeta2.Standard.Definitions.Taxonomy;
+using SPMeta2.Standard.Syntax;
+using SPMeta2.Syntax.Default;
+using SPMeta2.Definitions.ContentTypes;
+using SPMeta2.Standard.Definitions;
+using SPMeta2.Syntax.Default.Utils;
+using SPMeta2.Enumerations;
+
+namespace SPMeta2.Regression.Tests.Impl.Syntax
+{
+ [TestClass]
+ public class ContentTypeDefinitionSyntaxTests
+ {
+ #region tests
+
+ [TestMethod]
+ [TestCategory("Regression.Syntax.ContentTypeDefinitionSyntax")]
+ [TestCategory("CI.Core")]
+ public void ContentTypeDefinitionSyntax_IsChildOf()
+ {
+ // Potential bug with ContentTypeDefinitionSyntax.IsChildOf method #940
+ // https://github.com/SubPointSolutions/spmeta2/issues/940
+
+ var parentContentType = new ContentTypeDefinition
+ {
+ IdNumberValue = BuiltInContentTypeId.Document
+ };
+
+ var childContentType = new ContentTypeDefinition
+ {
+ Id = Guid.NewGuid(),
+ ParentContentTypeId = BuiltInContentTypeId.Document
+ };
+
+ PerformIsChildOfTests(childContentType, parentContentType);
+ }
+
+ private void PerformIsChildOfTests(ContentTypeDefinition childContentType, ContentTypeDefinition parentContentType)
+ {
+ // by ct
+ Assert.IsTrue(ContentTypeDefinitionSyntax.IsChildOf(childContentType, parentContentType));
+ Assert.IsFalse(ContentTypeDefinitionSyntax.IsChildOf(parentContentType, childContentType));
+
+ var parentId = parentContentType.GetContentTypeId();
+ var childId = childContentType.GetContentTypeId();
+
+ // by strings
+ Assert.IsTrue(ContentTypeDefinitionSyntax.IsChildOf(childId, parentId));
+ Assert.IsFalse(ContentTypeDefinitionSyntax.IsChildOf(parentId, childId));
+
+ // upper-lower case strings
+ var parentIdAsLower = string.Join(string.Empty, parentId.Select(s => char.ToLower(s)));
+ var parentIdAsUpper = string.Join(string.Empty, parentId.Select(s => char.ToUpper(s)));
+
+ var childIdAsLower = string.Join(string.Empty, childId.Select(s => char.ToLower(s)));
+ var childIdAsUpper = string.Join(string.Empty, childId.Select(s => char.ToUpper(s)));
+
+ Assert.IsTrue(ContentTypeDefinitionSyntax.IsChildOf(childIdAsLower, parentIdAsLower));
+ Assert.IsFalse(ContentTypeDefinitionSyntax.IsChildOf(parentIdAsUpper, childIdAsLower));
+
+ Assert.IsTrue(ContentTypeDefinitionSyntax.IsChildOf(childIdAsUpper, parentIdAsUpper));
+ Assert.IsFalse(ContentTypeDefinitionSyntax.IsChildOf(parentIdAsUpper, childIdAsUpper));
+ }
+
+ #endregion
+ }
+}
diff --git a/SPMeta2/SPMeta2.Regression.Tests/Properties/AssemblyInfo.cs b/SPMeta2/SPMeta2.Regression.Tests/Properties/AssemblyInfo.cs
index bc387ee0e..57e8ae2d9 100644
--- a/SPMeta2/SPMeta2.Regression.Tests/Properties/AssemblyInfo.cs
+++ b/SPMeta2/SPMeta2.Regression.Tests/Properties/AssemblyInfo.cs
@@ -33,4 +33,4 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.2.16305.1232")]
+[assembly: AssemblyFileVersion("1.2.17040.0900")]
diff --git a/SPMeta2/SPMeta2.Regression.Tests/SPMeta2.Regression.Tests.csproj b/SPMeta2/SPMeta2.Regression.Tests/SPMeta2.Regression.Tests.csproj
index cd8ce74bc..f296918fd 100644
--- a/SPMeta2/SPMeta2.Regression.Tests/SPMeta2.Regression.Tests.csproj
+++ b/SPMeta2/SPMeta2.Regression.Tests/SPMeta2.Regression.Tests.csproj
@@ -240,6 +240,7 @@
+
diff --git a/SPMeta2/SPMeta2.Regression/Properties/AssemblyInfo.cs b/SPMeta2/SPMeta2.Regression/Properties/AssemblyInfo.cs
index 0c996cf6e..5eff42421 100644
--- a/SPMeta2/SPMeta2.Regression/Properties/AssemblyInfo.cs
+++ b/SPMeta2/SPMeta2.Regression/Properties/AssemblyInfo.cs
@@ -33,4 +33,4 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.16305.1232")]
+[assembly: AssemblyFileVersion("1.0.17040.0900")]
diff --git a/SPMeta2/SPMeta2.SSOM.Standard/ModelHandlers/Taxonomy/TaxonomyTermModelHandler.cs b/SPMeta2/SPMeta2.SSOM.Standard/ModelHandlers/Taxonomy/TaxonomyTermModelHandler.cs
index acb38c7d5..e2da1ed96 100644
--- a/SPMeta2/SPMeta2.SSOM.Standard/ModelHandlers/Taxonomy/TaxonomyTermModelHandler.cs
+++ b/SPMeta2/SPMeta2.SSOM.Standard/ModelHandlers/Taxonomy/TaxonomyTermModelHandler.cs
@@ -1,293 +1,353 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Microsoft.SharePoint;
-using Microsoft.SharePoint.Taxonomy;
-using SPMeta2.Common;
-using SPMeta2.Definitions;
-using SPMeta2.Definitions.Base;
-using SPMeta2.Exceptions;
-using SPMeta2.Services;
-using SPMeta2.SSOM.ModelHandlers;
-using SPMeta2.SSOM.ModelHosts;
-using SPMeta2.SSOM.Standard.ModelHosts;
-using SPMeta2.Standard.Definitions.Taxonomy;
-using SPMeta2.Standard.Utils;
-using SPMeta2.Utils;
-
-namespace SPMeta2.SSOM.Standard.ModelHandlers.Taxonomy
-{
- public class TaxonomyTermModelHandler : SSOMModelHandlerBase
- {
- #region properties
-
- public override Type TargetType
- {
- get { return typeof(TaxonomyTermDefinition); }
- }
-
- #endregion
-
- #region methods
-
- public override void DeployModel(object modelHost, DefinitionBase model)
- {
- var definition = model.WithAssertAndCast("model", value => value.RequireNotNull());
-
- if (!TaxonomyUtility.IsValidTermName(definition.Name))
- {
- throw new SPMeta2Exception(
- string.Format("Term name [{0}] cannot contain any of the following characters: {1}",
- definition.Name,
- string.Join(", ", TaxonomyUtility.InvalidTermNameStrings.ToArray())));
- }
-
- if (modelHost is TermModelHost)
- DeployTermUnderTerm(modelHost, modelHost as TermModelHost, definition);
- else if (modelHost is TermSetModelHost)
- DeployTermUnderTermSet(modelHost, modelHost as TermSetModelHost, definition);
- else
- {
- throw new SPMeta2UnsupportedModelHostException(string.Format("Model host of type: [{0}] is not supported", modelHost.GetType()));
- }
- }
-
- public override void WithResolvingModelHost(ModelHostResolveContext modelHostContext)
- {
- var modelHost = modelHostContext.ModelHost;
- var model = modelHostContext.Model;
- var childModelType = modelHostContext.ChildModelType;
- var action = modelHostContext.Action;
-
-
- var definition = model.WithAssertAndCast("model", value => value.RequireNotNull());
-
- Term currentTerm = null;
- Group group = null;
- TermSet termSet = null;
- TermStore termStore = null;
- SPSite hostSite = null;
-
- if (modelHost is TermModelHost)
- {
- var h = (modelHost as TermModelHost);
-
- group = h.HostGroup;
- termSet = h.HostTermSet;
- termStore = h.HostTermStore;
- hostSite = h.HostSite;
-
- currentTerm = FindTermInTerm(h.HostTerm, definition);
- }
- else if (modelHost is TermSetModelHost)
- {
- var h = (modelHost as TermSetModelHost);
-
- termStore = h.HostTermStore;
- group = h.HostGroup;
- termSet = h.HostTermSet;
- hostSite = h.HostSite;
-
- currentTerm = FindTermInTermSet(h.HostTermSet, definition);
- }
-
- action(new TermModelHost
- {
- HostGroup = group,
- HostTermSet = termSet,
- HostTerm = currentTerm,
- HostTermStore = termStore,
- HostSite = hostSite
- });
-
- termStore.CommitAll();
- }
-
-
-
- protected virtual string NormalizeTermName(string termName)
- {
- return TaxonomyUtility.NormalizeName(termName);
- }
-
- private void DeployTermUnderTerm(object modelHost, TermModelHost termModelHost, TaxonomyTermDefinition termModel)
- {
- var term = termModelHost.HostTerm;
-
- var currentTerm = FindTermInTerm(term, termModel);
- var termName = NormalizeTermName(termModel.Name);
-
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioning,
- Object = currentTerm,
- ObjectType = typeof(Term),
- ObjectDefinition = termModel,
- ModelHost = modelHost
- });
-
- if (currentTerm == null)
- {
- TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new Term");
-
- currentTerm = termModel.Id.HasValue
- ? term.CreateTerm(termName, termModel.LCID, termModel.Id.Value)
- : term.CreateTerm(termName, termModel.LCID);
-
- MapTermProperties(currentTerm, termModel);
-
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioned,
- Object = currentTerm,
- ObjectType = typeof(Term),
- ObjectDefinition = termModel,
- ModelHost = modelHost
- });
- }
- else
- {
- TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Processing existing Term");
-
- MapTermProperties(currentTerm, termModel);
-
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioned,
- Object = currentTerm,
- ObjectType = typeof(Term),
- ObjectDefinition = termModel,
- ModelHost = modelHost
- });
- }
-
- termModelHost.HostTermStore.CommitAll();
- }
-
- protected void MapTermProperties(Term currentTerm, TaxonomyTermDefinition termModel)
- {
- if (!string.IsNullOrEmpty(termModel.Description))
- currentTerm.SetDescription(termModel.Description, termModel.LCID);
-
- if (!string.IsNullOrEmpty(termModel.CustomSortOrder))
- currentTerm.CustomSortOrder = termModel.CustomSortOrder;
-
- if (termModel.IsAvailableForTagging.HasValue)
- currentTerm.IsAvailableForTagging = termModel.IsAvailableForTagging.Value;
-
-#if !NET35
- foreach (var customProp in termModel.CustomProperties.Where(p => p.Override))
- {
- currentTerm.SetCustomProperty(customProp.Name, customProp.Value);
- }
-#endif
-
-#if !NET35
- foreach (var customProp in termModel.LocalCustomProperties.Where(p => p.Override))
- {
- currentTerm.SetLocalCustomProperty(customProp.Name, customProp.Value);
- }
-#endif
-
- }
-
- private void DeployTermUnderTermSet(object modelHost, TermSetModelHost groupModelHost, TaxonomyTermDefinition termModel)
- {
- var termSet = groupModelHost.HostTermSet;
-
- var currentTerm = FindTermInTermSet(termSet, termModel);
- var termName = NormalizeTermName(termModel.Name);
-
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioning,
- Object = currentTerm,
- ObjectType = typeof(Term),
- ObjectDefinition = termModel,
- ModelHost = modelHost
- });
-
- if (currentTerm == null)
- {
- TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new Term");
-
- currentTerm = termModel.Id.HasValue
- ? termSet.CreateTerm(termName, termModel.LCID, termModel.Id.Value)
- : termSet.CreateTerm(termName, termModel.LCID);
-
- MapTermProperties(currentTerm, termModel);
-
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioned,
- Object = currentTerm,
- ObjectType = typeof(Term),
- ObjectDefinition = termModel,
- ModelHost = modelHost
- });
- }
- else
- {
- TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Processing existing Term");
-
- MapTermProperties(currentTerm, termModel);
-
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioned,
- Object = currentTerm,
- ObjectType = typeof(Term),
- ObjectDefinition = termModel,
- ModelHost = modelHost
- });
- }
-
- groupModelHost.HostTermStore.CommitAll();
- }
-
- private Term FindTermInTerm(Term term, TaxonomyTermDefinition termModel)
- {
- Term result = null;
-
- if (termModel.Id.HasValue)
- result = term.Terms.FirstOrDefault(t => t.Id == termModel.Id.Value);
- else if (!string.IsNullOrEmpty(termModel.Name))
- {
- var termName = NormalizeTermName(termModel.Name);
- result = term.Terms.FirstOrDefault(t => t.Name == termName);
- }
-
- return result;
- }
-
- protected Term FindTermInTermSet(TermSet termSet, TaxonomyTermDefinition termModel)
- {
- Term result = null;
-
- if (termModel.Id.HasValue)
- result = termSet.GetTerm(termModel.Id.Value);
- else if (!string.IsNullOrEmpty(termModel.Name))
- {
- var termName = NormalizeTermName(termModel.Name);
- result = termSet.GetTerms(termName, termModel.LCID, false).FirstOrDefault();
- }
-
- return result;
- }
-
- #endregion
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Microsoft.SharePoint;
+using Microsoft.SharePoint.Taxonomy;
+using SPMeta2.Common;
+using SPMeta2.Definitions;
+using SPMeta2.Definitions.Base;
+using SPMeta2.Exceptions;
+using SPMeta2.Services;
+using SPMeta2.SSOM.ModelHandlers;
+using SPMeta2.SSOM.ModelHosts;
+using SPMeta2.SSOM.Standard.ModelHosts;
+using SPMeta2.Standard.Definitions.Taxonomy;
+using SPMeta2.Standard.Utils;
+using SPMeta2.Utils;
+
+namespace SPMeta2.SSOM.Standard.ModelHandlers.Taxonomy
+{
+ public class TaxonomyTermModelHandler : SSOMModelHandlerBase
+ {
+ #region properties
+
+ public override Type TargetType
+ {
+ get { return typeof(TaxonomyTermDefinition); }
+ }
+
+ #endregion
+
+ #region methods
+
+ public override void DeployModel(object modelHost, DefinitionBase model)
+ {
+ var definition = model.WithAssertAndCast("model", value => value.RequireNotNull());
+
+ if (!TaxonomyUtility.IsValidTermName(definition.Name))
+ {
+ throw new SPMeta2Exception(
+ string.Format("Term name [{0}] cannot contain any of the following characters: {1}",
+ definition.Name,
+ string.Join(", ", TaxonomyUtility.InvalidTermNameStrings.ToArray())));
+ }
+
+ if (modelHost is TermModelHost)
+ DeployTermUnderTerm(modelHost, modelHost as TermModelHost, definition);
+ else if (modelHost is TermSetModelHost)
+ DeployTermUnderTermSet(modelHost, modelHost as TermSetModelHost, definition);
+ else
+ {
+ throw new SPMeta2UnsupportedModelHostException(string.Format("Model host of type: [{0}] is not supported", modelHost.GetType()));
+ }
+ }
+
+ public override void WithResolvingModelHost(ModelHostResolveContext modelHostContext)
+ {
+ var modelHost = modelHostContext.ModelHost;
+ var model = modelHostContext.Model;
+ var childModelType = modelHostContext.ChildModelType;
+ var action = modelHostContext.Action;
+
+
+ var definition = model.WithAssertAndCast("model", value => value.RequireNotNull());
+
+ Term currentTerm = null;
+ Group group = null;
+ TermSet termSet = null;
+ TermStore termStore = null;
+ SPSite hostSite = null;
+
+ if (modelHost is TermModelHost)
+ {
+ var h = (modelHost as TermModelHost);
+
+ group = h.HostGroup;
+ termSet = h.HostTermSet;
+ termStore = h.HostTermStore;
+ hostSite = h.HostSite;
+
+ currentTerm = FindTermInTerm(h.HostTerm, definition);
+ }
+ else if (modelHost is TermSetModelHost)
+ {
+ var h = (modelHost as TermSetModelHost);
+
+ termStore = h.HostTermStore;
+ group = h.HostGroup;
+ termSet = h.HostTermSet;
+ hostSite = h.HostSite;
+
+ currentTerm = FindTermInTermSet(h.HostTermSet, definition);
+ }
+
+ action(new TermModelHost
+ {
+ HostGroup = group,
+ HostTermSet = termSet,
+ HostTerm = currentTerm,
+ HostTermStore = termStore,
+ HostSite = hostSite
+ });
+
+ termStore.CommitAll();
+ }
+
+
+
+ protected virtual string NormalizeTermName(string termName)
+ {
+ return TaxonomyUtility.NormalizeName(termName);
+ }
+
+ private void DeployTermUnderTerm(object modelHost, TermModelHost termModelHost, TaxonomyTermDefinition termModel)
+ {
+ var term = termModelHost.HostTerm;
+
+ var currentTerm = FindTermInTerm(term, termModel);
+ var termName = NormalizeTermName(termModel.Name);
+
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioning,
+ Object = currentTerm,
+ ObjectType = typeof(Term),
+ ObjectDefinition = termModel,
+ ModelHost = modelHost
+ });
+
+ if (currentTerm == null)
+ {
+ TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new Term");
+
+ currentTerm = termModel.Id.HasValue
+ ? term.CreateTerm(termName, termModel.LCID, termModel.Id.Value)
+ : term.CreateTerm(termName, termModel.LCID);
+
+ MapTermProperties(currentTerm, termModel);
+
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioned,
+ Object = currentTerm,
+ ObjectType = typeof(Term),
+ ObjectDefinition = termModel,
+ ModelHost = modelHost
+ });
+ }
+ else
+ {
+ TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Processing existing Term");
+
+ MapTermProperties(currentTerm, termModel);
+
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioned,
+ Object = currentTerm,
+ ObjectType = typeof(Term),
+ ObjectDefinition = termModel,
+ ModelHost = modelHost
+ });
+ }
+
+ termModelHost.HostTermStore.CommitAll();
+ }
+
+ protected void MapTermProperties(Term currentTerm, TaxonomyTermDefinition termModel)
+ {
+ if (!string.IsNullOrEmpty(termModel.Description))
+ currentTerm.SetDescription(termModel.Description, termModel.LCID);
+
+ if (!string.IsNullOrEmpty(termModel.CustomSortOrder))
+ currentTerm.CustomSortOrder = termModel.CustomSortOrder;
+
+ if (termModel.IsAvailableForTagging.HasValue)
+ currentTerm.IsAvailableForTagging = termModel.IsAvailableForTagging.Value;
+
+ UpdateTermProperties(currentTerm, termModel, false);
+ UpdateTermProperties(currentTerm, termModel, true);
+ }
+
+ private void UpdateTermProperties(Term currentTerm, TaxonomyTermDefinition termModel, bool isLocalProperties)
+ {
+#if !NET35
+ // TaxonomyTermCustomProperty.Overwrite set to false - No properties are created. #932
+ // https://github.com/SubPointSolutions/spmeta2/issues/932
+
+ // 1 - set everything what is not there
+ var srcProperties = termModel.CustomProperties;
+ var dstProperties = currentTerm.CustomProperties;
+
+ if (isLocalProperties)
+ {
+ TraceService.Information((int)LogEventId.ModelProvision, "Processing local custom properties");
+
+ srcProperties = termModel.LocalCustomProperties;
+ dstProperties = currentTerm.LocalCustomProperties;
+ }
+ else
+ {
+ TraceService.Information((int)LogEventId.ModelProvision, "Processing custom properties");
+
+ srcProperties = termModel.CustomProperties;
+ dstProperties = currentTerm.CustomProperties;
+ }
+
+ foreach (var prop in srcProperties)
+ {
+ var propName = prop.Name;
+ var propValue = prop.Value;
+
+
+ var propExist = dstProperties.Keys
+ .FirstOrDefault(k => k.ToUpper() == propName.ToUpper())
+ != null;
+
+ if (!propExist)
+ {
+ TraceService.Information((int)LogEventId.ModelProvision,
+ string.Format("Property [{0}] does not exist. Adding with value:[{1}]",
+ new object[] { prop.Name, prop.Value }));
+
+ if (isLocalProperties)
+ currentTerm.SetLocalCustomProperty(propName, propValue);
+ else
+ currentTerm.SetCustomProperty(propName, propValue);
+ }
+ else
+ {
+ TraceService.Information((int)LogEventId.ModelProvision,
+ string.Format("Property [{0}] exists. No need to add it. Optionally, it will be owerwritten if .Override is set 'true'",
+ new object[] { propName, propValue }));
+ }
+ }
+
+ // 2 - override as needed
+ foreach (var prop in srcProperties.Where(p => p.Override))
+ {
+ var propName = prop.Name;
+ var propValue = prop.Value;
+
+ TraceService.Information((int)LogEventId.ModelProvision,
+ string.Format("Overwriting property [{0}] with value:[{1}] as .Override is set 'true'",
+ new object[] { propName, propValue }));
+
+ if (isLocalProperties)
+ currentTerm.SetLocalCustomProperty(propName, propValue);
+ else
+ currentTerm.SetCustomProperty(propName, propValue);
+ }
+#endif
+ }
+
+ private void DeployTermUnderTermSet(object modelHost, TermSetModelHost groupModelHost, TaxonomyTermDefinition termModel)
+ {
+ var termSet = groupModelHost.HostTermSet;
+
+ var currentTerm = FindTermInTermSet(termSet, termModel);
+ var termName = NormalizeTermName(termModel.Name);
+
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioning,
+ Object = currentTerm,
+ ObjectType = typeof(Term),
+ ObjectDefinition = termModel,
+ ModelHost = modelHost
+ });
+
+ if (currentTerm == null)
+ {
+ TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new Term");
+
+ currentTerm = termModel.Id.HasValue
+ ? termSet.CreateTerm(termName, termModel.LCID, termModel.Id.Value)
+ : termSet.CreateTerm(termName, termModel.LCID);
+
+ MapTermProperties(currentTerm, termModel);
+
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioned,
+ Object = currentTerm,
+ ObjectType = typeof(Term),
+ ObjectDefinition = termModel,
+ ModelHost = modelHost
+ });
+ }
+ else
+ {
+ TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Processing existing Term");
+
+ MapTermProperties(currentTerm, termModel);
+
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioned,
+ Object = currentTerm,
+ ObjectType = typeof(Term),
+ ObjectDefinition = termModel,
+ ModelHost = modelHost
+ });
+ }
+
+ groupModelHost.HostTermStore.CommitAll();
+ }
+
+ private Term FindTermInTerm(Term term, TaxonomyTermDefinition termModel)
+ {
+ Term result = null;
+
+ if (termModel.Id.HasValue)
+ result = term.Terms.FirstOrDefault(t => t.Id == termModel.Id.Value);
+ else if (!string.IsNullOrEmpty(termModel.Name))
+ {
+ var termName = NormalizeTermName(termModel.Name);
+ result = term.Terms.FirstOrDefault(t => t.Name == termName);
+ }
+
+ return result;
+ }
+
+ protected Term FindTermInTermSet(TermSet termSet, TaxonomyTermDefinition termModel)
+ {
+ Term result = null;
+
+ if (termModel.Id.HasValue)
+ result = termSet.GetTerm(termModel.Id.Value);
+ else if (!string.IsNullOrEmpty(termModel.Name))
+ {
+ var termName = NormalizeTermName(termModel.Name);
+ result = termSet.GetTerms(termName, termModel.LCID, false).FirstOrDefault();
+ }
+
+ return result;
+ }
+
+ #endregion
+ }
+}
diff --git a/SPMeta2/SPMeta2.SSOM.Standard/Properties/AssemblyInfo.cs b/SPMeta2/SPMeta2.SSOM.Standard/Properties/AssemblyInfo.cs
index a0b4cc49f..0b7936084 100644
--- a/SPMeta2/SPMeta2.SSOM.Standard/Properties/AssemblyInfo.cs
+++ b/SPMeta2/SPMeta2.SSOM.Standard/Properties/AssemblyInfo.cs
@@ -33,4 +33,4 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.2.16305.1232")]
+[assembly: AssemblyFileVersion("1.2.17040.0900")]
diff --git a/SPMeta2/SPMeta2.SSOM/ModelHandlers/ListViewModelHandler.cs b/SPMeta2/SPMeta2.SSOM/ModelHandlers/ListViewModelHandler.cs
index f87b89d76..e8d1b407e 100644
--- a/SPMeta2/SPMeta2.SSOM/ModelHandlers/ListViewModelHandler.cs
+++ b/SPMeta2/SPMeta2.SSOM/ModelHandlers/ListViewModelHandler.cs
@@ -237,6 +237,9 @@ private void MapProperties(SPList targetList, SPView currentView, ListViewDefini
currentView.DefaultView = listViewModel.IsDefault;
currentView.Paged = listViewModel.IsPaged;
+ if (listViewModel.IncludeRootFolder.HasValue)
+ currentView.IncludeRootFolder = listViewModel.IncludeRootFolder.Value;
+
#if !NET35
if (!string.IsNullOrEmpty(listViewModel.JSLink))
currentView.JSLink = listViewModel.JSLink;
diff --git a/SPMeta2/SPMeta2.SSOM/ModelHandlers/MasterPageSettingsModelHandler.cs b/SPMeta2/SPMeta2.SSOM/ModelHandlers/MasterPageSettingsModelHandler.cs
index 40c5cc4c4..8c96a153a 100644
--- a/SPMeta2/SPMeta2.SSOM/ModelHandlers/MasterPageSettingsModelHandler.cs
+++ b/SPMeta2/SPMeta2.SSOM/ModelHandlers/MasterPageSettingsModelHandler.cs
@@ -1,100 +1,119 @@
-using System;
-using Microsoft.SharePoint;
-using Microsoft.SharePoint.Utilities;
-using SPMeta2.Common;
-using SPMeta2.Definitions;
-using SPMeta2.Definitions.Base;
-using SPMeta2.Services;
-using SPMeta2.SSOM.ModelHosts;
-using SPMeta2.Utils;
-
-namespace SPMeta2.SSOM.ModelHandlers
-{
- public class MasterPageSettingsModelHandler : SSOMModelHandlerBase
- {
- #region properties
-
- public override Type TargetType
- {
- get { return typeof(MasterPageSettingsDefinition); }
- }
-
- #endregion
-
- #region methods
-
- public override void DeployModel(object modelHost, DefinitionBase model)
- {
- var webModelHost = modelHost.WithAssertAndCast("modelHost", value => value.RequireNotNull());
- var masterPageSettings = model.WithAssertAndCast("model", value => value.RequireNotNull());
-
- DeployMasterPageSettings(modelHost, webModelHost, masterPageSettings);
- }
-
- private void DeployMasterPageSettings(object modelHost, WebModelHost webModelHost, MasterPageSettingsDefinition masterPageSettings)
- {
- var web = webModelHost.HostWeb;
- var site = web.Site;
-
- var siteRelativeUrl = site.ServerRelativeUrl;
-
- TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Resolving server relative URL: [{0}]", siteRelativeUrl);
-
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioning,
- Object = web,
- ObjectType = typeof(SPWeb),
- ObjectDefinition = masterPageSettings,
- ModelHost = modelHost
- });
-
- if (!string.IsNullOrEmpty(masterPageSettings.SiteMasterPageUrl))
- {
- TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Setting web.MasterUrlL: [{0}]", masterPageSettings.SiteMasterPageUrl);
- web.CustomMasterUrl = SPUrlUtility.CombineUrl(siteRelativeUrl, masterPageSettings.SiteMasterPageUrl);
- }
-
- if (!string.IsNullOrEmpty(masterPageSettings.SystemMasterPageUrl))
- {
- TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Setting web.CustomMasterUrl: [{0}]", masterPageSettings.SystemMasterPageUrl);
- web.MasterUrl = SPUrlUtility.CombineUrl(siteRelativeUrl, masterPageSettings.SystemMasterPageUrl);
- }
-
- if (!string.IsNullOrEmpty(masterPageSettings.SiteMasterPageUrl) ||
- !string.IsNullOrEmpty(masterPageSettings.SystemMasterPageUrl))
- {
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioned,
- Object = web,
- ObjectType = typeof(SPWeb),
- ObjectDefinition = masterPageSettings,
- ModelHost = modelHost
- });
-
- TraceService.Verbose((int)LogEventId.ModelProvisionCoreCall, "Calling web.Update()");
- web.Update();
- }
- else
- {
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioned,
- Object = web,
- ObjectType = typeof(SPWeb),
- ObjectDefinition = masterPageSettings,
- ModelHost = modelHost
- });
- }
- }
-
- #endregion
- }
-}
+using System;
+using Microsoft.SharePoint;
+using Microsoft.SharePoint.Utilities;
+using SPMeta2.Common;
+using SPMeta2.Definitions;
+using SPMeta2.Definitions.Base;
+using SPMeta2.Services;
+using SPMeta2.SSOM.ModelHosts;
+using SPMeta2.Utils;
+
+namespace SPMeta2.SSOM.ModelHandlers
+{
+ public class MasterPageSettingsModelHandler : SSOMModelHandlerBase
+ {
+ #region properties
+
+ public override Type TargetType
+ {
+ get { return typeof(MasterPageSettingsDefinition); }
+ }
+
+ #endregion
+
+ #region methods
+
+ public override void DeployModel(object modelHost, DefinitionBase model)
+ {
+ var webModelHost = modelHost.WithAssertAndCast("modelHost", value => value.RequireNotNull());
+ var masterPageSettings = model.WithAssertAndCast("model", value => value.RequireNotNull());
+
+ DeployMasterPageSettings(modelHost, webModelHost, masterPageSettings);
+ }
+
+ private void DeployMasterPageSettings(object modelHost, WebModelHost webModelHost, MasterPageSettingsDefinition masterPageSettings)
+ {
+ var web = webModelHost.HostWeb;
+ var site = web.Site;
+
+ var siteRelativeUrl = site.ServerRelativeUrl;
+
+ TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Resolving server relative URL: [{0}]", siteRelativeUrl);
+
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioning,
+ Object = web,
+ ObjectType = typeof(SPWeb),
+ ObjectDefinition = masterPageSettings,
+ ModelHost = modelHost
+ });
+
+ if (!string.IsNullOrEmpty(masterPageSettings.SiteMasterPageUrl))
+ {
+ var url = ResolveUrlWithTokens(webModelHost.HostWeb, masterPageSettings.SiteMasterPageUrl);
+
+ TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Setting web.MasterUrl: [{0}]", url);
+ web.CustomMasterUrl = SPUrlUtility.CombineUrl(siteRelativeUrl, url);
+ }
+
+ if (!string.IsNullOrEmpty(masterPageSettings.SystemMasterPageUrl))
+ {
+ var url = ResolveUrlWithTokens(webModelHost.HostWeb, masterPageSettings.SystemMasterPageUrl);
+
+ TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Setting web.CustomMasterUrl: [{0}]", masterPageSettings.SystemMasterPageUrl);
+ web.MasterUrl = SPUrlUtility.CombineUrl(siteRelativeUrl, url);
+ }
+
+ if (!string.IsNullOrEmpty(masterPageSettings.SiteMasterPageUrl) ||
+ !string.IsNullOrEmpty(masterPageSettings.SystemMasterPageUrl))
+ {
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioned,
+ Object = web,
+ ObjectType = typeof(SPWeb),
+ ObjectDefinition = masterPageSettings,
+ ModelHost = modelHost
+ });
+
+ TraceService.Verbose((int)LogEventId.ModelProvisionCoreCall, "Calling web.Update()");
+ web.Update();
+ }
+ else
+ {
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioned,
+ Object = web,
+ ObjectType = typeof(SPWeb),
+ ObjectDefinition = masterPageSettings,
+ ModelHost = modelHost
+ });
+ }
+ }
+
+ protected virtual string ResolveUrlWithTokens(SPWeb web, string url)
+ {
+ TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Original url: [{0}]", url);
+ url = TokenReplacementService.ReplaceTokens(new TokenReplacementContext
+ {
+ Value = url,
+ Context = web,
+ IsSiteRelativeUrl = true
+ }).Value;
+
+ TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Token replaced url: [{0}]", url);
+
+ return url;
+ }
+
+ #endregion
+ }
+}
diff --git a/SPMeta2/SPMeta2.SSOM/ModelHandlers/ModuleFileModelHandler.cs b/SPMeta2/SPMeta2.SSOM/ModelHandlers/ModuleFileModelHandler.cs
index 6f646be7b..f26623d57 100644
--- a/SPMeta2/SPMeta2.SSOM/ModelHandlers/ModuleFileModelHandler.cs
+++ b/SPMeta2/SPMeta2.SSOM/ModelHandlers/ModuleFileModelHandler.cs
@@ -1,396 +1,422 @@
-using Microsoft.SharePoint;
-using SPMeta2.Common;
-using SPMeta2.Definitions;
-using SPMeta2.Definitions.Base;
-using SPMeta2.ModelHandlers;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-using SPMeta2.Utils;
-using SPMeta2.SSOM.ModelHosts;
-using SPMeta2.Exceptions;
-using System.Web.UI.WebControls.WebParts;
-using SPMeta2.SSOM.Services;
-
-namespace SPMeta2.SSOM.ModelHandlers
-{
- public class ModuleFileModelHandler : SSOMModelHandlerBase
- {
- #region properties
-
- public override Type TargetType
- {
- get { return typeof(ModuleFileDefinition); }
- }
-
- #endregion
-
- #region methods
-
- protected SPFile GetFile(FolderModelHost folderHost, ModuleFileDefinition moduleFile)
- {
- if (folderHost.CurrentWebFolder != null)
- return folderHost.CurrentWebFolder.ParentWeb.GetFile(GetSafeFileUrl(folderHost.CurrentWebFolder, moduleFile));
-
- if (folderHost.CurrentContentType != null)
- return folderHost.CurrentContentTypeFolder.ParentWeb.GetFile(GetSafeFileUrl(folderHost.CurrentContentTypeFolder, moduleFile));
-
- if (folderHost.CurrentLibraryFolder != null)
- return folderHost.CurrentLibraryFolder.ParentWeb.GetFile(GetSafeFileUrl(folderHost.CurrentLibraryFolder, moduleFile));
-
- throw new ArgumentException("CurrentWebFolder/CurrentContentType/CurrentLibraryFolder should not be null");
-
- }
-
- public override void WithResolvingModelHost(ModelHostResolveContext modelHostContext)
- {
- var modelHost = modelHostContext.ModelHost;
- var model = modelHostContext.Model;
- var childModelType = modelHostContext.ChildModelType;
- var action = modelHostContext.Action;
-
-
- var folderHost = modelHost.WithAssertAndCast("modelHost", value => value.RequireNotNull());
- var moduleFile = model.WithAssertAndCast("model", value => value.RequireNotNull());
-
- var folder = folderHost.CurrentLibraryFolder;
- var file = GetFile(folderHost, moduleFile);
-
- if (childModelType == typeof(WebPartDefinition))
- {
- using (var webPartManager = file.GetLimitedWebPartManager(PersonalizationScope.Shared))
- {
- var webpartPageHost = new WebpartPageModelHost
- {
- HostFile = file,
- PageListItem = file.Item,
- SPLimitedWebPartManager = webPartManager
- };
-
- action(webpartPageHost);
- }
- }
- else
- {
- action(file);
- }
- }
-
- public override void DeployModel(object modelHost, DefinitionBase model)
- {
- var folderHost = modelHost.WithAssertAndCast("modelHost", value => value.RequireNotNull());
- var moduleFile = model.WithAssertAndCast("model", value => value.RequireNotNull());
-
- if (folderHost.CurrentWebFolder != null)
- ProcessWebModuleFile(folderHost, moduleFile);
- else if (folderHost.CurrentContentType != null)
- ProcessContentTypeModuleFile(folderHost, moduleFile);
- else if (folderHost.CurrentLibraryFolder != null)
- {
- ProcessFile(modelHost, folderHost.CurrentLibraryFolder, moduleFile);
- }
- else
- {
- throw new ArgumentException("CurrentWebFolder/CurrentContentType/CurrentLibraryFolder should not be null");
- }
- }
-
- private void ProcessContentTypeModuleFile(FolderModelHost folderHost, ModuleFileDefinition moduleFile)
- {
- var folder = folderHost.CurrentContentTypeFolder;
-
- var currentFile = folder.ParentWeb.GetFile(GetSafeFileUrl(folder, moduleFile));
-
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioning,
- Object = currentFile.Exists ? currentFile : null,
- ObjectType = typeof(SPFile),
- ObjectDefinition = moduleFile,
- ModelHost = folderHost
- });
-
- if (moduleFile.Overwrite)
- {
- var file = folder.Files.Add(moduleFile.FileName, moduleFile.Content, moduleFile.Overwrite);
-
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioned,
- Object = file,
- ObjectType = typeof(SPFile),
- ObjectDefinition = moduleFile,
- ModelHost = folderHost
- });
- }
- else
- {
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioned,
- Object = currentFile.Exists ? currentFile : null,
- ObjectType = typeof(SPFile),
- ObjectDefinition = moduleFile,
- ModelHost = folderHost
- });
- }
-
- folder.Update();
- }
-
- private void ProcessWebModuleFile(FolderModelHost folderHost, ModuleFileDefinition moduleFile)
- {
- var folder = folderHost.CurrentWebFolder;
-
- var currentFile = folder.ParentWeb.GetFile(GetSafeFileUrl(folder, moduleFile));
-
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioning,
- Object = currentFile.Exists ? currentFile : null,
- ObjectType = typeof(SPFile),
- ObjectDefinition = moduleFile,
- ModelHost = folderHost
- });
-
- if (moduleFile.Overwrite)
- {
- var file = folder.Files.Add(moduleFile.FileName, moduleFile.Content, moduleFile.Overwrite);
-
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioned,
- Object = file,
- ObjectType = typeof(SPFile),
- ObjectDefinition = moduleFile,
- ModelHost = folderHost
- });
- }
- else
- {
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioned,
- Object = currentFile.Exists ? currentFile : null,
- ObjectType = typeof(SPFile),
- ObjectDefinition = moduleFile,
- ModelHost = folderHost
- });
- }
-
- folder.Update();
- }
-
- private string GetSafeFileUrl(SPFolder folder, ModuleFileDefinition moduleFile)
- {
- if (folder.ServerRelativeUrl != "/")
- return folder.ServerRelativeUrl + "/" + moduleFile.FileName;
-
- return moduleFile.FileName;
- }
-
- public static void WithSafeFileOperation(
- SPList list,
- SPFolder folder,
- string fileUrl,
- string fileName,
- byte[] fileContent,
- bool overide,
- Action onBeforeAction,
- Action onAction)
- {
- var file = list.ParentWeb.GetFile(fileUrl);
-
- if (onBeforeAction != null)
- onBeforeAction(file);
-
- // are we inside ocument libary, so that check in stuff is needed?
- var isDocumentLibrary = list != null && list.BaseType == SPBaseType.DocumentLibrary;
-
- if (isDocumentLibrary)
- {
- if (list != null && (file.Exists && file.CheckOutType != SPFile.SPCheckOutType.None))
- file.UndoCheckOut();
-
- if (list != null && (list.EnableMinorVersions && file.Exists && file.Level == SPFileLevel.Published))
- file.UnPublish("Provision");
-
- if (list != null && (file.Exists && file.CheckOutType == SPFile.SPCheckOutType.None))
- file.CheckOut();
- }
-
- SPFile newFile;
-
- if (overide)
- newFile = folder.Files.Add(fileName, fileContent, file.Exists);
- else
- newFile = file;
-
- if (onAction != null)
- onAction(newFile);
-
- newFile.Update();
-
- if (isDocumentLibrary)
- {
- if (list != null && (file.Exists && file.CheckOutType != SPFile.SPCheckOutType.None))
- newFile.CheckIn("Provision");
-
- if (list != null && (list.EnableMinorVersions))
- newFile.Publish("Provision");
-
- if (list != null && list.EnableModeration)
- newFile.Approve("Provision");
- }
- }
-
- public static void DeployModuleFile(SPFolder folder,
- string fileUrl,
- string fileName,
- byte[] fileContent,
- bool overwrite,
- Action beforeProvision,
- Action afterProvision)
- {
- // doc libs
- SPList list = folder.DocumentLibrary;
-
- // fallback for the lists assuming deployment to Forms or other places
- if (list == null)
- {
- list = folder.ParentWeb.Lists[folder.ParentListId];
- }
-
- WithSafeFileOperation(list, folder, fileUrl, fileName, fileContent,
- overwrite,
- onBeforeFile =>
- {
- if (beforeProvision != null)
- beforeProvision(onBeforeFile);
- },
- onActionFile =>
- {
- if (afterProvision != null)
- afterProvision(onActionFile);
- });
- }
-
- private void ProcessFile(
- object modelHost,
- SPFolder folder,
- ModuleFileDefinition moduleFile)
- {
- DeployModuleFile(
- folder,
- GetSafeFileUrl(folder, moduleFile),
- moduleFile.FileName,
- moduleFile.Content,
- moduleFile.Overwrite,
- before =>
- {
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioning,
- Object = before.Exists ? before : null,
- ObjectType = typeof(SPFile),
- ObjectDefinition = moduleFile,
- ModelHost = modelHost
- });
-
- },
- after =>
- {
- var shouldUpdateItem = false;
-
- if (!string.IsNullOrEmpty(moduleFile.Title))
- {
- after.ListItemAllFields["Title"] = moduleFile.Title;
- shouldUpdateItem = true;
- }
-
- if (!string.IsNullOrEmpty(moduleFile.ContentTypeId) ||
- !string.IsNullOrEmpty(moduleFile.ContentTypeName))
- {
- var list = folder.ParentWeb.Lists[folder.ParentListId];
-
- if (!string.IsNullOrEmpty(moduleFile.ContentTypeId))
- after.ListItemAllFields["ContentTypeId"] = ContentTypeLookupService.LookupListContentTypeById(list, moduleFile.ContentTypeId);
-
- if (!string.IsNullOrEmpty(moduleFile.ContentTypeName))
- after.ListItemAllFields["ContentTypeId"] = ContentTypeLookupService.LookupContentTypeByName(list, moduleFile.ContentTypeName);
-
- shouldUpdateItem = true;
- }
-
- if (moduleFile.DefaultValues.Count > 0)
- {
- FieldLookupService.EnsureDefaultValues(after.ListItemAllFields, moduleFile.DefaultValues);
- shouldUpdateItem = true;
- }
-
- FieldLookupService.EnsureValues(after.ListItemAllFields, moduleFile.Values, true);
-
- if (shouldUpdateItem)
- {
- after.ListItemAllFields.Update();
- }
-
- InvokeOnModelEvent(this, new ModelEventArgs
- {
- CurrentModelNode = null,
- Model = null,
- EventType = ModelEventType.OnProvisioned,
- Object = after,
- ObjectType = typeof(SPFile),
- ObjectDefinition = moduleFile,
- ModelHost = modelHost
- });
- });
- }
-
- private void EnsureDefaultValues(SPListItem newFileItem, ModuleFileDefinition definition)
- {
- foreach (var defaultValue in definition.DefaultValues)
- {
- if (!string.IsNullOrEmpty(defaultValue.FieldName))
- {
- if (newFileItem.Fields.ContainsFieldWithStaticName(defaultValue.FieldName))
- {
- if (newFileItem[defaultValue.FieldName] == null)
- newFileItem[defaultValue.FieldName] = defaultValue.Value;
- }
- }
- else if (defaultValue.FieldId.HasValue && defaultValue.FieldId != default(Guid))
- {
- if (newFileItem.Fields.OfType().Any(f => f.Id == defaultValue.FieldId.Value))
- {
- if (newFileItem[defaultValue.FieldId.Value] == null)
- newFileItem[defaultValue.FieldId.Value] = defaultValue.Value;
- }
- }
- }
- }
-
-
-
-
-
- #endregion
- }
-}
+using Microsoft.SharePoint;
+using SPMeta2.Common;
+using SPMeta2.Definitions;
+using SPMeta2.Definitions.Base;
+using SPMeta2.ModelHandlers;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using SPMeta2.Utils;
+using SPMeta2.SSOM.ModelHosts;
+using SPMeta2.Exceptions;
+using System.Web.UI.WebControls.WebParts;
+using SPMeta2.SSOM.Services;
+
+namespace SPMeta2.SSOM.ModelHandlers
+{
+ public class ModuleFileModelHandler : SSOMModelHandlerBase
+ {
+ #region static
+
+ static ModuleFileModelHandler()
+ {
+ MaxMinorVersionCount = 50;
+ }
+
+ #endregion
+
+ #region properties
+
+ private static int MaxMinorVersionCount { get; set; }
+
+ public override Type TargetType
+ {
+ get { return typeof(ModuleFileDefinition); }
+ }
+
+ #endregion
+
+ #region methods
+
+ protected SPFile GetFile(FolderModelHost folderHost, ModuleFileDefinition moduleFile)
+ {
+ if (folderHost.CurrentWebFolder != null)
+ return folderHost.CurrentWebFolder.ParentWeb.GetFile(GetSafeFileUrl(folderHost.CurrentWebFolder, moduleFile));
+
+ if (folderHost.CurrentContentType != null)
+ return folderHost.CurrentContentTypeFolder.ParentWeb.GetFile(GetSafeFileUrl(folderHost.CurrentContentTypeFolder, moduleFile));
+
+ if (folderHost.CurrentLibraryFolder != null)
+ return folderHost.CurrentLibraryFolder.ParentWeb.GetFile(GetSafeFileUrl(folderHost.CurrentLibraryFolder, moduleFile));
+
+ throw new ArgumentException("CurrentWebFolder/CurrentContentType/CurrentLibraryFolder should not be null");
+
+ }
+
+ public override void WithResolvingModelHost(ModelHostResolveContext modelHostContext)
+ {
+ var modelHost = modelHostContext.ModelHost;
+ var model = modelHostContext.Model;
+ var childModelType = modelHostContext.ChildModelType;
+ var action = modelHostContext.Action;
+
+
+ var folderHost = modelHost.WithAssertAndCast("modelHost", value => value.RequireNotNull());
+ var moduleFile = model.WithAssertAndCast("model", value => value.RequireNotNull());
+
+ var folder = folderHost.CurrentLibraryFolder;
+ var file = GetFile(folderHost, moduleFile);
+
+ if (childModelType == typeof(WebPartDefinition))
+ {
+ using (var webPartManager = file.GetLimitedWebPartManager(PersonalizationScope.Shared))
+ {
+ var webpartPageHost = new WebpartPageModelHost
+ {
+ HostFile = file,
+ PageListItem = file.Item,
+ SPLimitedWebPartManager = webPartManager
+ };
+
+ action(webpartPageHost);
+ }
+ }
+ else
+ {
+ action(file);
+ }
+ }
+
+ public override void DeployModel(object modelHost, DefinitionBase model)
+ {
+ var folderHost = modelHost.WithAssertAndCast("modelHost", value => value.RequireNotNull());
+ var moduleFile = model.WithAssertAndCast("model", value => value.RequireNotNull());
+
+ if (folderHost.CurrentWebFolder != null)
+ ProcessWebModuleFile(folderHost, moduleFile);
+ else if (folderHost.CurrentContentType != null)
+ ProcessContentTypeModuleFile(folderHost, moduleFile);
+ else if (folderHost.CurrentLibraryFolder != null)
+ {
+ ProcessFile(modelHost, folderHost.CurrentLibraryFolder, moduleFile);
+ }
+ else
+ {
+ throw new ArgumentException("CurrentWebFolder/CurrentContentType/CurrentLibraryFolder should not be null");
+ }
+ }
+
+ private void ProcessContentTypeModuleFile(FolderModelHost folderHost, ModuleFileDefinition moduleFile)
+ {
+ var folder = folderHost.CurrentContentTypeFolder;
+
+ var currentFile = folder.ParentWeb.GetFile(GetSafeFileUrl(folder, moduleFile));
+
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioning,
+ Object = currentFile.Exists ? currentFile : null,
+ ObjectType = typeof(SPFile),
+ ObjectDefinition = moduleFile,
+ ModelHost = folderHost
+ });
+
+ if (moduleFile.Overwrite)
+ {
+ var file = folder.Files.Add(moduleFile.FileName, moduleFile.Content, moduleFile.Overwrite);
+
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioned,
+ Object = file,
+ ObjectType = typeof(SPFile),
+ ObjectDefinition = moduleFile,
+ ModelHost = folderHost
+ });
+ }
+ else
+ {
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioned,
+ Object = currentFile.Exists ? currentFile : null,
+ ObjectType = typeof(SPFile),
+ ObjectDefinition = moduleFile,
+ ModelHost = folderHost
+ });
+ }
+
+ folder.Update();
+ }
+
+ private void ProcessWebModuleFile(FolderModelHost folderHost, ModuleFileDefinition moduleFile)
+ {
+ var folder = folderHost.CurrentWebFolder;
+
+ var currentFile = folder.ParentWeb.GetFile(GetSafeFileUrl(folder, moduleFile));
+
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioning,
+ Object = currentFile.Exists ? currentFile : null,
+ ObjectType = typeof(SPFile),
+ ObjectDefinition = moduleFile,
+ ModelHost = folderHost
+ });
+
+ if (moduleFile.Overwrite)
+ {
+ var file = folder.Files.Add(moduleFile.FileName, moduleFile.Content, moduleFile.Overwrite);
+
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioned,
+ Object = file,
+ ObjectType = typeof(SPFile),
+ ObjectDefinition = moduleFile,
+ ModelHost = folderHost
+ });
+ }
+ else
+ {
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioned,
+ Object = currentFile.Exists ? currentFile : null,
+ ObjectType = typeof(SPFile),
+ ObjectDefinition = moduleFile,
+ ModelHost = folderHost
+ });
+ }
+
+ folder.Update();
+ }
+
+ private string GetSafeFileUrl(SPFolder folder, ModuleFileDefinition moduleFile)
+ {
+ if (folder.ServerRelativeUrl != "/")
+ return folder.ServerRelativeUrl + "/" + moduleFile.FileName;
+
+ return moduleFile.FileName;
+ }
+
+ public static void WithSafeFileOperation(
+ SPList list,
+ SPFolder folder,
+ string fileUrl,
+ string fileName,
+ byte[] fileContent,
+ bool overide,
+ Action onBeforeAction,
+ Action onAction)
+ {
+ var file = list.ParentWeb.GetFile(fileUrl);
+
+ if (onBeforeAction != null)
+ onBeforeAction(file);
+
+ // are we inside ocument libary, so that check in stuff is needed?
+ var isDocumentLibrary = list != null && list.BaseType == SPBaseType.DocumentLibrary;
+
+ if (isDocumentLibrary)
+ {
+ if (list != null && (file.Exists && file.CheckOutType != SPFile.SPCheckOutType.None))
+ file.UndoCheckOut();
+
+ if (list != null && (list.EnableMinorVersions && file.Exists && file.Level == SPFileLevel.Published))
+ {
+ file.UnPublish("Provision");
+
+ // Module file provision fails at minor version 511 #930
+ // https://github.com/SubPointSolutions/spmeta2/issues/930
+
+ // checking out .511 version will result in an exception
+ // can be cause by multiple provisions of the same file (such as on dev/test environment)
+ if (file.MinorVersion >= MaxMinorVersionCount)
+ {
+ file.Publish("Provision");
+
+ if (list.EnableModeration)
+ file.Approve("Provision");
+ }
+ }
+
+ if (list != null && (file.Exists && file.CheckOutType == SPFile.SPCheckOutType.None))
+ file.CheckOut();
+ }
+
+ SPFile newFile;
+
+ if (overide)
+ newFile = folder.Files.Add(fileName, fileContent, file.Exists);
+ else
+ newFile = file;
+
+ if (onAction != null)
+ onAction(newFile);
+
+ newFile.Update();
+
+ if (isDocumentLibrary)
+ {
+ if (list != null && (file.Exists && file.CheckOutType != SPFile.SPCheckOutType.None))
+ newFile.CheckIn("Provision");
+
+ if (list != null && (list.EnableMinorVersions))
+ newFile.Publish("Provision");
+
+ if (list != null && list.EnableModeration)
+ newFile.Approve("Provision");
+ }
+ }
+
+ public static void DeployModuleFile(SPFolder folder,
+ string fileUrl,
+ string fileName,
+ byte[] fileContent,
+ bool overwrite,
+ Action beforeProvision,
+ Action afterProvision)
+ {
+ // doc libs
+ SPList list = folder.DocumentLibrary;
+
+ // fallback for the lists assuming deployment to Forms or other places
+ if (list == null)
+ {
+ list = folder.ParentWeb.Lists[folder.ParentListId];
+ }
+
+ WithSafeFileOperation(list, folder, fileUrl, fileName, fileContent,
+ overwrite,
+ onBeforeFile =>
+ {
+ if (beforeProvision != null)
+ beforeProvision(onBeforeFile);
+ },
+ onActionFile =>
+ {
+ if (afterProvision != null)
+ afterProvision(onActionFile);
+ });
+ }
+
+ private void ProcessFile(
+ object modelHost,
+ SPFolder folder,
+ ModuleFileDefinition moduleFile)
+ {
+ DeployModuleFile(
+ folder,
+ GetSafeFileUrl(folder, moduleFile),
+ moduleFile.FileName,
+ moduleFile.Content,
+ moduleFile.Overwrite,
+ before =>
+ {
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioning,
+ Object = before.Exists ? before : null,
+ ObjectType = typeof(SPFile),
+ ObjectDefinition = moduleFile,
+ ModelHost = modelHost
+ });
+
+ },
+ after =>
+ {
+ var shouldUpdateItem = false;
+
+ if (!string.IsNullOrEmpty(moduleFile.Title))
+ {
+ after.ListItemAllFields["Title"] = moduleFile.Title;
+ shouldUpdateItem = true;
+ }
+
+ if (!string.IsNullOrEmpty(moduleFile.ContentTypeId) ||
+ !string.IsNullOrEmpty(moduleFile.ContentTypeName))
+ {
+ var list = folder.ParentWeb.Lists[folder.ParentListId];
+
+ if (!string.IsNullOrEmpty(moduleFile.ContentTypeId))
+ after.ListItemAllFields["ContentTypeId"] = ContentTypeLookupService.LookupListContentTypeById(list, moduleFile.ContentTypeId);
+
+ if (!string.IsNullOrEmpty(moduleFile.ContentTypeName))
+ after.ListItemAllFields["ContentTypeId"] = ContentTypeLookupService.LookupContentTypeByName(list, moduleFile.ContentTypeName);
+
+ shouldUpdateItem = true;
+ }
+
+ if (moduleFile.DefaultValues.Count > 0)
+ {
+ FieldLookupService.EnsureDefaultValues(after.ListItemAllFields, moduleFile.DefaultValues);
+ shouldUpdateItem = true;
+ }
+
+ FieldLookupService.EnsureValues(after.ListItemAllFields, moduleFile.Values, true);
+
+ if (shouldUpdateItem)
+ {
+ after.ListItemAllFields.Update();
+ }
+
+ InvokeOnModelEvent(this, new ModelEventArgs
+ {
+ CurrentModelNode = null,
+ Model = null,
+ EventType = ModelEventType.OnProvisioned,
+ Object = after,
+ ObjectType = typeof(SPFile),
+ ObjectDefinition = moduleFile,
+ ModelHost = modelHost
+ });
+ });
+ }
+
+ private void EnsureDefaultValues(SPListItem newFileItem, ModuleFileDefinition definition)
+ {
+ foreach (var defaultValue in definition.DefaultValues)
+ {
+ if (!string.IsNullOrEmpty(defaultValue.FieldName))
+ {
+ if (newFileItem.Fields.ContainsFieldWithStaticName(defaultValue.FieldName))
+ {
+ if (newFileItem[defaultValue.FieldName] == null)
+ newFileItem[defaultValue.FieldName] = defaultValue.Value;
+ }
+ }
+ else if (defaultValue.FieldId.HasValue && defaultValue.FieldId != default(Guid))
+ {
+ if (newFileItem.Fields.OfType().Any(f => f.Id == defaultValue.FieldId.Value))
+ {
+ if (newFileItem[defaultValue.FieldId.Value] == null)
+ newFileItem[defaultValue.FieldId.Value] = defaultValue.Value;
+ }
+ }
+ }
+ }
+
+
+
+
+
+ #endregion
+ }
+}
diff --git a/SPMeta2/SPMeta2.SSOM/Properties/AssemblyInfo.cs b/SPMeta2/SPMeta2.SSOM/Properties/AssemblyInfo.cs
index dcbd7f71e..995e6625d 100644
--- a/SPMeta2/SPMeta2.SSOM/Properties/AssemblyInfo.cs
+++ b/SPMeta2/SPMeta2.SSOM/Properties/AssemblyInfo.cs
@@ -33,4 +33,4 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.2.16305.1232")]
+[assembly: AssemblyFileVersion("1.2.17040.0900")]
diff --git a/SPMeta2/SPMeta2.SSOM/Services/SSOMTokenReplacementService.cs b/SPMeta2/SPMeta2.SSOM/Services/SSOMTokenReplacementService.cs
index 543f3ddbb..a4da71e52 100644
--- a/SPMeta2/SPMeta2.SSOM/Services/SSOMTokenReplacementService.cs
+++ b/SPMeta2/SPMeta2.SSOM/Services/SSOMTokenReplacementService.cs
@@ -66,7 +66,12 @@ public override TokenReplacementResult ReplaceTokens(TokenReplacementContext con
foreach (var tokenInfo in TokenProcessInfos)
{
if (!string.IsNullOrEmpty(result.Value))
- result.Value = tokenInfo.RegEx.Replace(result.Value, ResolveToken(context.Context, tokenInfo.Name));
+ {
+ result.Value = tokenInfo.RegEx.Replace(result.Value, ResolveToken(context, context.Context, tokenInfo.Name));
+
+ result.Value = result.Value.Replace(@"//", @"/");
+ result.Value = result.Value.Replace(@"\\", @"\");
+ }
}
if (OnTokenReplaced != null)
@@ -80,10 +85,13 @@ public override TokenReplacementResult ReplaceTokens(TokenReplacementContext con
return result;
}
- private string ResolveToken(object contextObject, string token)
+ private string ResolveToken(TokenReplacementContext tokenContext, object contextObject, string token)
{
if (string.Equals(token, "~sitecollection", StringComparison.CurrentCultureIgnoreCase))
{
+ if (tokenContext.IsSiteRelativeUrl)
+ return "/";
+
var site = ExtractSite(contextObject);
if (site.ServerRelativeUrl == "/")
@@ -96,6 +104,11 @@ private string ResolveToken(object contextObject, string token)
{
var web = ExtractWeb(contextObject);
+ if (tokenContext.IsSiteRelativeUrl)
+ {
+ return "/" + web.ServerRelativeUrl.Replace(web.Site.ServerRelativeUrl, string.Empty);
+ }
+
if (web.ServerRelativeUrl == "/")
return string.Empty;
diff --git a/SPMeta2/SPMeta2.Standard/Properties/AssemblyInfo.cs b/SPMeta2/SPMeta2.Standard/Properties/AssemblyInfo.cs
index 57f95567c..9590ac290 100644
--- a/SPMeta2/SPMeta2.Standard/Properties/AssemblyInfo.cs
+++ b/SPMeta2/SPMeta2.Standard/Properties/AssemblyInfo.cs
@@ -33,4 +33,4 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.2.16305.1232")]
+[assembly: AssemblyFileVersion("1.2.17040.0900")]
diff --git a/SPMeta2/SPMeta2/Attributes/Regression/ExpectRequiredIntRange.cs b/SPMeta2/SPMeta2/Attributes/Regression/ExpectRequiredIntRange.cs
new file mode 100644
index 000000000..b08d2de51
--- /dev/null
+++ b/SPMeta2/SPMeta2/Attributes/Regression/ExpectRequiredIntRange.cs
@@ -0,0 +1,17 @@
+using System;
+
+namespace SPMeta2.Attributes.Regression
+{
+ ///
+ /// Use by validation to allow integer range of allowed propeties.
+ ///
+ public class ExpectRequiredIntRange : Attribute
+ {
+ #region properties
+
+ public int MinValue { get; set; }
+ public int MaxValue { get; set; }
+
+ #endregion
+ }
+}
diff --git a/SPMeta2/SPMeta2/Definitions/ListDefinition.cs b/SPMeta2/SPMeta2/Definitions/ListDefinition.cs
index 9a071b6bf..4686f4e5c 100644
--- a/SPMeta2/SPMeta2/Definitions/ListDefinition.cs
+++ b/SPMeta2/SPMeta2/Definitions/ListDefinition.cs
@@ -129,6 +129,7 @@ public ListDefinition()
///
[ExpectValidation]
[ExpectRequired(GroupName = "List Template")]
+ //[ExpectRequiredIntRange(MinValue = 0, MaxValue = int.MaxValue)]
[DataMember]
public int TemplateType { get; set; }
diff --git a/SPMeta2/SPMeta2/Definitions/ListViewDefinition.cs b/SPMeta2/SPMeta2/Definitions/ListViewDefinition.cs
index e7465f416..d3430b821 100644
--- a/SPMeta2/SPMeta2/Definitions/ListViewDefinition.cs
+++ b/SPMeta2/SPMeta2/Definitions/ListViewDefinition.cs
@@ -154,6 +154,14 @@ public ListViewDefinition()
[DataMember]
public bool IsDefault { get; set; }
+ ///
+ /// Gets or sets whether the list view should include parent folder item.
+ ///
+ [ExpectValidation]
+ [ExpectUpdate]
+ [DataMember]
+ public bool? IncludeRootFolder { get; set; }
+
[ExpectValidation]
[ExpectUpdate]
[DataMember]
diff --git a/SPMeta2/SPMeta2/Definitions/MasterPageSettings.cs b/SPMeta2/SPMeta2/Definitions/MasterPageSettings.cs
index 2fcd1a47c..588d40198 100644
--- a/SPMeta2/SPMeta2/Definitions/MasterPageSettings.cs
+++ b/SPMeta2/SPMeta2/Definitions/MasterPageSettings.cs
@@ -30,6 +30,8 @@ public class MasterPageSettingsDefinition : DefinitionBase
[ExpectValidation]
[DataMember]
[IdentityKey]
+ [SiteCollectionTokenCapability]
+ [WebTokenCapability]
public string SiteMasterPageUrl { get; set; }
[DataMember]
@@ -37,7 +39,9 @@ public class MasterPageSettingsDefinition : DefinitionBase
[ExpectValidation]
[DataMember]
- [IdentityKey]
+ [IdentityKey]
+ [SiteCollectionTokenCapability]
+ [WebTokenCapability]
public string SystemMasterPageUrl { get; set; }
[DataMember]
diff --git a/SPMeta2/SPMeta2/Properties/AssemblyInfo.cs b/SPMeta2/SPMeta2/Properties/AssemblyInfo.cs
index 0eb33d088..7d044885f 100644
--- a/SPMeta2/SPMeta2/Properties/AssemblyInfo.cs
+++ b/SPMeta2/SPMeta2/Properties/AssemblyInfo.cs
@@ -32,4 +32,4 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.2.16305.1232")]
+[assembly: AssemblyFileVersion("1.2.17040.0900")]
diff --git a/SPMeta2/SPMeta2/SPMeta2.csproj b/SPMeta2/SPMeta2/SPMeta2.csproj
index b4494e356..82a56a06d 100644
--- a/SPMeta2/SPMeta2/SPMeta2.csproj
+++ b/SPMeta2/SPMeta2/SPMeta2.csproj
@@ -116,6 +116,7 @@
+
diff --git a/SPMeta2/SPMeta2/Services/ServiceModelHandlers/DefaultRequiredPropertiesModelHandler.cs b/SPMeta2/SPMeta2/Services/ServiceModelHandlers/DefaultRequiredPropertiesModelHandler.cs
index 5ce7194fd..517eb6bc7 100644
--- a/SPMeta2/SPMeta2/Services/ServiceModelHandlers/DefaultRequiredPropertiesModelHandler.cs
+++ b/SPMeta2/SPMeta2/Services/ServiceModelHandlers/DefaultRequiredPropertiesModelHandler.cs
@@ -1,185 +1,214 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
-using SPMeta2.Attributes.Regression;
-using SPMeta2.Definitions;
-using SPMeta2.Exceptions;
-using SPMeta2.Utils;
-
-namespace SPMeta2.Services.ServiceModelHandlers
-{
- public class DefaultRequiredPropertiesModelHandler : ServiceModelHandlerBase
- {
- #region classes
-
- protected class PropResult
- {
- public string Name { get; set; }
- public bool IsValid { get; set; }
- }
-
- #endregion
-
- #region methods
-
- public override void DeployModel(object modelHost, DefinitionBase model)
- {
- //var aggregateException = new c();
- var exceptions = new List();
-
- var props = ReflectionUtils.GetPropertiesWithCustomAttribute(model, true);
-
- var requiredPropsGroups = props
- .GroupBy(g => (g.GetCustomAttributes(typeof(ExpectRequired), true).First() as ExpectRequired).GroupName);
-
- foreach (var group in requiredPropsGroups)
- {
- // all set is requred
- if (string.IsNullOrEmpty(group.Key))
- {
- var isAllValid = AllOfThem(model, group.ToList());
-
- if (isAllValid.Count > 0)
- {
- exceptions.AddRange(isAllValid);
- }
- }
- else
- {
- // skip 'Web part content' for typed web part definitions
- // a big todo
-
- if (group.Key == "Web part content" && (model.GetType() != typeof(WebPartDefinition)))
- continue;
-
- var oneOfThem = OneOfThem(model, group.ToList());
-
- if (!oneOfThem)
- {
- var ex = new SPMeta2ModelValidationException(
- string.Format("One of the properties with [{0}] attribute should be set. Definition:[{1}]",
- group.Key, model))
- {
- Definition = model
- };
-
- exceptions.Add(ex);
- }
- }
- }
-
- if (exceptions.Count > 0)
- {
- throw new SPMeta2AggregateException("Required properties validation error",
- exceptions.OfType());
- }
- }
-
- private bool OneOfThem(object obj, List props)
- {
- var result = ValidateProps(obj, props);
-
- return result.Any(p => p.IsValid);
- }
-
- private List AllOfThem(object obj, List props)
- {
- var r = new List();
-
- var result = ValidateProps(obj, props);
-
- foreach (var res in result.Where(rr => !rr.IsValid))
- {
- r.Add(new SPMeta2ModelValidationException(string.Format("Property [{0}] is not valid.",
- res.Name))
- {
- Definition = obj as DefinitionBase
- });
- }
-
- return r;
- }
-
- protected List ValidateProps(object obj, List props)
- {
- var results = new List();
-
- foreach (var prop in props)
- {
- var result = new PropResult();
-
- result.Name = prop.Name;
- result.IsValid = true;
-
- if (prop.PropertyType == typeof(string))
- {
- var value = prop.GetValue(obj, null) as string;
-
- if (!string.IsNullOrEmpty(value))
- { }
- else
- {
- result.IsValid = false;
- }
- }
- else if (prop.PropertyType == typeof(Guid) ||
- prop.PropertyType == typeof(Guid?))
- {
- var value = prop.GetValue(obj, null) as Guid?;
-
- if (value.HasValue && value.Value != default(Guid))
- { }
- else
- {
- result.IsValid = false;
- }
- }
- else if (prop.PropertyType == typeof(int) ||
- prop.PropertyType == typeof(int?))
- {
- var value = prop.GetValue(obj, null) as int?;
-
- if (value.HasValue && value.Value > 0)
- { }
- else
- {
- result.IsValid = false;
- }
- }
- else if (prop.PropertyType == typeof(byte[]))
- {
- var value = prop.GetValue(obj, null) as byte[];
-
- if (value != null && value.Count() > 0)
- { }
- else
- {
- result.IsValid = false;
- }
- }
- else if (prop.PropertyType == typeof(object))
- {
- var value = prop.GetValue(obj, null) as object;
-
- if (value != null)
- { }
- else
- {
- result.IsValid = false;
- }
- }
- else
- {
- throw new NotImplementedException();
- }
-
- results.Add(result);
- }
-
- return results;
- }
-
- #endregion
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using SPMeta2.Attributes.Regression;
+using SPMeta2.Definitions;
+using SPMeta2.Exceptions;
+using SPMeta2.Utils;
+
+namespace SPMeta2.Services.ServiceModelHandlers
+{
+ public class DefaultRequiredPropertiesModelHandler : ServiceModelHandlerBase
+ {
+ #region classes
+
+ protected class PropResult
+ {
+ public string Name { get; set; }
+ public bool IsValid { get; set; }
+ }
+
+ #endregion
+
+ #region methods
+
+ public override void DeployModel(object modelHost, DefinitionBase model)
+ {
+ //var aggregateException = new c();
+ var exceptions = new List();
+
+ var props = ReflectionUtils.GetPropertiesWithCustomAttribute(model, true);
+
+ var requiredPropsGroups = props
+ .GroupBy(g => (g.GetCustomAttributes(typeof(ExpectRequired), true).First() as ExpectRequired).GroupName);
+
+ foreach (var group in requiredPropsGroups)
+ {
+ // all set is requred
+ if (string.IsNullOrEmpty(group.Key))
+ {
+ var isAllValid = AllOfThem(model, group.ToList());
+
+ if (isAllValid.Count > 0)
+ {
+ exceptions.AddRange(isAllValid);
+ }
+ }
+ else
+ {
+ // skip 'Web part content' for typed web part definitions
+ // a big todo
+
+ if (group.Key == "Web part content" && (model.GetType() != typeof(WebPartDefinition)))
+ continue;
+
+ var oneOfThem = OneOfThem(model, group.ToList());
+
+ if (!oneOfThem)
+ {
+ var ex = new SPMeta2ModelValidationException(
+ string.Format("One of the properties with [{0}] attribute should be set. Definition:[{1}]",
+ group.Key, model))
+ {
+ Definition = model
+ };
+
+ exceptions.Add(ex);
+ }
+ }
+ }
+
+ if (exceptions.Count > 0)
+ {
+ throw new SPMeta2AggregateException("Required properties validation error",
+ exceptions.OfType());
+ }
+ }
+
+ private bool OneOfThem(object obj, List props)
+ {
+ var result = ValidateProps(obj, props);
+
+ return result.Any(p => p.IsValid);
+ }
+
+ private List AllOfThem(object obj, List props)
+ {
+ var r = new List();
+
+ var result = ValidateProps(obj, props);
+
+ foreach (var res in result.Where(rr => !rr.IsValid))
+ {
+ r.Add(new SPMeta2ModelValidationException(string.Format("Property [{0}] is not valid.",
+ res.Name))
+ {
+ Definition = obj as DefinitionBase
+ });
+ }
+
+ return r;
+ }
+
+ protected List ValidateProps(object obj, List props)
+ {
+ var results = new List();
+
+ foreach (var prop in props)
+ {
+ var result = new PropResult();
+
+ result.Name = prop.Name;
+ result.IsValid = true;
+
+
+ // Some properties can be 0, so we need to pass them as successes
+
+ // Can't provision list with NoListTemplate template type #944
+ // https://github.com/SubPointSolutions/spmeta2/issues/944
+
+
+
+ if (prop.PropertyType == typeof(string))
+ {
+ var value = prop.GetValue(obj, null) as string;
+
+ if (!string.IsNullOrEmpty(value))
+ { }
+ else
+ {
+ result.IsValid = false;
+ }
+ }
+ else if (prop.PropertyType == typeof(Guid) ||
+ prop.PropertyType == typeof(Guid?))
+ {
+ var value = prop.GetValue(obj, null) as Guid?;
+
+ if (value.HasValue && value.Value != default(Guid))
+ { }
+ else
+ {
+ result.IsValid = false;
+ }
+ }
+ else if (prop.PropertyType == typeof(int) ||
+ prop.PropertyType == typeof(int?))
+ {
+ var value = prop.GetValue(obj, null) as int?;
+
+ // any valud range?
+ // ExpectRequiredIntRange
+
+ var allowedRangeProperty = prop.GetCustomAttributes(typeof(ExpectRequiredIntRange), true)
+ .FirstOrDefault() as ExpectRequiredIntRange;
+
+ if (allowedRangeProperty != null)
+ {
+ var minValue = allowedRangeProperty.MinValue;
+ var maxValue = allowedRangeProperty.MaxValue;
+
+ if (value.HasValue && (value.Value >= minValue && value.Value <= maxValue))
+ { }
+ else
+ {
+ result.IsValid = false;
+ }
+ }
+ else
+ {
+ if (value.HasValue && value.Value > 0)
+ { }
+ else
+ {
+ result.IsValid = false;
+ }
+ }
+ }
+ else if (prop.PropertyType == typeof(byte[]))
+ {
+ var value = prop.GetValue(obj, null) as byte[];
+
+ if (value != null && value.Count() > 0)
+ { }
+ else
+ {
+ result.IsValid = false;
+ }
+ }
+ else if (prop.PropertyType == typeof(object))
+ {
+ var value = prop.GetValue(obj, null) as object;
+
+ if (value != null)
+ { }
+ else
+ {
+ result.IsValid = false;
+ }
+ }
+ else
+ {
+ throw new NotImplementedException();
+ }
+
+ results.Add(result);
+ }
+
+ return results;
+ }
+
+ #endregion
+ }
+}
diff --git a/SPMeta2/SPMeta2/Services/TokenReplacementServiceBase.cs b/SPMeta2/SPMeta2/Services/TokenReplacementServiceBase.cs
index b4642baa4..f2c8ae945 100644
--- a/SPMeta2/SPMeta2/Services/TokenReplacementServiceBase.cs
+++ b/SPMeta2/SPMeta2/Services/TokenReplacementServiceBase.cs
@@ -10,6 +10,8 @@ public class TokenReplacementContext
public object Context { get; set; }
public string Value { get; set; }
+ public bool IsSiteRelativeUrl { get; set; }
+
#endregion
}
diff --git a/SPMeta2/SPMeta2/Syntax/Default/ContentTypeDefinitionSyntax.cs b/SPMeta2/SPMeta2/Syntax/Default/ContentTypeDefinitionSyntax.cs
index dc22e4c0c..c65e0b847 100644
--- a/SPMeta2/SPMeta2/Syntax/Default/ContentTypeDefinitionSyntax.cs
+++ b/SPMeta2/SPMeta2/Syntax/Default/ContentTypeDefinitionSyntax.cs
@@ -72,11 +72,13 @@ public static bool IsChildOf(this ContentTypeDefinition childContentTypeDefiniti
public static bool IsChildOf(string childId, string parentId)
{
- if (parentId.Length < childId.Length)
- return false;
-
- for (int i = 0; i < childId.Length; i++)
- if (childId[i] != parentId[i])
+ // parent content type ID is bigger than the childID?
+ if (parentId.Length > childId.Length)
+ return false;
+
+ // comparing up to the parent ID length
+ for (int i = 0; i < parentId.Length; i++)
+ if (char.ToUpperInvariant(childId[i]) != char.ToUpperInvariant(parentId[i]))
return false;
return true;
diff --git a/SPMeta2/SubPointSolutions.Docs/Properties/AssemblyInfo.cs b/SPMeta2/SubPointSolutions.Docs/Properties/AssemblyInfo.cs
index 2d66eb0e5..c0e1a5445 100644
--- a/SPMeta2/SubPointSolutions.Docs/Properties/AssemblyInfo.cs
+++ b/SPMeta2/SubPointSolutions.Docs/Properties/AssemblyInfo.cs
@@ -33,4 +33,4 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.16305.1232")]
+[assembly: AssemblyFileVersion("1.0.17040.0900")]