protected override string GetWebpartXmlDefinition(
            ListItemModelHost listItemModelHost,
            WebPartDefinitionBase webPartModel)
        {
            var typedDefinition = webPartModel.WithAssertAndCast <SilverlightWebPartDefinition>("model", value => value.RequireNotNull());
            var wpXml           = WebpartXmlExtensions.LoadWebpartXmlDocument(this.ProcessCommonWebpartProperties(BuiltInWebPartTemplates.SilverlightWebPart, webPartModel));

            if (!string.IsNullOrEmpty(typedDefinition.Url))
            {
                var linkValue = typedDefinition.Url;

                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Original Url: [{0}]", linkValue);

                linkValue = TokenReplacementService.ReplaceTokens(new TokenReplacementContext
                {
                    Value   = linkValue,
                    Context = listItemModelHost
                }).Value;

                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Token replaced Url: [{0}]", linkValue);

                wpXml.SetOrUpdateProperty("Url", linkValue);
            }

            if (!string.IsNullOrEmpty(typedDefinition.CustomInitParameters))
            {
                wpXml.SetOrUpdateProperty("CustomInitParameters", typedDefinition.CustomInitParameters);
            }

            return(wpXml.ToString());
        }
Esempio n. 2
0
        protected SPFolder GetListFolder(FolderModelHost folderModelHost, FolderDefinition folderModel)
        {
            var list = folderModelHost.CurrentList;
            var currentFolderItem = folderModelHost.CurrentListItem;

            var serverRelativeUrl = folderModelHost.CurrentListItem == null
                                                ? list.RootFolder.ServerRelativeUrl
                                                : folderModelHost.CurrentListItem.Folder.ServerRelativeUrl;

            var currentUrl = serverRelativeUrl + "/" + folderModel.Name;

            TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Loading list folder with URL: [{0}]", currentUrl);

            var folder = folderModelHost.CurrentList.ParentWeb.GetFolder(currentUrl);

            if (folder != null && folder.Exists)
            {
                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "List folder with URL does exist: [{0}]", currentUrl);
            }
            else
            {
                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "List folder with URL does not exist: [{0}]", currentUrl);
            }

            return(folder);
        }
        protected override string GetWebpartXmlDefinition(ListItemModelHost listItemModelHost, WebPartDefinitionBase webPartModel)
        {
            var typedModel = webPartModel.WithAssertAndCast <ContentEditorWebPartDefinition>("model", value => value.RequireNotNull());

            var wpXml = WebpartXmlExtensions.LoadWebpartXmlDocument(BuiltInWebPartTemplates.ContentEditorWebPart);

            if (!string.IsNullOrEmpty(typedModel.Content))
            {
                wpXml.SetOrUpdateContentEditorWebPartProperty("Content", typedModel.Content, true);
            }

            if (!string.IsNullOrEmpty(typedModel.ContentLink))
            {
                var urlValue = typedModel.ContentLink ?? string.Empty;

                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Original value: [{0}]", urlValue);

                urlValue = TokenReplacementService.ReplaceTokens(new TokenReplacementContext
                {
                    Value   = urlValue,
                    Context = listItemModelHost
                }).Value;

                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Token replaced value: [{0}]", urlValue);

                wpXml.SetOrUpdateContentEditorWebPartProperty("ContentLink", urlValue);
            }

            return(wpXml.ToString());
        }
        protected override string GetWebpartXmlDefinition(ListItemModelHost listItemModelHost, WebPartDefinitionBase webPartModel)
        {
            var definition = webPartModel.WithAssertAndCast <PageViewerWebPartDefinition>("model", value => value.RequireNotNull());
            var wpXml      = WebpartXmlExtensions
                             .LoadWebpartXmlDocument(BuiltInWebPartTemplates.PageViewerWebPart);

            if (!string.IsNullOrEmpty(definition.ContentLink))
            {
                var contentLinkValue = definition.ContentLink ?? string.Empty;

                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Original contentLinkValue: [{0}]", contentLinkValue);

                contentLinkValue = TokenReplacementService.ReplaceTokens(new TokenReplacementContext
                {
                    Value   = contentLinkValue,
                    Context = listItemModelHost.HostClientContext
                }).Value;

                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Token replaced contentLinkValue: [{0}]", contentLinkValue);

                wpXml.SetOrUpdatePageViewerWebPartProperty("ContentLink", contentLinkValue);
            }

            if (!string.IsNullOrEmpty(definition.SourceType))
            {
                wpXml.SetOrUpdatePageViewerWebPartProperty("SourceType", definition.SourceType);
            }

            return(wpXml.ToString());
        }
