// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
namespace WixToolset.VisualStudio
{
#if TODO_CONSIDER_DECOMPILER
using System;
using System.Collections;
using System.Diagnostics;
using System.Globalization;
using WixToolset.Data;
using WixToolset.Extensibility;
using VS = WixToolset.Extensions.Serialize.VS;
using Wix = WixToolset.Data.Serialize;
///
/// The decompiler for the WiX Toolset Visual Studio Extension.
///
public sealed class VSDecompiler : DecompilerExtension
{
///
/// Creates a decompiler for VS Extension.
///
public VSDecompiler()
{
this.TableDefinitions = VSExtensionData.GetExtensionTableDefinitions();
}
///
/// Get the extensions library to be removed.
///
/// Table definitions for library.
/// Library to remove from decompiled output.
public override Library GetLibraryToRemove(TableDefinitionCollection tableDefinitions)
{
return VSExtensionData.GetExtensionLibrary(tableDefinitions);
}
///
/// Decompiles an extension table.
///
/// The table to decompile.
public override void DecompileTable(Table table)
{
switch (table.Name)
{
case "HelpFile":
this.DecompileHelpFileTable(table);
break;
case "HelpFileToNamespace":
this.DecompileHelpFileToNamespaceTable(table);
break;
case "HelpFilter":
this.DecompileHelpFilterTable(table);
break;
case "HelpFilterToNamespace":
this.DecompileHelpFilterToNamespaceTable(table);
break;
case "HelpNamespace":
this.DecompileHelpNamespaceTable(table);
break;
case "HelpPlugin":
this.DecompileHelpPluginTable(table);
break;
default:
base.DecompileTable(table);
break;
}
}
///
/// Decompile the HelpFile table.
///
/// The table to decompile.
private void DecompileHelpFileTable(Table table)
{
foreach (Row row in table.Rows)
{
VS.HelpFile helpFile = new VS.HelpFile();
helpFile.Id = (string)row[0];
helpFile.Name = (string)row[1];
if (null != row[2])
{
helpFile.Language = (int)row[2];
}
if (null != row[4])
{
helpFile.Index = (string)row[4];
}
if (null != row[5])
{
helpFile.Search = (string)row[5];
}
if (null != row[6])
{
helpFile.AttributeIndex = (string)row[6];
}
if (null != row[7])
{
helpFile.SampleLocation = (string)row[7];
}
if (this.Core.RootElement is Wix.Module)
{
helpFile.SuppressCustomActions = VS.YesNoType.yes;
}
Wix.File file = (Wix.File)this.Core.GetIndexedElement("File", (string)row[3]);
if (null != file)
{
file.AddChild(helpFile);
}
else
{
this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "File_HxS", (string)row[3], "File"));
}
}
}
///
/// Decompile the HelpFileToNamespace table.
///
/// The table to decompile.
private void DecompileHelpFileToNamespaceTable(Table table)
{
foreach (Row row in table.Rows)
{
VS.HelpFileRef helpFileRef = new VS.HelpFileRef();
helpFileRef.Id = (string)row[0];
VS.HelpCollection helpCollection = (VS.HelpCollection)this.Core.GetIndexedElement("HelpNamespace", (string)row[1]);
if (null != helpCollection)
{
helpCollection.AddChild(helpFileRef);
}
else
{
this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "HelpNamespace_", (string)row[1], "HelpNamespace"));
}
}
}
///
/// Decompile the HelpFilter table.
///
/// The table to decompile.
private void DecompileHelpFilterTable(Table table)
{
foreach (Row row in table.Rows)
{
VS.HelpFilter helpFilter = new VS.HelpFilter();
helpFilter.Id = (string)row[0];
helpFilter.Name = (string)row[1];
if (null != row[2])
{
helpFilter.FilterDefinition = (string)row[2];
}
if (this.Core.RootElement is Wix.Module)
{
helpFilter.SuppressCustomActions = VS.YesNoType.yes;
}
this.Core.RootElement.AddChild(helpFilter);
}
}
///
/// Decompile the HelpFilterToNamespace table.
///
/// The table to decompile.
private void DecompileHelpFilterToNamespaceTable(Table table)
{
foreach (Row row in table.Rows)
{
VS.HelpFilterRef helpFilterRef = new VS.HelpFilterRef();
helpFilterRef.Id = (string)row[0];
VS.HelpCollection helpCollection = (VS.HelpCollection)this.Core.GetIndexedElement("HelpNamespace", (string)row[1]);
if (null != helpCollection)
{
helpCollection.AddChild(helpFilterRef);
}
else
{
this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "HelpNamespace_", (string)row[1], "HelpNamespace"));
}
}
}
///
/// Decompile the HelpNamespace table.
///
/// The table to decompile.
private void DecompileHelpNamespaceTable(Table table)
{
foreach (Row row in table.Rows)
{
VS.HelpCollection helpCollection = new VS.HelpCollection();
helpCollection.Id = (string)row[0];
helpCollection.Name = (string)row[1];
if (null != row[3])
{
helpCollection.Description = (string)row[3];
}
if (this.Core.RootElement is Wix.Module)
{
helpCollection.SuppressCustomActions = VS.YesNoType.yes;
}
Wix.File file = (Wix.File)this.Core.GetIndexedElement("File", (string)row[2]);
if (null != file)
{
file.AddChild(helpCollection);
}
else if (0 != String.Compare(helpCollection.Id, "MS_VSIPCC_v80", StringComparison.Ordinal) &&
0 != String.Compare(helpCollection.Id, "MS.VSIPCC.v90", StringComparison.Ordinal))
{
this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "File_Collection", (string)row[2], "File"));
}
this.Core.IndexElement(row, helpCollection);
}
}
///
/// Decompile the HelpPlugin table.
///
/// The table to decompile.
private void DecompileHelpPluginTable(Table table)
{
foreach (Row row in table.Rows)
{
VS.PlugCollectionInto plugCollectionInto = new VS.PlugCollectionInto();
plugCollectionInto.TargetCollection = (string)row[1];
if (null != row[2])
{
plugCollectionInto.TableOfContents = (string)row[2];
}
if (null != row[3])
{
plugCollectionInto.Attributes = (string)row[3];
}
if (null != row[4])
{
plugCollectionInto.TargetTableOfContents = (string)row[4];
}
if (this.Core.RootElement is Wix.Module)
{
plugCollectionInto.SuppressExternalNamespaces = VS.YesNoType.yes;
}
//we cannot do this work because we cannot get the FeatureComponent table
//plugCollectionInto.TargetFeature = DecompileHelpComponents();
VS.HelpCollection helpCollection = (VS.HelpCollection)this.Core.GetIndexedElement("HelpNamespace", (string)row[0]);
if (null != helpCollection)
{
helpCollection.AddChild(plugCollectionInto);
}
else
{
this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "HelpNamespace_", (string)row[0], "HelpNamespace"));
}
}
}
//private string DecompileHelpComponents()
//{
// throw new NotImplementedException();
// //Find both known compontents from FeatureComponents table and build feature list
// //remove components from FeatureComponents
// //return a space delimited list of features that mapped to our help components
// return String.Empty;
//}
}
#endif
}