示例#1
0
        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);
        }
示例#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);
        }
示例#3
0
        private ListItem EnsureListFolder(FolderModelHost folderModelHost, FolderDefinition folderModel)
        {
            string serverRelativeUrl = string.Empty;

            var list    = folderModelHost.CurrentList;
            var context = list.Context;


            var currentFolder     = GetListFolder(folderModelHost, folderModel, out serverRelativeUrl);
            var currentFolderItem = folderModelHost.CurrentListItem;

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = currentFolder,
                ObjectType       = typeof(Folder),
                ObjectDefinition = folderModel,
                ModelHost        = folderModelHost
            });

            context.ExecuteQuery();

            if (currentFolder == null)
            {
                currentFolderItem = list.AddItem(new ListItemCreationInformation
                {
                    FolderUrl            = serverRelativeUrl,
                    LeafName             = folderModel.Name,
                    UnderlyingObjectType = FileSystemObjectType.Folder
                });

                currentFolderItem["Title"] = folderModel.Name;
                currentFolderItem.Update();

                context.ExecuteQuery();
            }
            else
            {
                context.Load(currentFolder, f => f.ListItemAllFields);
                context.Load(currentFolder, f => f.Name);
                context.ExecuteQuery();

                currentFolderItem = currentFolder.ListItemAllFields;
            }

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioned,
                Object           = currentFolder,
                ObjectType       = typeof(Folder),
                ObjectDefinition = folderModel,
                ModelHost        = folderModelHost
            });

            return(currentFolderItem);
        }
示例#4
0
        protected Folder GetListFolder(FolderModelHost folderModelHost, FolderDefinition folderModel)
        {
            var tmp    = string.Empty;
            var result = GetListFolder(folderModelHost, folderModel, out tmp);

            return(result);
        }
示例#5
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);
        }
        protected string ResolveContentTypeId(FolderModelHost folderHost, ModuleFileDefinition moduleFile)
        {
            var context = folderHost.CurrentLibraryFolder.Context;
            var list    = folderHost.CurrentList;

            var stringCustomContentType = string.Empty;

            // preload custm content type
            if (!string.IsNullOrEmpty(moduleFile.ContentTypeName))
            {
                var listContentTypes = list.ContentTypes;
                context.Load(listContentTypes);
                context.ExecuteQueryWithTrace();

                var listContentType = listContentTypes.ToList()
                                      .FirstOrDefault(c => c.Name.ToUpper() == moduleFile.ContentTypeName.ToUpper());

                if (listContentType == null)
                {
                    throw new ArgumentNullException(
                              string.Format("Cannot find content type with Name:[{0}] in List:[{1}]",
                                            new string[]
                    {
                        moduleFile.ContentTypeName,
                        list.Title
                    }));
                }

                stringCustomContentType = listContentType.Id.ToString();
            }

            return(stringCustomContentType);
        }
示例#7
0
        public override void WithResolvingModelHost(object modelHost, DefinitionBase model, Type childModelType, Action <object> action)
        {
            var folderModelHost = modelHost.WithAssertAndCast <FolderModelHost>("modelHost", value => value.RequireNotNull());
            var folderModel     = model.WithAssertAndCast <FolderDefinition>("model", value => value.RequireNotNull());

            if (folderModelHost.CurrentLibrary != null)
            {
                var currentFolder = EnsureLibraryFolder(folderModelHost, folderModel);

                var newContext = new FolderModelHost
                {
                    CurrentLibrary       = folderModelHost.CurrentLibrary,
                    CurrentLibraryFolder = currentFolder
                };

                action(newContext);

                currentFolder.Update();
            }
            else if (folderModelHost.CurrentList != null)
            {
                var currentListItem = EnsureListFolder(folderModelHost, folderModel);

                var newContext = new FolderModelHost
                {
                    CurrentList     = folderModelHost.CurrentList,
                    CurrentListItem = currentListItem
                };

                action(newContext);

                currentListItem.Update();
            }
        }
