string GenerateUniqueChildDirectoryId(string childDirectoryId)
 {
     childDirectoryId = WixFileElement.GenerateId(childDirectoryId);
     if (!OwnerWixDocument.DirectoryIdExists(childDirectoryId))
     {
         return(childDirectoryId);
     }
     return(GenerateUniqueChildDirectoryIdUsingParentDirectoryId(childDirectoryId));
 }
        string GenerateUniqueIdByAppendingNumberToEnd(string id)
        {
            int    count  = 0;
            string baseId = id;

            do
            {
                ++count;
                id = String.Concat(baseId, count);
            } while (OwnerWixDocument.ComponentIdExists(id));

            return(id);
        }
        string GenerateUniqueIdByAppendingNumberToFileNameId(string fileNameId)
        {
            string id    = String.Empty;
            int    count = 0;
            string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileNameId);
            string extension = Path.GetExtension(fileNameId);

            do
            {
                ++count;
                id = String.Concat(fileNameWithoutExtension, count, extension);
            } while (OwnerWixDocument.FileIdExists(id));

            return(id);
        }
        /// <remarks>
        /// Takes the filename, removes all periods, and
        /// capitalises the first character and first extension character.
        /// </remarks>
        public void GenerateUniqueIdFromFileName(string fileName)
        {
            Id = GenerateIdFromFileName(fileName);
            if (!OwnerWixDocument.ComponentIdExists(Id))
            {
                return;
            }

            Id = GenerateIdFromParentDirectoryAndFileName(fileName, Id);
            if (!OwnerWixDocument.ComponentIdExists(Id))
            {
                return;
            }

            Id = GenerateUniqueIdByAppendingNumberToEnd(Id);
        }
        /// <summary>
        /// Generates a unique id for the entire document that this file element
        /// belongs to.
        /// </summary>
        /// <param name="parentDirectory">The full path of the parent directory
        /// for the filename.</param>
        /// <param name="fileName">The name of the file to generate a unique
        /// id for. This does not include any path.</param>
        string GenerateUniqueId(string parentDirectory, string fileName)
        {
            string id = GenerateId(fileName);

            if (!OwnerWixDocument.FileIdExists(id))
            {
                return(id);
            }

            id = GenerateIdFromParentDirectory(parentDirectory, id);
            if (!OwnerWixDocument.FileIdExists(id))
            {
                return(id);
            }

            return(GenerateUniqueIdByAppendingNumberToFileNameId(id));
        }
 /// <summary>
 /// Initialises a new Wix File element with the specified
 /// <paramref name="fileName"/>.
 /// </summary>
 /// <remarks>
 /// The element generated will have an Id, LongName and Name
 /// all set and derived from the <paramref name="fileName"/>
 /// </remarks>
 void Init(string fileName)
 {
     Id       = GenerateUniqueId(fileName);
     FileName = Path.GetFileName(fileName);
     Source   = OwnerWixDocument.GetRelativePath(fileName);;
 }