Esempio n. 5
0
        private void DeployWelcomePage(object modelHost, DefinitionBase model, SPFolder folder, WelcomePageDefinition welcomePgaeModel)
        {
            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = folder,
                ObjectType       = typeof(SPFolder),
                ObjectDefinition = welcomePgaeModel,
                ModelHost        = modelHost
            });

            TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Changing welcome page to: [{0}]", welcomePgaeModel.Url);

            // https://github.com/SubPointSolutions/spmeta2/issues/431
            folder.WelcomePage = UrlUtility.RemoveStartingSlash(welcomePgaeModel.Url);

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

            folder.Update();
        }
        private void ProcessRoleInheritance(object modelHost, SPSecurableObject securableObject, ResetRoleInheritanceDefinition breakRoleInheritanceModel)
        {
            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = securableObject,
                ObjectType       = typeof(SPSecurableObject),
                ObjectDefinition = breakRoleInheritanceModel,
                ModelHost        = modelHost
            });

            if (securableObject.HasUniqueRoleAssignments)
            {
                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "HasUniqueRoleAssignments is TRUE. Resetting role inheritance", null);
                securableObject.ResetRoleInheritance();
            }

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioned,
                Object           = securableObject,
                ObjectType       = typeof(SPSecurableObject),
                ObjectDefinition = breakRoleInheritanceModel,
                ModelHost        = modelHost
            });
        }
Esempio n. 7
0
        protected File GetWikiPageFile(Web web, Folder folder, WikiPageDefinition wikiPageModel, out string newWikiPageUrl)
        {
            var context = folder.Context;

            //if (!string.IsNullOrEmpty(wikiPageModel.FolderUrl))
            //    throw new Exception("FolderUrl property is not supported yet!");

            var pageName = GetSafeWikiPageFileName(wikiPageModel);

            context.Load(folder, l => l.ServerRelativeUrl);
            context.ExecuteQueryWithTrace();

            newWikiPageUrl = folder.ServerRelativeUrl + "/" + pageName;

            TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Resolving file with URL: [{0}]", newWikiPageUrl);
            var file = web.GetFileByServerRelativeUrl(newWikiPageUrl);

            context.Load(file, f => f.Exists);
            context.ExecuteQueryWithTrace();

            if (file.Exists)
            {
                TraceService.Verbose((int)LogEventId.ModelProvisionCoreCall, "Returning existing file");
                return(file);
            }

            TraceService.Verbose((int)LogEventId.ModelProvisionCoreCall, "File does not exist. Returning NULL");

            return(null);
        }
Esempio n. 8
0
        public void RegisterModelHandler(ModelHandlerBase modelHandlerType)
        {
            TraceService.VerboseFormat((int)LogEventId.CoreCalls,
                                       "RegisterModelHandler of type:[{0}] for target type:[{1}]",
                                       new object[]
            {
                modelHandlerType.GetType(),
                modelHandlerType.TargetType
            });

            if (!ModelHandlers.ContainsKey(modelHandlerType.TargetType))
            {
                TraceService.VerboseFormat((int)LogEventId.CoreCalls,
                                           "Model handler for type [{0}] has not been registered yet. Registering.",
                                           new object[] { modelHandlerType.GetType() });

                ModelHandlers.Add(modelHandlerType.TargetType, modelHandlerType);
            }
            else
            {
                TraceService.VerboseFormat((int)LogEventId.CoreCalls,
                                           "Model handler for type [{0}] has been registered. Skipping.",
                                           new object[] { modelHandlerType.GetType() });
            }
        }