示例#8
0
        private SPFolder FindCurrentLibraryFolder(FolderModelHost folderModelHost, FolderDefinition folderModel)
        {
            TraceService.Information((int)LogEventId.ModelProvisionCoreCall, "FindCurrentLibraryFolder()");

            var currentFolder = GetLibraryFolder(folderModelHost, folderModel);

            return(currentFolder);
        }
示例#9
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);
        }
示例#10
0
        private SPFolder EnsureLibraryFolder(FolderModelHost folderModelHost, FolderDefinition folderModel)
        {
            TraceService.Information((int)LogEventId.ModelProvisionCoreCall, "EnsureLibraryFolder()");

            var parentFolder = folderModelHost.CurrentLibraryFolder;

            // dirty stuff, needs to be rewritten
            var currentFolder = GetLibraryFolder(folderModelHost, folderModel);

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = currentFolder == null || !currentFolder.Exists ? null : currentFolder,
                ObjectType       = typeof(SPFolder),
                ObjectDefinition = folderModel,
                ModelHost        = folderModelHost
            });

            if (currentFolder == null || !currentFolder.Exists)
            {
                TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new library folder");

                currentFolder = parentFolder.SubFolders.Add(folderModel.Name);

                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = currentFolder,
                    ObjectType       = typeof(SPFolder),
                    ObjectDefinition = folderModel,
                    ModelHost        = folderModelHost
                });
            }
            else
            {
                TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Processing existing library folder");

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

                currentFolder.Update();
            }

            return(currentFolder);
        }
示例#11
0
        private SPListItem FindCurrentListFolder(FolderModelHost folderModelHost, FolderDefinition folderModel)
        {
            TraceService.Information((int)LogEventId.ModelProvisionCoreCall, "FindCurrentListFolder()");

            var list          = folderModelHost.CurrentList;
            var currentFolder = GetListFolder(folderModelHost, folderModel);

            return(currentFolder.Item);
        }
示例#12
0
        private SPFolder EnsureLibraryFolder(FolderModelHost folderModelHost, FolderDefinition folderModel)
        {
            var parentFolder = folderModelHost.CurrentLibraryFolder;

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

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = currentFolder == null || !currentFolder.Exists ? null : currentFolder,
                ObjectType       = typeof(SPFolder),
                ObjectDefinition = folderModel,
                ModelHost        = folderModelHost
            });

            if (currentFolder == null || !currentFolder.Exists)
            {
                currentFolder = parentFolder.SubFolders.Add(folderModel.Name);

                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = currentFolder,
                    ObjectType       = typeof(SPFolder),
                    ObjectDefinition = folderModel,
                    ModelHost        = folderModelHost
                });
            }
            else
            {
                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = currentFolder,
                    ObjectType       = typeof(SPFolder),
                    ObjectDefinition = folderModel,
                    ModelHost        = folderModelHost
                });

                currentFolder.Update();
            }

            return(currentFolder);
        }
示例#13
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 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");

        }
示例#15
0
        private Folder EnsureLibraryFolder(FolderModelHost folderModelHost, FolderDefinition folderModel)
        {
            TraceService.Information((int)LogEventId.ModelProvisionCoreCall, "EnsureLibraryFolder()");

            var parentFolder = folderModelHost.CurrentLibraryFolder;
            var context      = parentFolder.Context;

            var currentFolder = GetLibraryFolder(folderModelHost, folderModel);

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = currentFolder,
                ObjectType       = typeof(Folder),
                ObjectDefinition = folderModel,
                ModelHost        = folderModelHost
            });

            if (currentFolder == null)
            {
                TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new library folder");

                currentFolder = parentFolder.Folders.Add(folderModel.Name);
                context.ExecuteQueryWithTrace();
            }
            else
            {
                TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Processing existing library folder");
            }

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioned,
                Object           = currentFolder,
                ObjectType       = typeof(Folder),
                ObjectDefinition = folderModel,
                ModelHost        = folderModelHost
            });

            currentFolder.Update();
            context.ExecuteQueryWithTrace();

            return(currentFolder);
        }
