private IProjectPage RebuildProject(string areaName, PageSummary project)
{
Console.WriteLine("Processing page '{0} / {1}'...", areaName, project.Name);
IProjectPage page;
try
{
ProjectType projectType;
var projectName = ResolveProjectName(project.Name, out projectType);
var existing = m_confluence.GetCachedPage(project);
var document = new PageDocument(existing.Content);
switch (projectType)
{
case ProjectType.Library:
page = new LibraryProjectPage(areaName, projectName, project.Name, document, m_owners);
break;
case ProjectType.Website:
page = new WebsiteProjectPage(areaName, projectName, project.Name, document, m_owners);
break;
case ProjectType.Webservice:
page = new WebserviceProjectPage(areaName, projectName, project.Name, document, m_owners);
break;
case ProjectType.Service:
page = new ServiceProjectPage(areaName, projectName, project.Name, document, m_owners);
break;
case ProjectType.Console:
page = new ConsoleProjectPage(areaName, projectName, project.Name, document, m_owners);
break;
case ProjectType.Windows:
page = new WindowsProjectPage(areaName, projectName, project.Name, document, m_owners);
break;
case ProjectType.CloudRole:
page = new CloudRoleProjectPage(areaName, projectName, project.Name, document, m_owners);
break;
case ProjectType.CloudService:
page = new CloudServiceProjectPage(areaName, projectName, project.Name, document, m_owners);
break;
case ProjectType.FabricService:
page = new FabricServiceProjectPage(areaName, projectName, project.Name, document, m_owners);
break;
case ProjectType.FabricApplication:
page = new FabricApplicationProjectPage(areaName, projectName, project.Name, document, m_owners);
break;
default:
throw new InvalidOperationException(
$"Unknown how to process project of type '{projectType.ToString().ToLowerInvariant()}'.");
}
page.CheckPage(m_tfs);
var updated = UpdateProjectPage(page, existing);
if (updated)
{
Console.WriteLine("[{0}] {1} #{2}... UPDATED", areaName, projectName, projectType.ToString().ToLowerInvariant());
}
else
{
Console.WriteLine("[{0}] {1} #{2}... not changed", areaName, projectName, projectType.ToString().ToLowerInvariant());
}
}
catch (Exception e)
{
throw new InvalidOperationException(
$"An error occurred while processing page '{project.Name}' version {project.Version}.",
e);
}
return page;
}