Esempio n. 9
0
        protected override void ProcessWebpartProperties(WebPart webpartInstance, WebPartDefinition webpartModel)
        {
            base.ProcessWebpartProperties(webpartInstance, webpartModel);

            var typedWebpart    = webpartInstance.WithAssertAndCast <SilverlightWebPart>("webpartInstance", value => value.RequireNotNull());
            var typedDefinition = webpartModel.WithAssertAndCast <SilverlightWebPartDefinition>("webpartModel", value => value.RequireNotNull());

            if (!string.IsNullOrEmpty(typedDefinition.Url))
            {
                var linkValue = typedDefinition.Url;

                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Original Url: [{0}]", linkValue);

                linkValue = TokenReplacementService.ReplaceTokens(new TokenReplacementContext
                {
                    Value   = linkValue,
                    Context = CurrentHost.HostFile.Web
                }).Value;

                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Token replaced Url: [{0}]", linkValue);

                typedWebpart.Url = linkValue;
            }

            if (!string.IsNullOrEmpty(typedDefinition.CustomInitParameters))
            {
                typedWebpart.CustomInitParameters = typedDefinition.CustomInitParameters;
            }
        }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
        protected SPGroup ResolveSecurityGroup(SPWeb web, SecurityGroupLinkDefinition securityGroupLinkModel)
        {
            SPGroup securityGroup = null;

            if (securityGroupLinkModel.IsAssociatedMemberGroup)
            {
                TraceService.Verbose((int)LogEventId.ModelProvisionCoreCall, "IsAssociatedMemberGroup = true. Resolving AssociatedMemberGroup");
                securityGroup = web.AssociatedMemberGroup;
            }
            else if (securityGroupLinkModel.IsAssociatedOwnerGroup)
            {
                TraceService.Verbose((int)LogEventId.ModelProvisionCoreCall, "IsAssociatedOwnerGroup = true. Resolving IsAssociatedOwnerGroup");
                securityGroup = web.AssociatedOwnerGroup;
            }
            else if (securityGroupLinkModel.IsAssociatedVisitorGroup)
            {
                TraceService.Verbose((int)LogEventId.ModelProvisionCoreCall, "IsAssociatedVisitorGroup = true. Resolving IsAssociatedVisitorGroup");
                securityGroup = web.AssociatedVisitorGroup;
            }
            else if (!string.IsNullOrEmpty(securityGroupLinkModel.SecurityGroupName))
            {
                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Resolving group by name: [{0}]", securityGroupLinkModel.SecurityGroupName);
                securityGroup = web.SiteGroups[securityGroupLinkModel.SecurityGroupName];
            }
            else
            {
                TraceService.Error((int)LogEventId.ModelProvisionCoreCall, "IsAssociatedMemberGroup/IsAssociatedOwnerGroup/IsAssociatedVisitorGroup/SecurityGroupName should be defined. Throwing SPMeta2Exception");

                throw new SPMeta2Exception("securityGroupLinkModel");
            }

            return(securityGroup);
        }
        internal static TermStore FindTermStore(SPSite site,
                                                string termStorename, Guid?termStoreId, bool?useDefaultSiteCollectionTermStore)
        {
            var       session   = new TaxonomySession(site);
            TermStore termStore = null;

            if (useDefaultSiteCollectionTermStore.HasValue && useDefaultSiteCollectionTermStore.Value == true)
            {
                TraceService.Verbose((int)LogEventId.ModelProvisionCoreCall, "Resolving Term Store as useDefaultSiteCollectionTermStore");
                termStore = session.DefaultSiteCollectionTermStore;
            }
            else if (termStoreId.HasGuidValue())
            {
                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Resolving Term Store by ID: [{0}]", termStoreId.Value);
                termStore = session.TermStores[termStoreId.Value];
            }
            else if (!string.IsNullOrEmpty(termStorename))
            {
                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Resolving Term Store by Name: [{0}]", termStorename);
                termStore = session.TermStores[termStorename];
            }


            return(termStore);
        }
