Beispiel #1
0
        public PathMapping(PathMapping parentMapping, ITaskItem model)
        {
            if (parentMapping != null)
            {
                if (parentMapping.DocumentType != Document.DocumentType.Folder)
                {
                    throw new ArgumentException("Path should have 'Folder' Document Type", "folderPath");
                }
                ParentMapping = parentMapping;
            }

            ResourceType = GetResourceType(model.RequireResourceId());

            Title = model.RequireTitle();

            switch (ResourceType)
            {
            case ResourceType.file:
                MappedFilename  = SanitizeTitle(Path.GetFileNameWithoutExtension(Title));
                MappedExtension = String.Concat(".", ResourceType.ToString(), "_", SanitizeTitle(Path.GetExtension(Title).TrimStart('.')));
                break;

            case ResourceType.folder:
                MappedFilename  = SanitizeTitle(Title);
                MappedExtension = null;
                break;

            default:
                MappedFilename  = SanitizeTitle(Title);
                MappedExtension = string.Concat(".", ResourceType.ToString());
                break;
            }
        }
Beispiel #2
0
        private TaskItem BuildFolder(Document model, PathMapping mappedPath)
        {
            string targetFile = Path.ChangeExtension(Path.Combine(TargetDirectory, mappedPath.MappedPath), mappedPath.ResourceType.ToString());

            TaskItem folder = new TaskItem(targetFile);

            if (File.Exists(targetFile))
            {
                DateTime updated = File.GetLastWriteTime(targetFile);
                Log.LogMessage(MessageImportance.Normal, "Exists at \"{0}\"", targetFile);

                if (updated != model.Updated)
                {
                    Log.LogMessage(MessageImportance.Low, "Updated - Local: {0} Remote: {1}", updated, model.Updated);
                }
                else
                {
                    Log.LogMessage(MessageImportance.Low, "Updated - {0}", model.Updated);
                }
            }
            else
            {
                Log.LogMessage("Found new folder");
            }

            folder.FillMetadata(model);
            folder.FillMetadata(mappedPath);
            folder.Save(Log, model.Updated);

            return(folder);
        }
Beispiel #3
0
        public PathMapping(PathMapping parentMapping, ITaskItem model)
        {
            if (parentMapping != null)
            {
                if (parentMapping.DocumentType != Document.DocumentType.Folder)
                {
                    throw new ArgumentException("Path should have 'Folder' Document Type", "folderPath");
                }
                ParentMapping = parentMapping;
            }

            ResourceType = GetResourceType(model.RequireResourceId());

            Title = model.RequireTitle();

            switch (ResourceType)
            {
                case ResourceType.file:
                    MappedFilename = SanitizeTitle(Path.GetFileNameWithoutExtension(Title));
                    MappedExtension = String.Concat(".", ResourceType.ToString(), "_", SanitizeTitle(Path.GetExtension(Title).TrimStart('.')));
                    break;
                case ResourceType.folder:
                    MappedFilename = SanitizeTitle(Title);
                    MappedExtension = null;
                    break;
                default:
                    MappedFilename = SanitizeTitle(Title);
                    MappedExtension = string.Concat(".",ResourceType.ToString());
                    break;
            }
        }
 public static ITaskItem FillMetadata(this ITaskItem item, PathMapping mapping)
 {
     item.SetMetadata("MappedExtension", mapping.MappedExtension ?? "");
     item.SetMetadata("MappedFilename", mapping.MappedFilename ?? "");
     item.SetMetadata("MappedPath", mapping.MappedPath);
     item.SetMetadata("ResourceType", mapping.ResourceType.ToString());
     item.SetMetadata("Title", mapping.Title ?? "");
     item.SetMetadata("TitlePath", mapping.TitlePath ?? "");
     return item;
 }
Beispiel #5
0
 public static ITaskItem FillMetadata(this ITaskItem item, PathMapping mapping)
 {
     item.SetMetadata("MappedExtension", mapping.MappedExtension ?? "");
     item.SetMetadata("MappedFilename", mapping.MappedFilename ?? "");
     item.SetMetadata("MappedPath", mapping.MappedPath);
     item.SetMetadata("ResourceType", mapping.ResourceType.ToString());
     item.SetMetadata("Title", mapping.Title ?? "");
     item.SetMetadata("TitlePath", mapping.TitlePath ?? "");
     return(item);
 }
