This commit is contained in:
137
source/Plugins/AyaNova.Plugin.Dump/AyaNova.Plugin.Dump.csproj
Normal file
137
source/Plugins/AyaNova.Plugin.Dump/AyaNova.Plugin.Dump.csproj
Normal file
@@ -0,0 +1,137 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{A2A29280-0267-4B9B-A122-C3ECDFC3CFC7}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>AyaNova.Plugin.Dump</RootNamespace>
|
||||
<AssemblyName>AyaNova.Plugin.Dump</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>..\..\WinFormApp\bin\debug\plugins\Dump\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>..\..\..\release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<AssemblyOriginatorKeyFile>AyaNova.snk</AssemblyOriginatorKeyFile>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="ICSharpCode.SharpZipLib">
|
||||
<HintPath>..\..\..\3rdprtylibs\ziplib\ICSharpCode.SharpZipLib.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Newtonsoft.Json">
|
||||
<HintPath>..\..\..\3rdprtylibs\json.net.40\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Dump.cs" />
|
||||
<Compile Include="ProgressForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="ProgressForm.Designer.cs">
|
||||
<DependentUpon>ProgressForm.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Resource1.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Resource1.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Timestamp.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\AyaNova.PlugIn\AyaNova.PlugIn.csproj">
|
||||
<Project>{674bc3c9-4f74-4304-91ed-2eafffeb09a7}</Project>
|
||||
<Name>AyaNova.PlugIn</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\bizobjects\AyaLib\GZTW.AyaNova.BLL.csproj">
|
||||
<Project>{50b807b6-fc35-4cc3-b54d-91c78426a943}</Project>
|
||||
<Name>GZTW.AyaNova.BLL</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\csla10\CSLA.Core.Bindablebase\CSLA.Core.Bindablebase.csproj">
|
||||
<Project>{c2392355-12a9-4197-a1d3-603c390b1e62}</Project>
|
||||
<Name>CSLA.Core.Bindablebase</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\csla10\CSLA.Server.DataPortal\CSLA.Server.DataPortal.vbproj">
|
||||
<Project>{80828e2c-e9fb-4e73-a27c-7f9cdb96fcde}</Project>
|
||||
<Name>CSLA.Server.DataPortal</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\csla10\CSLA\CSLA.vbproj">
|
||||
<Project>{1b9a38bb-461a-47a4-ad72-099c694138a0}</Project>
|
||||
<Name>CSLA</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\Data\Data\GZTW.Data.csproj">
|
||||
<Project>{701893aa-c042-4fb2-8643-e139372c1117}</Project>
|
||||
<Name>GZTW.Data</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\Profile\GZTW.Profile\GZTW.Profile.csproj">
|
||||
<Project>{ede897e2-e2e6-441d-9f83-0b973ae09670}</Project>
|
||||
<Name>GZTW.Profile</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="AyaNova.snk" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="ProgressForm.resx">
|
||||
<DependentUpon>ProgressForm.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Resource1.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resource1.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Resources\Dump16.bmp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Resources\Dump32.png" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<PropertyGroup>
|
||||
<PreBuildEvent>"C:\data\AyaNova\utils\TimeStamp\bin\Release\TimeStamp.exe" "$(ProjectDir)Timestamp.cs" "/N:AyaNova.PlugIn.Dump"</PreBuildEvent>
|
||||
</PropertyGroup>
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
||||
BIN
source/Plugins/AyaNova.Plugin.Dump/AyaNova.snk
Normal file
BIN
source/Plugins/AyaNova.Plugin.Dump/AyaNova.snk
Normal file
Binary file not shown.
472
source/Plugins/AyaNova.Plugin.Dump/Dump.cs
Normal file
472
source/Plugins/AyaNova.Plugin.Dump/Dump.cs
Normal file
@@ -0,0 +1,472 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.ComponentModel;
|
||||
using System.Windows.Forms;
|
||||
using System.Reflection;
|
||||
using AyaNova.PlugIn;
|
||||
using GZTW.AyaNova.BLL;
|
||||
using System.IO;
|
||||
using System.IO.Compression;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Serialization;
|
||||
using ICSharpCode.SharpZipLib.Zip;
|
||||
|
||||
namespace AyaNova.Plugin.Dump
|
||||
{
|
||||
class Dump : IAyaNovaPlugin
|
||||
{
|
||||
|
||||
#region Plugin interface
|
||||
System.Resources.ResourceManager resman = null;
|
||||
private static List<RootObjectTypes> ObjectsWeCanDealWith = null;
|
||||
|
||||
|
||||
public string PluginName
|
||||
{
|
||||
get { return "DBDump export database"; }
|
||||
}
|
||||
|
||||
public string PluginVersion
|
||||
{
|
||||
get { return "7.5"; }
|
||||
}
|
||||
|
||||
public string About
|
||||
{
|
||||
get
|
||||
{
|
||||
return "AyaNova DBDump plugin\r\n" +
|
||||
"Built " + AyaNova.PlugIn.Dump.Timestamp.BuildAt.ToString() + "\r\n" +
|
||||
"Copyright 2018 Ground Zero Tech-Works Inc.";
|
||||
}
|
||||
}
|
||||
|
||||
public Guid PluginID
|
||||
{
|
||||
get { return new Guid("{73D7B77F-C96A-4198-9449-6529AFB6AA5B}"); }
|
||||
}
|
||||
|
||||
public System.Drawing.Image PluginSmallIcon
|
||||
{
|
||||
get { return Resource1.Dump16; }
|
||||
}
|
||||
|
||||
public System.Drawing.Image PluginLargeIcon
|
||||
{
|
||||
get { return Resource1.Dump32; }
|
||||
}
|
||||
|
||||
public System.Resources.ResourceManager AyaNovaResourceManager
|
||||
{
|
||||
set { resman = value; }
|
||||
get { return resman; }
|
||||
}
|
||||
|
||||
public bool Initialize(Version AyaNovaVersion, LocalizedTextTable localizedText)
|
||||
{
|
||||
if (AyaNovaVersion.Major < 7)
|
||||
{
|
||||
MessageBox.Show("This DBDump plugin requires AyaNova version 7.5 or newer");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (AyaNovaVersion.Minor < 5)
|
||||
{
|
||||
MessageBox.Show("This DBDump plugin requires AyaNova version 7.5 or newer");
|
||||
return false;
|
||||
}
|
||||
|
||||
ObjectsWeCanDealWith = new List<RootObjectTypes>();
|
||||
ObjectsWeCanDealWith.Add(RootObjectTypes.Nothing);
|
||||
return true;
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
;
|
||||
}
|
||||
|
||||
public bool SingleObjectMenuShow(RootObjectTypes objectType)
|
||||
{
|
||||
return (ObjectsWeCanDealWith.Contains(objectType));
|
||||
}
|
||||
|
||||
public bool MultipleObjectsMenuShow(RootObjectTypes objectType)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public List<AyaNovaPluginMenuItem> SingleObjectMenuOptions(RootObjectTypes objectType, object ayaNovaObject)
|
||||
{
|
||||
if (!ObjectsWeCanDealWith.Contains(objectType)) return null;
|
||||
List<AyaNovaPluginMenuItem> list = new List<AyaNovaPluginMenuItem>();
|
||||
list.Add(new AyaNovaPluginMenuItem("DBDump", "Dump database to export file", null, null));
|
||||
return list;
|
||||
}
|
||||
|
||||
public List<AyaNovaPluginMenuItem> MultipleObjectsMenuOptions(RootObjectTypes objectType)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public bool CommandSelectedForList(string commandKey, RootObjectTypes objectType, List<Guid> objectIDList, object listObject)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public void CommandSelectedForSingleObject(string commandKey, RootObjectTypes objectType, object ayaNovaObject)
|
||||
{
|
||||
|
||||
if (!User.CurrentUserIsAnAdministrator)
|
||||
{
|
||||
MessageBox.Show("This action can only be done by the AyaNova Administrator account");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!AyaBizUtils.AyaNovaConnectionSetting.SingleUserConnection)
|
||||
{
|
||||
MessageBox.Show("** WARNING: before proceeding ensure no other users are logged into AyaNova to ensure the integrity of your exported data. Failing to do so could result in damaged data. ***");
|
||||
MessageBox.Show("** WARNING: before proceeding make sure your AyaNova Generator service is STOPPED to ensure the integrity of your exported data. Failing to do so could result in damaged data. ***");
|
||||
}
|
||||
|
||||
//Only one command
|
||||
DumpIt();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// Dump the objects into a temporary directory as a series of JSON files
|
||||
/// then zip it all up into a single archive file and then erase the temporary folder
|
||||
/// </summary>
|
||||
private void DumpIt()
|
||||
{
|
||||
|
||||
string dumpname = "ayanova.data.dump." + DateTime.Now.ToString("yyyy-MM-d--HH-mm-ss");
|
||||
string dumpfolder = string.Empty;
|
||||
#if(DEBUG)
|
||||
dumpfolder = @"c:\temp";
|
||||
#else
|
||||
MessageBox.Show("Select a location to dump AyaNova data");
|
||||
using (var folderDialog = new FolderBrowserDialog())
|
||||
{
|
||||
if (folderDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
dumpfolder = folderDialog.SelectedPath;
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
//create a temporary folder to generate JSON in
|
||||
string tempArchiveFolder = dumpfolder + Path.DirectorySeparatorChar + dumpname;
|
||||
string zipName = dumpfolder + Path.DirectorySeparatorChar + dumpname + ".zip";
|
||||
makeFolderIfNotExist(tempArchiveFolder, true);
|
||||
|
||||
//Show progress form
|
||||
|
||||
ProgressForm progress = new ProgressForm();
|
||||
progress.Show();
|
||||
progress.Append("Dumping data to " + tempArchiveFolder);
|
||||
|
||||
//DUMP IT!
|
||||
dumpGlobalSettings(tempArchiveFolder, progress);
|
||||
dumpLocales(tempArchiveFolder, progress);
|
||||
dumpRegions(tempArchiveFolder, progress);
|
||||
dumpSeedNumbers(tempArchiveFolder, progress);
|
||||
dumpClients(tempArchiveFolder, progress);
|
||||
dumpHeadOffices(tempArchiveFolder, progress);
|
||||
|
||||
|
||||
|
||||
progress.Append("Zipping up archive");
|
||||
FastZip fastZip = new FastZip();
|
||||
fastZip.CreateZip(zipName, tempArchiveFolder, true, null);
|
||||
|
||||
progress.Append("Cleaning up temporary folder");
|
||||
Directory.Delete(tempArchiveFolder, true);
|
||||
|
||||
progress.Append("Dump completed");
|
||||
//-----------------------------------
|
||||
//endof method
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#region Object dump methods
|
||||
|
||||
#region Global settings
|
||||
private void dumpGlobalSettings(string tempArchiveFolder, ProgressForm progress)
|
||||
{
|
||||
List<string> objectExcludeProperties = new List<string>(standardExcludePropertiesList);
|
||||
progress.Append("Dumping Global Settings");
|
||||
DumpObjectToFolder(tempArchiveFolder, AyaBizUtils.GlobalSettings, "globalsettings", objectExcludeProperties);
|
||||
}
|
||||
#endregion globalsettings
|
||||
|
||||
#region locales
|
||||
private void dumpLocales(string tempArchiveFolder, ProgressForm progress)
|
||||
{
|
||||
List<string> objectExcludeProperties = new List<string>(standardExcludePropertiesList);
|
||||
|
||||
//Skip stock locales already handled in Raven
|
||||
List<string> SkipLocales = new List<string>();
|
||||
SkipLocales.Add("Deutsch");
|
||||
SkipLocales.Add("English");
|
||||
SkipLocales.Add("Español");
|
||||
SkipLocales.Add("Français");
|
||||
|
||||
LocaleList l = LocaleList.GetList();
|
||||
progress.Append("Dumping " + l.Count.ToString() + " Locales");
|
||||
foreach (LocaleList.LocaleListInfo i in l)
|
||||
{
|
||||
if (!SkipLocales.Contains(i.Locale))
|
||||
{
|
||||
LocalizedTextTable lt = LocalizedTextTable.Load(i.Locale);
|
||||
DumpObjectToFolder(tempArchiveFolder, lt.LT, "locale." + EnsureValidFileName(i.Locale), objectExcludeProperties, "GZTW.AyaNova.BLL.Locale");
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion locales
|
||||
|
||||
#region REGIONS
|
||||
private void dumpRegions(string tempArchiveFolder, ProgressForm progress)
|
||||
{
|
||||
List<string> objectExcludeProperties = new List<string>(standardExcludePropertiesList);
|
||||
objectExcludeProperties.Add("ContractName");
|
||||
objectExcludeProperties.Add("uiHasTechNotes");
|
||||
RegionList l = RegionList.GetList(string.Empty);
|
||||
progress.Append("Dumping " + l.Count.ToString() + " Regions");
|
||||
foreach (RegionList.RegionListInfo i in l)
|
||||
{
|
||||
|
||||
Region o = Region.GetItem(i.LT_Region_Label_Name.Value);
|
||||
DumpObjectToFolder(tempArchiveFolder, o, "region." + o.ID.ToString(), objectExcludeProperties);
|
||||
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Seeds
|
||||
private class GZSeeds
|
||||
{
|
||||
public int InventoryAdjustmentStartSeed = 1;
|
||||
public int PurchaseOrderStartSeed = 1;
|
||||
public int QuoteNumberStartSeed = 1;
|
||||
public int WorkorderNumberStartSeed = 1;
|
||||
public int PreventiveMaintenanceNumberStartSeed = 1;
|
||||
}
|
||||
private void dumpSeedNumbers(string tempArchiveFolder, ProgressForm progress)
|
||||
{
|
||||
List<string> objectExcludeProperties = new List<string>(standardExcludePropertiesList);
|
||||
progress.Append("Dumping seeds");
|
||||
//create a new object with the id numbers in it and then dump it
|
||||
WorkorderPMList pml = WorkorderPMList.GetList("<?xml version=\"1.0\" encoding=\"utf-16\" standalone=\"yes\"?> \r\n" +
|
||||
"<GRIDCRITERIA> \r\n" +
|
||||
" <COLUMNITEM CM=\"aWorkorderPreventiveMaintenance.aPreventiveMaintenanceNumber\" UI=\"LT_O_WorkorderPreventiveMaintenance\" PIN=\"0\" WIDTH=\"150\" SORT=\"DESC\" /> \r\n" +
|
||||
"</GRIDCRITERIA> ");
|
||||
|
||||
int PMStartSeed = 0;
|
||||
if (pml.Count > 0)
|
||||
{
|
||||
PMStartSeed = int.Parse(pml[0].LT_O_WorkorderPreventiveMaintenance.Display);
|
||||
}
|
||||
|
||||
var seeds = new GZSeeds();
|
||||
seeds.InventoryAdjustmentStartSeed = AyaBizUtils.GlobalSettings.InventoryAdjustmentStartSeed+1;
|
||||
seeds.PurchaseOrderStartSeed = AyaBizUtils.GlobalSettings.PurchaseOrderStartSeed+1;
|
||||
seeds.QuoteNumberStartSeed = AyaBizUtils.GlobalSettings.QuoteNumberStartSeed+1;
|
||||
seeds.WorkorderNumberStartSeed = AyaBizUtils.GlobalSettings.WorkorderNumberStartSeed+1;
|
||||
seeds.PreventiveMaintenanceNumberStartSeed = PMStartSeed+1;
|
||||
|
||||
DumpObjectToFolder(tempArchiveFolder, seeds, "seeds", objectExcludeProperties, "GZTW.AyaNova.BLL.Seed");
|
||||
}
|
||||
#endregion globalsettings
|
||||
|
||||
#region clients
|
||||
private void dumpClients(string tempArchiveFolder, ProgressForm progress)
|
||||
{
|
||||
List<string> objectExcludeProperties = new List<string>(standardExcludePropertiesList);
|
||||
objectExcludeProperties.Add("ContractName");
|
||||
objectExcludeProperties.Add("uiHasTechNotes");
|
||||
ClientPickList pl = ClientPickList.GetList();
|
||||
progress.Append("Dumping " + pl.Count.ToString() + " Clients");
|
||||
foreach (ClientPickList.ClientPickListInfo i in pl)
|
||||
{
|
||||
Client c = Client.GetItem(i.ID);
|
||||
DumpObjectToFolder(tempArchiveFolder, c, "client." + c.ID.ToString(), objectExcludeProperties);
|
||||
|
||||
}
|
||||
}
|
||||
#endregion clients
|
||||
|
||||
#region headoffices
|
||||
private void dumpHeadOffices(string tempArchiveFolder, ProgressForm progress)
|
||||
{
|
||||
List<string> excludes = new List<string>(standardExcludePropertiesList);
|
||||
//excludes.Add("ContractInEffect");
|
||||
//excludes.Add("uiHasTechNotes");
|
||||
PickListAutoComplete pl = PickListAutoComplete.GetList("**", "headoffice");
|
||||
|
||||
progress.Append("Dumping " + pl.Count.ToString() + " Head offices");
|
||||
foreach (PickListAutoComplete.PickListAutoCompleteInfo i in pl)
|
||||
{
|
||||
HeadOffice c = HeadOffice.GetItem(i.ID);
|
||||
DumpObjectToFolder(tempArchiveFolder, c, "headoffice." + c.ID.ToString(), excludes);
|
||||
}
|
||||
}
|
||||
#endregion clients
|
||||
|
||||
|
||||
|
||||
#endregion object dump methods
|
||||
|
||||
|
||||
#region Dump
|
||||
|
||||
/// <summary>
|
||||
/// Write out the object properties as JSON
|
||||
/// </summary>
|
||||
/// <param name="tempArchiveFolder"></param>
|
||||
/// <param name="o"></param>
|
||||
private void DumpObjectToFolder(string tempArchiveFolder, object o, string objectFileName, List<string> excludeProperties, string forceTypeString = "")
|
||||
{
|
||||
|
||||
var typestring = o.GetType().ToString();
|
||||
if (!string.IsNullOrWhiteSpace(forceTypeString))
|
||||
{
|
||||
typestring = forceTypeString;
|
||||
}
|
||||
|
||||
var dumpFolder = tempArchiveFolder + Path.DirectorySeparatorChar + typestring;
|
||||
makeFolderIfNotExist(dumpFolder);
|
||||
|
||||
var outputFileName = dumpFolder + Path.DirectorySeparatorChar + objectFileName + ".json";
|
||||
|
||||
JsonSerializer serializer = new JsonSerializer();
|
||||
serializer.NullValueHandling = NullValueHandling.Include;
|
||||
serializer.ContractResolver = new ExcludeNamedPropertiesContractResolver(excludeProperties);
|
||||
serializer.ReferenceLoopHandling = ReferenceLoopHandling.Serialize;
|
||||
|
||||
|
||||
#if(DEBUG)
|
||||
serializer.Formatting = Formatting.Indented;
|
||||
#endif
|
||||
// serializer.Converters.Add(new JavaScriptDateTimeConverter());
|
||||
// serializer.NullValueHandling = NullValueHandling.Ignore;
|
||||
|
||||
//generate file name, should be ID of object plus .json
|
||||
|
||||
|
||||
using (StreamWriter sw = new StreamWriter(outputFileName))
|
||||
using (JsonWriter writer = new JsonTextWriter(sw))
|
||||
{
|
||||
serializer.Serialize(writer, o);
|
||||
// {"ExpiryDate":new Date(1230375600000),"Price":0}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion dump
|
||||
|
||||
#region Utility methods
|
||||
|
||||
private static string EnsureValidFileName(string fileName)
|
||||
{
|
||||
//make lower and replace spaces with dashes
|
||||
fileName = fileName.ToLowerInvariant().Replace(" ", "-");
|
||||
|
||||
//ensure each character is a valid path character
|
||||
foreach (char c in System.IO.Path.GetInvalidFileNameChars())
|
||||
{
|
||||
fileName = fileName.Replace(c, '_');
|
||||
}
|
||||
return fileName;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static void makeFolderIfNotExist(string fldr, bool shouldNotExist = false)
|
||||
{
|
||||
if (Directory.Exists(fldr))
|
||||
{
|
||||
if (shouldNotExist)
|
||||
throw new System.Exception("Error: path already exists and shouldn't:\r\n" + fldr);
|
||||
return;
|
||||
}
|
||||
Directory.CreateDirectory(fldr);
|
||||
}
|
||||
|
||||
private List<string> standardExcludePropertiesList
|
||||
{
|
||||
get
|
||||
{
|
||||
return new List<string>()
|
||||
{
|
||||
"CanWiki",
|
||||
"CanDuplicate",
|
||||
"IsValid",
|
||||
"IsDirty",
|
||||
"CurrentUserID",
|
||||
"IsEditing",
|
||||
"IsNew",
|
||||
"IsDeleted",
|
||||
"IsSavable",
|
||||
"Notify",
|
||||
"BrokenRulesText",
|
||||
"Docs",
|
||||
"MapQuestURL",
|
||||
"FullAddress"
|
||||
//"XXX",
|
||||
//"XXX",
|
||||
//"XXX",
|
||||
//"XXX",
|
||||
//"XXX",
|
||||
//"XXX",
|
||||
//"XXX",
|
||||
//"XXX",
|
||||
//"XXX",
|
||||
//"XXX",
|
||||
//"XXX"
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region contract resolver
|
||||
public class ExcludeNamedPropertiesContractResolver : DefaultContractResolver
|
||||
{
|
||||
private readonly List<string> _excludeProperties;
|
||||
|
||||
public ExcludeNamedPropertiesContractResolver(List<string> excludeProperties)
|
||||
{
|
||||
_excludeProperties = excludeProperties;
|
||||
}
|
||||
|
||||
protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
|
||||
{
|
||||
IList<JsonProperty> properties = base.CreateProperties(type, memberSerialization);
|
||||
|
||||
// only serializer properties that start with the specified character
|
||||
//properties = properties.Where(p => p.PropertyName.StartsWith(_startingWithChar.ToString())).ToList();
|
||||
properties = properties.Where(p => !_excludeProperties.Contains(p.PropertyName)).ToList();
|
||||
|
||||
return properties;
|
||||
}
|
||||
}
|
||||
#endregion contract resolver
|
||||
|
||||
|
||||
//eoc
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
//eons
|
||||
}
|
||||
84
source/Plugins/AyaNova.Plugin.Dump/ProgressForm.Designer.cs
generated
Normal file
84
source/Plugins/AyaNova.Plugin.Dump/ProgressForm.Designer.cs
generated
Normal file
@@ -0,0 +1,84 @@
|
||||
namespace AyaNova.Plugin.Dump
|
||||
{
|
||||
partial class ProgressForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.edOut = new System.Windows.Forms.TextBox();
|
||||
this.btnClose = new System.Windows.Forms.Button();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// edOut
|
||||
//
|
||||
this.edOut.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.edOut.Location = new System.Drawing.Point(0, 0);
|
||||
this.edOut.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
|
||||
this.edOut.Multiline = true;
|
||||
this.edOut.Name = "edOut";
|
||||
this.edOut.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
|
||||
this.edOut.Size = new System.Drawing.Size(667, 410);
|
||||
this.edOut.TabIndex = 0;
|
||||
//
|
||||
// btnClose
|
||||
//
|
||||
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.btnClose.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.btnClose.Location = new System.Drawing.Point(574, 473);
|
||||
this.btnClose.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
|
||||
this.btnClose.Name = "btnClose";
|
||||
this.btnClose.Size = new System.Drawing.Size(82, 32);
|
||||
this.btnClose.TabIndex = 1;
|
||||
this.btnClose.Text = "Close";
|
||||
this.btnClose.UseVisualStyleBackColor = true;
|
||||
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
|
||||
//
|
||||
// ProgressForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.CancelButton = this.btnClose;
|
||||
this.ClientSize = new System.Drawing.Size(667, 516);
|
||||
this.ControlBox = false;
|
||||
this.Controls.Add(this.btnClose);
|
||||
this.Controls.Add(this.edOut);
|
||||
this.Cursor = System.Windows.Forms.Cursors.AppStarting;
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
|
||||
this.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
|
||||
this.Name = "ProgressForm";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||
this.Text = "Dumping...";
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TextBox edOut;
|
||||
private System.Windows.Forms.Button btnClose;
|
||||
}
|
||||
}
|
||||
29
source/Plugins/AyaNova.Plugin.Dump/ProgressForm.cs
Normal file
29
source/Plugins/AyaNova.Plugin.Dump/ProgressForm.cs
Normal file
@@ -0,0 +1,29 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AyaNova.Plugin.Dump
|
||||
{
|
||||
public partial class ProgressForm : Form
|
||||
{
|
||||
public ProgressForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public void Append(string txt)
|
||||
{
|
||||
edOut.AppendText(txt + "\r\n");
|
||||
}
|
||||
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
120
source/Plugins/AyaNova.Plugin.Dump/ProgressForm.resx
Normal file
120
source/Plugins/AyaNova.Plugin.Dump/ProgressForm.resx
Normal file
@@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
@@ -0,0 +1,36 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("AyaNova.Plugin.Dump")]
|
||||
[assembly: AssemblyDescription("Dump plugin for AyaNova")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("Ground Zero Tech-Works Inc.")]
|
||||
[assembly: AssemblyProduct("AyaNova.Plugin.Dump")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2017-2018 Ground Zero Tech-Works Inc.")]
|
||||
[assembly: AssemblyTrademark("AyaNova is a registered trademark of Ground Zero Tech-Works Inc.")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("36b5b94a-7afc-4c1b-9e31-1b8db30b8a07")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("7.5.0.0")]
|
||||
[assembly: AssemblyFileVersion("7.5.0.0")]
|
||||
83
source/Plugins/AyaNova.Plugin.Dump/Resource1.Designer.cs
generated
Normal file
83
source/Plugins/AyaNova.Plugin.Dump/Resource1.Designer.cs
generated
Normal file
@@ -0,0 +1,83 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace AyaNova.Plugin.Dump {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||
/// </summary>
|
||||
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||
// class via a tool like ResGen or Visual Studio.
|
||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||
// with the /str option, or rebuild your VS project.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resource1 {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Resource1() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the cached ResourceManager instance used by this class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AyaNova.Plugin.Dump.Resource1", typeof(Resource1).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the current thread's CurrentUICulture property for all
|
||||
/// resource lookups using this strongly typed resource class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap Dump16 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("Dump16", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap Dump32 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("Dump32", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
127
source/Plugins/AyaNova.Plugin.Dump/Resource1.resx
Normal file
127
source/Plugins/AyaNova.Plugin.Dump/Resource1.resx
Normal file
@@ -0,0 +1,127 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="Dump16" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>Resources\Dump16.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Dump32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>Resources\Dump32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
||||
BIN
source/Plugins/AyaNova.Plugin.Dump/Resources/Dump16.bmp
Normal file
BIN
source/Plugins/AyaNova.Plugin.Dump/Resources/Dump16.bmp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.3 KiB |
BIN
source/Plugins/AyaNova.Plugin.Dump/Resources/Dump32.png
Normal file
BIN
source/Plugins/AyaNova.Plugin.Dump/Resources/Dump32.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 701 B |
Reference in New Issue
Block a user