Esempio n. 13
0
        protected override void ProcessWebpartProperties(WebPart webpartInstance, WebPartDefinition webpartModel)
        {
            base.ProcessWebpartProperties(webpartInstance, webpartModel);

            var typedWebpart = webpartInstance.WithAssertAndCast <PageViewerWebPart>("webpartInstance", value => value.RequireNotNull());
            var definition   = webpartModel.WithAssertAndCast <PageViewerWebPartDefinition>("webpartModel", value => value.RequireNotNull());

            if (!string.IsNullOrEmpty(definition.ContentLink))
            {
                var contentLinkValue = definition.ContentLink ?? string.Empty;

                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Original contentLinkValue: [{0}]", contentLinkValue);

                contentLinkValue = TokenReplacementService.ReplaceTokens(new TokenReplacementContext
                {
                    Value   = contentLinkValue,
                    Context = CurrentHost.PageListItem.Web
                }).Value;

                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Token replaced contentLinkValue: [{0}]", contentLinkValue);

                typedWebpart.ContentLink = contentLinkValue;
            }

            if (!string.IsNullOrEmpty(definition.SourceType))
            {
                typedWebpart.SourceType = (PathPattern)Enum.Parse(typeof(PathPattern), definition.SourceType);
            }
        }
Esempio n. 14
0
        private void DeployWelcomePage(object modelHost, DefinitionBase model, SPFolder folder, WelcomePageDefinition welcomePgaeModel)
        {
            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = folder,
                ObjectType       = typeof(SPFolder),
                ObjectDefinition = welcomePgaeModel,
                ModelHost        = modelHost
            });

            TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Changing welcome page to: [{0}]", welcomePgaeModel.Url);
            folder.WelcomePage = welcomePgaeModel.Url;

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

            folder.Update();
        }
Esempio n. 15
0
        protected TermStore FindTermStore(SiteModelHost siteModelHost, TaxonomyTermStoreDefinition termStoreModel)
        {
            var site = siteModelHost.HostSite;

            var       session   = new TaxonomySession(site);
            TermStore termStore = null;

            if (termStoreModel.UseDefaultSiteCollectionTermStore == true)
            {
                TraceService.Verbose((int)LogEventId.ModelProvisionCoreCall, "Resolving Term Store as useDefaultSiteCollectionTermStore");
                termStore = session.DefaultSiteCollectionTermStore;
            }
            else if (termStoreModel.Id.HasValue && termStoreModel.Id != default(Guid))
            {
                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Resolving Term Store by ID: [{0}]", termStoreModel.Id);
                termStore = session.TermStores[termStoreModel.Id.Value];
            }
            else if (!string.IsNullOrEmpty(termStoreModel.Name))
            {
                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Resolving Term Store by Name: [{0}]", termStoreModel.Name);
                termStore = session.TermStores[termStoreModel.Name];
            }


            return(termStore);
        }
Esempio n. 16
0
        protected Folder GetLibraryFolder(FolderModelHost folderModelHost, FolderDefinition folderModel)
        {
            var parentFolder = folderModelHost.CurrentLibraryFolder;
            var context      = parentFolder.Context;

            context.Load(parentFolder, f => f.Folders);
            context.ExecuteQueryWithTrace();

            // dirty stuff, needs to be rewritten
            var currentFolder = parentFolder
                                .Folders
                                .OfType <Folder>()
                                .FirstOrDefault(f => f.Name == folderModel.Name);

            if (currentFolder != null)
            {
                context.Load(currentFolder, f => f.Name);
                context.ExecuteQueryWithTrace();

                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Library folder with name does exist: [{0}]", folderModel.Name);
            }
            else
            {
                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Library folder with name does not exist: [{0}]", folderModel.Name);
            }

            return(currentFolder);
        }