Beispiel #6
0
        private TaskItem BuildContent(ITaskItem folder, Document document, PathMapping folderMapping)
        {
            PathMapping documentPath = new PathMapping(folderMapping, new TaskItem().FillMetadata(document));

            string targetFile = documentPath.MappedPath;

            TaskItem content = new TaskItem(targetFile);

            folder.CopyMetadataTo(content, FolderMetadataPrefix ?? "Folder");
            content.FillMetadata(documentPath);
            content.FillMetadata(document);

            content.RequireParentDirectory(Log);

            if (content.Exists())
            {
                DateTime updated = File.GetLastWriteTime(targetFile);
                Log.LogMessage(MessageImportance.Normal, "Exists at \"{0}\"", targetFile);
                if (updated != document.Updated)
                {
                    Log.LogMessage(MessageImportance.Low, "Updated - Local: {0} Remote: {1}", updated, document.Updated);
                }
                else
                {
                    Log.LogMessage(MessageImportance.Low, "Updated - {0}", document.Updated);
                }
            }
            else
            {
                Log.LogMessage(MessageImportance.Normal, "Detected new document");
            }

            if (document.DocumentEntry != null &&
                document.DocumentEntry.Content != null &&
                document.DocumentEntry.Content.Src != null)
            {
                content.SetMetadata("ExportUri", document.DocumentEntry.Content.Src.ToString());
            }

            content.Save(Log, document.Updated);

            return(content);
        }
Beispiel #7
0
        public override bool Execute()
        {
            GDataCredentials credentials = GetDataCredentials();
            RequestSettings  settings    = new RequestSettings("code.google.com/p/exult/", credentials);

            settings.AutoPaging = true;
            settings.PageSize   = 100;

            List <ITaskItem> folderContent = new List <ITaskItem>();

            WarnIfUneven(Tuple.Create("Folders", Folders), Tuple.Create("FolderListings", FolderListings));
            foreach (var tuple in Zip(Folders, FolderListings))
            {
                if (_Cancelled)
                {
                    return(false);
                }

                ITaskItem folder        = tuple.Item1;
                ITaskItem folderListing = tuple.Item2;

                folder.LoadCustomMetadata();
                folder.RequireDocumentType(Document.DocumentType.Folder);

                //yada/hrm.folder -> yada/hrm/
                string folderPath = Path.Combine(Path.GetDirectoryName(folder.ItemSpec), Path.GetFileNameWithoutExtension(folder.ItemSpec));
                RequireDirectory(folderPath);
                PathMapping folderMapping = new PathMapping(folderPath);

                Request request = new Request(settings);

                string resourceId = folder.RequireResourceId();

                Log.LogMessage(MessageImportance.High, "Getting Folder Content \"{0}\"", folder.RequireTitlePath());
                Feed <Document> feed = request.GetFolderContent(resourceId);

                // this takes care of paging the results in
                List <Document> documents = feed.Entries.Where(item => item.Type != Document.DocumentType.Folder).ToList();
                Log.LogMessage(MessageImportance.Normal, "Found {0} Item(s)", documents.Count);

                DateTime folderTimestamp = folder.GetTimestamp();
                DateTime latestTimestamp = folderTimestamp;

                foreach (Document document in documents)
                {
                    if (_Cancelled)
                    {
                        return(false);
                    }

                    if (document.Updated > latestTimestamp)
                    {
                        latestTimestamp = document.Updated;
                    }
                    if (Pattern == null || PatternExpression.IsMatch(document.Title))
                    {
                        Log.LogMessage(MessageImportance.Normal, "Matched \"{0}\"", document.Title);
                        folderContent.Add(BuildContent(folder, document, folderMapping));
                    }
                    else
                    {
                        Log.LogMessage(MessageImportance.Low, "Skipped \"{0}\"", document.Title);
                    }
                }
                folder.CopyMetadataTo(folderListing);
                folderListing.Save(Log, latestTimestamp);
            }
            FolderContent = folderContent.ToArray();
            return(true);
        }
