internal string GetPublication(string publicationTitle, params string[] parentIds)
        {
            // Console.WriteLine("Getting Publication " + publicationTitle);
            Stopwatch watch = new Stopwatch();

            watch.Start();
            string publicationId = TcmUri.UriNull;

            PublicationsFilterData publicationsFilter = new PublicationsFilterData();

            foreach (XElement pub in _client.GetSystemWideListXml(publicationsFilter).Nodes())
            {
                if (!pub.Attribute("Title").Value.Equals(publicationTitle))
                {
                    continue;
                }
                publicationId = pub.Attribute("ID").Value;
                Console.WriteLine("Found publication with ID " + publicationId);
                break;
            }
            if (publicationId.Equals(TcmUri.UriNull) && CreateIfNewItem)
            {
                // New Publication
                PublicationData newPublication =
                    //(PublicationData)_client.GetDefaultData(ItemType.Publication, null, _readOptions);
                    (PublicationData)_client.GetDefaultData(ItemType.Publication, null);
                newPublication.Title = publicationTitle;
                newPublication.Key   = publicationTitle;

                if (parentIds.Length > 0)
                {
                    List <LinkToRepositoryData> parents = new List <LinkToRepositoryData>();
                    foreach (string parentId in parentIds)
                    {
                        LinkToRepositoryData linkToParent = new LinkToRepositoryData {
                            IdRef = parentId
                        };
                        parents.Add(linkToParent);
                    }

                    newPublication.Parents = parents.ToArray();
                }

                newPublication = (PublicationData)_client.Save(newPublication, _readOptions);
                publicationId  = newPublication.Id;
                Console.WriteLine("Created publication with ID " + publicationId);
            }
            watch.Stop();
            Console.WriteLine("GetPublication finished in " + watch.ElapsedMilliseconds + " milliseconds.");
            return(publicationId);
        }
        public HashSet <string> getAllComponentTitles(string folderUri)
        {
            var titles = getComponentTitles(folderUri);

            //Also load titles from components in lower folders
            BluePrintFilterData filter = new BluePrintFilterData();

            filter.ForItem = new LinkToRepositoryLocalObjectData {
                IdRef = folderUri
            };
            var bluePrintData = _client.GetSystemWideListXml(filter);

            var allRelevantFolders = bluePrintData.Descendants(TridionNamespaceManager.Tcm + "Item").Where(item => item.Attribute("IsShared").Value == "True");

            allRelevantFolders.ToList().ForEach(folder => getComponentTitles(folder.Attribute("ID").Value).ToList().ForEach(component => titles.Add(component)));

            return(titles);
        }