Esempio n. 17
0
        private void ProcessRoleInheritance(object modelHost, SecurableObject securableObject, BreakRoleInheritanceDefinition breakRoleInheritanceModel)
        {
            var context = securableObject.Context;

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

            if (!securableObject.IsObjectPropertyInstantiated("HasUniqueRoleAssignments"))
            {
                context.Load(securableObject, s => s.HasUniqueRoleAssignments);
                context.ExecuteQueryWithTrace();
            }

            if (!securableObject.HasUniqueRoleAssignments)
            {
                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall,
                                           "HasUniqueRoleAssignments is FALSE. Breaking role inheritance with CopyRoleAssignments: [{0}] and ClearSubscopes: [{1}]",
                                           new object[]
                {
                    breakRoleInheritanceModel.CopyRoleAssignments,
                    breakRoleInheritanceModel.ClearSubscopes
                });

                securableObject.BreakRoleInheritance(breakRoleInheritanceModel.CopyRoleAssignments, breakRoleInheritanceModel.ClearSubscopes);
                context.ExecuteQueryWithTrace();
            }

            if (breakRoleInheritanceModel.ForceClearSubscopes)
            {
                TraceService.Verbose((int)LogEventId.ModelProvisionCoreCall, "ForceClearSubscopes is TRUE. Removing all role assignments.");

                context.Load(securableObject.RoleAssignments);
                context.ExecuteQueryWithTrace();

                while (securableObject.RoleAssignments.Count > 0)
                {
                    securableObject.RoleAssignments[0].DeleteObject();
                }
            }

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioned,
                Object           = securableObject,
                ObjectType       = typeof(SecurableObject),
                ObjectDefinition = breakRoleInheritanceModel,
                ModelHost        = modelHost
            });
        }
Esempio n. 18
0
        protected SPUserSolution FindExistingSolution(SiteModelHost siteModelHost,
                                                      SandboxSolutionDefinition sandboxSolutionDefinition)
        {
            TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Resolving sandbox solution by SolutionId: [{0}]", sandboxSolutionDefinition.SolutionId);

            return(siteModelHost.HostSite.Solutions.OfType <SPUserSolution>()
                   .FirstOrDefault(f => f.SolutionId == sandboxSolutionDefinition.SolutionId));
        }
Esempio n. 19
0
        private Folder GetListFolder(FolderModelHost folderModelHost, FolderDefinition folderModel,
                                     out string serverRelativeUrl)
        {
            var list    = folderModelHost.CurrentList;
            var context = list.Context;

            context.Load(list, l => l.RootFolder);
            context.Load(list, l => l.ParentWeb);

#if NET35
            throw new SPMeta2NotImplementedException("Not implemented for SP2010 - https://github.com/SubPointSolutions/spmeta2/issues/766");
#endif

#if !NET35
            if (folderModelHost.CurrentListItem != null)
            {
                context.Load(folderModelHost.CurrentListItem, l => l.Folder);
            }

            context.ExecuteQueryWithTrace();

            serverRelativeUrl = folderModelHost.CurrentListItem == null
                                                ? list.RootFolder.ServerRelativeUrl
                                                : folderModelHost.CurrentListItem.Folder.ServerRelativeUrl;

            var currentUrl    = serverRelativeUrl + "/" + folderModel.Name;
            var currentFolder = folderModelHost.CurrentList.ParentWeb.GetFolderByServerRelativeUrl(currentUrl);

            var doesFolderExist = false;

            try
            {
                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Loading list folder with URL: [{0}]", currentUrl);

                context.Load(currentFolder, f => f.Name);
                context.ExecuteQueryWithTrace();

                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "List folder with URL does exist: [{0}]", currentUrl);

                doesFolderExist = true;
            }
            catch (ServerException e)
            {
                if (e.ServerErrorTypeName == "System.IO.FileNotFoundException")
                {
                    TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "List folder with URL does not exist: [{0}]", currentUrl);
                    doesFolderExist = false;
                }
            }

            if (doesFolderExist)
            {
                return(currentFolder);
            }
#endif

            return(null);
        }