示例#16
0
        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();
        }
示例#17
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.ExecuteQuery();

            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
            {
                context.Load(currentFolder, f => f.Name);
                context.ExecuteQuery();

                doesFolderExist = true;
            }
            catch (ServerException e)
            {
                if (e.ServerErrorTypeName == "System.IO.FileNotFoundException")
                {
                    doesFolderExist = false;
                }
            }

            if (doesFolderExist)
            {
                return(currentFolder);
            }

            return(null);
        }
示例#18
0
        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);
        }
示例#19
0
        public override void WithResolvingModelHost(ModelHostResolveContext modelHostContext)
        {
            var modelHost      = modelHostContext.ModelHost;
            var model          = modelHostContext.Model;
            var childModelType = modelHostContext.ChildModelType;
            var action         = modelHostContext.Action;


            var   webDefinition = model as WebDefinition;
            SPWeb parentWeb     = null;

            if (modelHost is SiteModelHost)
            {
                parentWeb = (modelHost as SiteModelHost).HostSite.RootWeb;
            }

            if (modelHost is WebModelHost)
            {
                parentWeb = (modelHost as WebModelHost).HostWeb;
            }

            using (var currentWeb = GetOrCreateWeb(parentWeb, webDefinition, false))
            {
                if (childModelType == typeof(ModuleFileDefinition))
                {
                    var folderModelHost = new FolderModelHost
                    {
                        CurrentWeb       = currentWeb,
                        CurrentWebFolder = currentWeb.RootFolder,
                    };

                    action(folderModelHost);
                }
                else
                {
                    action(new WebModelHost
                    {
                        HostWeb = currentWeb
                    });
                }

                currentWeb.Update();
            }
        }
示例#20
0
        public override void WithResolvingModelHost(ModelHostResolveContext modelHostContext)
        {
            var modelHost      = modelHostContext.ModelHost;
            var model          = modelHostContext.Model;
            var childModelType = modelHostContext.ChildModelType;
            var action         = modelHostContext.Action;


            var folderModelHost = modelHost.WithAssertAndCast <FolderModelHost>("modelHost", value => value.RequireNotNull());
            var folderModel     = model.WithAssertAndCast <FolderDefinition>("model", value => value.RequireNotNull());

            if (folderModelHost.CurrentLibrary != null)
            {
                var currentFolder = FindCurrentLibraryFolder(folderModelHost, folderModel);

                var newContext = new FolderModelHost
                {
                    CurrentLibrary       = folderModelHost.CurrentLibrary,
                    CurrentLibraryFolder = currentFolder
                };

                action(newContext);

                currentFolder.Update();
            }
            else if (folderModelHost.CurrentList != null)
            {
                var currentListItem = FindCurrentListFolder(folderModelHost, folderModel);

                var newContext = new FolderModelHost
                {
                    CurrentList     = folderModelHost.CurrentList,
                    CurrentListItem = currentListItem
                };

                action(newContext);

                if (newContext.ShouldUpdateHost)
                {
                    currentListItem.Update();
                }
            }
        }
示例#21
0
        private Folder EnsureLibraryFolder(FolderModelHost folderModelHost, FolderDefinition folderModel)
        {
            var parentFolder = folderModelHost.CurrentLibraryFolder;
            var context      = parentFolder.Context;

            var currentFolder = GetLibraryFolder(folderModelHost, folderModel);

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = currentFolder,
                ObjectType       = typeof(Folder),
                ObjectDefinition = folderModel,
                ModelHost        = folderModelHost
            });

            if (currentFolder == null)
            {
                currentFolder = parentFolder.Folders.Add(folderModel.Name);
                context.ExecuteQuery();
            }

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioned,
                Object           = currentFolder,
                ObjectType       = typeof(Folder),
                ObjectDefinition = folderModel,
                ModelHost        = folderModelHost
            });

            currentFolder.Update();
            context.ExecuteQuery();

            return(currentFolder);
        }
