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")]