Esempio n. 20
0
        private void ProcessFieldValue(object modelHost, SPListItem listItem, ListItemFieldValuesDefinition fieldValue)
        {
            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = listItem,
                ObjectType       = typeof(SPListItem),
                ObjectDefinition = fieldValue,
                ModelHost        = modelHost
            });

            foreach (var value in fieldValue.Values)
            {
                if (value.FieldId.HasGuidValue())
                {
                    TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Processing field value with ID: [{0}] and value: [{1}]",
                                               new object[]
                    {
                        value.FieldId,
                        value.Value
                    });

                    listItem[value.FieldId.Value] = value.Value;
                }
                else if (!string.IsNullOrEmpty(value.FieldName))
                {
                    TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Processing field value with Name: [{0}] and value: [{1}]",
                                               new object[]
                    {
                        value.FieldName,
                        value.Value
                    });

                    listItem[value.FieldName] = value.Value;
                }
                else
                {
                    throw new SPMeta2Exception("Either FieldId or FieldName must be provided.");
                }
            }

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioned,
                Object           = listItem,
                ObjectType       = typeof(SPListItem),
                ObjectDefinition = fieldValue,
                ModelHost        = modelHost
            });
        }
Esempio n. 21
0
        protected override SPList CreateObject(WebModelHost typedModelHost, ListDefinition definition)
        {
            var listModel = definition;
            var web       = typedModelHost.HostWeb;

            TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new list");

            var listId = default(Guid);

            // create with the random title to avoid issue with 2 lists + diff URL and same Title
            // list Title will be renamed later on
            var listTitle = Guid.NewGuid().ToString("N");

            // "SPBug", there are two ways to create lists
            // (1) by TemplateName (2) by TemplateType
            if (listModel.TemplateType > 0)
            {
                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Creating list by TemplateType: [{0}]", listModel.TemplateType);

                //listId = web.Lists.Add(listModel.Url, listModel.Description ?? string.Empty, (SPListTemplateType)listModel.TemplateType);
                listId = web.Lists.Add(
                    listTitle,
                    listModel.Description ?? string.Empty,
#pragma warning disable 618
                    listModel.GetListUrl(),
#pragma warning restore 618
                    string.Empty,
                    (int)listModel.TemplateType,
                    string.Empty);
            }
            else if (!string.IsNullOrEmpty(listModel.TemplateName))
            {
                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Creating list by TemplateName: [{0}]", listModel.TemplateName);

                TraceService.Verbose((int)LogEventId.ModelProvisionCoreCall, "Searching list template in web.ListTemplates");
                var listTemplate = ResolveListTemplate(web, listModel);

                listId = web.Lists.Add(
                    listTitle,
                    listModel.Description ?? string.Empty,
#pragma warning disable 618
                    listModel.GetListUrl(),
#pragma warning restore 618
                    listTemplate.FeatureId.ToString(),
                    (int)listTemplate.Type,
                    listTemplate.DocumentTemplate);
            }
            else
            {
                throw new ArgumentException("TemplateType or TemplateName must be defined");
            }

            return(web.Lists[listId]);
        }
Esempio n. 22
0
        protected ClientObjectList <AppInstance> FindExistingApps(WebModelHost webHost, AppDefinition appModel)
        {
            TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "FindExistingApps() - finding app by productId: [{0}]", appModel.ProductId);

            var context = webHost.HostWeb.Context;
            var result  = webHost.HostWeb.GetAppInstancesByProductId(appModel.ProductId);

            context.Load(result);
            context.ExecuteQueryWithTrace();

            return(result);
        }