示例#22
0
        public override void WithResolvingModelHost(object modelHost, DefinitionBase model, Type childModelType, Action <object> action)
        {
            var webModelHost = modelHost.WithAssertAndCast <WebModelHost>("modelHost", value => value.RequireNotNull());
            var web          = webModelHost.HostWeb;

            var listDefinition = model as ListDefinition;

            if (web != null && listDefinition != null)
            {
                var list = web.GetList(SPUtility.ConcatUrls(web.ServerRelativeUrl, listDefinition.GetListUrl()));

                if (childModelType == typeof(ModuleFileDefinition))
                {
                    action(list.RootFolder);
                }
                else if (childModelType == typeof(FolderDefinition))
                {
                    var folderModelHost = new FolderModelHost
                    {
                        CurrentLibrary       = list as SPDocumentLibrary,
                        CurrentLibraryFolder = list.RootFolder,

                        CurrentList     = (list as SPDocumentLibrary != null) ? null : list,
                        CurrentListItem = null,
                    };

                    action(folderModelHost);
                }
                else
                {
                    action(list);
                }

                list.Update();
            }
            else
            {
                action(modelHost);
            }
        }
示例#23
0
        protected Folder GetLibraryFolder(FolderModelHost folderModelHost, FolderDefinition folderModel)
        {
            var parentFolder = folderModelHost.CurrentLibraryFolder;
            var context      = parentFolder.Context;

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

            // 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.ExecuteQuery();
            }

            return(currentFolder);
        }
示例#24
0
        public override void WithResolvingModelHost(object modelHost, DefinitionBase model, Type childModelType, Action <object> action)
        {
            var folderModelHost = modelHost.WithAssertAndCast <FolderModelHost>("modelHost", value => value.RequireNotNull());
            var folderModel     = model.WithAssertAndCast <FolderDefinition>("model", value => value.RequireNotNull());

            if (folderModelHost.CurrentList != null && folderModelHost.CurrentList.BaseType == BaseType.DocumentLibrary)
            {
                var currentFolder = EnsureLibraryFolder(folderModelHost, folderModel);

                var newContext = new FolderModelHost
                {
                    CurrentList          = folderModelHost.CurrentList,
                    CurrentLibraryFolder = currentFolder,
                    CurrentWeb           = folderModelHost.CurrentWeb
                                           //Folder = currentFolder,
                                           //List = folderModelHost.CurrentList,
                                           //Web = folderModelHost.CurrentWeb
                };

                action(newContext);
            }
            else if (folderModelHost.CurrentList != null && folderModelHost.CurrentList.BaseType != BaseType.DocumentLibrary)
            {
                var currentListItem = EnsureListFolder(folderModelHost, folderModel);

                var newContext = new FolderModelHost
                {
                    CurrentList     = folderModelHost.CurrentList,
                    CurrentListItem = currentListItem,
                    CurrentWeb      = folderModelHost.CurrentWeb
                };

                action(newContext);
            }
            else
            {
                throw new NotImplementedException("model host is unklnown");
            }
        }
