internal bool Rename(string displayName, out PropertyError error) { if (this.defaultFolderInfo.DefaultFolderType != DefaultFolderType.ElcRoot) { throw new NotSupportedException(string.Format("We do not support renaming the default folder. defaultFolder = {0}.", this.defaultFolderInfo.DefaultFolderType)); } error = DefaultFolderCreator.UpdateElcRootFolderName(this.context, displayName); return(error != null); }
protected Folder CreateInternal(DefaultFolderContext context, string displayName, StoreObjectId parentFolderId, out bool hasCreatedNew) { hasCreatedNew = false; bool flag = false; Folder folder = null; try { folder = this.CreateNewFolder(context, displayName, parentFolderId); FolderSaveResult folderSaveResult = folder.Save(); if (folderSaveResult.OperationResult != OperationResult.Succeeded) { return(null); } folder.Load(null); hasCreatedNew = true; flag = true; } catch (ObjectExistedException) { ExTraceGlobals.DefaultFoldersTracer.TraceDebug <DefaultFolderCreator, string>((long)this.GetHashCode(), "DefaultFolderCreator::CreateInternal. We found the folder has existed. strategy = {0}, displayName = {1}.", this, displayName); if (folder != null) { folder.Dispose(); folder = null; } if (this.bindByNameIfAlreadyExists) { folder = DefaultFolderCreator.BindToSubfolderByName(context.Session, parentFolderId, displayName, new PropertyDefinition[0]); flag = true; } } finally { if (!flag && folder != null) { folder.Dispose(); folder = null; } } return(folder); }
internal bool CreateInternal(ref DefaultFolderData data) { if ((this.defaultFolderInfo.Behavior & DefaultFolderBehavior.CanCreate) != DefaultFolderBehavior.CanCreate) { ExTraceGlobals.DefaultFoldersTracer.TraceError <DefaultFolder>((long)this.GetHashCode(), "DefaultFolder::Create. Cannot create default folder because DefaultFolderBehavior.CanCreate is not set. defaultFolder = {0}.", this); throw new NotSupportedException(string.Format("The defaultFolder cannot be created. defaultFolder = {0}.", this)); } if (data.FolderId != null) { throw new InvalidOperationException(string.Format("Cannot create default folder {0}, because it already exists.", this.defaultFolderInfo.DefaultFolderType)); } for (int i = 0; i <= StorageLimits.Instance.DefaultFolderMaximumSuffix; i++) { ExTraceGlobals.DefaultFoldersTracer.TraceDebug <DefaultFolder, int>((long)this.GetHashCode(), "DefaultFolder::CreateInternal. About to create the default folder. defaultFolder = {0}. Iteration = {1}.", this, i); Folder folder = null; bool flag = false; this.context.Session.Mailbox.Load(DefaultFolder.localeIdPropertyDefinition); string text = this.defaultFolderInfo.LocalizableDisplayName.ToString(this.cultureInfo); StoreObjectId storeObjectId = null; if (this.HideUnderNonIpmSubtree) { storeObjectId = this.context[DefaultFolderType.Configuration]; } else { storeObjectId = this.context[this.defaultFolderInfo.FolderCreator.DefaultContainer]; } if (i > 0) { text += i; } bool flag2 = false; try { folder = this.defaultFolderInfo.FolderCreator.Create(this.context, text, storeObjectId, out flag2); } catch (ObjectNotFoundException arg) { ExTraceGlobals.DefaultFoldersTracer.TraceDebug <DefaultFolder, string, ObjectNotFoundException>((long)this.GetHashCode(), "DefaultFolder::CreateInternal. The user may have no permission to the container folder. defaultFolder = {0}, session = {1}, exception = {2}.", this, this.context.Session.DisplayName, arg); return(false); } catch (AccessDeniedException arg2) { ExTraceGlobals.DefaultFoldersTracer.TraceDebug <DefaultFolder, string, AccessDeniedException>((long)this.GetHashCode(), "DefaultFolder::CreateInternal. The user may have no permission to the container folder. defaultFolder = {0}, session = {1}, exception = {2}.", this, this.context.Session.DisplayName, arg2); return(false); } catch (ObjectExistedException arg3) { ExTraceGlobals.DefaultFoldersTracer.TraceDebug <DefaultFolder, string, ObjectExistedException>((long)this.GetHashCode(), "DefaultFolder::CreateInternal. The folder already exists. defaultFolder = {0}, session = {1}, exception = {2}.", this, this.context.Session.DisplayName, arg3); if (folder != null && folder.Id != null) { folder.Dispose(); folder = null; data = new DefaultFolderData(data.HasInitialized); } folder = DefaultFolderCreator.BindToSubfolderByName(this.context.Session, storeObjectId, text, new PropertyDefinition[0]); flag2 = false; } if (folder != null) { if (!flag2) { data = new DefaultFolderData(folder.StoreObjectId, data.IdInitialized, data.HasInitialized); } StoreObjectId objectId = folder.Id.ObjectId; try { if (flag2 || this.defaultFolderInfo.FolderValidationStrategy.EnsureIsValid(this.context, folder)) { ExTraceGlobals.DefaultFoldersTracer.TraceDebug <DefaultFolder, bool>((long)this.GetHashCode(), "DefaultFolder::CreateInternal. We created or hijacked a new folder for the missing default folder. defaultFolder = {0}, hasCreatedNew = {1}.", this, flag2); if (flag2) { this.SetProperties(folder); folder.Load(null); } flag = true; } } catch (DefaultFolderPropertyValidationException) { this.SetProperties(folder); folder.Load(null); flag = true; } finally { folder.Dispose(); } if (flag) { this.defaultFolderInfo.EntryIdStrategy.SetEntryId(this.context, objectId.ProviderLevelItemId); data = new DefaultFolderData(StoreObjectId.FromProviderSpecificId(objectId.ProviderLevelItemId, this.StoreObjectType), data.IdInitialized, data.HasInitialized); return(true); } ExTraceGlobals.DefaultFoldersTracer.TraceWarning <DefaultFolder, string, int>((long)this.GetHashCode(), "DefaultFolder::CreateInternal. We failed to create a default folder. We will try with a new name. defaultFolder = {0}, displayName = {1}, iteration = {2}.", this, text, i); } } ExTraceGlobals.DefaultFoldersTracer.TraceError <string, DefaultFolderType>((long)this.GetHashCode(), "DefaultFolder::CreateInternal. Failed to open or create default folder. Folder = {0}, defaultFolderType = {1}.", this.defaultFolderInfo.LocalizableDisplayName.ToString(this.cultureInfo), this.defaultFolderInfo.DefaultFolderType); throw new DefaultFolderNameClashException(ServerStrings.ExUnableToOpenOrCreateDefaultFolder(this.defaultFolderInfo.LocalizableDisplayName.ToString(this.cultureInfo))); }