Esempio n. 23
0
        private Folder GetListFolder(FolderModelHost folderModelHost, FolderDefinition folderModel,
                                     out string serverRelativeUrl)
        {
            var list    = folderModelHost.CurrentList;
            var context = list.Context;

            context.Load(list, l => l.RootFolder);
            context.Load(list, l => l.ParentWeb);

            if (folderModelHost.CurrentListItem != null)
            {
                context.Load(folderModelHost.CurrentListItem, l => l.Folder);
            }

            context.ExecuteQueryWithTrace();

            serverRelativeUrl = folderModelHost.CurrentListItem == null
                                                ? list.RootFolder.ServerRelativeUrl
                                                : folderModelHost.CurrentListItem.Folder.ServerRelativeUrl;

            var currentUrl    = serverRelativeUrl + "/" + folderModel.Name;
            var currentFolder = folderModelHost.CurrentList.ParentWeb.GetFolderByServerRelativeUrl(currentUrl);

            var doesFolderExist = false;

            try
            {
                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Loading list folder with URL: [{0}]", currentUrl);

                context.Load(currentFolder, f => f.Name);
                context.ExecuteQueryWithTrace();

                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "List folder with URL does exist: [{0}]", currentUrl);

                doesFolderExist = true;
            }
            catch (ServerException e)
            {
                if (e.ServerErrorTypeName == "System.IO.FileNotFoundException")
                {
                    TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "List folder with URL does not exist: [{0}]", currentUrl);
                    doesFolderExist = false;
                }
            }

            if (doesFolderExist)
            {
                return(currentFolder);
            }

            return(null);
        }
        protected virtual SPFile FindExistingSolutionFile(SiteModelHost siteModelHost, SandboxSolutionDefinition sandboxSolutionDefinition)
        {
            TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Resolving sandbox solution by FileName: [{0}]", sandboxSolutionDefinition.FileName);


            var site            = siteModelHost.HostSite;
            var solutionGallery = (SPDocumentLibrary)site.GetCatalog(SPListTemplateType.SolutionCatalog);

            return(solutionGallery.RootFolder
                   .Files
                   .OfType <SPFile>()
                   .FirstOrDefault(f => f.Name.ToUpper() == sandboxSolutionDefinition.FileName.ToUpper()));
        }
        protected virtual SPUserSolution FindExistingSolutionById(SiteModelHost siteModelHost,
                                                                  Guid solutionId)
        {
            TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Resolving sandbox solution by SolutionId: [{0}]", solutionId);

            // cler m_SiteSolutions flat to get always a fresh colletion
            // m_SiteSolutions
            var site = siteModelHost.HostSite;

            ReflectionUtils.SetNonPublicFieldValue(site, "m_SiteSolutions", null);

            return(siteModelHost.HostSite.Solutions.OfType <SPUserSolution>()
                   .FirstOrDefault(f => f.SolutionId == solutionId));
        }
        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);
        }
Esempio n. 27
0
        protected View FindViewByTitle(IEnumerable <View> viewCollection, string listViewTitle)
        {
            TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Resolving view by Title: [{0}]", listViewTitle);

            foreach (var view in viewCollection)
            {
                if (System.String.Compare(view.Title, listViewTitle, System.StringComparison.OrdinalIgnoreCase) == 0)
                {
                    return(view);
                }
            }

            return(null);
        }
        protected virtual string ResolveTokenizedUrl(CSOMModelHostBase context, string urlValue)
        {
            TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Original Url: [{0}]", urlValue);

            var newUrlValue = TokenReplacementService.ReplaceTokens(new TokenReplacementContext
            {
                Value   = urlValue,
                Context = context
            }).Value;

            TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Token replaced Url: [{0}]", newUrlValue);

            return(newUrlValue);
        }
        protected virtual string ResolveTokenizedUrl(WebModelHost webModelHost, string tokenizedUrl)
        {
            TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Original Url: [{0}]", tokenizedUrl);

            var newUrlValue = TokenReplacementService.ReplaceTokens(new TokenReplacementContext
            {
                Value   = tokenizedUrl,
                Context = webModelHost.HostWeb
            }).Value;

            TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Token replaced Url: [{0}]", newUrlValue);

            return(newUrlValue);
        }
Esempio n. 30
0
        protected RoleDefinition FindRoleDefinition(RoleDefinitionCollection roleDefinitions, string roleDefinitionName)
        {
            TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Resolving view by Name: [{0}]", roleDefinitionName);

            foreach (var roleDefinition in roleDefinitions)
            {
                if (string.Compare(roleDefinition.Name, roleDefinitionName, true) == 0)
                {
                    return(roleDefinition);
                }
            }

            return(null);
        }