示例#25
0
        protected SPFolder GetLibraryFolder(FolderModelHost folderModelHost, FolderDefinition folderModel)
        {
            var parentFolder = folderModelHost.CurrentLibraryFolder;

            // dirty stuff, needs to be rewritten
            var folder = parentFolder
                         .SubFolders
                         .OfType <SPFolder>()
                         .FirstOrDefault(f => f.Name == folderModel.Name);


            if (folder != null)
            {
                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(folder);
        }
示例#26
0
        public override void WithResolvingModelHost(object modelHost, DefinitionBase model, Type childModelType, Action <object> action)
        {
            var   webDefinition = model as WebDefinition;
            SPWeb parentWeb     = null;

            if (modelHost is SiteModelHost)
            {
                parentWeb = (modelHost as SiteModelHost).HostSite.RootWeb;
            }

            if (modelHost is WebModelHost)
            {
                parentWeb = (modelHost as WebModelHost).HostWeb;
            }

            using (var currentWeb = GetOrCreateWeb(parentWeb, webDefinition, false))
            {
                if (childModelType == typeof(ModuleFileDefinition))
                {
                    var folderModelHost = new FolderModelHost
                    {
                        CurrentWeb       = currentWeb,
                        CurrentWebFolder = currentWeb.RootFolder,
                    };

                    action(folderModelHost);
                }
                else
                {
                    action(new WebModelHost
                    {
                        HostWeb = currentWeb
                    });
                }

                currentWeb.Update();
            }
        }
示例#27
0
 protected bool ShouldDeployLibraryFolder(FolderModelHost folderModelHost)
 {
     return(folderModelHost.CurrentList != null &&
            folderModelHost.CurrentList.BaseType == BaseType.DocumentLibrary);
 }
示例#28
0
        private ListItem EnsureListFolder(FolderModelHost folderModelHost, FolderDefinition folderModel)
        {
            TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "EnsureListFolder()");

            var serverRelativeUrl = string.Empty;

            var list    = folderModelHost.CurrentList;
            var context = list.Context;

            var currentFolder     = GetListFolder(folderModelHost, folderModel, out serverRelativeUrl);
            var currentFolderItem = folderModelHost.CurrentListItem;

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = currentFolder,
                ObjectType       = typeof(Folder),
                ObjectDefinition = folderModel,
                ModelHost        = folderModelHost
            });

            context.ExecuteQueryWithTrace();

            if (currentFolder == null)
            {
                TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new list folder");

                currentFolderItem = list.AddItem(new ListItemCreationInformation
                {
                    FolderUrl            = serverRelativeUrl,
                    LeafName             = folderModel.Name,
                    UnderlyingObjectType = FileSystemObjectType.Folder
                });

                currentFolderItem[BuiltInInternalFieldNames.Title] = folderModel.Name;
                currentFolderItem.Update();

                context.ExecuteQueryWithTrace();

                context.Load(currentFolderItem.Folder);
                context.ExecuteQueryWithTrace();

                currentFolder = currentFolderItem.Folder;
            }
            else
            {
                TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Processing existing list folder");

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

                currentFolderItem = currentFolder.ListItemAllFields;
            }

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioned,
                Object           = currentFolder,
                ObjectType       = typeof(Folder),
                ObjectDefinition = folderModel,
                ModelHost        = folderModelHost
            });

            return(currentFolderItem);
        }
示例#29
0
 private void ProcessWebModuleFile(FolderModelHost folderHost, ModuleFileDefinition moduleFile)
 {
     throw new SPMeta2NotImplementedException("Module provision under web folders is not implemented yet.");
 }
示例#30
0
        private SPListItem EnsureListFolder(FolderModelHost folderModelHost, FolderDefinition folderModel)
        {
            TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "EnsureListFolder()");

            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;
            var currentFolder = GetListFolder(folderModelHost, folderModel);

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = currentFolder == null || !currentFolder.Exists ? null : currentFolder,
                ObjectType       = typeof(SPFolder),
                ObjectDefinition = folderModel,
                ModelHost        = folderModelHost
            });

            if (!currentFolder.Exists)
            {
                TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new list folder");

                currentFolderItem = list.AddItem(serverRelativeUrl, SPFileSystemObjectType.Folder);

                currentFolderItem[SPBuiltInFieldId.Title] = folderModel.Name;
                currentFolderItem.Update();

                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = currentFolderItem.Folder,
                    ObjectType       = typeof(SPFolder),
                    ObjectDefinition = folderModel,
                    ModelHost        = folderModelHost
                });
            }
            else
            {
                TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Processing existing list folder");

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

                currentFolder.Update();

                currentFolderItem = currentFolder.Item;
            }

            return(currentFolderItem);
        }