Beispiel #8
0
        public override bool Execute()
        {
            GDataCredentials credentials = GetDataCredentials();
            RequestSettings settings = new RequestSettings("code.google.com/p/exult/", credentials);
            settings.AutoPaging = true;
            settings.PageSize = 100;

            List<ITaskItem> folderContent = new List<ITaskItem>();

            WarnIfUneven(Tuple.Create("Folders", Folders), Tuple.Create("FolderListings", FolderListings));
            foreach (var tuple in Zip(Folders, FolderListings))
            {
                if (_Cancelled)
                {
                    return false;
                }

                ITaskItem folder = tuple.Item1;
                ITaskItem folderListing = tuple.Item2;

                folder.LoadCustomMetadata();
                folder.RequireDocumentType(Document.DocumentType.Folder);

                //yada/hrm.folder -> yada/hrm/
                string folderPath = Path.Combine(Path.GetDirectoryName(folder.ItemSpec), Path.GetFileNameWithoutExtension(folder.ItemSpec));
                RequireDirectory(folderPath);
                PathMapping folderMapping = new PathMapping(folderPath);

                Request request = new Request(settings);

                string resourceId = folder.RequireResourceId();

                Log.LogMessage(MessageImportance.High, "Getting Folder Content \"{0}\"", folder.RequireTitlePath());
                Feed<Document> feed = request.GetFolderContent(resourceId);

                // this takes care of paging the results in
                List<Document> documents = feed.Entries.Where(item => item.Type != Document.DocumentType.Folder).ToList();
                Log.LogMessage(MessageImportance.Normal, "Found {0} Item(s)", documents.Count);

                DateTime folderTimestamp = folder.GetTimestamp();
                DateTime latestTimestamp = folderTimestamp;

                foreach (Document document in documents)
                {
                    if (_Cancelled)
                    {
                        return false;
                    }

                    if (document.Updated > latestTimestamp)
                    {
                        latestTimestamp = document.Updated;
                    }
                    if (Pattern == null || PatternExpression.IsMatch(document.Title))
                    {
                        Log.LogMessage(MessageImportance.Normal, "Matched \"{0}\"", document.Title);
                        folderContent.Add(BuildContent(folder, document, folderMapping));
                    }
                    else
                    {
                        Log.LogMessage(MessageImportance.Low, "Skipped \"{0}\"", document.Title);
                    }
                }
                folder.CopyMetadataTo(folderListing);
                folderListing.Save(Log, latestTimestamp);
            }
            FolderContent = folderContent.ToArray();
            return true;
        }
Beispiel #9
0
        private TaskItem BuildContent(ITaskItem folder, Document document, PathMapping folderMapping)
        {
            PathMapping documentPath = new PathMapping(folderMapping, new TaskItem().FillMetadata(document));

            string targetFile = documentPath.MappedPath;

            TaskItem content = new TaskItem(targetFile);
            folder.CopyMetadataTo(content, FolderMetadataPrefix ?? "Folder");
            content.FillMetadata(documentPath);
            content.FillMetadata(document);

            content.RequireParentDirectory(Log);

            if (content.Exists())
            {
                DateTime updated = File.GetLastWriteTime(targetFile);
                Log.LogMessage(MessageImportance.Normal, "Exists at \"{0}\"", targetFile);
                if (updated != document.Updated)
                {
                    Log.LogMessage(MessageImportance.Low, "Updated - Local: {0} Remote: {1}", updated, document.Updated);
                }
                else
                {
                    Log.LogMessage(MessageImportance.Low, "Updated - {0}", document.Updated);
                }
            }
            else
            {
                Log.LogMessage(MessageImportance.Normal, "Detected new document");
            }

            if (document.DocumentEntry != null &&
                document.DocumentEntry.Content != null &&
                document.DocumentEntry.Content.Src != null)
            {
                content.SetMetadata("ExportUri", document.DocumentEntry.Content.Src.ToString());
            }

            content.Save(Log, document.Updated);

            return content;
        }
Beispiel #10
0
        private TaskItem BuildFolder(Document model, PathMapping mappedPath)
        {
            string targetFile = Path.ChangeExtension(Path.Combine(TargetDirectory, mappedPath.MappedPath), mappedPath.ResourceType.ToString());

            TaskItem folder = new TaskItem(targetFile);

            if (File.Exists(targetFile))
            {
                DateTime updated = File.GetLastWriteTime(targetFile);
                Log.LogMessage(MessageImportance.Normal, "Exists at \"{0}\"", targetFile);

                if (updated != model.Updated)
                {
                    Log.LogMessage(MessageImportance.Low, "Updated - Local: {0} Remote: {1}", updated, model.Updated);
                }
                else
                {
                    Log.LogMessage(MessageImportance.Low, "Updated - {0}", model.Updated);
                }
            }
            else
            {
                Log.LogMessage("Found new folder");
            }

            folder.FillMetadata(model);
            folder.FillMetadata(mappedPath);
            folder.Save(Log, model.Updated);

            return folder;
        }