초기 커밋.

This commit is contained in:
2025-02-03 11:02:48 +09:00
parent a7d46f415f
commit fe9aa0799f
2334 changed files with 674826 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<appSettings>
</appSettings>
</configuration>

37
DDUtilityApp/App.config Normal file
View File

@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/>
</startup>
<appSettings>
<add key="ClientSettingsProvider.ServiceUri" value=""/>
</appSettings>
<system.web>
<membership defaultProvider="ClientAuthenticationMembershipProvider">
<providers>
<add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri=""/>
</providers>
</membership>
<roleManager defaultProvider="ClientRoleProvider" enabled="true">
<providers>
<add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400"/>
</providers>
</roleManager>
</system.web>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<ClassDiagram />

Binary file not shown.

View File

@@ -0,0 +1,609 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" 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>{B8459F14-92D3-482C-A932-65E76E6D11F6}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>DDUtilityApp</RootNamespace>
<AssemblyName>DDUtilityApp</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<IsWebBootstrapper>true</IsWebBootstrapper>
<TargetFrameworkProfile />
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<PublishUrl>ftp://192.168.100.11/eqview/Provider/</PublishUrl>
<Install>true</Install>
<InstallFrom>Web</InstallFrom>
<UpdateEnabled>true</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>true</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<InstallUrl>http://pms.e1soft.co.kr:8090/Deploy/eqview/Provider/</InstallUrl>
<ProductName>EverOne EES Utility</ProductName>
<PublisherName>EverOne</PublisherName>
<SuiteName>Utility %28에버원 운영팀%29</SuiteName>
<MinimumRequiredVersion>1.0.0.2</MinimumRequiredVersion>
<CreateWebPageOnPublish>true</CreateWebPageOnPublish>
<WebPage>index.htm</WebPage>
<TrustUrlParameters>true</TrustUrlParameters>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>2025.01.07.0</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<CreateDesktopShortcut>true</CreateDesktopShortcut>
<PublishWizardCompleted>true</PublishWizardCompleted>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DebugSymbols>true</DebugSymbols>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>IMAGE\CampingFire.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup>
<ManifestCertificateThumbprint>364E4871F73BB57064DCBA003F81DDF47397861F</ManifestCertificateThumbprint>
</PropertyGroup>
<PropertyGroup>
<ManifestKeyFile>DDUtilityApp_TemporaryKey.pfx</ManifestKeyFile>
</PropertyGroup>
<PropertyGroup>
<GenerateManifests>true</GenerateManifests>
</PropertyGroup>
<PropertyGroup>
<SignManifests>false</SignManifests>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\ARM64\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>ARM64</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\ARM64\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>ARM64</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="AWSSDK.Core, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604, processorArchitecture=MSIL">
<HintPath>..\packages\AWSSDK.Core.3.7.100.14\lib\net45\AWSSDK.Core.dll</HintPath>
</Reference>
<Reference Include="AWSSDK.SecurityToken, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604, processorArchitecture=MSIL">
<HintPath>..\packages\AWSSDK.SecurityToken.3.7.100.14\lib\net45\AWSSDK.SecurityToken.dll</HintPath>
</Reference>
<Reference Include="DnsClient, Version=1.6.1.0, Culture=neutral, PublicKeyToken=4574bb5573c51424, processorArchitecture=MSIL">
<HintPath>..\packages\DnsClient.1.6.1\lib\net471\DnsClient.dll</HintPath>
</Reference>
<Reference Include="EIS.Framework">
<HintPath>..\Library\EIS.Framework.dll</HintPath>
</Reference>
<Reference Include="JWH.SECS, Version=2022.2.4.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Library\JWH.SECS.dll</HintPath>
</Reference>
<Reference Include="log4net, Version=2.0.12.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.12\lib\net45\log4net.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.5.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Extensions.Logging.Abstractions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Extensions.Logging.Abstractions.2.0.0\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Win32.Registry, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Win32.Registry.5.0.0\lib\net461\Microsoft.Win32.Registry.dll</HintPath>
</Reference>
<Reference Include="MongoDB.Bson, Version=2.24.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MongoDB.Bson.2.24.0\lib\net472\MongoDB.Bson.dll</HintPath>
</Reference>
<Reference Include="MongoDB.Driver, Version=2.24.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MongoDB.Driver.2.24.0\lib\net472\MongoDB.Driver.dll</HintPath>
</Reference>
<Reference Include="MongoDB.Driver.Core, Version=2.24.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MongoDB.Driver.Core.2.24.0\lib\net472\MongoDB.Driver.Core.dll</HintPath>
</Reference>
<Reference Include="MongoDB.Libmongocrypt, Version=1.8.2.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MongoDB.Libmongocrypt.1.8.2\lib\netstandard2.0\MongoDB.Libmongocrypt.dll</HintPath>
</Reference>
<Reference Include="SharpCompress, Version=0.30.1.0, Culture=neutral, PublicKeyToken=afb0a02973931d96, processorArchitecture=MSIL">
<HintPath>..\packages\SharpCompress.0.30.1\lib\net461\SharpCompress.dll</HintPath>
</Reference>
<Reference Include="Snappier, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a1b25124e6e13a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Snappier.1.0.0\lib\netstandard2.0\Snappier.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.IO, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.4.3.0\lib\net462\System.IO.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Net.Http, Version=4.1.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Runtime, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.5.0.0\lib\net45\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Security.AccessControl, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.AccessControl.5.0.0\lib\net461\System.Security.AccessControl.dll</HintPath>
</Reference>
<Reference Include="System.Security.Cryptography.Algorithms, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net463\System.Security.Cryptography.Algorithms.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Security.Cryptography.Encoding, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Security.Cryptography.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Security.Cryptography.X509Certificates, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Security.Principal.Windows, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Principal.Windows.5.0.0\lib\net461\System.Security.Principal.Windows.dll</HintPath>
</Reference>
<Reference Include="System.Text.Encoding.CodePages, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.Encoding.CodePages.5.0.0\lib\net461\System.Text.Encoding.CodePages.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Web" />
<Reference Include="System.Web.Extensions" />
<Reference Include="System.Windows.Forms.DataVisualization" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="Telerik.WinControls, Version=2019.1.219.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Library\TelerikWinForms-R1-2019_Bin40\Telerik.WinControls.dll</HintPath>
</Reference>
<Reference Include="Telerik.WinControls.ChartView, Version=2019.1.219.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Library\TelerikWinForms-R1-2019_Bin40\Telerik.WinControls.ChartView.dll</HintPath>
</Reference>
<Reference Include="Telerik.WinControls.GridView, Version=2019.1.219.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Library\TelerikWinForms-R1-2019_Bin40\Telerik.WinControls.GridView.dll</HintPath>
</Reference>
<Reference Include="Telerik.WinControls.UI, Version=2019.1.219.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Library\TelerikWinForms-R1-2019_Bin40\Telerik.WinControls.UI.dll</HintPath>
</Reference>
<Reference Include="TelerikCommon, Version=2019.1.219.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Library\TelerikWinForms-R1-2019_Bin40\TelerikCommon.dll</HintPath>
</Reference>
<Reference Include="TelerikExport, Version=2019.1.219.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Library\TelerikWinForms-R1-2019_Bin40\TelerikExport.dll</HintPath>
</Reference>
<Reference Include="TIBCO.Rendezvous, Version=1.0.5155.23393, Culture=neutral, PublicKeyToken=1a696d1f90f6158a, processorArchitecture=AMD64">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Library\TIBCO 8.4.2\TIBCO.Rendezvous.dll</HintPath>
</Reference>
<Reference Include="ZstdSharp, Version=0.7.3.0, Culture=neutral, PublicKeyToken=8d151af33a4ad5cf, processorArchitecture=MSIL">
<HintPath>..\packages\ZstdSharp.Port.0.7.3\lib\net461\ZstdSharp.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="ETC\FrmTIbcoConfig.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ETC\FrmTIbcoConfig.Designer.cs">
<DependentUpon>FrmTIbcoConfig.cs</DependentUpon>
</Compile>
<Compile Include="GlobalVariable.cs" />
<Compile Include="LOGPARSER\DATA\CompressInformation.cs" />
<Compile Include="LOGPARSER\DATA\EisEquipment.cs" />
<Compile Include="LOGPARSER\DATA\EisEquipmentModelDetails.cs" />
<Compile Include="LOGPARSER\FrmHsmsViewer.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="LOGPARSER\FrmHsmsViewer.Designer.cs">
<DependentUpon>FrmHsmsViewer.cs</DependentUpon>
</Compile>
<Compile Include="LOGPARSER\FrmMessageReplyTime1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="LOGPARSER\FrmMessageReplyTime1.Designer.cs">
<DependentUpon>FrmMessageReplyTime1.cs</DependentUpon>
</Compile>
<Compile Include="LOGPARSER\FrmMessageReplyTime.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="LOGPARSER\FrmMessageReplyTime.Designer.cs">
<DependentUpon>FrmMessageReplyTime.cs</DependentUpon>
</Compile>
<Compile Include="LOGPARSER\FrmSecsDefine.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="LOGPARSER\FrmSecsDefine.Designer.cs">
<DependentUpon>FrmSecsDefine.cs</DependentUpon>
</Compile>
<Compile Include="LOGPARSER\FrmWorkFlow.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="LOGPARSER\FrmWorkFlow.Designer.cs">
<DependentUpon>FrmWorkFlow.cs</DependentUpon>
</Compile>
<Compile Include="LOGPARSER\GemSetting.cs" />
<Compile Include="LOGPARSER\DATA\LogFile.cs" />
<Compile Include="LOGPARSER\LogServer.cs" />
<Compile Include="LOGPARSER\DATA\StandardData.cs" />
<Compile Include="LOGPARSER\FrmFindDialog.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="LOGPARSER\FrmFindDialog.Designer.cs">
<DependentUpon>FrmFindDialog.cs</DependentUpon>
</Compile>
<Compile Include="LOGPARSER\FrmLogParser03.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="LOGPARSER\FrmLogParser03.Designer.cs">
<DependentUpon>FrmLogParser03.cs</DependentUpon>
</Compile>
<Compile Include="LOGPARSER\FrmLogParser02.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="LOGPARSER\FrmLogParser02.Designer.cs">
<DependentUpon>FrmLogParser02.cs</DependentUpon>
</Compile>
<Compile Include="LOGPARSER\FrmLogParser01.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="LOGPARSER\FrmLogParser01.Designer.cs">
<DependentUpon>FrmLogParser01.cs</DependentUpon>
</Compile>
<Compile Include="LOGPARSER\FrmLogParser.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="LOGPARSER\FrmLogParser.Designer.cs">
<DependentUpon>FrmLogParser.cs</DependentUpon>
</Compile>
<Compile Include="FrmMain.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FrmMain.Designer.cs">
<DependentUpon>FrmMain.cs</DependentUpon>
</Compile>
<Compile Include="LOGPARSER\PARSER\AgvParser.cs" />
<Compile Include="LOGPARSER\PARSER\EisParser0.cs" />
<Compile Include="LOGPARSER\PARSER\EisParser.cs" />
<Compile Include="LOGPARSER\PARSER\LogParser.cs" />
<Compile Include="LOGPARSER\FrmEqSelector.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="LOGPARSER\FrmEqSelector.Designer.cs">
<DependentUpon>FrmEqSelector.cs</DependentUpon>
</Compile>
<Compile Include="MONGO\FDCMongoDB.cs" />
<Compile Include="MONGO\FrmFDCMongo.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MONGO\FrmFDCMongo.Designer.cs">
<DependentUpon>FrmFDCMongo.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SECS\CEID.cs" />
<Compile Include="SECS\SECSDefine.cs" />
<Compile Include="SECS\RPT.cs" />
<Compile Include="SECS\SECSLib.cs" />
<Compile Include="SECS\SECSItem.cs" />
<Compile Include="SECS\VID.cs" />
<Compile Include="SPECDOCUMENT\DocumentInfo.cs" />
<Compile Include="SPECDOCUMENT\FrmSpecDocument.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="SPECDOCUMENT\FrmSpecDocument.Designer.cs">
<DependentUpon>FrmSpecDocument.cs</DependentUpon>
</Compile>
<Compile Include="SPECDOCUMENT\SpecDocument.cs" />
<Compile Include="SPECDOCUMENT\SpecInfo.cs" />
<Compile Include="TEST\FrmTest01.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="TEST\FrmTest01.Designer.cs">
<DependentUpon>FrmTest01.cs</DependentUpon>
</Compile>
<Compile Include="TIBRENDEZVOUS\DATA\Daemon.cs" />
<Compile Include="TIBRENDEZVOUS\DATA\Mode.cs" />
<Compile Include="TIBRENDEZVOUS\DATA\Network.cs" />
<Compile Include="TIBRENDEZVOUS\DATA\SendSubject.cs" />
<Compile Include="TIBRENDEZVOUS\DATA\Server.cs" />
<Compile Include="TIBRENDEZVOUS\DATA\Service.cs" />
<Compile Include="TIBRENDEZVOUS\DATA\Subject.cs" />
<Compile Include="TIBRENDEZVOUS\DATA\TargetServer.cs" />
<Compile Include="TIBRENDEZVOUS\FrmSimulator01.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="TIBRENDEZVOUS\FrmSimulator01.Designer.cs">
<DependentUpon>FrmSimulator01.cs</DependentUpon>
</Compile>
<Compile Include="WORKFLOW\DATA\DynamicActivity.cs" />
<Compile Include="WORKFLOW\DATA\FlowBase.cs" />
<Compile Include="WORKFLOW\DATA\Flowchart.cs" />
<Compile Include="WORKFLOW\DATA\FlowDecision.cs" />
<Compile Include="WORKFLOW\DATA\FlowStep.cs" />
<Compile Include="WORKFLOW\DATA\Parameter.cs" />
<Compile Include="WORKFLOW\DATA\ViewState.cs" />
<Compile Include="WORKFLOW\FrmWorkflow.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="WORKFLOW\FrmWorkflow.Designer.cs">
<DependentUpon>FrmWorkflow.cs</DependentUpon>
</Compile>
<Compile Include="WORKFLOW\Workflow.cs" />
<Content Include="tibrv.dll" />
<Content Include="tibrvcm.dll" />
<Content Include="tibrvcmq.dll" />
<Content Include="tibrvft.dll" />
<EmbeddedResource Include="ETC\FrmTIbcoConfig.resx">
<DependentUpon>FrmTIbcoConfig.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="LOGPARSER\FrmFindDialog.resx">
<DependentUpon>FrmFindDialog.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="LOGPARSER\FrmHsmsViewer.resx">
<DependentUpon>FrmHsmsViewer.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="LOGPARSER\FrmLogParser03.resx">
<DependentUpon>FrmLogParser03.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="LOGPARSER\FrmLogParser02.resx">
<DependentUpon>FrmLogParser02.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="LOGPARSER\FrmLogParser01.resx">
<DependentUpon>FrmLogParser01.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="LOGPARSER\FrmLogParser.resx">
<DependentUpon>FrmLogParser.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="FrmMain.resx">
<DependentUpon>FrmMain.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="LOGPARSER\FrmEqSelector.resx">
<DependentUpon>FrmEqSelector.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="LOGPARSER\FrmMessageReplyTime1.resx">
<DependentUpon>FrmMessageReplyTime1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="LOGPARSER\FrmMessageReplyTime.resx">
<DependentUpon>FrmMessageReplyTime.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="LOGPARSER\FrmSecsDefine.resx">
<DependentUpon>FrmSecsDefine.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="LOGPARSER\FrmWorkFlow.resx">
<DependentUpon>FrmWorkFlow.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="MONGO\FrmFDCMongo.resx">
<DependentUpon>FrmFDCMongo.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\licenses.licx" />
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<EmbeddedResource Include="SPECDOCUMENT\FrmSpecDocument.resx">
<DependentUpon>FrmSpecDocument.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="TEST\FrmTest01.resx">
<DependentUpon>FrmTest01.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="TIBRENDEZVOUS\FrmSimulator01.resx">
<DependentUpon>FrmSimulator01.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="WORKFLOW\FrmWorkflow.resx">
<DependentUpon>FrmWorkflow.cs</DependentUpon>
</EmbeddedResource>
<None Include="App.Release.config" />
<None Include="DDUtilityApp_TemporaryKey.pfx" />
<Content Include="IMAGE\CampingFire.ico" />
<Content Include="IMAGE\Fire.ico" />
<Content Include="IMAGE\Main.ico" />
<Content Include="log4net.config">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\JWH\JWH.csproj">
<Project>{004bc1f3-b24a-402d-92ed-c5fc501e915a}</Project>
<Name>JWH</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Content Include="IMAGE\icon03.ico" />
<Content Include="IMAGE\machine.ico" />
<Content Include="ReadMe.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="TibRendezvousInfo.xml">
<SubType>Designer</SubType>
</Content>
</ItemGroup>
<ItemGroup>
<Folder Include="POPUP\" />
<Folder Include="TIBRENDEZVOUS\PARSER\" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.6.1">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.6.1%28x86 및 x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<PublishFile Include="DDUtilityApp.pdb">
<Visible>False</Visible>
<Group>
</Group>
<TargetPath>
</TargetPath>
<PublishState>Include</PublishState>
<IncludeHash>True</IncludeHash>
<FileType>File</FileType>
</PublishFile>
<PublishFile Include="JWH.pdb">
<Visible>False</Visible>
<Group>
</Group>
<TargetPath>
</TargetPath>
<PublishState>Include</PublishState>
<IncludeHash>True</IncludeHash>
<FileType>File</FileType>
</PublishFile>
</ItemGroup>
<ItemGroup>
<Analyzer Include="..\packages\AWSSDK.SecurityToken.3.7.100.14\analyzers\dotnet\cs\AWSSDK.SecurityToken.CodeAnalysis.dll" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>
</PostBuildEvent>
</PropertyGroup>
<Import Project="..\packages\MongoDB.Libmongocrypt.1.8.2\build\MongoDB.Libmongocrypt.targets" Condition="Exists('..\packages\MongoDB.Libmongocrypt.1.8.2\build\MongoDB.Libmongocrypt.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=322105를 참조하십시오. 누락된 파일은 {0}입니다.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\MongoDB.Libmongocrypt.1.8.2\build\MongoDB.Libmongocrypt.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MongoDB.Libmongocrypt.1.8.2\build\MongoDB.Libmongocrypt.targets'))" />
</Target>
</Project>

View File

@@ -0,0 +1,238 @@
namespace DDUtilityApp.ETC
{
partial class FrmTIbcoConfig
{
/// <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.panel1 = new System.Windows.Forms.Panel();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.tboxFilename = new System.Windows.Forms.TextBox();
this.btnSave = new System.Windows.Forms.Button();
this.splitContainer2 = new System.Windows.Forms.SplitContainer();
this.panel2 = new System.Windows.Forms.Panel();
this.textBox1 = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.panel3 = new System.Windows.Forms.Panel();
this.panel4 = new System.Windows.Forms.Panel();
this.textBox2 = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.panel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
this.splitContainer2.Panel1.SuspendLayout();
this.splitContainer2.Panel2.SuspendLayout();
this.splitContainer2.SuspendLayout();
this.panel2.SuspendLayout();
this.panel3.SuspendLayout();
this.panel4.SuspendLayout();
this.SuspendLayout();
//
// panel1
//
this.panel1.Controls.Add(this.splitContainer1);
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(800, 450);
this.panel1.TabIndex = 0;
//
// splitContainer1
//
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.splitContainer1.Location = new System.Drawing.Point(0, 0);
this.splitContainer1.Name = "splitContainer1";
this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.tboxFilename);
this.splitContainer1.Panel1.Controls.Add(this.btnSave);
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.splitContainer2);
this.splitContainer1.Size = new System.Drawing.Size(800, 450);
this.splitContainer1.SplitterDistance = 51;
this.splitContainer1.TabIndex = 0;
//
// tboxFilename
//
this.tboxFilename.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tboxFilename.Location = new System.Drawing.Point(129, 14);
this.tboxFilename.Name = "tboxFilename";
this.tboxFilename.Size = new System.Drawing.Size(659, 21);
this.tboxFilename.TabIndex = 1;
//
// btnSave
//
this.btnSave.Location = new System.Drawing.Point(12, 12);
this.btnSave.Name = "btnSave";
this.btnSave.Size = new System.Drawing.Size(111, 23);
this.btnSave.TabIndex = 0;
this.btnSave.Text = "Save";
this.btnSave.UseVisualStyleBackColor = true;
//
// splitContainer2
//
this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer2.Location = new System.Drawing.Point(0, 0);
this.splitContainer2.Name = "splitContainer2";
//
// splitContainer2.Panel1
//
this.splitContainer2.Panel1.Controls.Add(this.panel2);
this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(3);
//
// splitContainer2.Panel2
//
this.splitContainer2.Panel2.Controls.Add(this.panel3);
this.splitContainer2.Size = new System.Drawing.Size(800, 395);
this.splitContainer2.SplitterDistance = 411;
this.splitContainer2.TabIndex = 0;
//
// panel2
//
this.panel2.Controls.Add(this.textBox1);
this.panel2.Controls.Add(this.label1);
this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel2.Location = new System.Drawing.Point(3, 3);
this.panel2.Name = "panel2";
this.panel2.Padding = new System.Windows.Forms.Padding(1);
this.panel2.Size = new System.Drawing.Size(405, 389);
this.panel2.TabIndex = 1;
//
// textBox1
//
this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill;
this.textBox1.Location = new System.Drawing.Point(1, 27);
this.textBox1.Multiline = true;
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(403, 361);
this.textBox1.TabIndex = 1;
//
// label1
//
this.label1.Dock = System.Windows.Forms.DockStyle.Top;
this.label1.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
this.label1.Location = new System.Drawing.Point(1, 1);
this.label1.Name = "label1";
this.label1.Padding = new System.Windows.Forms.Padding(2);
this.label1.Size = new System.Drawing.Size(403, 26);
this.label1.TabIndex = 0;
this.label1.Text = "Original";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// panel3
//
this.panel3.Controls.Add(this.panel4);
this.panel3.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel3.Location = new System.Drawing.Point(0, 0);
this.panel3.Name = "panel3";
this.panel3.Padding = new System.Windows.Forms.Padding(3);
this.panel3.Size = new System.Drawing.Size(385, 395);
this.panel3.TabIndex = 2;
//
// panel4
//
this.panel4.Controls.Add(this.textBox2);
this.panel4.Controls.Add(this.label2);
this.panel4.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel4.Location = new System.Drawing.Point(3, 3);
this.panel4.Name = "panel4";
this.panel4.Padding = new System.Windows.Forms.Padding(1);
this.panel4.Size = new System.Drawing.Size(379, 389);
this.panel4.TabIndex = 2;
//
// textBox2
//
this.textBox2.Dock = System.Windows.Forms.DockStyle.Fill;
this.textBox2.Location = new System.Drawing.Point(1, 27);
this.textBox2.Multiline = true;
this.textBox2.Name = "textBox2";
this.textBox2.Size = new System.Drawing.Size(377, 361);
this.textBox2.TabIndex = 1;
//
// label2
//
this.label2.Dock = System.Windows.Forms.DockStyle.Top;
this.label2.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
this.label2.Location = new System.Drawing.Point(1, 1);
this.label2.Name = "label2";
this.label2.Padding = new System.Windows.Forms.Padding(2);
this.label2.Size = new System.Drawing.Size(377, 26);
this.label2.TabIndex = 0;
this.label2.Text = "Sort";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// FrmTIbcoConfig
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.panel1);
this.Name = "FrmTIbcoConfig";
this.Text = "FrmTIbcoConfig";
this.panel1.ResumeLayout(false);
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel1.PerformLayout();
this.splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.splitContainer2.Panel1.ResumeLayout(false);
this.splitContainer2.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
this.splitContainer2.ResumeLayout(false);
this.panel2.ResumeLayout(false);
this.panel2.PerformLayout();
this.panel3.ResumeLayout(false);
this.panel4.ResumeLayout(false);
this.panel4.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.SplitContainer splitContainer2;
private System.Windows.Forms.Panel panel3;
private System.Windows.Forms.Button btnSave;
private System.Windows.Forms.TextBox tboxFilename;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Panel panel4;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.Label label2;
}
}

View File

@@ -0,0 +1,164 @@
using JWH;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Linq;
namespace DDUtilityApp.ETC
{
public partial class FrmTIbcoConfig : Form
{
public FrmTIbcoConfig()
{
InitializeComponent();
this.SetLayout();
this.SetEventHandler();
}
private void SetLayout()
{
this.textBox1.Font = new Font("돋움체", 9.0F);
this.textBox1.ScrollBars = ScrollBars.Both;
this.textBox2.Font = new Font("돋움체", 9.0F);
this.textBox2.ScrollBars = ScrollBars.Both;
}
private void SetEventHandler()
{
// DragDrop
this.textBox1.AllowDrop = true;
this.textBox1.DragDrop += Control_DragDrop;
this.textBox1.DragEnter += Control_DragEnter;
this.textBox2.AllowDrop = true;
this.textBox2.DragDrop += Control_DragDrop;
this.textBox2.DragEnter += Control_DragEnter;
this.btnSave.Click += Button1_Click;
}
private void Control_DragDrop(object sender, DragEventArgs e)
{
XLogger.Instance.Info(e);
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
if (files == null || files.Length < 1) return;
string fileName = files[0];
this.SetText(this.textBox1, fileName);
this.SetTextSort(this.textBox2, fileName);
}
private void Control_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy;
}
private void Button1_Click(object sender, EventArgs e)
{
this.SaveDocument(this.textBox2, this.tboxFilename.Text);
}
private void SetText(object sender, string fileName)
{
TextBox textBox = sender as TextBox;
if (textBox == null) return;
textBox.Clear();
this.tboxFilename.Text = fileName;
XmlDocument document = new XmlDocument();
document.Load(fileName);
using (MemoryStream stream = new MemoryStream())
{
XmlWriterSettings settings = new XmlWriterSettings
{
Encoding = new UTF8Encoding(false),
Indent = true,
IndentChars = " ",
NewLineChars = Environment.NewLine,
NewLineHandling = NewLineHandling.Replace
};
using (XmlWriter writer = XmlWriter.Create(stream, settings))
{
document.Save(writer);
}
textBox.Text = Encoding.UTF8.GetString(stream.ToArray());
}
}
private void SetTextSort(object sender, string fileName)
{
TextBox textBox = sender as TextBox;
if (textBox == null) return;
this.tboxFilename.Text = fileName;
XmlDocument document = new XmlDocument();
document.Load(fileName);
XmlNodeList messageNameList = document.GetElementsByTagName("messageNameList");
List<XmlNode> list = new List<XmlNode>();
foreach (XmlNode nodeList in messageNameList)
{
foreach (XmlNode node in nodeList.ChildNodes)
list.Add(node);
nodeList.RemoveAll();
foreach (XmlNode node in list.OrderBy(e => e.Name))
nodeList.AppendChild(node);
}
using (MemoryStream stream = new MemoryStream())
{
XmlWriterSettings settings = new XmlWriterSettings
{
Encoding = new UTF8Encoding(false),
Indent = true,
IndentChars = " ",
NewLineChars = Environment.NewLine,
NewLineHandling = NewLineHandling.Replace
};
using (XmlWriter writer = XmlWriter.Create(stream, settings))
{
document.Save(writer);
}
textBox.Text = Encoding.UTF8.GetString(stream.ToArray());
}
}
private void SetText1(object sender, string fileName)
{
TextBox textBox = sender as TextBox;
if (textBox == null) return;
this.tboxFilename.Text = fileName;
XmlDocument document = new XmlDocument();
document.Load(fileName);
textBox.Text = document.GetBeautify();
}
private void SaveDocument(object sender, string filename)
{
TextBox textBox = sender as TextBox;
if (textBox == null) return;
using (StreamWriter writer = new StreamWriter(filename))
{
writer.Write(textBox.Text);
}
MessageBox.Show($"저장하였습니다.");
}
}
}

View 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>

View File

@@ -0,0 +1,271 @@
<SERVER_LIST>
<SERVER ID='EIS.B1'>
<EQUIPMENT ID='P0410-PLAA002-DUMMY' DESCRIPTION='ABF_A_플라즈마1호' NICKNAME='ABF_A_플라즈마1호' />
<EQUIPMENT ID='SS0387-OVNA-1130-000001' DESCRIPTION='ABF_A_큐어1호' NICKNAME='ABF_A_큐어1호' />
<EQUIPMENT ID='SS0603-PREA-1130-000001' DESCRIPTION='ABF_A_CZ전처리1' NICKNAME='ABF_A_CZ전처리1' />
<EQUIPMENT ID='SS0603-PREA-1130-000002' DESCRIPTION='ABF_A_CZ전처리2' NICKNAME='ABF_A_CZ전처리2' />
<EQUIPMENT ID='SS0370-DSMA-1130-000002' DESCRIPTION='ABF_A_수직디스미어1호' NICKNAME='ABF_A_수직디스미어1호' />
<EQUIPMENT ID='SS0430-ELPA-1130-000001' DESCRIPTION='ABF_A_수직화학동1호' NICKNAME='ABF_A_수직화학동1호' />
<EQUIPMENT ID='SS0430-ELPA-1130-000002' DESCRIPTION='도금_A_화학동3호' NICKNAME='도금_A_화학동3호' />
<EQUIPMENT ID='SS0430-ELPA-1130-000003' DESCRIPTION='도금_A_화학동4호' NICKNAME='도금_A_화학동4호' />
<EQUIPMENT ID='SS0370-DSMA-1130-000003' DESCRIPTION='도금_A_디스미어3호' NICKNAME='도금_A_디스미어3호' />
<EQUIPMENT ID='SS0370-DSMA-1130-000004' DESCRIPTION='도금_A_디스미어4호' NICKNAME='도금_A_디스미어4호' />
<EQUIPMENT ID='P0370-DSMA003-DUMMY' DESCRIPTION='도금_A_디스미어5호' NICKNAME='도금_A_디스미어5호' />
<EQUIPMENT ID='S0430-ELPA001-DUMMY' DESCRIPTION='도금_A_화학동2호' NICKNAME='도금_A_화학동2호' />
<EQUIPMENT ID='S0430-ELPA002-DUMMY' DESCRIPTION='도금_A_화학동1호' NICKNAME='도금_A_화학동1호' />
<EQUIPMENT ID='S0370-DSMA001-DUMMY' DESCRIPTION='도금_A_디스미어2호' NICKNAME='도금_A_디스미어2호' />
<EQUIPMENT ID='S0370-DSMA002-DUMMY' DESCRIPTION='도금_A_디스미어1호' NICKNAME='도금_A_디스미어1호' />
<EQUIPMENT ID='P0430-ELPA003-DUMMY' DESCRIPTION='도금_A_화학동5호' NICKNAME='도금_A_화학동5호' />
<EQUIPMENT ID='DP0370-DSMA-1130-000001' DESCRIPTION='도금_B_디스미어6호' NICKNAME='도금_B_디스미어6호' />
<EQUIPMENT ID='P0520-ECPA001-DUMMY' DESCRIPTION='도금_B_전기동7호' NICKNAME='도금_B_전기동7호' />
<EQUIPMENT ID='P0520-ECPA003-DUMMY' DESCRIPTION='도금_A_전기동6호' NICKNAME='도금_A_전기동6호' />
<EQUIPMENT ID='HS0470-ECPA-1130-000002' DESCRIPTION='도금_B_전기동9호' NICKNAME='도금_B_전기동9호' />
<EQUIPMENT ID='S0520-ECPA001-DUMMY' DESCRIPTION='도금_A_전기동2호' NICKNAME='도금_A_전기동2호' />
<EQUIPMENT ID='S0520-ECPA002-DUMMY' DESCRIPTION='도금_A_전기동1호' NICKNAME='도금_A_전기동1호' />
<EQUIPMENT ID='P0680-ECPA003-DUMMY' DESCRIPTION='도금_A_전기동5호' NICKNAME='도금_A_전기동5호' />
<EQUIPMENT ID='SS0680-ECPA-1130-000001' DESCRIPTION='도금_A_전기동4호' NICKNAME='도금_A_전기동4호' />
<EQUIPMENT ID='SS0470-ECPA-1130-000002' DESCRIPTION='도금_B_전기동3호' NICKNAME='도금_B_전기동3호' />
<EQUIPMENT ID='HS0470-ECPA-1110-000001' DESCRIPTION='도금_B_전기동8호' NICKNAME='도금_B_전기동8호' />
<EQUIPMENT ID='SS0030-ECHA-1130-000001' DESCRIPTION='도금_A_H-에칭1호' NICKNAME='도금_A_H-에칭1호' />
<EQUIPMENT ID='SS0310-ECHA-1130-000001' DESCRIPTION='도금_A_S-에칭1호' NICKNAME='도금_A_S-에칭1호' />
<EQUIPMENT ID='PS0130-OVNA-1130-000001' DESCRIPTION='B2_DPC_기타_성형Baking' NICKNAME='B2_DPC_기타_성형Baking' />
<EQUIPMENT ID='DP0400-OVNA-1130-000005' DESCRIPTION='B2_DPC_기타_가압Baking' NICKNAME='B2_DPC_기타_가압Baking' />
<EQUIPMENT ID='SS0400-OVNA-1130-000007' DESCRIPTION='B1_XBF_TowerBaking' NICKNAME='B1_XBF_TowerBaking' />
<EQUIPMENT ID='DP1200-COIA-1130-000001' DESCRIPTION='DPC_SOP_코이닝1호' NICKNAME='DPC_SOP_코이닝1호' />
<EQUIPMENT ID='DP1200-COIA-1130-000002' DESCRIPTION='DPC_SOP_코이닝2호' NICKNAME='DPC_SOP_코이닝2호' />
<EQUIPMENT ID='DP1200-COIA-1130-000003' DESCRIPTION='DPC_SOP_코이닝3호' NICKNAME='DPC_SOP_코이닝3호' />
<EQUIPMENT ID='DP0601-BUFA-1130-000001' DESCRIPTION='DPC_적층_CZ전처리 1호' NICKNAME='DPC_적층_CZ전처리 1호' />
<EQUIPMENT ID='DP0601-BUFA-1130-000002' DESCRIPTION='B2_DPC_적층_CZ전처리 2호' NICKNAME='B2_DPC_적층_CZ전처리 2호' />
<EQUIPMENT ID='BB0601-PREA-1130-000001' DESCRIPTION='B2_적층_CZ전처리' NICKNAME='B2_적층_CZ전처리' />
<EQUIPMENT ID='DP0870-ATOA-1130-000002' DESCRIPTION='DPC_적층_기판분리1호' NICKNAME='DPC_적층_기판분리1호' />
<EQUIPMENT ID='BB0870-SPCA-1130-000001' DESCRIPTION='B2_적층_기판분리1호' NICKNAME='B2_적층_기판분리1호' />
<EQUIPMENT ID='DP1260-OSPA-1130-000001' DESCRIPTION='DPC_기타_OSP1호' NICKNAME='DPC_기타_OSP1호' />
<EQUIPMENT ID='DP1260-OSPA-1130-000002' DESCRIPTION='DPC_기타_OSP2호' NICKNAME='DPC_기타_OSP2호' />
<EQUIPMENT ID='DP1260-OSPA-1130-000003' DESCRIPTION='DPC_기타_OSP3호' NICKNAME='DPC_기타_OSP3호' />
<EQUIPMENT ID='DP0270-PUNA-1130-000001' DESCRIPTION='DPC_적층_펀칭기' NICKNAME='DPC_적층_펀칭기' />
<EQUIPMENT ID='DP1170-SMBA-1130-000001' DESCRIPTION='DPC_SOP_MMP1호' NICKNAME='DPC_SOP_MMP1호' />
<EQUIPMENT ID='DP1170-SMBA-1130-000002' DESCRIPTION='DPC_SOP_MMP2호' NICKNAME='DPC_SOP_MMP2호' />
<EQUIPMENT ID='DP0140-TDRA-1130-000001' DESCRIPTION='DPC_적층_Tdill1호' NICKNAME='DPC_적층_Tdill1호' />
<EQUIPMENT ID='DP0140-TDRA-1130-000002' DESCRIPTION='DPC_적층_Tdill2호' NICKNAME='DPC_적층_Tdill2호' />
<EQUIPMENT ID='DP0140-TDRA-1130-000003' DESCRIPTION='DPC_적층_Tdill3호' NICKNAME='DPC_적층_Tdill3호' />
<EQUIPMENT ID='DP0140-TDRA-1130-000004' DESCRIPTION='B2_적층_Tdill4호' NICKNAME='B2_적층_Tdill4호' />
<EQUIPMENT ID='P0140-TDRA001-DUMMY' DESCRIPTION='B2_적층_Tdill6호' NICKNAME='B2_적층_Tdill6호' />
<EQUIPMENT ID='PS0140-TDRA-1130-000002' DESCRIPTION='B2_적층_Tdill2호' NICKNAME='B2_적층_Tdill2호' />
<EQUIPMENT ID='BB0140-TDRA-1130-000001' DESCRIPTION='B2_적층_Tdill1호' NICKNAME='B2_적층_Tdill1호' />
<EQUIPMENT ID='DP0140-TDRA-1130-000005' DESCRIPTION='B2_적층_Tdill5호' NICKNAME='B2_적층_Tdill5호' />
<EQUIPMENT ID='P0150-RUTA001-DUMMY' DESCRIPTION='DPC_적층_TRIM2호' NICKNAME='DPC_적층_TRIM2호' />
<EQUIPMENT ID='DP0150-RUTA-1130-000001' DESCRIPTION='DPC_적층_TRIM1호' NICKNAME='DPC_적층_TRIM1호' />
<EQUIPMENT ID='BB0150-RUTA-1130-000001' DESCRIPTION='B2_적층_TRIM1호' NICKNAME='B2_적층_TRIM1호' />
<EQUIPMENT ID='H0070-DESA004-DUMMY' DESCRIPTION='이미지_A_DES4호' NICKNAME='이미지_A_DES4호' />
<EQUIPMENT ID='HS0070-DESA-1130-000001' DESCRIPTION='이미지_A_DES3호' NICKNAME='이미지_A_DES3호' />
<EQUIPMENT ID='P0650-DESA003-DUMMY' DESCRIPTION='이미지_A_DES6호' NICKNAME='이미지_A_DES6호' />
<EQUIPMENT ID='S0650-DESA001-DUMMY' DESCRIPTION='이미지_A_DES1호' NICKNAME='이미지_A_DES1호' />
<EQUIPMENT ID='SS0650-DESA-1130-000001' DESCRIPTION='이미지_A_DES2호' NICKNAME='이미지_A_DES2호' />
<EQUIPMENT ID='HS0060-LDIA-1130-000005' DESCRIPTION='이미지_B_DI노광7호' NICKNAME='이미지_B_DI노광7호' />
<EQUIPMENT ID='HS0645-LDIA-1130-000001' DESCRIPTION='이미지_B_DI노광10호' NICKNAME='이미지_B_DI노광10호' />
<EQUIPMENT ID='PS0640-LDIA-1130-000001' DESCRIPTION='이미지_B_DI노광8호' NICKNAME='이미지_B_DI노광8호' />
<EQUIPMENT ID='S0640-EXPA004-DUMMY' DESCRIPTION='이미지_A_DI노광2호' NICKNAME='이미지_A_DI노광2호' />
<EQUIPMENT ID='SS0645-EXPA-1130-000001' DESCRIPTION='이미지_A_DI노광3호' NICKNAME='이미지_A_DI노광3호' />
<EQUIPMENT ID='SS0645-LDIA-1130-000001' DESCRIPTION='이미지_A_DI노광1호' NICKNAME='이미지_A_DI노광1호' />
<EQUIPMENT ID='SS0645-LDIA-1130-000002' DESCRIPTION='이미지_A_DI노광5호' NICKNAME='이미지_A_DI노광5호' />
<EQUIPMENT ID='SS0645-LDIA-1130-000004' DESCRIPTION='이미지_A_DI노광12호' NICKNAME='이미지_A_DI노광12호' />
<EQUIPMENT ID='HS0790-LDIA-1130-000002' DESCRIPTION='PSR_A_DI노광6호' NICKNAME='PSR_A_DI노광6호' />
<EQUIPMENT ID='300107' DESCRIPTION='PSR_A_DI노광12호' NICKNAME='PSR_A_DI노광12호' />
<EQUIPMENT ID='HS0795-LDIA-1130-000001' DESCRIPTION='B2_DI노광9호' NICKNAME='B2_DI노광9호' />
<EQUIPMENT ID='S0690-ECHA001-DUMMY' DESCRIPTION='이미지_A_F-에칭1호' NICKNAME='이미지_A_F-에칭1호' />
<EQUIPMENT ID='PS0690-ECHA-1130-000001' DESCRIPTION='이미지_B_F-에칭2호' NICKNAME='이미지_B_F-에칭2호' />
<EQUIPMENT ID='SS0965-ECHA-1130-000002' DESCRIPTION='이미지_A_F-에칭3호' NICKNAME='이미지_A_F-에칭3호' />
<EQUIPMENT ID='SS0675-DEVA-1130-000002' DESCRIPTION='이미지_A_수직현상2호' NICKNAME='이미지_A_수직현상2호' />
<EQUIPMENT ID='S0860-DEVA001-DUMMY' DESCRIPTION='이미지_A_수직현상1호' NICKNAME='이미지_A_수직현상1호' />
<EQUIPMENT ID='HS0675-DEVA-1130-000001' DESCRIPTION='이미지_A_수직현상3호' NICKNAME='이미지_A_수직현상3호' />
<EQUIPMENT ID='30084' DESCRIPTION='이미지_A_수직현상4호' NICKNAME='이미지_A_수직현상4호' />
<EQUIPMENT ID='SS0860-SDPA-1130-000001' DESCRIPTION='이미지_A_수평현상1호' NICKNAME='이미지_A_수평현상1호' />
<EQUIPMENT ID='SS0860-SDPA-1130-000002' DESCRIPTION='이미지_A_수평현상2호' NICKNAME='이미지_A_수평현상2호' />
<EQUIPMENT ID='SS0810-STRA-1130-000002' DESCRIPTION='이미지_A_M박리4호' NICKNAME='이미지_A_M박리4호' />
<EQUIPMENT ID='S0810-STRA001-DUMMY' DESCRIPTION='이미지_A_M박리1호' NICKNAME='이미지_A_M박리1호' />
<EQUIPMENT ID='SS0630-DFPA-1130-000002' DESCRIPTION='이미지_A_전처리1호' NICKNAME='이미지_A_전처리1호' />
<EQUIPMENT ID='SS0630-DFPA-1130-000001' DESCRIPTION='이미지_A_전처리4호' NICKNAME='이미지_A_전처리4호' />
<EQUIPMENT ID='SS0705-ECHA-1130-000001' DESCRIPTION='이미지_A_수직에칭기' NICKNAME='이미지_A_수직에칭기' />
<EQUIPMENT ID='SS0405-SPCA-1130-000002' DESCRIPTION='도금_A_엣지코팅3호' NICKNAME='도금_A_엣지코팅3호' />
<EQUIPMENT ID='DP0405-SPCA-1130-000001' DESCRIPTION='DPC_B_엣지코팅1호' NICKNAME='DPC_B_엣지코팅1호' />
<EQUIPMENT ID='DP0405-SPCA-1130-000002' DESCRIPTION='DPC_B_엣지코팅2호' NICKNAME='DPC_B_엣지코팅2호' />
<EQUIPMENT ID='DP0130-PRSA-1130-000001' DESCRIPTION='DPC_적층_PRESS1호' NICKNAME='DPC_적층_PRESS1호' />
<EQUIPMENT ID='P0130-PRSA001-DUMMY' DESCRIPTION='DPC_적층_PRESS2호' NICKNAME='DPC_적층_PRESS2호' />
<EQUIPMENT ID='HS0430-ELPA-1130-000002' DESCRIPTION='도금_B_화학동6호' NICKNAME='도금_B_화학동6호' />
<EQUIPMENT ID='P0630-DFPA002-DUMMY' DESCRIPTION='이미지_B_전처리10호' NICKNAME='이미지_B_전처리10호' />
<EQUIPMENT ID='H0050-DFPA001-DUMMY' DESCRIPTION='이미지_B_전처리8호' NICKNAME='이미지_B_전처리8호' />
<EQUIPMENT ID='SS0690-ECHA-1130-000001' DESCRIPTION='이미지_A_Q-에칭1호' NICKNAME='이미지_A_Q-에칭1호' />
<EQUIPMENT ID='PS0630-DFPA-1130-000001' DESCRIPTION='이미지_B_전처리7호' NICKNAME='이미지_B_전처리7호' />
<EQUIPMENT ID='SS0840-DFPA-1130-000001' DESCRIPTION='이미지_A_전처리2호' NICKNAME='이미지_A_전처리2호' />
<EQUIPMENT ID='SS0718-AOIA-1130-000001' DESCRIPTION='이미지_A_AOI1호' NICKNAME='이미지_A_AOI1호' />
<EQUIPMENT ID='SS0718-AOIA-1130-000002' DESCRIPTION='이미지_A_AOI2호' NICKNAME='이미지_A_AOI2호' />
<EQUIPMENT ID='SS0718-AOIA-1130-000003' DESCRIPTION='이미지_A_AOI3호' NICKNAME='이미지_A_AOI3호' />
<EQUIPMENT ID='SS0718-AOIA-1130-000004' DESCRIPTION='이미지_A_AOI4호' NICKNAME='이미지_A_AOI4호' />
<EQUIPMENT ID='SS0718-AOIA-1130-000005' DESCRIPTION='이미지_A_AOI5호' NICKNAME='이미지_A_AOI5호' />
<EQUIPMENT ID='SS0718-AOIA-1130-000006' DESCRIPTION='이미지_A_AOI6호' NICKNAME='이미지_A_AOI6호' />
<EQUIPMENT ID='HS0718-AOIA-1130-000003' DESCRIPTION='이미지_B_AOI7호' NICKNAME='이미지_B_AOI7호' />
<EQUIPMENT ID='HS0718-AOIA-1130-000004' DESCRIPTION='이미지_B_AOI8호' NICKNAME='이미지_B_AOI8호' />
<EQUIPMENT ID='HS0718-AOIA-1130-000005' DESCRIPTION='이미지_B_AOI9호' NICKNAME='이미지_B_AOI9호' />
<EQUIPMENT ID='HS0718-AOIA-1130-000006' DESCRIPTION='이미지_B_AOI10호' NICKNAME='이미지_B_AOI10호' />
<EQUIPMENT ID='HS0718-AOIA-1130-000007' DESCRIPTION='이미지_B_AOI11호' NICKNAME='이미지_B_AOI11호' />
<EQUIPMENT ID='HS0718-AOIA-1130-000008' DESCRIPTION='이미지_B_AOI12호' NICKNAME='이미지_B_AOI12호' />
<EQUIPMENT ID='SS0410-PLAA-1130-000001' DESCRIPTION='표면처리_A_수동플라즈마1호' NICKNAME='표면처리_A_수동플라즈마1호' />
<EQUIPMENT ID='HS0430-ELPA-1110-000001' DESCRIPTION='도금_B_화학동7호' NICKNAME='도금_B_화학동7호' />
<EQUIPMENT ID='SS0388-ATOA-1130-000001' DESCRIPTION='ABF_A_오토필러1호' NICKNAME='ABF_A_오토필러1호' />
<EQUIPMENT ID='HS0625-BUFA-1130-000001' DESCRIPTION='도금_B_브러쉬정면1호' NICKNAME='도금_B_브러쉬정면1호' />
<EQUIPMENT ID='P0310-ECHA001-DUMMY' DESCRIPTION='도금_B_S-에칭3호' NICKNAME='도금_B_S-에칭3호' />
<EQUIPMENT ID='HS0310-ECHA-1130-000001' DESCRIPTION='도금_소프트에칭 2호' NICKNAME='도금_소프트에칭 2호' />
<EQUIPMENT ID='HS0370-DSMA-1110-000001' DESCRIPTION='도금_B_디스미어7호' NICKNAME='도금_B_디스미어7호' />
<EQUIPMENT ID='DP0407-SPCA-1130-000001' DESCRIPTION='DPC_기타_동박분리기1호' NICKNAME='DPC_기타_동박분리기1호' />
<EQUIPMENT ID='DP0407-SPCA-1130-000002' DESCRIPTION='DPC_기타_동박분리기2호' NICKNAME='DPC_기타_동박분리기2호' />
<EQUIPMENT ID='DP0030-ECHA-1130-000001' DESCRIPTION='DPC_이미지_하프에칭1호' NICKNAME='DPC_이미지_하프에칭1호' />
<EQUIPMENT ID='DP0100-OXIA-1130-000001' DESCRIPTION='DPC_적층_브라운옥사이드1호' NICKNAME='DPC_적층_브라운옥사이드1호' />
<EQUIPMENT ID='DP0105-OXIA-1130-000003' DESCRIPTION='DPC_적층_블랙옥사이드1호' NICKNAME='DPC_적층_블랙옥사이드1호' />
<EQUIPMENT ID='DP1146-BBTA-1130-000001' DESCRIPTION='B4_BBT_Quad' NICKNAME='B4_BBT_Quad' />
<EQUIPMENT ID='P0640-EXPA001-DUMMY' DESCRIPTION='이미지_B_자동노광7호' NICKNAME='이미지_B_자동노광7호' />
<EQUIPMENT ID='P0640-EXPA002-DUMMY' DESCRIPTION='이미지_B_자동노광6호' NICKNAME='이미지_B_자동노광6호' />
<EQUIPMENT ID='HS0810-STRA-1130-000001' DESCRIPTION='이미지_B_M-박리3호' NICKNAME='이미지_B_M-박리3호' />
<EQUIPMENT ID='H0050-DFPA007-DUMMY' DESCRIPTION='이미지_B_전처리6호' NICKNAME='이미지_B_전처리6호' />
<EQUIPMENT ID='H0070-DESA003-DUMMY' DESCRIPTION='이미지_B_DES5호' NICKNAME='이미지_B_DES5호' />
<EQUIPMENT ID='H0850-VLMA001-DUMMY' DESCRIPTION='이미지_B_진공밀착1호' NICKNAME='이미지_B_진공밀착1호' />
<EQUIPMENT ID='HS0050-DFPA-1130-000005' DESCRIPTION='이미지_B_전처리9호' NICKNAME='이미지_B_전처리9호' />
<EQUIPMENT ID='SS0640-EXPA-1130-000003' DESCRIPTION='이미지_A_자동노광2호' NICKNAME='이미지_A_자동노광2호' />
<EQUIPMENT ID='SS0660-DFPA-1130-000002' DESCRIPTION='이미지_A_전처리5호' NICKNAME='이미지_A_전처리5호' />
<EQUIPMENT ID='PS0670-EXPA-1130-000001' DESCRIPTION='이미지_B_자동노광9호' NICKNAME='이미지_B_자동노광9호' />
<EQUIPMENT ID='S0660-DFPA002-DUMMY' DESCRIPTION='이미지_A_전처리3호' NICKNAME='이미지_A_전처리3호' />
<EQUIPMENT ID='S0640-EXPA001-DUMMY' DESCRIPTION='이미지_A_자동노광3호' NICKNAME='이미지_A_자동노광3호' />
<EQUIPMENT ID='S0640-EXPA002-DUMMY' DESCRIPTION='이미지_A_자동노광4호' NICKNAME='이미지_A_자동노광4호' />
<EQUIPMENT ID='SS0810-STRA-1130-000001' DESCRIPTION='이미지_A_M-박리2호' NICKNAME='이미지_A_M-박리2호' />
<EQUIPMENT ID='HS0740-PPTA-1110-000003' DESCRIPTION='PSR_B_HP전처리1호' NICKNAME='PSR_B_HP전처리1호' />
<EQUIPMENT ID='HS0790-EXPA-1130-000002' DESCRIPTION='PSR_B_자동노광5호' NICKNAME='PSR_B_자동노광5호' />
<EQUIPMENT ID='HS0790-EXPA-1130-000003' DESCRIPTION='PSR_B_자동노광6호' NICKNAME='PSR_B_자동노광6호' />
<EQUIPMENT ID='P0790-EXPA005-DUMMY' DESCRIPTION='PSR_B_자동노광8호' NICKNAME='PSR_B_자동노광8호' />
<EQUIPMENT ID='P0790-EXPA007-DUMMY' DESCRIPTION='PSR_B_자동노광7호' NICKNAME='PSR_B_자동노광7호' />
<EQUIPMENT ID='S0790-EXPA001-DUMMY' DESCRIPTION='PSR_A_자동노광2호' NICKNAME='PSR_A_자동노광2호' />
<EQUIPMENT ID='S0790-EXPA002-DUMMY' DESCRIPTION='PSR_B_자동노광9호' NICKNAME='PSR_B_자동노광9호' />
<EQUIPMENT ID='S0790-EXPA003-DUMMY' DESCRIPTION='PSR_A_자동노광3호' NICKNAME='PSR_A_자동노광3호' />
<EQUIPMENT ID='H0820-JETA002-DUMMY' DESCRIPTION='표면처리_B_퍼미스3호' NICKNAME='표면처리_B_퍼미스3호' />
<EQUIPMENT ID='S0820-JETA001-DUMMY' DESCRIPTION='표면처리_A_퍼미스1호' NICKNAME='표면처리_A_퍼미스1호' />
<EQUIPMENT ID='PS0820-JETA-1110-000002' DESCRIPTION='표면처리_A_퍼미스2호' NICKNAME='표면처리_A_퍼미스2호' />
<EQUIPMENT ID='SS0930-STRA-1130-000003' DESCRIPTION='표면처리_A_SR후처리1호(미사용)' NICKNAME='표면처리_A_SR후처리1호(미사용)' />
<EQUIPMENT ID='SS0970-STRA-1130-000001' DESCRIPTION='표면처리_A_S-박리2호' NICKNAME='표면처리_A_S-박리2호' />
<EQUIPMENT ID='PS0120-LUPA-1130-000001' DESCRIPTION='DPC_적층_자동적층4호' NICKNAME='DPC_적층_자동적층4호' />
<EQUIPMENT ID='DP0120-LUPA-1130-000001' DESCRIPTION='DPC_적층_자동적층1호' NICKNAME='DPC_적층_자동적층1호' />
<EQUIPMENT ID='DP0120-LUPA-1130-000002' DESCRIPTION='DPC_적층_자동적층2호' NICKNAME='DPC_적층_자동적층2호' />
<EQUIPMENT ID='DP0120-LUPA-1130-000003' DESCRIPTION='DPC_적층_자동적층3호' NICKNAME='DPC_적층_자동적층3호' />
<EQUIPMENT ID='P0120-LUPA001-DUMMY' DESCRIPTION='DPC_적층_자동적층5호' NICKNAME='DPC_적층_자동적층5호' />
<EQUIPMENT ID='SS0400-OVNA-1130-000006' DESCRIPTION='표면처리_A_수직베이킹' NICKNAME='표면처리_A_수직베이킹' />
<EQUIPMENT ID='THIK01' DESCRIPTION='DPC_두께측정기' NICKNAME='DPC_두께측정기' />
<EQUIPMENT ID='HS0800-SDPA-1130-000002' DESCRIPTION='PSR_B_현상7호' NICKNAME='PSR_B_현상7호' />
<EQUIPMENT ID='HS0800-SDPA-1130-000004' DESCRIPTION='PSR_B_현상6호' NICKNAME='PSR_B_현상6호' />
<EQUIPMENT ID='P0800-SDPA001-DUMMY' DESCRIPTION='PSR_B_현상5호' NICKNAME='PSR_B_현상5호' />
<EQUIPMENT ID='SS0800-SDPA-1130-000002' DESCRIPTION='PSR_A_현상1호' NICKNAME='PSR_A_현상1호' />
<EQUIPMENT ID='SS0800-SDPA-1130-000003' DESCRIPTION='PSR_A_현상2호' NICKNAME='PSR_A_현상2호' />
<EQUIPMENT ID='SS0800-SDPA-1130-000004' DESCRIPTION='PSR_A_현상3호' NICKNAME='PSR_A_현상3호' />
<EQUIPMENT ID='P0790-EXPA004-DUMMY' DESCRIPTION='PSR_B_DI노광7호' NICKNAME='PSR_B_DI노광7호' />
<EQUIPMENT ID='S0790-EXPA004-DUMMY' DESCRIPTION='PSR_A_DI노광1호' NICKNAME='PSR_A_DI노광1호' />
<EQUIPMENT ID='SS0790-LDIA-1130-000001' DESCRIPTION='PSR_A_DI노광3호' NICKNAME='PSR_A_DI노광3호' />
<EQUIPMENT ID='SS0795-LDIA-1130-000001' DESCRIPTION='PSR_A_DI노광4호' NICKNAME='PSR_A_DI노광4호' />
<EQUIPMENT ID='SS0795-LDIA-1130-000002' DESCRIPTION='PSR_A_DI노광2호' NICKNAME='PSR_A_DI노광2호' />
<EQUIPMENT ID='SS0795-LDIA-1130-000003' DESCRIPTION='PSR_A_DI노광8호' NICKNAME='PSR_A_DI노광8호' />
<EQUIPMENT ID='SS0795-LDIA-1130-000004' DESCRIPTION='PSR_A_DI노광10호' NICKNAME='PSR_A_DI노광10호' />
<EQUIPMENT ID='HS0620-PPTA-1130-000001' DESCRIPTION='PSR_B_HP연마1호' NICKNAME='PSR_B_HP연마1호' />
<EQUIPMENT ID='HS0740-PPTA-1130-000004' DESCRIPTION='PSR_B_전처리4호' NICKNAME='PSR_B_전처리4호' />
<EQUIPMENT ID='HS0730-PPTA-1130-000001' DESCRIPTION='PSR_B_전처리6호' NICKNAME='PSR_B_전처리6호' />
<EQUIPMENT ID='HS0730-PPTA-1130-000002' DESCRIPTION='PSR_B_전처리7호' NICKNAME='PSR_B_전처리7호' />
<EQUIPMENT ID='P0730-PPTA003-DUMMY' DESCRIPTION='PSR_B_전처리5호' NICKNAME='PSR_B_전처리5호' />
<EQUIPMENT ID='S0730-PPTA001-DUMMY' DESCRIPTION='PSR_A_전처리1호' NICKNAME='PSR_A_전처리1호' />
<EQUIPMENT ID='S0730-PPTA002-DUMMY' DESCRIPTION='PSR_A_전처리2호' NICKNAME='PSR_A_전처리2호' />
<EQUIPMENT ID='SS0730-PPTA-1130-000001' DESCRIPTION='PSR_A_전처리8호' NICKNAME='PSR_A_전처리8호' />
<EQUIPMENT ID='H0740-PRTA005-DUMMY' DESCRIPTION='롤코터 3호' NICKNAME='롤코터 3호' />
<EQUIPMENT ID='P0770-VLMA001-DUMMY' DESCRIPTION='ABF_A_진공밀착1호' NICKNAME='ABF_A_진공밀착1호' />
<EQUIPMENT ID='HS0771-VLMA-1130-000001' DESCRIPTION='이미지_B_진공밀착2호' NICKNAME='이미지_B_진공밀착2호' />
<EQUIPMENT ID='HS0780-VLMA-1130-000001' DESCRIPTION='PSR_B_진공밀착6호' NICKNAME='PSR_B_진공밀착6호' />
<EQUIPMENT ID='S0770-VLMA001-DUMMY' DESCRIPTION='PSR_B_진공밀착7호' NICKNAME='PSR_B_진공밀착7호' />
<EQUIPMENT ID='SS0770-VLMA-1130-000003' DESCRIPTION='PSR_B_진공밀착3호' NICKNAME='PSR_B_진공밀착3호' />
<EQUIPMENT ID='SS0770-VLMA-1130-000001' DESCRIPTION='PSR_A_진공밀착2호' NICKNAME='PSR_A_진공밀착2호' />
<EQUIPMENT ID='SS0770-VLMA-1130-000002' DESCRIPTION='PSR_A_진공밀착4호' NICKNAME='PSR_A_진공밀착4호' />
<EQUIPMENT ID='SS0770-VLMA-1130-000004' DESCRIPTION='PSR_A_진공밀착5호' NICKNAME='PSR_A_진공밀착5호' />
<EQUIPMENT ID='SS0770-VLMA-1130-000005' DESCRIPTION='PSR_A_진공밀착1호' NICKNAME='PSR_A_진공밀착1호' />
<EQUIPMENT ID='SS0775-VLMA-1130-000001' DESCRIPTION='PSR_A_진공밀착8호' NICKNAME='PSR_A_진공밀착8호' />
<EQUIPMENT ID='SS0900-GLDA-1130-000001' DESCRIPTION='표면처리_A_ENEPIG1호' NICKNAME='표면처리_A_ENEPIG1호' />
<EQUIPMENT ID='HS1260-OSPA-1130-000001' DESCRIPTION='표면처리_A_OSP4호' NICKNAME='표면처리_A_OSP4호' />
<EQUIPMENT ID='P0410-PLAA003-DUMMY' DESCRIPTION='표면처리_A_플라즈마2호' NICKNAME='표면처리_A_플라즈마2호' />
<EQUIPMENT ID='S0410-PLAA001-DUMMY' DESCRIPTION='표면처리_A_플라즈마1호' NICKNAME='표면처리_A_플라즈마1호' />
<EQUIPMENT ID='SS0410-PLAA-1130-000003' DESCRIPTION='표면처리_B_플라즈마3호' NICKNAME='표면처리_B_플라즈마3호' />
<EQUIPMENT ID='SS0410-PLAA-1130-000004' DESCRIPTION='표면처리_B_플라즈마4호' NICKNAME='표면처리_B_플라즈마4호' />
<EQUIPMENT ID='P0890-GLDA003-DUMMY' DESCRIPTION='표면처리_B_소프트골드3호' NICKNAME='표면처리_B_소프트골드3호' />
<EQUIPMENT ID='S0890-GLDA001-DUMMY' DESCRIPTION='표면처리_A_소프트골드1호' NICKNAME='표면처리_A_소프트골드1호' />
<EQUIPMENT ID='SS0890-GLDA-1130-000001' DESCRIPTION='표면처리_A_소프트골드2호' NICKNAME='표면처리_A_소프트골드2호' />
<EQUIPMENT ID='BB0130-PRSA-1130-000001' DESCRIPTION='B2_적층_PRESS3호' NICKNAME='B2_적층_PRESS3호' />
<EQUIPMENT ID='BB0130-PRSA-1130-000008' DESCRIPTION='B2_적층_PRESS4호' NICKNAME='B2_적층_PRESS4호' />
<EQUIPMENT ID='BC1259-AFVA-1130-000001' DESCRIPTION='A2 (Unit)' NICKNAME='A2 (Unit)' />
<EQUIPMENT ID='DP1147-BBTA-1130-000001' DESCRIPTION='BBT(Unit)' NICKNAME='BBT(Unit)' />
<EQUIPMENT ID='DP1170-SMBA-1130-000001' DESCRIPTION='SPP#1' NICKNAME='SPP#1' />
<EQUIPMENT ID='DP1170-SMBA-1130-000002' DESCRIPTION='SPP#2' NICKNAME='SPP#2' />
<EQUIPMENT ID='DP1171-SMBA-1130-000002' DESCRIPTION='Micro Ball 1호(신규)/리플로우/디플럭스 3호라인' NICKNAME='Micro Ball 1호(신규)/리플로우/디플럭스 3호라인' />
<EQUIPMENT ID='DP1171-SMBA-1130-000003' DESCRIPTION='Micro Ball 2호(신규)/리플로우/디플럭스 3호라인' NICKNAME='Micro Ball 2호(신규)/리플로우/디플럭스 3호라인' />
<EQUIPMENT ID='DP1200-COIA-1130-000004' DESCRIPTION='코이닝(Quad)' NICKNAME='코이닝(Quad)' />
<EQUIPMENT ID='DP1200-COIA-1130-000005' DESCRIPTION='코이닝(Unit)' NICKNAME='코이닝(Unit)' />
<EQUIPMENT ID='DP1260-OSPA-1130-000004' DESCRIPTION='OSP 5호 (프로웨트 社)' NICKNAME='OSP 5호 (프로웨트 社)' />
<EQUIPMENT ID='DP1155-SWNA-1130-000001' DESCRIPTION='1차 Sawing/수세 (Quad)' NICKNAME='1차 Sawing/수세 (Quad)' />
<EQUIPMENT ID='ChipCounter' DESCRIPTION='ChipCounter' NICKNAME='ChipCounter' />
<EQUIPMENT ID='DP1146-BBTA-1130-000001' DESCRIPTION='BBT(Quad)' NICKNAME='BBT(Quad)' />
<EQUIPMENT ID='DP1341-SWNA-1130-000001' DESCRIPTION='2차 Sawing/수세' NICKNAME='2차 Sawing/수세' />
</SERVER>
<SERVER ID='EIS.B2'>
<EQUIPMENT ID='BA0520-ECPA-1130-000001' DESCRIPTION='전기동 1호' NICKNAME='전기동 1호' />
<EQUIPMENT ID='BA0520-ECPA-1130-000002' DESCRIPTION='전기동 2호' NICKNAME='전기동 2호' />
<EQUIPMENT ID='BA0425-PLAA-1130-000001' DESCRIPTION='자동 플라즈마 01호(2F)' NICKNAME='자동 플라즈마 01호(2F)' />
<EQUIPMENT ID='BA0438-OVNA-1130-000001' DESCRIPTION='VL베이킹(3F) → 베이킹 2호(3F)' NICKNAME='VL베이킹(3F) → 베이킹 2호(3F)' />
<EQUIPMENT ID='BA0660-DFPA-1130-000001' DESCRIPTION='전처리 01호' NICKNAME='전처리 01호' />
<EQUIPMENT ID='BA0675-DEVA-1130-000001' DESCRIPTION='수직현상 01호' NICKNAME='수직현상 01호' />
<EQUIPMENT ID='BA0723-OVNA-1130-000001' DESCRIPTION='' NICKNAME='고온베이킹' />
<EQUIPMENT ID='BA0430-ELPA-1130-000001' DESCRIPTION='수평 화학동' NICKNAME='수평 화학동' />
<EQUIPMENT ID='BA0030-ECHA-1130-000001' DESCRIPTION='하프에칭 1호' NICKNAME='하프에칭 1호' />
<EQUIPMENT ID='BA0660-WASA-1130-000001' DESCRIPTION='TRAY 세정기' NICKNAME='TRAY 세정기' />
<EQUIPMENT ID='BA0414-PLAA-1130-000001' DESCRIPTION='플라즈마(3F)' NICKNAME='플라즈마(3F)' />
<EQUIPMENT ID='BA0419-PLAA-1130-000001' DESCRIPTION='플라즈마 1F- 표면처리 → 플라즈마 1호 - 표면처리' NICKNAME='플라즈마 1F- 표면처리 → 플라즈마 1호 - 표면처리' />
<EQUIPMENT ID='BA0366-DSMA-1130-000001' DESCRIPTION='수직 디스미어 → 수직디스미어 1호' NICKNAME='수직 디스미어 → 수직디스미어 1호' />
<EQUIPMENT ID='BA0435-ELPA-1130-000001' DESCRIPTION='수직 화학동 → 수직화학동 1호' NICKNAME='수직 화학동 → 수직화학동 1호' />
<EQUIPMENT ID='BA0396-OVNA-1130-000001' DESCRIPTION='VL베이킹(2F) ← 베이킹 1호(2F)' NICKNAME='VL베이킹(2F) ← 베이킹 1호(2F)' />
<EQUIPMENT ID='BA0050-DFPA-1130-000001' DESCRIPTION='전처리 02호' NICKNAME='전처리 02호' />
<EQUIPMENT ID='BA0074-INSA-1130-000001' DESCRIPTION='3D 측정기 02호 → 나노 2호' NICKNAME='3D 측정기 02호 → 나노 2호' />
<EQUIPMENT ID='BA0708-INSA-1130-000001' DESCRIPTION='3D 측정기 01호 → 나노 1호' NICKNAME='3D 측정기 01호 → 나노 1호' />
<EQUIPMENT ID='BA0717-AOIA-1130-000001' DESCRIPTION='AOI 01호 (A3) → A3 1호' NICKNAME='AOI 01호 (A3) → A3 1호' />
<EQUIPMENT ID='BA0070-ECHA-1130-000001' DESCRIPTION='DES 01호' NICKNAME='DES 01호' />
<EQUIPMENT ID='BA0671-LDIA-1130-000001' DESCRIPTION='DI 노광 01호' NICKNAME='DI 노광 01호' />
<EQUIPMENT ID='BA0061-LDIA-1130-000001' DESCRIPTION='DI 노광 02호' NICKNAME='DI 노광 02호' />
<EQUIPMENT ID='BA0810-STRA-1130-000001' DESCRIPTION='M-박리 01호' NICKNAME='M-박리 01호' />
<EQUIPMENT ID='BB0387-OVNA-1130-000001' DESCRIPTION='XBF CURE → XBF CURE 1호' NICKNAME='XBF CURE → XBF CURE 1호' />
<EQUIPMENT ID='BB0750-PRTA-1130-000001' DESCRIPTION='롤코터 1호' NICKNAME='롤코터 1호' />
<EQUIPMENT ID='BB0776-VLMA-1130-000002' DESCRIPTION='진공밀착기(니코)#2' NICKNAME='진공밀착기(니코)#2' />
<EQUIPMENT ID='BB0776-VLMA-1130-000003' DESCRIPTION='진공밀착기(니코)#3' NICKNAME='진공밀착기(니코)#3' />
<EQUIPMENT ID='BB0780-VLMA-1130-000001' DESCRIPTION='진공밀착 1호' NICKNAME='진공밀착 1호' />
<EQUIPMENT ID='BB0785-PLMA-1130-000001' DESCRIPTION='PET밀착 1호' NICKNAME='PET밀착 1호' />
<EQUIPMENT ID='BB0730-WASA-1130-000001' DESCRIPTION='TRAY 세정기 1호' NICKNAME='TRAY 세정기 1호' />
<EQUIPMENT ID='BB0800-SDPA-1130-000001' DESCRIPTION='PSR 현상 1호/CURE/두께측정기' NICKNAME='PSR 현상 1호/CURE/두께측정기' />
<EQUIPMENT ID='BB0805-INSA-1130-000001' DESCRIPTION='3D 측정 1호 → 나노 1호' NICKNAME='3D 측정 1호 → 나노 1호' />
<EQUIPMENT ID='BB0805-INSA-1130-000002' DESCRIPTION='표면검사기 1호' NICKNAME='표면검사기 1호' />
<EQUIPMENT ID='BB0603-PREA-1130-000001' DESCRIPTION='XBF전처리 1호기(8101)/검사기/터널베이킹' NICKNAME='XBF전처리 1호기(8101)/검사기/터널베이킹' />
<EQUIPMENT ID='BB0730-PPTA-1130-000001' DESCRIPTION='PSR전처리 1호 / 검사기' NICKNAME='PSR전처리 1호 / 검사기' />
<EQUIPMENT ID='BB0791-LDIA-1130-000001' DESCRIPTION='DI노광 1호 / 오토필러' NICKNAME='DI노광 1호 / 오토필러' />
<EQUIPMENT ID='300106' DESCRIPTION='분리합치기' NICKNAME='분리합치기' />
<EQUIPMENT ID='BA9001-ATOA-1130-000002' DESCRIPTION='LOT분리합체기 A1-1(STATION A1-1)' NICKNAME='LOT분리합체기 A1-1(STATION A1-1)' />
<EQUIPMENT ID='BA9001-ATOA-1130-000003' DESCRIPTION='LOT분리합체기 A1-2(STATION A1-1)' NICKNAME='LOT분리합체기 A1-2(STATION A1-1)' />
<EQUIPMENT ID='BA9001-ATOA-1130-000012' DESCRIPTION='LOT분리합체기 A2-2(STATION A2-1)' NICKNAME='LOT분리합체기 A2-2(STATION A2-1)' />
<EQUIPMENT ID='BA9001-ATOA-1130-000013' DESCRIPTION='LOT분리합체기 A2-3(STATION A2-1)' NICKNAME='LOT분리합체기 A2-3(STATION A2-1)' />
<EQUIPMENT ID='BA9001-ATOA-1130-000019' DESCRIPTION='LOT분리합체기 A2-1(4층)' NICKNAME='LOT분리합체기 A2-1(4층)' />
<EQUIPMENT ID='BA9001-ATOA-1130-000023' DESCRIPTION='LOT분리합체기 A3-1(STATION A3-1)' NICKNAME='LOT분리합체기 A3-1(STATION A3-1)' />
<EQUIPMENT ID='BA9001-ATOA-1130-000024' DESCRIPTION='LOT분리합체기 A3-2(STATION A3-1)' NICKNAME='LOT분리합체기 A3-2(STATION A3-1)' />
<EQUIPMENT ID='BA9001-ATOA-1130-000030' DESCRIPTION='LOT분리합체기 A4-1(STATION A4-1)' NICKNAME='LOT분리합체기 A4-1(STATION A4-1)' />
<EQUIPMENT ID='BA9001-ATOA-1130-000031' DESCRIPTION='LOT분리합체기 A4-2(STATION A4-1)' NICKNAME='LOT분리합체기 A4-2(STATION A4-1)' />
<EQUIPMENT ID='BB9001-ATOA-1130-000002' DESCRIPTION='LOT분리합체기 B3-1(STATION B3-1)' NICKNAME='LOT분리합체기 B3-1(STATION B3-1)' />
<EQUIPMENT ID='BB9001-ATOA-1130-000003' DESCRIPTION='LOT분리합체기 B3-2(STATION B3-1)' NICKNAME='LOT분리합체기 B3-2(STATION B3-1)' />
<EQUIPMENT ID='BB9001-ATOA-1130-000010' DESCRIPTION='LOT분리합체기 B4-2(STATION B4-1)' NICKNAME='LOT분리합체기 B4-2(STATION B4-1)' />
<EQUIPMENT ID='BB9001-ATOA-1130-000011' DESCRIPTION='LOT분리합체기 B4-1' NICKNAME='LOT분리합체기 B4-1' />
<EQUIPMENT ID='BB9001-ATOA-1130-000019' DESCRIPTION='LOT분리합체기 B4-3(STATION B4-1)' NICKNAME='LOT분리합체기 B4-3(STATION B4-1)' />
<EQUIPMENT ID='BA9001-ATOA-1130-000007' DESCRIPTION='Run Sheet 제거기' NICKNAME='Run Sheet 제거기' />
<EQUIPMENT ID='BA9001-ATOA-1130-000010' DESCRIPTION='트레이포장기-A동이동으로 EES추가' NICKNAME='트레이포장기-A동이동으로 EES추가' />
</SERVER>
</SERVER_LIST>

View File

@@ -0,0 +1,280 @@
<SERVER_LIST>
<SERVER ID='EIS.B1'>
<EQUIPMENT ID='P0410-PLAA002-DUMMY' DESCRIPTION='' NICKNAME='플라즈마 1호' IP='192.168.233.2' />
<EQUIPMENT ID='SS0387-OVNA-1130-000001' DESCRIPTION='' NICKNAME='큐어 1호' IP='192.168.233.222' />
<EQUIPMENT ID='SS0603-PREA-1130-000001' DESCRIPTION='' NICKNAME='CZ전처리 1호' IP='192.168.233.223' />
<EQUIPMENT ID='SS0603-PREA-1130-000002' DESCRIPTION='' NICKNAME='CZ전처리 2호' IP='192.168.233.104' />
<EQUIPMENT ID='SS0370-DSMA-1130-000002' DESCRIPTION='' NICKNAME='수직디스미어 1호' IP='192.168.233.69' />
<EQUIPMENT ID='SS0430-ELPA-1130-000001' DESCRIPTION='' NICKNAME='수직화학동 1호' IP='127.0.0.1' />
<EQUIPMENT ID='SS0388-ATOA-1130-000001' DESCRIPTION='' NICKNAME='오토필러 1호' IP='192.168.233.219' />
<EQUIPMENT ID='HS0771-VLMA-1130-000001' DESCRIPTION='' NICKNAME='진공밀착 2호' IP='192.168.113.89' />
<EQUIPMENT ID='P0770-VLMA001-DUMMY' DESCRIPTION='' NICKNAME='진공밀착 1호' IP='192.168.233.186' />
<EQUIPMENT ID='DP0370-DSMA-1130-000001' DESCRIPTION='' NICKNAME='디스미어 6호' IP='192.168.113.192' />
<EQUIPMENT ID='P0370-DSMA003-DUMMY' DESCRIPTION='' NICKNAME='디스미어 5호' IP='192.168.233.145' />
<EQUIPMENT ID='P0430-ELPA003-DUMMY' DESCRIPTION='' NICKNAME='화학동 5호' IP='192.168.233.150' />
<EQUIPMENT ID='S0370-DSMA001-DUMMY' DESCRIPTION='' NICKNAME='디스미어 2호' IP='192.168.233.142' />
<EQUIPMENT ID='S0370-DSMA002-DUMMY' DESCRIPTION='' NICKNAME='디스미어 1호' IP='192.168.233.141' />
<EQUIPMENT ID='S0430-ELPA001-DUMMY' DESCRIPTION='' NICKNAME='화학동 2호' IP='192.168.233.147' />
<EQUIPMENT ID='S0430-ELPA002-DUMMY' DESCRIPTION='' NICKNAME='화학동 1호' IP='192.168.233.146' />
<EQUIPMENT ID='SS0370-DSMA-1130-000003' DESCRIPTION='' NICKNAME='디스미어 3호' IP='192.168.233.143' />
<EQUIPMENT ID='SS0370-DSMA-1130-000004' DESCRIPTION='' NICKNAME='디스미어 4호' IP='192.168.233.144' />
<EQUIPMENT ID='SS0430-ELPA-1130-000002' DESCRIPTION='' NICKNAME='화학동 3호' IP='192.168.233.148' />
<EQUIPMENT ID='SS0430-ELPA-1130-000003' DESCRIPTION='' NICKNAME='화학동 4호' IP='192.168.233.149' />
<EQUIPMENT ID='HS0470-ECPA-1130-000002' DESCRIPTION='' NICKNAME='전기동 9호' IP='192.168.113.18' />
<EQUIPMENT ID='P0520-ECPA001-DUMMY' DESCRIPTION='' NICKNAME='전기동 7호' IP='192.168.113.16' />
<EQUIPMENT ID='P0520-ECPA003-DUMMY' DESCRIPTION='' NICKNAME='전기동 6호' IP='192.168.233.154' />
<EQUIPMENT ID='P0680-ECPA003-DUMMY' DESCRIPTION='' NICKNAME='전기동 5호' IP='192.168.233.131' />
<EQUIPMENT ID='S0520-ECPA001-DUMMY' DESCRIPTION='' NICKNAME='전기동 2호' IP='192.168.233.152' />
<EQUIPMENT ID='S0520-ECPA002-DUMMY' DESCRIPTION='' NICKNAME='전기동 1호' IP='192.168.233.151' />
<EQUIPMENT ID='SS0680-ECPA-1130-000001' DESCRIPTION='' NICKNAME='전기동 4호' IP='192.168.233.22' />
<EQUIPMENT ID='HS0470-ECPA-1110-000001' DESCRIPTION='' NICKNAME='전기동 8호' IP='192.168.113.64' />
<EQUIPMENT ID='SS0470-ECPA-1130-000002' DESCRIPTION='' NICKNAME='전기동 3호' IP='192.168.233.164' />
<EQUIPMENT ID='SS0030-ECHA-1130-000001' DESCRIPTION='' NICKNAME='H에칭 1호' IP='192.168.113.115' />
<EQUIPMENT ID='SS0310-ECHA-1130-000001' DESCRIPTION='' NICKNAME='S에칭 1호' IP='192.168.233.93' />
<EQUIPMENT ID='SS0405-SPCA-1130-000002' DESCRIPTION='' NICKNAME='엣지코팅 3호' IP='192.168.233.238' />
<EQUIPMENT ID='HS0430-ELPA-1130-000002' DESCRIPTION='' NICKNAME='화학동 6호' IP='192.168.113.193' />
<EQUIPMENT ID='HS0430-ELPA-1110-000001' DESCRIPTION='' NICKNAME='화학동 7호' IP='192.168.113.15' />
<EQUIPMENT ID='HS0310-ECHA-1130-000001' DESCRIPTION='' NICKNAME='소프트에칭 2호' IP='192.168.113.24' />
<EQUIPMENT ID='HS0370-DSMA-1110-000001' DESCRIPTION='' NICKNAME='디스미어 7호' IP='192.168.113.12' />
<EQUIPMENT ID='HS0625-BUFA-1130-000001' DESCRIPTION='' NICKNAME='브러쉬정면 1호' IP='192.168.113.22' />
<EQUIPMENT ID='P0310-ECHA001-DUMMY' DESCRIPTION='' NICKNAME='S에칭 3호' IP='192.168.113.21' />
<EQUIPMENT ID='DP0400-OVNA-1130-000005' DESCRIPTION='' NICKNAME='가압Baking' IP='192.168.193.36' />
<EQUIPMENT ID='PS0130-OVNA-1130-000001' DESCRIPTION='' NICKNAME='성형Baking' IP='192.168.193.35' />
<EQUIPMENT ID='SS0400-OVNA-1130-000007' DESCRIPTION='' NICKNAME='XBF_TowerBaking' IP='192.168.233.83' />
<EQUIPMENT ID='DP1200-COIA-1130-000001' DESCRIPTION='' NICKNAME='SOP코이닝 1호' IP='192.168.163.176' />
<EQUIPMENT ID='DP1200-COIA-1130-000002' DESCRIPTION='' NICKNAME='SOP코이닝 2호' IP='192.168.163.176' />
<EQUIPMENT ID='DP1200-COIA-1130-000003' DESCRIPTION='' NICKNAME='SOP코이닝 3호' IP='192.168.163.176' />
<EQUIPMENT ID='BB0601-PREA-1130-000001' DESCRIPTION='' NICKNAME='CZ전처리[B2]' IP='192.168.193.30' />
<EQUIPMENT ID='DP0601-BUFA-1130-000001' DESCRIPTION='' NICKNAME='CZ전처리 1호' IP='192.168.163.152' />
<EQUIPMENT ID='DP0601-BUFA-1130-000002' DESCRIPTION='' NICKNAME='CZ전처리 2호' IP='192.168.193.37' />
<EQUIPMENT ID='BB0870-SPCA-1130-000001' DESCRIPTION='' NICKNAME='기판분리 1호[B2]' IP='192.168.193.31' />
<EQUIPMENT ID='DP0870-ATOA-1130-000002' DESCRIPTION='' NICKNAME='기판분리 1호' IP='192.168.163.163' />
<EQUIPMENT ID='DP1260-OSPA-1130-000001' DESCRIPTION='' NICKNAME='OSP 1호' IP='192.168.163.6' />
<EQUIPMENT ID='DP1260-OSPA-1130-000002' DESCRIPTION='' NICKNAME='OSP 2호' IP='192.168.163.7' />
<EQUIPMENT ID='DP1260-OSPA-1130-000003' DESCRIPTION='' NICKNAME='OSP 3호' IP='192.168.163.8' />
<EQUIPMENT ID='BB0130-PRSA-1130-000001' DESCRIPTION='' NICKNAME='PRESS 3호[B2] (IN:1~7)' IP='192.168.193.28' />
<EQUIPMENT ID='BB0130-PRSA-1130-000008' DESCRIPTION='' NICKNAME='PRESS 4호[B2] (IN:8~14)' IP='192.168.193.27' />
<EQUIPMENT ID='DP0270-PUNA-1130-000001' DESCRIPTION='' NICKNAME='펀칭기' IP='192.168.163.37' />
<EQUIPMENT ID='DP1180-RFLA-1130-000001' DESCRIPTION='' NICKNAME='리플로우 1호' IP='192.168.163.20' />
<EQUIPMENT ID='DP1180-RFLA-1130-000002' DESCRIPTION='' NICKNAME='리플로우 2호' IP='192.168.163.21' />
<EQUIPMENT ID='BB0140-TDRA-1130-000001' DESCRIPTION='' NICKNAME='T.Drill 1호[B2]' IP='192.168.193.41' />
<EQUIPMENT ID='DP0140-TDRA-1130-000001' DESCRIPTION='' NICKNAME='T.Drill 1호' IP='192.168.163.155' />
<EQUIPMENT ID='DP0140-TDRA-1130-000002' DESCRIPTION='' NICKNAME='T.Drill 2호' IP='192.168.163.156' />
<EQUIPMENT ID='DP0140-TDRA-1130-000003' DESCRIPTION='' NICKNAME='T.Drill 3호' IP='192.168.163.157' />
<EQUIPMENT ID='DP0140-TDRA-1130-000004' DESCRIPTION='' NICKNAME='T.Drill 4호' IP='192.168.193.46' />
<EQUIPMENT ID='DP0140-TDRA-1130-000005' DESCRIPTION='' NICKNAME='T.Drill 5호' IP='192.168.193.47' />
<EQUIPMENT ID='P0140-TDRA001-DUMMY' DESCRIPTION='' NICKNAME='T.Drill 6호' IP='192.168.193.48' />
<EQUIPMENT ID='PS0140-TDRA-1130-000002' DESCRIPTION='' NICKNAME='T.Drill 2호[B2]' IP='192.168.163.159' />
<EQUIPMENT ID='BB0150-RUTA-1130-000001' DESCRIPTION='' NICKNAME='TRIM 1호[B2]' IP='192.168.193.34' />
<EQUIPMENT ID='DP0150-RUTA-1130-000001' DESCRIPTION='' NICKNAME='TRIM 1호' IP='192.168.163.13' />
<EQUIPMENT ID='P0150-RUTA001-DUMMY' DESCRIPTION='' NICKNAME='TRIM 2호' IP='192.168.193.40' />
<EQUIPMENT ID='DP0405-SPCA-1130-000001' DESCRIPTION='' NICKNAME='엣지코팅 1호' IP='192.168.163.10' />
<EQUIPMENT ID='DP0405-SPCA-1130-000002' DESCRIPTION='' NICKNAME='엣지코팅 2호' IP='192.168.163.11' />
<EQUIPMENT ID='DP0130-PRSA-1130-000001' DESCRIPTION='' NICKNAME='PRESS 1호' IP='192.168.163.153' />
<EQUIPMENT ID='P0130-PRSA001-DUMMY' DESCRIPTION='' NICKNAME='PRESS 2호' IP='192.168.163.154' />
<EQUIPMENT ID='DP0030-ECHA-1130-000001' DESCRIPTION='' NICKNAME='하프에칭 1호' IP='192.168.163.166' />
<EQUIPMENT ID='DP0100-OXIA-1130-000001' DESCRIPTION='' NICKNAME='브라운옥사이드 1호' IP='192.168.163.150' />
<EQUIPMENT ID='DP0105-OXIA-1130-000003' DESCRIPTION='' NICKNAME='블랙옥사이드 1호' IP='192.168.163.151' />
<EQUIPMENT ID='DP0407-SPCA-1130-000001' DESCRIPTION='' NICKNAME='동박분리기 1호' IP='192.168.163.180' />
<EQUIPMENT ID='DP0407-SPCA-1130-000002' DESCRIPTION='' NICKNAME='동박분리기 2호' IP='192.168.163.181' />
<EQUIPMENT ID='300230' DESCRIPTION='' NICKNAME='BBT(QUAD) 2호' IP='192.168.163.51' />
<EQUIPMENT ID='300232' DESCRIPTION='' NICKNAME='BBT(QUAD) 3호' IP='192.168.163.52' />
<EQUIPMENT ID='DP1146-BBTA-1130-000001' DESCRIPTION='' NICKNAME='BBT(QUAD) 1호' IP='192.168.163.49' />
<EQUIPMENT ID='DP0120-LUPA-1130-000001' DESCRIPTION='' NICKNAME='자동적층 1호' IP='192.168.163.22' />
<EQUIPMENT ID='DP0120-LUPA-1130-000002' DESCRIPTION='' NICKNAME='자동적층 2호' IP='192.168.163.23' />
<EQUIPMENT ID='DP0120-LUPA-1130-000003' DESCRIPTION='' NICKNAME='자동적층 3호' IP='192.168.163.24' />
<EQUIPMENT ID='P0120-LUPA001-DUMMY' DESCRIPTION='' NICKNAME='자동적층 5호' IP='192.168.163.26' />
<EQUIPMENT ID='PS0120-LUPA-1130-000001' DESCRIPTION='' NICKNAME='자동적층 4호' IP='192.168.163.25' />
<EQUIPMENT ID='THIK01' DESCRIPTION='' NICKNAME='두께측정기' IP='192.168.10.100' />
<EQUIPMENT ID='H0070-DESA004-DUMMY' DESCRIPTION='' NICKNAME='DES 4호' IP='192.168.111.51' />
<EQUIPMENT ID='HS0070-DESA-1130-000001' DESCRIPTION='' NICKNAME='DES 3호' IP='192.168.113.20' />
<EQUIPMENT ID='P0650-DESA003-DUMMY' DESCRIPTION='' NICKNAME='DES 6호' IP='192.168.111.52' />
<EQUIPMENT ID='S0650-DESA001-DUMMY' DESCRIPTION='' NICKNAME='DES 1호' IP='192.168.113.102' />
<EQUIPMENT ID='S0650-DESA001-DUMMY' DESCRIPTION='' NICKNAME='DES 1호' IP='192.168.113.102' />
<EQUIPMENT ID='SS0650-DESA-1130-000001' DESCRIPTION='' NICKNAME='DES 2호' IP='192.168.232.59' />
<EQUIPMENT ID='SS0650-DESA-1130-000001' DESCRIPTION='' NICKNAME='DES 2호' IP='192.168.232.59' />
<EQUIPMENT ID='HS0060-LDIA-1130-000005' DESCRIPTION='' NICKNAME='DI노광 7호' IP='192.168.113.95' />
<EQUIPMENT ID='HS0645-LDIA-1130-000001' DESCRIPTION='' NICKNAME='DI노광 10호' IP='192.168.113.97' />
<EQUIPMENT ID='PS0640-LDIA-1130-000001' DESCRIPTION='' NICKNAME='DI노광 8호' IP='192.168.113.96' />
<EQUIPMENT ID='S0640-EXPA004-DUMMY' DESCRIPTION='' NICKNAME='DI노광 2호' IP='192.168.233.36' />
<EQUIPMENT ID='SS0645-EXPA-1130-000001' DESCRIPTION='' NICKNAME='DI노광 3호' IP='192.168.233.55' />
<EQUIPMENT ID='SS0645-LDIA-1130-000001' DESCRIPTION='' NICKNAME='DI노광 1호' IP='192.168.233.105' />
<EQUIPMENT ID='SS0645-LDIA-1130-000002' DESCRIPTION='' NICKNAME='DI노광 5호' IP='192.168.233.45' />
<EQUIPMENT ID='SS0645-LDIA-1130-000004' DESCRIPTION='' NICKNAME='DI노광 12호' IP='192.168.233.35' />
<EQUIPMENT ID='PS0690-ECHA-1130-000001' DESCRIPTION='' NICKNAME='F에칭 2호' IP='192.168.113.110' />
<EQUIPMENT ID='S0690-ECHA001-DUMMY' DESCRIPTION='' NICKNAME='F에칭 1호' IP='192.168.113.63' />
<EQUIPMENT ID='SS0965-ECHA-1130-000002' DESCRIPTION='' NICKNAME='F에칭 3호' IP='192.168.113.71' />
<EQUIPMENT ID='300084' DESCRIPTION='' NICKNAME='수직현상 4호' IP='192.168.233.86' />
<EQUIPMENT ID='HS0675-DEVA-1130-000001' DESCRIPTION='' NICKNAME='수직현상 3호' IP='192.168.233.12' />
<EQUIPMENT ID='S0860-DEVA001-DUMMY' DESCRIPTION='' NICKNAME='수직현상 1호' IP='192.168.233.171' />
<EQUIPMENT ID='SS0675-DEVA-1130-000002' DESCRIPTION='' NICKNAME='수직현상 2호' IP='192.168.233.172' />
<EQUIPMENT ID='SS0860-SDPA-1130-000001' DESCRIPTION='' NICKNAME='수평현상 1호' IP='192.168.233.181' />
<EQUIPMENT ID='SS0860-SDPA-1130-000002' DESCRIPTION='' NICKNAME='수평현상 2호' IP='192.168.233.182' />
<EQUIPMENT ID='S0810-STRA001-DUMMY' DESCRIPTION='' NICKNAME='M박리 1호' IP='192.168.233.239' />
<EQUIPMENT ID='SS0810-STRA-1130-000002' DESCRIPTION='' NICKNAME='M박리 4호' IP='192.168.233.88' />
<EQUIPMENT ID='SS0630-DFPA-1130-000002' DESCRIPTION='' NICKNAME='전처리 1호' IP='192.168.233.229' />
<EQUIPMENT ID='SS0630-DFPA-1130-000001' DESCRIPTION='' NICKNAME='전처리 4호' IP='192.168.233.53' />
<EQUIPMENT ID='SS0705-ECHA-1130-000001' DESCRIPTION='' NICKNAME='수직에칭기' IP='192.168.233.65' />
<EQUIPMENT ID='H0050-DFPA001-DUMMY' DESCRIPTION='' NICKNAME='전처리 8호' IP='192.168.113.25' />
<EQUIPMENT ID='P0630-DFPA002-DUMMY' DESCRIPTION='' NICKNAME='전처리 10호' IP='192.168.233.91' />
<EQUIPMENT ID='PS0630-DFPA-1130-000001' DESCRIPTION='' NICKNAME='전처리 7호' IP='192.168.113.28' />
<EQUIPMENT ID='SS0690-ECHA-1130-000001' DESCRIPTION='' NICKNAME='Q에칭 1호' IP='192.168.233.173' />
<EQUIPMENT ID='SS0840-DFPA-1130-000001' DESCRIPTION='' NICKNAME='전처리 2호' IP='192.168.233.158' />
<EQUIPMENT ID='HS0718-AOIA-1130-000003' DESCRIPTION='' NICKNAME='AOI 7호' IP='192.168.113.209' />
<EQUIPMENT ID='HS0718-AOIA-1130-000004' DESCRIPTION='' NICKNAME='AOI 8호' IP='192.168.113.75' />
<EQUIPMENT ID='HS0718-AOIA-1130-000005' DESCRIPTION='' NICKNAME='AOI 9호' IP='192.168.113.183' />
<EQUIPMENT ID='HS0718-AOIA-1130-000006' DESCRIPTION='' NICKNAME='AOI 10호' IP='192.168.113.185' />
<EQUIPMENT ID='HS0718-AOIA-1130-000007' DESCRIPTION='' NICKNAME='AOI 11호' IP='192.168.113.187' />
<EQUIPMENT ID='HS0718-AOIA-1130-000008' DESCRIPTION='' NICKNAME='AOI 12호' IP='192.168.113.189' />
<EQUIPMENT ID='SS0718-AOIA-1130-000001' DESCRIPTION='' NICKNAME='AOI 1호' IP='192.168.113.74' />
<EQUIPMENT ID='SS0718-AOIA-1130-000002' DESCRIPTION='' NICKNAME='AOI 2호' IP='192.168.113.181' />
<EQUIPMENT ID='SS0718-AOIA-1130-000003' DESCRIPTION='' NICKNAME='AOI 3호' IP='192.168.113.84' />
<EQUIPMENT ID='SS0718-AOIA-1130-000004' DESCRIPTION='' NICKNAME='AOI 4호' IP='192.168.113.77' />
<EQUIPMENT ID='SS0718-AOIA-1130-000005' DESCRIPTION='' NICKNAME='AOI 5호' IP='192.168.113.78' />
<EQUIPMENT ID='SS0718-AOIA-1130-000006' DESCRIPTION='' NICKNAME='AOI 6호' IP='192.168.113.79' />
<EQUIPMENT ID='H0050-DFPA007-DUMMY' DESCRIPTION='' NICKNAME='전처리 6호' IP='192.168.113.61' />
<EQUIPMENT ID='H0070-DESA003-DUMMY' DESCRIPTION='' NICKNAME='DES 5호' IP='192.168.113.36' />
<EQUIPMENT ID='H0850-VLMA001-DUMMY' DESCRIPTION='' NICKNAME='진공밀착 1호' IP='192.168.113.35' />
<EQUIPMENT ID='HS0050-DFPA-1130-000005' DESCRIPTION='' NICKNAME='전처리 9호' IP='192.168.113.26' />
<EQUIPMENT ID='HS0810-STRA-1130-000001' DESCRIPTION='' NICKNAME='M박리 3호' IP='192.168.233.27' />
<EQUIPMENT ID='P0640-EXPA001-DUMMY' DESCRIPTION='' NICKNAME='자동노광 7호' IP='192.168.113.33' />
<EQUIPMENT ID='P0640-EXPA002-DUMMY' DESCRIPTION='' NICKNAME='자동노광 6호' IP='192.168.113.32' />
<EQUIPMENT ID='PS0670-EXPA-1130-000001' DESCRIPTION='' NICKNAME='자동노광 9호' IP='192.168.113.34' />
<EQUIPMENT ID='S0640-EXPA001-DUMMY' DESCRIPTION='' NICKNAME='자동노광 3호' IP='192.168.233.169' />
<EQUIPMENT ID='S0640-EXPA002-DUMMY' DESCRIPTION='' NICKNAME='자동노광 4호' IP='192.168.233.170' />
<EQUIPMENT ID='S0660-DFPA002-DUMMY' DESCRIPTION='' NICKNAME='전처리 3호' IP='192.168.233.159' />
<EQUIPMENT ID='SS0640-EXPA-1130-000003' DESCRIPTION='' NICKNAME='자동노광 2호' IP='192.168.233.168' />
<EQUIPMENT ID='SS0660-DFPA-1130-000002' DESCRIPTION='' NICKNAME='전처리 5호' IP='192.168.233.4' />
<EQUIPMENT ID='SS0810-STRA-1130-000001' DESCRIPTION='' NICKNAME='M박리 2호' IP='192.168.233.178' />
<EQUIPMENT ID='SS0965-ECHA-1130-000002_Back' DESCRIPTION='' NICKNAME='' IP='192.168.113.71' />
<EQUIPMENT ID='HS0718-ATOA-1130-000002' DESCRIPTION='' NICKNAME='AOR 3호' IP='192.168.113.196' />
<EQUIPMENT ID='HS0718-ATOA-1130-000003' DESCRIPTION='' NICKNAME='AOR 4호' IP='192.168.113.198' />
<EQUIPMENT ID='SS0718-ATOA-1130-000002' DESCRIPTION='' NICKNAME='AOR 1호' IP='192.168.113.177' />
<EQUIPMENT ID='SS0718-ATOA-1130-000003' DESCRIPTION='' NICKNAME='AOR 2호' IP='192.168.113.191' />
<EQUIPMENT ID='300060' DESCRIPTION='' NICKNAME='AOR 5호' IP='192.168.113.201' />
<EQUIPMENT ID='300107' DESCRIPTION='' NICKNAME='DI노광 12호' IP='192.168.233.79' />
<EQUIPMENT ID='HS0790-LDIA-1130-000002' DESCRIPTION='' NICKNAME='DI노광 6호' IP='192.168.113.140' />
<EQUIPMENT ID='HS0790-LDIA-1130-000003' DESCRIPTION='' NICKNAME='DI노광 5호' IP='192.168.113.207' />
<EQUIPMENT ID='HS0795-LDIA-1130-000001' DESCRIPTION='' NICKNAME='DI노광 9호' IP='192.168.113.210' />
<EQUIPMENT ID='HS0740-PPTA-1110-000003' DESCRIPTION='' NICKNAME='HP전처리 1호' IP='192.168.113.56' />
<EQUIPMENT ID='HS0790-EXPA-1130-000002' DESCRIPTION='' NICKNAME='자동노광 5호' IP='192.168.113.48' />
<EQUIPMENT ID='HS0790-EXPA-1130-000003' DESCRIPTION='' NICKNAME='자동노광 6호' IP='192.168.113.49' />
<EQUIPMENT ID='P0790-EXPA005-DUMMY' DESCRIPTION='' NICKNAME='자동노광 8호' IP='192.168.113.51' />
<EQUIPMENT ID='P0790-EXPA007-DUMMY' DESCRIPTION='' NICKNAME='자동노광 7호' IP='192.168.113.50' />
<EQUIPMENT ID='S0790-EXPA001-DUMMY' DESCRIPTION='' NICKNAME='자동노광 2호' IP='192.168.233.197' />
<EQUIPMENT ID='S0790-EXPA002-DUMMY' DESCRIPTION='' NICKNAME='자동노광 9호' IP='192.168.113.52' />
<EQUIPMENT ID='S0790-EXPA003-DUMMY' DESCRIPTION='' NICKNAME='자동노광 3호' IP='192.168.233.198' />
<EQUIPMENT ID='HS0800-SDPA-1130-000002' DESCRIPTION='' NICKNAME='현상 7호' IP='192.168.113.55' />
<EQUIPMENT ID='HS0800-SDPA-1130-000004' DESCRIPTION='' NICKNAME='현상 6호' IP='192.168.113.54' />
<EQUIPMENT ID='P0800-SDPA001-DUMMY' DESCRIPTION='' NICKNAME='현상 5호' IP='192.168.113.53' />
<EQUIPMENT ID='SS0800-SDPA-1130-000002' DESCRIPTION='' NICKNAME='현상 1호' IP='192.168.233.75' />
<EQUIPMENT ID='SS0800-SDPA-1130-000003' DESCRIPTION='' NICKNAME='현상 2호' IP='192.168.233.76' />
<EQUIPMENT ID='SS0800-SDPA-1130-000004' DESCRIPTION='' NICKNAME='현상 3호' IP='192.168.233.77' />
<EQUIPMENT ID='P0790-EXPA004-DUMMY' DESCRIPTION='' NICKNAME='DI노광 7호' IP='192.168.113.47' />
<EQUIPMENT ID='S0790-EXPA004-DUMMY' DESCRIPTION='' NICKNAME='DI노광 1호' IP='192.168.113.72' />
<EQUIPMENT ID='SS0790-LDIA-1130-000001' DESCRIPTION='' NICKNAME='DI노광 3호' IP='192.168.233.194' />
<EQUIPMENT ID='SS0795-LDIA-1130-000001' DESCRIPTION='' NICKNAME='DI노광 4호' IP='192.168.233.195' />
<EQUIPMENT ID='SS0795-LDIA-1130-000002' DESCRIPTION='' NICKNAME='DI노광 2호' IP='192.168.233.193' />
<EQUIPMENT ID='SS0795-LDIA-1130-000003' DESCRIPTION='' NICKNAME='DI노광 8호' IP='192.168.233.196' />
<EQUIPMENT ID='SS0795-LDIA-1130-000004' DESCRIPTION='' NICKNAME='DI노광 10호' IP='192.168.233.197' />
<EQUIPMENT ID='HS0620-PPTA-1130-000001' DESCRIPTION='' NICKNAME='HP연마 1호' IP='192.168.113.57' />
<EQUIPMENT ID='HS0730-PPTA-1130-000001' DESCRIPTION='' NICKNAME='전처리 6호' IP='192.168.113.41' />
<EQUIPMENT ID='HS0730-PPTA-1130-000002' DESCRIPTION='' NICKNAME='전처리 7호' IP='192.168.113.42' />
<EQUIPMENT ID='HS0740-PPTA-1130-000004' DESCRIPTION='' NICKNAME='전처리 4호' IP='192.168.113.39' />
<EQUIPMENT ID='P0730-PPTA003-DUMMY' DESCRIPTION='' NICKNAME='전처리 5호' IP='192.168.113.40' />
<EQUIPMENT ID='S0730-PPTA001-DUMMY' DESCRIPTION='' NICKNAME='전처리 1호' IP='192.168.233.81' />
<EQUIPMENT ID='S0730-PPTA002-DUMMY' DESCRIPTION='' NICKNAME='전처리 2호' IP='192.168.233.82' />
<EQUIPMENT ID='SS0730-PPTA-1130-000001' DESCRIPTION='' NICKNAME='전처리 8호' IP='192.168.233.185' />
<EQUIPMENT ID='H0740-PRTA005-DUMMY' DESCRIPTION='' NICKNAME='롤코터 3호' IP='192.168.113.133' />
<EQUIPMENT ID='HS0780-VLMA-1130-000001' DESCRIPTION='' NICKNAME='진공밀착 6호' IP='192.168.113.43' />
<EQUIPMENT ID='S0770-VLMA001-DUMMY' DESCRIPTION='' NICKNAME='진공밀착 7호' IP='192.168.113.44' />
<EQUIPMENT ID='SS0770-VLMA-1130-000003' DESCRIPTION='' NICKNAME='진공밀착 3호' IP='192.168.113.230' />
<EQUIPMENT ID='SS0770-VLMA-1130-000001' DESCRIPTION='' NICKNAME='진공밀착 2호' IP='192.168.233.187' />
<EQUIPMENT ID='SS0770-VLMA-1130-000002' DESCRIPTION='' NICKNAME='진공밀착 4호' IP='192.168.233.189' />
<EQUIPMENT ID='SS0770-VLMA-1130-000004' DESCRIPTION='' NICKNAME='진공밀착 5호' IP='192.168.233.190' />
<EQUIPMENT ID='SS0770-VLMA-1130-000005' DESCRIPTION='' NICKNAME='진공밀착 1호' IP='192.168.233.74' />
<EQUIPMENT ID='SS0775-VLMA-1130-000001' DESCRIPTION='' NICKNAME='진공밀착 8호' IP='192.168.233.191' />
<EQUIPMENT ID='SS0410-PLAA-1130-000001' DESCRIPTION='' NICKNAME='수동플라즈마 1호' IP='192.168.233.28' />
<EQUIPMENT ID='H0820-JETA002-DUMMY' DESCRIPTION='' NICKNAME='퍼미스 3호' IP='192.168.113.58' />
<EQUIPMENT ID='PS0820-JETA-1110-000002' DESCRIPTION='' NICKNAME='퍼미스 2호' IP='192.168.233.203' />
<EQUIPMENT ID='S0820-JETA001-DUMMY' DESCRIPTION='' NICKNAME='퍼미스 1호' IP='192.168.233.202' />
<EQUIPMENT ID='SS0930-STRA-1130-000003' DESCRIPTION='' NICKNAME='SR후처리 1호(미사용)' IP='192.168.233.212' />
<EQUIPMENT ID='SS0970-STRA-1130-000001' DESCRIPTION='' NICKNAME='S박리 2호' IP='192.168.233.209' />
<EQUIPMENT ID='SS0400-OVNA-1130-000006' DESCRIPTION='' NICKNAME='수직베이킹' IP='192.168.233.136' />
<EQUIPMENT ID='SS0900-GLDA-1130-000001' DESCRIPTION='' NICKNAME='ENEPIG 1호' IP='192.168.233.210' />
<EQUIPMENT ID='HS1260-OSPA-1130-000001' DESCRIPTION='' NICKNAME='OSP 4호' IP='192.168.113.2' />
<EQUIPMENT ID='P0410-PLAA003-DUMMY' DESCRIPTION='' NICKNAME='플라즈마 2호' IP='192.168.233.205' />
<EQUIPMENT ID='S0410-PLAA001-DUMMY' DESCRIPTION='' NICKNAME='플라즈마 1호' IP='192.168.233.210' />
<EQUIPMENT ID='SS0410-PLAA-1130-000003' DESCRIPTION='' NICKNAME='플라즈마 3호' IP='192.168.113.45' />
<EQUIPMENT ID='SS0410-PLAA-1130-000004' DESCRIPTION='' NICKNAME='플라즈마 4호' IP='192.168.113.31' />
<EQUIPMENT ID='P0890-GLDA003-DUMMY' DESCRIPTION='' NICKNAME='소프트골드 3호' IP='192.168.113.27' />
<EQUIPMENT ID='S0890-GLDA001-DUMMY' DESCRIPTION='' NICKNAME='소프트골드 1호' IP='192.168.233.208' />
<EQUIPMENT ID='SS0890-GLDA-1130-000001' DESCRIPTION='' NICKNAME='소프트골드 2호' IP='192.168.232.41' />
</SERVER>
<SERVER ID='EIS.B2'>
<EQUIPMENT ID='BA0520-ECPA-1130-000001' DESCRIPTION='' NICKNAME='전기동 1호' IP='192.168.123.2' />
<EQUIPMENT ID='BA0520-ECPA-1130-000002' DESCRIPTION='' NICKNAME='전기동 2호' IP='192.168.123.3' />
<EQUIPMENT ID='BA0425-PLAA-1130-000001' DESCRIPTION='' NICKNAME='플라즈마[2F] (현상)' IP='192.168.123.7' />
<EQUIPMENT ID='BA0438-OVNA-1130-000001' DESCRIPTION='' NICKNAME='베이킹 2호[3F]' IP='192.168.122.2' />
<EQUIPMENT ID='BA0660-DFPA-1130-000001' DESCRIPTION='' NICKNAME='전처리 1호' IP='192.168.122.5' />
<EQUIPMENT ID='BA0675-DEVA-1130-000001' DESCRIPTION='' NICKNAME='수직현상 1호' IP='192.168.122.17' />
<EQUIPMENT ID='BA0723-OVNA-1130-000001' DESCRIPTION='' NICKNAME='베이킹 1호[4F] (고온베이킹)' IP='192.168.122.11' />
<EQUIPMENT ID='BA0430-ELPA-1130-000001' DESCRIPTION='' NICKNAME='수평화학동 (IN:각인기/디버링/수평디스미어/화학동)' IP='192.168.123.21' />
<EQUIPMENT ID='BA0030-ECHA-1130-000001' DESCRIPTION='' NICKNAME='하프에칭 1호' IP='192.168.122.16' />
<EQUIPMENT ID='BA0660-WASA-1130-000001' DESCRIPTION='' NICKNAME='TRAY 세정기' IP='192.168.122.39' />
<EQUIPMENT ID='BA0414-PLAA-1130-000001' DESCRIPTION='' NICKNAME='플라즈마[3F] (IN:오토필러)' IP='192.168.123.18' />
<EQUIPMENT ID='BA0419-PLAA-1130-000001' DESCRIPTION='' NICKNAME='플라즈마[1F] (표면처리)' IP='192.168.123.80' />
<EQUIPMENT ID='BA0366-DSMA-1130-000001' DESCRIPTION='' NICKNAME='수직디스미어 1호 (IN:나노스캔/화학동/VL베이킹)' IP='192.168.123.4' />
<EQUIPMENT ID='BA0435-ELPA-1130-000001' DESCRIPTION='' NICKNAME='수직화학동 1호' IP='192.168.123.23' />
<EQUIPMENT ID='BA0396-OVNA-1130-000001' DESCRIPTION='' NICKNAME='VL베이킹[2F] (IN:두께측정기)' IP='192.168.122.10' />
<EQUIPMENT ID='BA0050-DFPA-1130-000001' DESCRIPTION='' NICKNAME='전처리 2호' IP='192.168.122.4' />
<EQUIPMENT ID='BA0074-INSA-1130-000001' DESCRIPTION='' NICKNAME='나노 2호 (3D측정기)' IP='192.168.123.41' />
<EQUIPMENT ID='BA0708-INSA-1130-000001' DESCRIPTION='' NICKNAME='나노 1호 (3D측정기)' IP='192.168.123.40' />
<EQUIPMENT ID='BA0717-AOIA-1130-000001' DESCRIPTION='' NICKNAME='A3 1호' IP='192.168.123.15' />
<EQUIPMENT ID='BA0070-ECHA-1130-000001' DESCRIPTION='' NICKNAME='DES 1호' IP='192.168.123.24' />
<EQUIPMENT ID='BA0671-LDIA-1130-000001' DESCRIPTION='' NICKNAME='DI노광 1호' IP='192.168.123.5' />
<EQUIPMENT ID='BA0061-LDIA-1130-000001' DESCRIPTION='' NICKNAME='DI노광 2호' IP='192.168.123.22' />
<EQUIPMENT ID='BA0810-STRA-1130-000001' DESCRIPTION='' NICKNAME='M박리/Q에칭' IP='192.168.122.3' />
<EQUIPMENT ID='BB0387-OVNA-1130-000001' DESCRIPTION='' NICKNAME='CURE 1호' IP='192.168.193.26' />
<EQUIPMENT ID='BB0750-PRTA-1130-000001' DESCRIPTION='' NICKNAME='롤코터 1호' IP='192.168.192.14' />
<EQUIPMENT ID='BB0776-VLMA-1130-000002' DESCRIPTION='' NICKNAME='진공밀착 2호' IP='192.168.192.9' />
<EQUIPMENT ID='BB0776-VLMA-1130-000003' DESCRIPTION='' NICKNAME='진공밀착 3호' IP='192.168.192.16' />
<EQUIPMENT ID='BB0780-VLMA-1130-000001' DESCRIPTION='' NICKNAME='진공밀착 1호' IP='192.168.192.15' />
<EQUIPMENT ID='BB0785-PLMA-1130-000001' DESCRIPTION='' NICKNAME='PET밀착 1호' IP='192.168.192.7' />
<EQUIPMENT ID='BB0730-WASA-1130-000001' DESCRIPTION='' NICKNAME='TRAY세정기 1호' IP='192.168.192.8' />
<EQUIPMENT ID='BB0800-SDPA-1130-000001' DESCRIPTION='' NICKNAME='PSR현상 1호 (IN:CURE/두께측정기)' IP='192.168.192.5' />
<EQUIPMENT ID='BB0805-INSA-1130-000001' DESCRIPTION='' NICKNAME='나노 1호' IP='192.168.193.25' />
<EQUIPMENT ID='BB0805-INSA-1130-000002' DESCRIPTION='' NICKNAME='표면검사기 1호' IP='192.168.193.6' />
<EQUIPMENT ID='BB0603-PREA-1130-000001' DESCRIPTION='' NICKNAME='XBF전처리 1호 (IN:검사기/터널베이킹)' IP='192.168.193.2' />
<EQUIPMENT ID='BB0730-PPTA-1130-000001' DESCRIPTION='' NICKNAME='PSR전처리 1호 (IN:검사기)' IP='192.168.192.4' />
<EQUIPMENT ID='BB0791-LDIA-1130-000001' DESCRIPTION='' NICKNAME='DI노광 1호 (IN:오토필러)' IP='192.168.193.3' />
<EQUIPMENT ID='300106' DESCRIPTION='' NICKNAME='분리합치기' IP='192.168.193.7' />
<EQUIPMENT ID='BA9001-ATOA-1130-000002' DESCRIPTION='' NICKNAME='LOT분리합체기 A1-1(STATION A1-1)' IP='192.168.123.42' />
<EQUIPMENT ID='BA9001-ATOA-1130-000003' DESCRIPTION='' NICKNAME='LOT분리합체기 A1-2(STATION A1-1)' IP='192.168.123.42' />
<EQUIPMENT ID='BA9001-ATOA-1130-000012' DESCRIPTION='' NICKNAME='LOT분리합체기 A2-2(STATION A2-1)' IP='192.168.123.45' />
<EQUIPMENT ID='BA9001-ATOA-1130-000013' DESCRIPTION='' NICKNAME='LOT분리합체기 A2-3(STATION A2-1)' IP='192.168.123.45' />
<EQUIPMENT ID='BA9001-ATOA-1130-000019' DESCRIPTION='' NICKNAME='LOT분리합체기 A2-1(4층)' IP='192.168.123.50' />
<EQUIPMENT ID='BA9001-ATOA-1130-000023' DESCRIPTION='' NICKNAME='LOT분리합체기 A3-1(STATION A3-1)' IP='192.168.123.52' />
<EQUIPMENT ID='BA9001-ATOA-1130-000024' DESCRIPTION='' NICKNAME='LOT분리합체기 A3-2(STATION A3-1)' IP='192.168.123.52' />
<EQUIPMENT ID='BA9001-ATOA-1130-000030' DESCRIPTION='' NICKNAME='LOT분리합체기 A4-1(STATION A4-1)' IP='192.168.123.57' />
<EQUIPMENT ID='BA9001-ATOA-1130-000031' DESCRIPTION='' NICKNAME='LOT분리합체기 A4-2(STATION A4-1)' IP='192.168.123.57' />
<EQUIPMENT ID='BB9001-ATOA-1130-000002' DESCRIPTION='' NICKNAME='LOT분리합체기 B3-1(STATION B3-1)' IP='192.168.193.11' />
<EQUIPMENT ID='BB9001-ATOA-1130-000003' DESCRIPTION='' NICKNAME='LOT분리합체기 B3-2(STATION B3-1)' IP='192.168.193.11' />
<EQUIPMENT ID='BB9001-ATOA-1130-000010' DESCRIPTION='' NICKNAME='LOT분리합체기 B4-2(STATION B4-1)' IP='192.168.193.16' />
<EQUIPMENT ID='BB9001-ATOA-1130-000011' DESCRIPTION='' NICKNAME='LOT분리합체기 B4-1' IP='192.168.193.17' />
<EQUIPMENT ID='BB9001-ATOA-1130-000019' DESCRIPTION='' NICKNAME='LOT분리합체기 B4-3(STATION B4-1)' IP='192.168.193.16' />
<EQUIPMENT ID='BA9001-ATOA-1130-000007' DESCRIPTION='' NICKNAME='RunSheet 제거기' IP='192.168.123.43' />
<EQUIPMENT ID='BA9001-ATOA-1130-000010' DESCRIPTION='' NICKNAME='트레이포장기' IP='192.168.123.63' />
<EQUIPMENT ID='BC1259-AFVA-1130-000001' DESCRIPTION='' NICKNAME='A2 (Unit)' IP='127.0.0.1' />
<EQUIPMENT ID='DP1147-BBTA-1130-000001' DESCRIPTION='' NICKNAME='BBT(Unit)' IP='192.168.162.5' />
<EQUIPMENT ID='DP1170-SMBA-1130-000001' DESCRIPTION='' NICKNAME='SOP_MMP 1호' IP='192.168.163.19' />
<EQUIPMENT ID='DP1170-SMBA-1130-000002' DESCRIPTION='' NICKNAME='SOP_MMP 2호' IP='192.168.163.30' />
<EQUIPMENT ID='DP1171-SMBA-1130-000002' DESCRIPTION='' NICKNAME='MicroBall 1호' IP='192.168.163.33' />
<EQUIPMENT ID='DP1171-SMBA-1130-000003' DESCRIPTION='' NICKNAME='MicroBall 2호' IP='192.168.163.21' />
<EQUIPMENT ID='DP1200-COIA-1130-000004' DESCRIPTION='' NICKNAME='코이닝(Quad)' IP='192.168.163.28' />
<EQUIPMENT ID='DP1200-COIA-1130-000005' DESCRIPTION='' NICKNAME='코이닝(Unit)' IP='192.168.163.28' />
<EQUIPMENT ID='DP1260-OSPA-1130-000004' DESCRIPTION='' NICKNAME='OSP 5호 (프로웨트 社)' IP='127.0.0.1' />
<EQUIPMENT ID='DP1155-SWNA-1130-000001' DESCRIPTION='' NICKNAME='Sawing/수세 (Quad)' IP='192.168.163.46' />
<EQUIPMENT ID='ChipCounter' DESCRIPTION='' NICKNAME='ChipCounter' IP='172.20.75.21' />
</SERVER>
</SERVER_LIST>

51
DDUtilityApp/FrmMain.Designer.cs generated Normal file
View File

@@ -0,0 +1,51 @@
namespace DDUtilityApp
{
partial class FrmMain
{
/// <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()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmMain));
this.SuspendLayout();
//
// FrmMain
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(288, 152);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.Name = "FrmMain";
this.Padding = new System.Windows.Forms.Padding(18, 16, 18, 16);
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "FrmMain";
this.ResumeLayout(false);
}
#endregion
}
}

114
DDUtilityApp/FrmMain.cs Normal file
View File

@@ -0,0 +1,114 @@
using JWH;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace DDUtilityApp
{
public partial class FrmMain : Form
{
public object SelectedObject { get; set; } = null;
public Dictionary<string, object> Buttons { get; set; } = new Dictionary<string, object>();
public FrmMain()
{
InitializeComponent();
this.SetLayout();
this.SetEventHandler();
}
public FrmMain(Dictionary<string, object> args) : this()
{
this.Buttons = args;
this.SetButtons();
}
protected void SetLayout()
{
}
protected void SetEventHandler()
{
this.Load += FrmMain_Load;
}
private void FrmMain_Load(object sender, EventArgs e)
{
this.SetButtons();
}
/// <summary>
/// 동적으로 버튼 생성
/// </summary>
private void SetButtons()
{
try
{
int btnWidth = 200;
int btnHeight = 32;
int tabIndex = 0;
List<Button> lstControls = new List<Button>();
foreach(string name in this.Buttons.Keys)
{
object obj = this.Buttons[name];
Button button = new Button();
button.Text = name;
button.Size = new Size(btnWidth, btnHeight);
button.Dock = DockStyle.Top;
button.TabIndex = tabIndex++;
button.Tag = obj;
button.Click += Button_Click;
lstControls.Add(button);
}
Button btnClose = new Button();
btnClose.Text = "Close";
btnClose.Size = new Size(btnWidth, btnHeight);
btnClose.Dock = DockStyle.Top;
btnClose.TabIndex = tabIndex++;
btnClose.Click += BtnClose_Click;
lstControls.Add(btnClose);
lstControls.Reverse();
foreach (Button button in lstControls)
{
this.Controls.Add(button);
if (button.Name == "btnClose")
this.CancelButton = button;
}
this.AutoSize = true;
this.Padding = new Padding(10);
this.Size = new Size(this.Width, btnClose.Bounds.Bottom);
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
private void Button_Click(object sender, EventArgs e)
{
Button button = sender as Button;
this.SelectedObject = button.Tag;
this.DialogResult = DialogResult.OK;
this.Close();
}
private void BtnClose_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
this.Close();
}
}
}

345
DDUtilityApp/FrmMain.resx Normal file
View File

@@ -0,0 +1,345 @@
<?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.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
</root>

View File

@@ -0,0 +1,207 @@
using JWH;
using System;
using System.ComponentModel;
using System.Configuration;
using System.Drawing;
using System.IO;
using System.Reflection;
using System.Text;
using System.Windows.Forms;
using System.Xml;
namespace DDUtilityApp
{
public class GlobalVariable
{
[ReadOnly(true)]
public static GlobalVariable Instance { get; set; } = new GlobalVariable();
/// <summary>
/// 설정정보 파일 경로
/// </summary>
public string DefaultPath { get; set; }
/// <summary>
/// 로그파일 다운로드 경로
/// </summary>
public string DownloadPath { get; set; }
/// <summary>
/// Workflow 다운로드 경로
/// </summary>
public string WorkflowPath { get; set; }
/// <summary>
/// Workflow(Compress) 원본파일 경로 구분
/// </summary>
public string WorkflowLocation { get; set; } = "Remote";
/// <summary>
/// Workflow(Compress) 원본파일 경로
/// </summary>
public string WorkflowCompressPath { get; set; }
public FormStartPosition FormStartPosition { get; set; } = FormStartPosition.CenterScreen;
public FormWindowState FormWindowState { get; set; } = FormWindowState.Maximized;
public Point FormLocation { get; set; } = new Point(0, 0);
public Size FormSize { get; set; } = new Size(1300, 750);
#region [ LogParser ]
public string EisParser_GridHeader { get; set; } = string.Empty;
public string AgvParser_GridHeader { get; set; } = string.Empty;
#endregion
#region [ FrmEqSelector ]
/// <summary>
/// EquipmentSelector 설비명 표시 필드. DDUtilityName;Description;MesName;
/// </summary>
public string FrmEqSelector_NameOrder { get; set; } = "MesName;DDUtilityName;Description;";
public bool FrmEqSelector_AllEquipment { get; set; } = false;
public bool FrmEqSelector_UseMesDB { get; set; } = false;
public string FrmEqSelector_GridEquipmentHeader { get; set; } = string.Empty;
public bool FrmEqSelector_UseSMB { get; set; } = false;
#endregion
public GlobalVariable()
{
this.LodConfig();
this.LoadSetting();
if (string.IsNullOrEmpty(this.FrmEqSelector_GridEquipmentHeader))
{
StringBuilder sb = new StringBuilder();
sb.Append($"Facility;");
sb.Append($"Line;");
sb.Append($"EquipmentID;");
sb.Append($"DisplayName;");
//sb.Append($"ControlMode;");
//sb.Append($"State;");
sb.Append($"ModelID;");
sb.Append($"Version;");
sb.Append($"EquipmentIP;");
sb.Append($"Port;");
sb.Append($"ServerIP;");
sb.Append($"GemSettingID;");
sb.Append($"DriverFileName;");
this.FrmEqSelector_GridEquipmentHeader = sb.ToString();
}
}
private void LodConfig()
{
// DefaultPath
string defaultPath = ConfigurationManager.AppSettings["DefaultPath"];
if (string.IsNullOrEmpty(defaultPath)) defaultPath = $@"%MyDocuments%\DDUtility\";
this.DefaultPath = defaultPath.Replace("%MyDocuments%", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));
this.DownloadPath = $@"{this.DefaultPath}Download\";
this.WorkflowPath = $@"{this.DefaultPath}Workflow\";
}
public void LoadSetting()
{
this.LoadSetting($@"{this.DefaultPath}Setting.xml");
}
private void LoadSetting(string filename)
{
try
{
Type type = this.GetType();
XmlDocument document = new XmlDocument();
document.Load(filename);
PropertyInfo property = null;
foreach (XmlNode node in document.GetNodesByName("Property"))
{
try
{
property = type.GetProperty(node.Attributes["NAME"].Value);
string strValue = node.Attributes["VALUE"].Value;
if (property == null) continue;
object value = null;
if (property.PropertyType == typeof(System.Type))
{
value = Type.GetType(strValue);
}
else if (property.PropertyType == typeof(Size))
{
string[] splitValues = strValue.Split(new string[] { "{", "}", "=", "," }, StringSplitOptions.RemoveEmptyEntries);
value = new Size(int.Parse(splitValues[1]), int.Parse(splitValues[3]));
}
else if (property.PropertyType == typeof(Point))
{
string[] splitValues = strValue.Split(new string[] { "{", "}", "=", "," }, StringSplitOptions.RemoveEmptyEntries);
value = new Point(int.Parse(splitValues[1]), int.Parse(splitValues[3]));
}
else
{
value = TypeDescriptor.GetConverter(property.PropertyType).ConvertFrom(strValue);
}
property.SetValue(this, value);
}
catch (Exception ex)
{
XLogger.Instance.Fatal($"{property.Name}", ex);
}
}
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
public void SaveSetting()
{
this.SaveSetting($@"{this.DefaultPath}Setting.xml");
}
private void SaveSetting(string filename)
{
try
{
Type type = this.GetType();
StringBuilder sb = new StringBuilder();
sb.AppendLine($"<DDUtility>");
sb.AppendLine($" <Properties>");
foreach (PropertyInfo property in type.GetProperties())
{
Attribute attribute = property.GetCustomAttribute(typeof(ReadOnlyAttribute));
if (attribute != null && ((ReadOnlyAttribute)attribute).IsReadOnly) continue;
object value = property.GetValue(this);
sb.AppendLine($" <Property NAME='{property.Name}' VALUE='{value}' />");
}
sb.AppendLine($" </Properties>");
sb.AppendLine($"</DDUtility>");
using (StreamWriter stream = File.CreateText(filename))
stream.Write(sb.ToString());
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
DDUtilityApp/IMAGE/Fire.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
DDUtilityApp/IMAGE/Main.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@@ -0,0 +1,148 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Text;
using JWH;
using JWH.DATA;
namespace DDUtilityApp.LOGPARSER.DATA
{
public class CompressInformation : DataTableBase
{
public string ExtractPath { get; protected set; }
public string FileName { get; protected set; }
public List<FileInfo> Files { get; set; } = new List<FileInfo>();
public CompressInformation()
{
}
public CompressInformation(string filename)
{
this.FileName = filename;
this.Files.AddRange(this.Decompress(filename).ToArray());
}
private List<FileInfo> Decompress(string srcFile)
{
List<FileInfo> lstFile = new List<FileInfo>();
try
{
string extension = System.IO.Path.GetExtension(srcFile);
if (!Directory.Exists(GlobalVariable.Instance.WorkflowPath)) Directory.CreateDirectory(GlobalVariable.Instance.WorkflowPath);
string destFile = $@"{GlobalVariable.Instance.WorkflowPath}{System.IO.Path.GetFileNameWithoutExtension(srcFile)}";
if (this.Decompress(srcFile, destFile) == false) return lstFile;
string directoryName = $@"{GlobalVariable.Instance.WorkflowPath}{System.IO.Path.GetFileNameWithoutExtension(srcFile)}_{DateTime.Now.ToString("MMddHHmmss")}";
if (!Directory.Exists(directoryName)) Directory.CreateDirectory(directoryName);
this.ExtractPath = directoryName;
FileInfo destFileInfo = new FileInfo(destFile);
using (FileStream readStream = destFileInfo.OpenRead())
{
while (true)
{
// Get Length of FileName
byte[] byteLength = new byte[4];
int nRead = readStream.Read(byteLength, 0, 4);
if (nRead <= 0) break;
int lenFilename = BitConverter.ToInt32(byteLength, 0);
lenFilename *= 2;
// Get FileName
byte[] byteFilename = new byte[lenFilename];
nRead = readStream.Read(byteFilename, 0, lenFilename);
if (nRead <= 0) break;
string filename = Encoding.Unicode.GetString(byteFilename);
// Get Length of File Body
nRead = readStream.Read(byteLength, 0, 4);
if (nRead <= 0) break;
int lenFile = BitConverter.ToInt32(byteLength, 0);
if (lenFile == -1)
{
continue;
}
// Get File Body
byte[] byteFileBody = new byte[lenFile];
nRead = readStream.Read(byteFileBody, 0, lenFile);
if (nRead <= 0) break;
// Write File
using (FileStream writeStream = File.Create($"{directoryName}\\{filename}"))
writeStream.Write(byteFileBody, 0, lenFile);
lstFile.Add(new FileInfo($"{directoryName}\\{filename}"));
}
}
destFileInfo.Delete();
return lstFile;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
return lstFile;
}
}
private void Compress(DirectoryInfo directorySelected)
{
foreach (FileInfo fileToCompress in directorySelected.GetFiles())
{
using (FileStream originalFileStream = fileToCompress.OpenRead())
{
if ((File.GetAttributes(fileToCompress.FullName) &
FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".gz")
{
using (FileStream compressedFileStream = File.Create(fileToCompress.FullName + ".gz"))
{
using (GZipStream compressionStream = new GZipStream(compressedFileStream, CompressionMode.Compress))
{
originalFileStream.CopyTo(compressionStream);
}
}
FileInfo info = new FileInfo(GlobalVariable.Instance.WorkflowPath + Path.DirectorySeparatorChar + fileToCompress.Name + ".gz");
Console.WriteLine($"Compressed {fileToCompress.Name} from {fileToCompress.Length.ToString()} to {info.Length.ToString()} bytes.");
}
}
}
}
private bool Decompress(string srcFile, string destFile)
{
try
{
FileInfo srcFileInfo = new FileInfo(srcFile);
using (FileStream srcStream = srcFileInfo.OpenRead())
{
using (FileStream destStream = File.Create(destFile))
{
using (GZipStream zipStream = new GZipStream(srcStream, CompressionMode.Decompress))
{
zipStream.CopyTo(destStream);
}
}
}
return true;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
return false;
}
}
}
}

View File

@@ -0,0 +1,182 @@
using System;
using System.ComponentModel;
using DDUtilityApp.DATA;
using JWH;
using JWH.DATA;
namespace DDUtilityApp.LOGPARSER.DATA
{
/// <summary>
/// EIS 설비 정보
/// </summary>
public class EisEquipment : DataTableBase
{
/// <summary>LogServer Information</summary>
public LogServer Server { get; set; }
/// <summary>MES.FacilityName</summary>
public string Facility { get; set; }
/// <summary>EIS.Line</summary>
public string Line { get; set; }
/// <summary>MES.ProcessSegmentID</summary>
public string ProcessSegmentID { get; set; }
/// <summary>MES.ProcessSegmentName</summary>
public string ProcessSegmentName { get; set; }
/// <summary>EIS.ModelID</summary>
public string ModelID { get; set; }
/// <summary>MES.Maker</summary>
public string Maker { get; set; }
/// <summary>EIS.ModelVersion (From EIS.EquipmentModelDetails)</summary>
public string ModelVersion { get; set; }
/// <summary>EIS.Version</summary>
public string Version { get; set; }
/// <summary>EIS.RunningVersion</summary>
public string RunningVersion { get; set; }
/// <summary>Empty</summary>
public string CusLibVersion { get; set; }
/// <summary>EIS.EquipmentID</summary>
public string EquipmentID { get; set; }
/// <summary>Name is Select(MES, EIS)</summary>
[ReadOnly(true)]
public string DisplayName
{
get
{
string value = string.Empty;
foreach(string name in this.DisplayNameOrder.Split(';'))
{
value = this.PropertyGet(name);
if (!string.IsNullOrEmpty(value)) break;
}
return value;
}
}
/// <summary>EIS.Description</summary>
public string Description { get; set; }
/// <summary>EIS.GemSettingID (From DriverParameter)</summary>
public string GemSettingID { get; set; }
/// <summary>EIS.DriverFileName (From DriverParameter)</summary>
public string DriverFileName { get; set; }
/// <summary>EIS.EquipmentIP (From DriverParameter)</summary>
public string EquipmentIP { get; set; }
/// <summary>EIS.Port (From DriverParameter)</summary>
public int Port { get; set; }
/// <summary>Empty</summary>
public string ServerName { get; set; }
/// <summary>EIS.ServerIP</summary>
public string ServerIP { get; set; }
/// <summary>EIS.OriginServerIP</summary>
public string OriginServerIP { get; set; }
/// <summary>LogServerIP</summary>
public string LogServerIP { get; set; }
private string m_LogPath = string.Empty;
/// <summary>EIS.LogPath</summary>
public string LogPath
{
get { return this.m_LogPath; }
set { this.m_LogPath = this.SetLogPath(value); }
}
/// <summary>MES.Description</summary>
public string MesName { get; set; }
/// <summary>MES.OperationMode</summary>
public string OperationMode { get; set; }
private string m_ControlMode = string.Empty;
/// <summary>MES.ControlMode</summary>
public string ControlMode
{
get { return this.m_ControlMode; }
set { this.m_ControlMode = value.ToTitleCase(); }
}
private string m_EquipmentState = string.Empty;
/// <summary>MES.EqpState</summary>
public string State
{
get { return this.m_EquipmentState; }
set { this.m_EquipmentState = value.ToTitleCase(); }
}
/// <summary>MES.LastTrackInLotID</summary>
public string LastTrackInLotID { get; set; }
/// <summary>MES.LastTrackOutLotID</summary>
public string LastTrackOutLotID { get; set; }
/// <summary>DisplayName OrderBy</summary>
public string DisplayNameOrder { get; set; } = "MesName;Description;";
/// <summary>MES 기준등록 존재여부</summary>
public bool MesRegistration { get; set; } = true;
/// <summary>MES Daemon</summary>
public string MesDaemon { get; set; }
/// <summary>MES Service</summary>
public string MesService { get; set; }
/// <summary>MES Subject</summary>
public string MesSubject { get; set; }
/// <summary>PLC_TYPE</summary>
public string PlcType { get; set; }
/// <summary>PM Date</summary>
public DateTime PMDate { get; set; }
private string SetLogPath(string value)
{
try
{
if (value.StartsWith(@"\"))
{
string[] values = value.Split(new string[] { @"\" }, StringSplitOptions.RemoveEmptyEntries);
this.LogServerIP = values[0];
}
else
{
if (value.StartsWith("X:"))
this.LogServerIP = "192.168.7.150";
else
this.LogServerIP = this.ServerIP;
}
return value;
}
catch
{
return value;
}
}
}
}

View File

@@ -0,0 +1,41 @@
using System;
using JWH.DATA;
namespace DDUtilityApp.LOGPARSER.DATA
{
public class EisModelDetails : DataTableBase
{
public string ModelID { get; set; }
public string Version { get; set; }
public string Description { get; set; }
public DateTime DateTime { get; set; }
public string Modifier { get; set; }
public string LockState { get; set; }
}
public class EisModelInfo : DataTableBase
{
public string ModelID { get; set; }
public string Maker { get; set; }
public string Model { get; set; }
public string Description { get; set; }
public DateTime DateTime { get; set; }
public string Modifier { get; set; }
}
}

View File

@@ -0,0 +1,40 @@
using System;
using JWH.DATA;
namespace DDUtilityApp.LOGPARSER.DATA
{
/// <summary>
/// 로그 파일 정보
/// </summary>
public class LogFile : DataTableBase
{
public string Name { get; set; }
public long Length { get; set; }
public string Extension { get; set; }
public string FullName { get; set; }
public DateTime CreationTime { get; set; }
public DateTime LastAccessTime { get; set; }
public DateTime LastWriteTime { get; set; }
public LogFile()
{
}
public LogFile(string fullName)
{
this.Name = System.IO.Path.GetFileNameWithoutExtension(fullName);
this.FullName = fullName;
this.Extension = System.IO.Path.GetExtension(fullName);
}
}
}

View File

@@ -0,0 +1,98 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using DDUtilityApp.SECS;
using JWH.DATA;
namespace DDUtilityApp.LOGPARSER.DATA
{
public class StandardCollection : List<StandardData>
{
}
/// <summary>
///
/// </summary>
public class StandardData : DataTableBase
{
public delegate void onBodyParser(StandardData sender);
[Browsable(false)]
public int LineNumber { get; set; }
public DateTime DateTime { get; set; }
public string Level { get; set; }
public string Server { get; set; }
public string Service { get; set; }
public string Type { get; set; }
public string MessageName { get; set; }
public string Return { get; set; }
public string Value { get; set; }
public string EquipmentID { get; set; }
public string PortID { get; set; }
public string CarrierID { get; set; }
public string LotID { get; set; }
public string ModuleID { get; set; }
public string HostPanelID { get; set; }
public string PanelID { get; set; }
public string PanelQty { get; set; }
public string TID { get; set; }
public string SystemByte { get; set; }
public string Column1 { get; set; }
public string Column2 { get; set; }
public string Column3 { get; set; }
public string Column4 { get; set; }
public string Column5 { get; set; }
[Browsable(false)]
public StringBuilder Body { get; set; } = new StringBuilder();
[Browsable(false)]
public SECSItem SECSItem { get; set; } = null;
[Browsable(false)]
public onBodyParser BodyParser { get; set; }
public void BodyParsing()
{
if (this.BodyParser == null) return;
this.BodyParser.DynamicInvoke(this);
}
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.Append($"{this.Server} {this.MessageName}");
return sb.ToString();
}
}
}

View File

@@ -0,0 +1,582 @@
namespace DDUtilityApp.LOGPARSER
{
partial class FrmEqSelector
{
/// <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()
{
Telerik.WinControls.UI.TableViewDefinition tableViewDefinition1 = new Telerik.WinControls.UI.TableViewDefinition();
Telerik.WinControls.UI.TableViewDefinition tableViewDefinition2 = new Telerik.WinControls.UI.TableViewDefinition();
Telerik.WinControls.UI.TableViewDefinition tableViewDefinition3 = new Telerik.WinControls.UI.TableViewDefinition();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmEqSelector));
this.panel1 = new System.Windows.Forms.Panel();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.panel2 = new System.Windows.Forms.Panel();
this.flowLayoutPanel2 = new System.Windows.Forms.FlowLayoutPanel();
this.panel8 = new System.Windows.Forms.Panel();
this.tboxName = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.panel9 = new System.Windows.Forms.Panel();
this.tboxEquipmentID = new System.Windows.Forms.TextBox();
this.label4 = new System.Windows.Forms.Label();
this.chkAllEquipment = new System.Windows.Forms.CheckBox();
this.chkUseMesDB = new System.Windows.Forms.CheckBox();
this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
this.panel4 = new System.Windows.Forms.Panel();
this.cboxServer = new System.Windows.Forms.ComboBox();
this.label1 = new System.Windows.Forms.Label();
this.btnOK = new System.Windows.Forms.Button();
this.splitContainer2 = new System.Windows.Forms.SplitContainer();
this.panel3 = new System.Windows.Forms.Panel();
this.panel6 = new System.Windows.Forms.Panel();
this.gridEquipments = new JWH.CONTROL.GridViewEx();
this.panel5 = new System.Windows.Forms.Panel();
this.panel7 = new System.Windows.Forms.Panel();
this.tabControl1 = new System.Windows.Forms.TabControl();
this.tabPage1 = new System.Windows.Forms.TabPage();
this.gridLogFiles = new JWH.CONTROL.GridViewEx();
this.tabPage2 = new System.Windows.Forms.TabPage();
this.gridModelDetail = new JWH.CONTROL.GridViewEx();
this.panel10 = new System.Windows.Forms.Panel();
this.tboxModelDescription = new System.Windows.Forms.TextBox();
this.radStatusStrip1 = new Telerik.WinControls.UI.RadStatusStrip();
this.rstatus1 = new Telerik.WinControls.UI.RadLabelElement();
this.chkUseSMB = new System.Windows.Forms.CheckBox();
this.panel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
this.panel2.SuspendLayout();
this.flowLayoutPanel2.SuspendLayout();
this.panel8.SuspendLayout();
this.panel9.SuspendLayout();
this.flowLayoutPanel1.SuspendLayout();
this.panel4.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
this.splitContainer2.Panel1.SuspendLayout();
this.splitContainer2.Panel2.SuspendLayout();
this.splitContainer2.SuspendLayout();
this.panel3.SuspendLayout();
this.panel6.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.gridEquipments)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.gridEquipments.MasterTemplate)).BeginInit();
this.panel5.SuspendLayout();
this.panel7.SuspendLayout();
this.tabControl1.SuspendLayout();
this.tabPage1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.gridLogFiles)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.gridLogFiles.MasterTemplate)).BeginInit();
this.tabPage2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.gridModelDetail)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.gridModelDetail.MasterTemplate)).BeginInit();
this.panel10.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.radStatusStrip1)).BeginInit();
this.SuspendLayout();
//
// panel1
//
this.panel1.Controls.Add(this.splitContainer1);
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(3, 2);
this.panel1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.panel1.Name = "panel1";
this.panel1.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.panel1.Size = new System.Drawing.Size(1014, 572);
this.panel1.TabIndex = 0;
//
// splitContainer1
//
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.splitContainer1.Location = new System.Drawing.Point(3, 2);
this.splitContainer1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.splitContainer1.Name = "splitContainer1";
this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.panel2);
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.splitContainer2);
this.splitContainer1.Size = new System.Drawing.Size(1008, 568);
this.splitContainer1.SplitterDistance = 72;
this.splitContainer1.SplitterWidth = 3;
this.splitContainer1.TabIndex = 1;
//
// panel2
//
this.panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel2.Controls.Add(this.flowLayoutPanel2);
this.panel2.Controls.Add(this.flowLayoutPanel1);
this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel2.Location = new System.Drawing.Point(0, 0);
this.panel2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(1008, 72);
this.panel2.TabIndex = 2;
//
// flowLayoutPanel2
//
this.flowLayoutPanel2.AutoSize = true;
this.flowLayoutPanel2.Controls.Add(this.panel8);
this.flowLayoutPanel2.Controls.Add(this.panel9);
this.flowLayoutPanel2.Controls.Add(this.chkAllEquipment);
this.flowLayoutPanel2.Controls.Add(this.chkUseMesDB);
this.flowLayoutPanel2.Controls.Add(this.chkUseSMB);
this.flowLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Top;
this.flowLayoutPanel2.Location = new System.Drawing.Point(0, 34);
this.flowLayoutPanel2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.flowLayoutPanel2.Name = "flowLayoutPanel2";
this.flowLayoutPanel2.Padding = new System.Windows.Forms.Padding(3);
this.flowLayoutPanel2.Size = new System.Drawing.Size(1006, 34);
this.flowLayoutPanel2.TabIndex = 1;
//
// panel8
//
this.panel8.Controls.Add(this.tboxName);
this.panel8.Controls.Add(this.label2);
this.panel8.Location = new System.Drawing.Point(6, 5);
this.panel8.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.panel8.MinimumSize = new System.Drawing.Size(0, 24);
this.panel8.Name = "panel8";
this.panel8.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.panel8.Size = new System.Drawing.Size(353, 24);
this.panel8.TabIndex = 0;
//
// tboxName
//
this.tboxName.Location = new System.Drawing.Point(104, 1);
this.tboxName.Name = "tboxName";
this.tboxName.Size = new System.Drawing.Size(246, 21);
this.tboxName.TabIndex = 1;
//
// label2
//
this.label2.Dock = System.Windows.Forms.DockStyle.Left;
this.label2.Location = new System.Drawing.Point(3, 2);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(101, 20);
this.label2.TabIndex = 0;
this.label2.Text = "Name : ";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// panel9
//
this.panel9.Controls.Add(this.tboxEquipmentID);
this.panel9.Controls.Add(this.label4);
this.panel9.Location = new System.Drawing.Point(365, 5);
this.panel9.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.panel9.MinimumSize = new System.Drawing.Size(0, 24);
this.panel9.Name = "panel9";
this.panel9.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.panel9.Size = new System.Drawing.Size(353, 24);
this.panel9.TabIndex = 1;
//
// tboxEquipmentID
//
this.tboxEquipmentID.Location = new System.Drawing.Point(104, 1);
this.tboxEquipmentID.Name = "tboxEquipmentID";
this.tboxEquipmentID.Size = new System.Drawing.Size(246, 21);
this.tboxEquipmentID.TabIndex = 1;
//
// label4
//
this.label4.Dock = System.Windows.Forms.DockStyle.Left;
this.label4.Location = new System.Drawing.Point(3, 2);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(101, 20);
this.label4.TabIndex = 0;
this.label4.Text = "Equipment ID : ";
this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// chkAllEquipment
//
this.chkAllEquipment.AutoSize = true;
this.chkAllEquipment.Location = new System.Drawing.Point(724, 6);
this.chkAllEquipment.Name = "chkAllEquipment";
this.chkAllEquipment.Size = new System.Drawing.Size(72, 16);
this.chkAllEquipment.TabIndex = 3;
this.chkAllEquipment.Text = "모든설비";
this.chkAllEquipment.UseVisualStyleBackColor = true;
//
// chkUseMesDB
//
this.chkUseMesDB.AutoSize = true;
this.chkUseMesDB.Location = new System.Drawing.Point(802, 6);
this.chkUseMesDB.Name = "chkUseMesDB";
this.chkUseMesDB.Size = new System.Drawing.Size(71, 16);
this.chkUseMesDB.TabIndex = 4;
this.chkUseMesDB.Text = "MES DB";
this.chkUseMesDB.UseVisualStyleBackColor = true;
//
// flowLayoutPanel1
//
this.flowLayoutPanel1.AutoSize = true;
this.flowLayoutPanel1.Controls.Add(this.panel4);
this.flowLayoutPanel1.Controls.Add(this.btnOK);
this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Top;
this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.flowLayoutPanel1.Name = "flowLayoutPanel1";
this.flowLayoutPanel1.Padding = new System.Windows.Forms.Padding(3);
this.flowLayoutPanel1.Size = new System.Drawing.Size(1006, 34);
this.flowLayoutPanel1.TabIndex = 0;
//
// panel4
//
this.panel4.Controls.Add(this.cboxServer);
this.panel4.Controls.Add(this.label1);
this.panel4.Location = new System.Drawing.Point(6, 5);
this.panel4.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.panel4.MinimumSize = new System.Drawing.Size(0, 24);
this.panel4.Name = "panel4";
this.panel4.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.panel4.Size = new System.Drawing.Size(353, 24);
this.panel4.TabIndex = 0;
//
// cboxServer
//
this.cboxServer.Dock = System.Windows.Forms.DockStyle.Fill;
this.cboxServer.FormattingEnabled = true;
this.cboxServer.Location = new System.Drawing.Point(104, 2);
this.cboxServer.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.cboxServer.Name = "cboxServer";
this.cboxServer.Size = new System.Drawing.Size(246, 20);
this.cboxServer.TabIndex = 1;
//
// label1
//
this.label1.Dock = System.Windows.Forms.DockStyle.Left;
this.label1.Location = new System.Drawing.Point(3, 2);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(101, 20);
this.label1.TabIndex = 0;
this.label1.Text = "Server : ";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// btnOK
//
this.btnOK.Location = new System.Drawing.Point(365, 5);
this.btnOK.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnOK.Name = "btnOK";
this.btnOK.Size = new System.Drawing.Size(99, 24);
this.btnOK.TabIndex = 1;
this.btnOK.Text = "OK";
this.btnOK.UseVisualStyleBackColor = true;
//
// splitContainer2
//
this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
this.splitContainer2.Location = new System.Drawing.Point(0, 0);
this.splitContainer2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.splitContainer2.Name = "splitContainer2";
//
// splitContainer2.Panel1
//
this.splitContainer2.Panel1.Controls.Add(this.panel3);
//
// splitContainer2.Panel2
//
this.splitContainer2.Panel2.Controls.Add(this.panel5);
this.splitContainer2.Size = new System.Drawing.Size(1008, 493);
this.splitContainer2.SplitterDistance = 453;
this.splitContainer2.TabIndex = 1;
//
// panel3
//
this.panel3.Controls.Add(this.panel6);
this.panel3.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel3.Location = new System.Drawing.Point(0, 0);
this.panel3.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.panel3.Name = "panel3";
this.panel3.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.panel3.Size = new System.Drawing.Size(453, 493);
this.panel3.TabIndex = 1;
//
// panel6
//
this.panel6.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel6.Controls.Add(this.gridEquipments);
this.panel6.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel6.Location = new System.Drawing.Point(3, 2);
this.panel6.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.panel6.Name = "panel6";
this.panel6.Size = new System.Drawing.Size(447, 489);
this.panel6.TabIndex = 3;
//
// gridEquipments
//
this.gridEquipments.BackColor = System.Drawing.SystemColors.ControlLightLight;
this.gridEquipments.ColumnResizeKey = System.Windows.Forms.Keys.F6;
this.gridEquipments.Dock = System.Windows.Forms.DockStyle.Fill;
this.gridEquipments.Location = new System.Drawing.Point(0, 0);
this.gridEquipments.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
//
//
//
this.gridEquipments.MasterTemplate.ViewDefinition = tableViewDefinition1;
this.gridEquipments.Name = "gridEquipments";
//
//
//
this.gridEquipments.RootElement.ControlBounds = new System.Drawing.Rectangle(0, 0, 240, 150);
this.gridEquipments.Size = new System.Drawing.Size(445, 487);
this.gridEquipments.TabIndex = 2;
//
// panel5
//
this.panel5.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel5.Controls.Add(this.panel7);
this.panel5.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel5.Location = new System.Drawing.Point(0, 0);
this.panel5.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.panel5.Name = "panel5";
this.panel5.Size = new System.Drawing.Size(551, 493);
this.panel5.TabIndex = 3;
//
// panel7
//
this.panel7.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel7.Controls.Add(this.tabControl1);
this.panel7.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel7.Location = new System.Drawing.Point(0, 0);
this.panel7.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.panel7.Name = "panel7";
this.panel7.Size = new System.Drawing.Size(549, 491);
this.panel7.TabIndex = 4;
//
// tabControl1
//
this.tabControl1.Controls.Add(this.tabPage1);
this.tabControl1.Controls.Add(this.tabPage2);
this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tabControl1.Location = new System.Drawing.Point(0, 0);
this.tabControl1.Name = "tabControl1";
this.tabControl1.SelectedIndex = 0;
this.tabControl1.Size = new System.Drawing.Size(547, 489);
this.tabControl1.SizeMode = System.Windows.Forms.TabSizeMode.Fixed;
this.tabControl1.TabIndex = 6;
//
// tabPage1
//
this.tabPage1.Controls.Add(this.gridLogFiles);
this.tabPage1.Location = new System.Drawing.Point(4, 22);
this.tabPage1.Name = "tabPage1";
this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
this.tabPage1.Size = new System.Drawing.Size(539, 463);
this.tabPage1.TabIndex = 0;
this.tabPage1.Text = "Log Files";
this.tabPage1.UseVisualStyleBackColor = true;
//
// gridLogFiles
//
this.gridLogFiles.BackColor = System.Drawing.SystemColors.ControlLightLight;
this.gridLogFiles.ColumnResizeKey = System.Windows.Forms.Keys.F6;
this.gridLogFiles.Dock = System.Windows.Forms.DockStyle.Fill;
this.gridLogFiles.Location = new System.Drawing.Point(3, 3);
this.gridLogFiles.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
//
//
//
this.gridLogFiles.MasterTemplate.ViewDefinition = tableViewDefinition2;
this.gridLogFiles.Name = "gridLogFiles";
//
//
//
this.gridLogFiles.RootElement.ControlBounds = new System.Drawing.Rectangle(3, 3, 240, 150);
this.gridLogFiles.Size = new System.Drawing.Size(533, 457);
this.gridLogFiles.TabIndex = 3;
//
// tabPage2
//
this.tabPage2.Controls.Add(this.gridModelDetail);
this.tabPage2.Controls.Add(this.panel10);
this.tabPage2.Location = new System.Drawing.Point(4, 22);
this.tabPage2.Name = "tabPage2";
this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
this.tabPage2.Size = new System.Drawing.Size(539, 463);
this.tabPage2.TabIndex = 1;
this.tabPage2.Text = "Model History";
this.tabPage2.UseVisualStyleBackColor = true;
//
// gridModelDetail
//
this.gridModelDetail.BackColor = System.Drawing.SystemColors.ControlLightLight;
this.gridModelDetail.ColumnResizeKey = System.Windows.Forms.Keys.F6;
this.gridModelDetail.Dock = System.Windows.Forms.DockStyle.Fill;
this.gridModelDetail.Location = new System.Drawing.Point(3, 3);
this.gridModelDetail.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
//
//
//
this.gridModelDetail.MasterTemplate.ViewDefinition = tableViewDefinition3;
this.gridModelDetail.Name = "gridModelDetail";
//
//
//
this.gridModelDetail.RootElement.ControlBounds = new System.Drawing.Rectangle(3, 3, 240, 150);
this.gridModelDetail.Size = new System.Drawing.Size(533, 357);
this.gridModelDetail.TabIndex = 6;
//
// panel10
//
this.panel10.Controls.Add(this.tboxModelDescription);
this.panel10.Dock = System.Windows.Forms.DockStyle.Bottom;
this.panel10.Location = new System.Drawing.Point(3, 360);
this.panel10.Name = "panel10";
this.panel10.Padding = new System.Windows.Forms.Padding(0, 2, 0, 2);
this.panel10.Size = new System.Drawing.Size(533, 100);
this.panel10.TabIndex = 5;
//
// tboxModelDescription
//
this.tboxModelDescription.Dock = System.Windows.Forms.DockStyle.Fill;
this.tboxModelDescription.Location = new System.Drawing.Point(0, 2);
this.tboxModelDescription.Multiline = true;
this.tboxModelDescription.Name = "tboxModelDescription";
this.tboxModelDescription.ScrollBars = System.Windows.Forms.ScrollBars.Both;
this.tboxModelDescription.Size = new System.Drawing.Size(533, 96);
this.tboxModelDescription.TabIndex = 0;
//
// radStatusStrip1
//
this.radStatusStrip1.Items.AddRange(new Telerik.WinControls.RadItem[] {
this.rstatus1});
this.radStatusStrip1.Location = new System.Drawing.Point(3, 574);
this.radStatusStrip1.Name = "radStatusStrip1";
this.radStatusStrip1.Size = new System.Drawing.Size(1014, 26);
this.radStatusStrip1.TabIndex = 1;
//
// rstatus1
//
this.rstatus1.Name = "rstatus1";
this.radStatusStrip1.SetSpring(this.rstatus1, false);
this.rstatus1.Text = "";
this.rstatus1.TextWrap = true;
//
// chkSMB
//
this.chkUseSMB.AutoSize = true;
this.chkUseSMB.Location = new System.Drawing.Point(879, 6);
this.chkUseSMB.Name = "chkSMB";
this.chkUseSMB.Size = new System.Drawing.Size(77, 16);
this.chkUseSMB.TabIndex = 5;
this.chkUseSMB.Text = "Use SMB";
this.chkUseSMB.UseVisualStyleBackColor = true;
//
// FrmEqSelector
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1020, 602);
this.Controls.Add(this.panel1);
this.Controls.Add(this.radStatusStrip1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.Name = "FrmEqSelector";
this.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.Text = "Equipment Selector";
this.panel1.ResumeLayout(false);
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.panel2.ResumeLayout(false);
this.panel2.PerformLayout();
this.flowLayoutPanel2.ResumeLayout(false);
this.flowLayoutPanel2.PerformLayout();
this.panel8.ResumeLayout(false);
this.panel8.PerformLayout();
this.panel9.ResumeLayout(false);
this.panel9.PerformLayout();
this.flowLayoutPanel1.ResumeLayout(false);
this.panel4.ResumeLayout(false);
this.splitContainer2.Panel1.ResumeLayout(false);
this.splitContainer2.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
this.splitContainer2.ResumeLayout(false);
this.panel3.ResumeLayout(false);
this.panel6.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.gridEquipments.MasterTemplate)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.gridEquipments)).EndInit();
this.panel5.ResumeLayout(false);
this.panel7.ResumeLayout(false);
this.tabControl1.ResumeLayout(false);
this.tabPage1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.gridLogFiles.MasterTemplate)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.gridLogFiles)).EndInit();
this.tabPage2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.gridModelDetail.MasterTemplate)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.gridModelDetail)).EndInit();
this.panel10.ResumeLayout(false);
this.panel10.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.radStatusStrip1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.SplitContainer splitContainer2;
private System.Windows.Forms.Panel panel3;
private System.Windows.Forms.Panel panel6;
private JWH.CONTROL.GridViewEx gridEquipments;
private System.Windows.Forms.Panel panel4;
private System.Windows.Forms.ComboBox cboxServer;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Panel panel5;
private System.Windows.Forms.Panel panel7;
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
private System.Windows.Forms.Button btnOK;
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel2;
private System.Windows.Forms.Panel panel8;
private System.Windows.Forms.TextBox tboxName;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Panel panel9;
private System.Windows.Forms.TextBox tboxEquipmentID;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.CheckBox chkAllEquipment;
private System.Windows.Forms.CheckBox chkUseMesDB;
private System.Windows.Forms.TabControl tabControl1;
private System.Windows.Forms.TabPage tabPage1;
private JWH.CONTROL.GridViewEx gridLogFiles;
private System.Windows.Forms.TabPage tabPage2;
private JWH.CONTROL.GridViewEx gridModelDetail;
private System.Windows.Forms.Panel panel10;
private System.Windows.Forms.TextBox tboxModelDescription;
private Telerik.WinControls.UI.RadStatusStrip radStatusStrip1;
private Telerik.WinControls.UI.RadLabelElement rstatus1;
private System.Windows.Forms.CheckBox chkUseSMB;
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,154 @@
namespace DDUtilityApp.LOGPARSER
{
partial class FrmFindDialog
{
/// <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.panel1 = new System.Windows.Forms.Panel();
this.btnNext = new System.Windows.Forms.Button();
this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
this.btnClose = new System.Windows.Forms.Button();
this.btnPrevious = new System.Windows.Forms.Button();
this.panel2 = new System.Windows.Forms.Panel();
this.label1 = new System.Windows.Forms.Label();
this.cboxFind = new System.Windows.Forms.ComboBox();
this.panel1.SuspendLayout();
this.flowLayoutPanel1.SuspendLayout();
this.panel2.SuspendLayout();
this.SuspendLayout();
//
// panel1
//
this.panel1.Controls.Add(this.panel2);
this.panel1.Controls.Add(this.flowLayoutPanel1);
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Name = "panel1";
this.panel1.Padding = new System.Windows.Forms.Padding(3);
this.panel1.Size = new System.Drawing.Size(496, 110);
this.panel1.TabIndex = 0;
//
// btnNext
//
this.btnNext.Location = new System.Drawing.Point(241, 3);
this.btnNext.Name = "btnNext";
this.btnNext.Size = new System.Drawing.Size(120, 27);
this.btnNext.TabIndex = 0;
this.btnNext.Text = "Next";
this.btnNext.UseVisualStyleBackColor = true;
//
// flowLayoutPanel1
//
this.flowLayoutPanel1.AutoSize = true;
this.flowLayoutPanel1.Controls.Add(this.btnClose);
this.flowLayoutPanel1.Controls.Add(this.btnNext);
this.flowLayoutPanel1.Controls.Add(this.btnPrevious);
this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom;
this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft;
this.flowLayoutPanel1.Location = new System.Drawing.Point(3, 74);
this.flowLayoutPanel1.Name = "flowLayoutPanel1";
this.flowLayoutPanel1.Size = new System.Drawing.Size(490, 33);
this.flowLayoutPanel1.TabIndex = 1;
//
// btnClose
//
this.btnClose.Location = new System.Drawing.Point(367, 3);
this.btnClose.Name = "btnClose";
this.btnClose.Size = new System.Drawing.Size(120, 27);
this.btnClose.TabIndex = 2;
this.btnClose.Text = "Close";
this.btnClose.UseVisualStyleBackColor = true;
//
// btnPrevious
//
this.btnPrevious.Location = new System.Drawing.Point(115, 3);
this.btnPrevious.Name = "btnPrevious";
this.btnPrevious.Size = new System.Drawing.Size(120, 27);
this.btnPrevious.TabIndex = 1;
this.btnPrevious.Text = "Previous";
this.btnPrevious.UseVisualStyleBackColor = true;
//
// panel2
//
this.panel2.BackColor = System.Drawing.SystemColors.ControlLight;
this.panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel2.Controls.Add(this.cboxFind);
this.panel2.Controls.Add(this.label1);
this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel2.Location = new System.Drawing.Point(3, 3);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(490, 71);
this.panel2.TabIndex = 0;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(30, 25);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(82, 15);
this.label1.TabIndex = 0;
this.label1.Text = "찾을 내용: ";
//
// cboxFind
//
this.cboxFind.FormattingEnabled = true;
this.cboxFind.Location = new System.Drawing.Point(118, 22);
this.cboxFind.Name = "cboxFind";
this.cboxFind.Size = new System.Drawing.Size(357, 23);
this.cboxFind.TabIndex = 1;
//
// FrmFindDialog
//
this.AcceptButton = this.btnNext;
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(496, 110);
this.Controls.Add(this.panel1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.Name = "FrmFindDialog";
this.Text = "FrmFindDialog";
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.flowLayoutPanel1.ResumeLayout(false);
this.panel2.ResumeLayout(false);
this.panel2.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.ComboBox cboxFind;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
private System.Windows.Forms.Button btnClose;
private System.Windows.Forms.Button btnNext;
private System.Windows.Forms.Button btnPrevious;
}
}

View File

@@ -0,0 +1,136 @@
using JWH;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DDUtilityApp.LOGPARSER
{
public partial class FrmFindDialog : Form
{
public event EventHandler FInd;
public Control Control { get; set; } = null;
public string SelectedText
{
get { return this.cboxFind.Text; }
set { this.cboxFind.Text = value; }
}
public FrmFindDialog()
{
InitializeComponent();
this.SetLayout();
this.SetEventHandler();
}
public FrmFindDialog(TextBox textBox) : this()
{
this.Control = textBox;
}
private void SetLayout()
{
this.Text = "Find Dialog";
this.MaximizeBox = false;
this.MinimizeBox = false;
}
private void SetEventHandler()
{
this.btnNext.Click += BtnNext_Click;
this.btnPrevious.Click += BtnPrevious_Click;
this.btnClose.Click += BtnClose_Click;
}
private void BtnNext_Click(object sender, EventArgs e)
{
try
{
TextBox control = this.Control as TextBox;
int start = control.SelectionStart + control.SelectionLength;
int index = control.Text.IndexOf(this.cboxFind.Text, start);
if (index < 0) return;
control.SelectionStart = index;
control.SelectionLength = this.cboxFind.Text.Length;
control.ScrollToCaret();
if (this.FInd != null) this.FInd(this, new EventArgs());
this.ComboBox_ItemAppend();
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
private void BtnPrevious_Click(object sender, EventArgs e)
{
try
{
TextBox control = this.Control as TextBox;
int end = control.SelectionStart;
int index = control.Text.LastIndexOf(this.cboxFind.Text, end);
if (index < 0) return;
control.SelectionStart = index;
control.SelectionLength = this.cboxFind.Text.Length;
control.ScrollToCaret();
if (this.FInd != null) this.FInd(this, new EventArgs());
this.ComboBox_ItemAppend();
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
private void BtnClose_Click(object sender, EventArgs e)
{
this.Close();
}
private void ComboBox_ItemAppend()
{
try
{
string value = this.cboxFind.Text;
if (string.IsNullOrWhiteSpace(value)) return;
this.cboxFind.Items.Remove(value);
this.cboxFind.Items.Insert(0, value);
this.cboxFind.Text = value;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
public void Next(string selectedText = "")
{
if (!string.IsNullOrWhiteSpace(selectedText)) this.cboxFind.Text = selectedText;
this.BtnNext_Click(this.btnNext, new EventArgs());
}
public void Pervious(string selectedText = "")
{
if (!string.IsNullOrWhiteSpace(selectedText)) this.cboxFind.Text = selectedText;
this.BtnPrevious_Click(this.btnNext, new EventArgs());
}
}
}

View 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>

View File

@@ -0,0 +1,391 @@
namespace DDUtilityApp.LOGPARSER
{
partial class FrmHsmsViewer
{
/// <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.panel1 = new System.Windows.Forms.Panel();
this.panel3 = new System.Windows.Forms.Panel();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.tboxHsms = new System.Windows.Forms.TextBox();
this.panel5 = new System.Windows.Forms.Panel();
this.btnHtoS = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.tboxSecs = new System.Windows.Forms.TextBox();
this.panel6 = new System.Windows.Forms.Panel();
this.btnStoH = new System.Windows.Forms.Button();
this.label2 = new System.Windows.Forms.Label();
this.panel4 = new System.Windows.Forms.Panel();
this.splitContainer2 = new System.Windows.Forms.SplitContainer();
this.propertyGrid1 = new System.Windows.Forms.PropertyGrid();
this.panel2 = new System.Windows.Forms.Panel();
this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
this.panel8 = new System.Windows.Forms.Panel();
this.label3 = new System.Windows.Forms.Label();
this.splitContainer3 = new System.Windows.Forms.SplitContainer();
this.tboxHexHangul = new System.Windows.Forms.TextBox();
this.panel7 = new System.Windows.Forms.Panel();
this.cboxEncoding = new System.Windows.Forms.ComboBox();
this.tboxHangul = new System.Windows.Forms.TextBox();
this.panel1.SuspendLayout();
this.panel3.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
this.panel5.SuspendLayout();
this.panel6.SuspendLayout();
this.panel4.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
this.splitContainer2.Panel1.SuspendLayout();
this.splitContainer2.Panel2.SuspendLayout();
this.splitContainer2.SuspendLayout();
this.panel2.SuspendLayout();
this.panel8.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit();
this.splitContainer3.Panel1.SuspendLayout();
this.splitContainer3.Panel2.SuspendLayout();
this.splitContainer3.SuspendLayout();
this.panel7.SuspendLayout();
this.SuspendLayout();
//
// panel1
//
this.panel1.Controls.Add(this.panel3);
this.panel1.Controls.Add(this.panel2);
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Name = "panel1";
this.panel1.Padding = new System.Windows.Forms.Padding(3);
this.panel1.Size = new System.Drawing.Size(800, 450);
this.panel1.TabIndex = 1;
//
// panel3
//
this.panel3.Controls.Add(this.splitContainer1);
this.panel3.Controls.Add(this.panel4);
this.panel3.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel3.Location = new System.Drawing.Point(3, 49);
this.panel3.Name = "panel3";
this.panel3.Size = new System.Drawing.Size(794, 398);
this.panel3.TabIndex = 2;
//
// splitContainer1
//
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.Location = new System.Drawing.Point(0, 0);
this.splitContainer1.Name = "splitContainer1";
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.tboxHsms);
this.splitContainer1.Panel1.Controls.Add(this.panel5);
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.tboxSecs);
this.splitContainer1.Panel2.Controls.Add(this.panel6);
this.splitContainer1.Size = new System.Drawing.Size(492, 398);
this.splitContainer1.SplitterDistance = 250;
this.splitContainer1.TabIndex = 3;
//
// tboxHsms
//
this.tboxHsms.Dock = System.Windows.Forms.DockStyle.Fill;
this.tboxHsms.Location = new System.Drawing.Point(0, 51);
this.tboxHsms.Multiline = true;
this.tboxHsms.Name = "tboxHsms";
this.tboxHsms.ScrollBars = System.Windows.Forms.ScrollBars.Both;
this.tboxHsms.Size = new System.Drawing.Size(250, 347);
this.tboxHsms.TabIndex = 2;
//
// panel5
//
this.panel5.Controls.Add(this.btnHtoS);
this.panel5.Controls.Add(this.label1);
this.panel5.Dock = System.Windows.Forms.DockStyle.Top;
this.panel5.Location = new System.Drawing.Point(0, 0);
this.panel5.Name = "panel5";
this.panel5.Padding = new System.Windows.Forms.Padding(2);
this.panel5.Size = new System.Drawing.Size(250, 51);
this.panel5.TabIndex = 1;
//
// btnHtoS
//
this.btnHtoS.Location = new System.Drawing.Point(3, 3);
this.btnHtoS.Name = "btnHtoS";
this.btnHtoS.Size = new System.Drawing.Size(169, 23);
this.btnHtoS.TabIndex = 0;
this.btnHtoS.Text = "HSMS to SECS -->";
this.btnHtoS.UseVisualStyleBackColor = true;
//
// label1
//
this.label1.Dock = System.Windows.Forms.DockStyle.Bottom;
this.label1.Location = new System.Drawing.Point(2, 26);
this.label1.Name = "label1";
this.label1.Padding = new System.Windows.Forms.Padding(10, 3, 10, 3);
this.label1.Size = new System.Drawing.Size(246, 23);
this.label1.TabIndex = 0;
this.label1.Text = "# HSMS";
this.label1.TextAlign = System.Drawing.ContentAlignment.BottomLeft;
//
// tboxSecs
//
this.tboxSecs.Dock = System.Windows.Forms.DockStyle.Fill;
this.tboxSecs.Location = new System.Drawing.Point(0, 51);
this.tboxSecs.Multiline = true;
this.tboxSecs.Name = "tboxSecs";
this.tboxSecs.ScrollBars = System.Windows.Forms.ScrollBars.Both;
this.tboxSecs.Size = new System.Drawing.Size(238, 347);
this.tboxSecs.TabIndex = 3;
//
// panel6
//
this.panel6.Controls.Add(this.btnStoH);
this.panel6.Controls.Add(this.label2);
this.panel6.Dock = System.Windows.Forms.DockStyle.Top;
this.panel6.Location = new System.Drawing.Point(0, 0);
this.panel6.Name = "panel6";
this.panel6.Padding = new System.Windows.Forms.Padding(2);
this.panel6.Size = new System.Drawing.Size(238, 51);
this.panel6.TabIndex = 2;
//
// btnStoH
//
this.btnStoH.Location = new System.Drawing.Point(3, 3);
this.btnStoH.Name = "btnStoH";
this.btnStoH.Size = new System.Drawing.Size(169, 23);
this.btnStoH.TabIndex = 1;
this.btnStoH.Text = "<-- SECS to HSMS";
this.btnStoH.UseVisualStyleBackColor = true;
//
// label2
//
this.label2.Dock = System.Windows.Forms.DockStyle.Bottom;
this.label2.Location = new System.Drawing.Point(2, 26);
this.label2.Name = "label2";
this.label2.Padding = new System.Windows.Forms.Padding(10, 3, 10, 3);
this.label2.Size = new System.Drawing.Size(234, 23);
this.label2.TabIndex = 1;
this.label2.Text = "# SECS";
this.label2.TextAlign = System.Drawing.ContentAlignment.BottomLeft;
//
// panel4
//
this.panel4.Controls.Add(this.splitContainer2);
this.panel4.Dock = System.Windows.Forms.DockStyle.Right;
this.panel4.Location = new System.Drawing.Point(492, 0);
this.panel4.Name = "panel4";
this.panel4.Padding = new System.Windows.Forms.Padding(3, 0, 0, 0);
this.panel4.Size = new System.Drawing.Size(302, 398);
this.panel4.TabIndex = 2;
//
// splitContainer2
//
this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
this.splitContainer2.Location = new System.Drawing.Point(3, 0);
this.splitContainer2.Name = "splitContainer2";
this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer2.Panel1
//
this.splitContainer2.Panel1.Controls.Add(this.propertyGrid1);
//
// splitContainer2.Panel2
//
this.splitContainer2.Panel2.Controls.Add(this.panel8);
this.splitContainer2.Size = new System.Drawing.Size(299, 398);
this.splitContainer2.SplitterDistance = 137;
this.splitContainer2.TabIndex = 0;
//
// propertyGrid1
//
this.propertyGrid1.Dock = System.Windows.Forms.DockStyle.Fill;
this.propertyGrid1.Location = new System.Drawing.Point(0, 0);
this.propertyGrid1.Name = "propertyGrid1";
this.propertyGrid1.Size = new System.Drawing.Size(299, 137);
this.propertyGrid1.TabIndex = 3;
//
// panel2
//
this.panel2.Controls.Add(this.flowLayoutPanel1);
this.panel2.Dock = System.Windows.Forms.DockStyle.Top;
this.panel2.Location = new System.Drawing.Point(3, 3);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(794, 46);
this.panel2.TabIndex = 0;
//
// flowLayoutPanel1
//
this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.flowLayoutPanel1.Name = "flowLayoutPanel1";
this.flowLayoutPanel1.Size = new System.Drawing.Size(794, 46);
this.flowLayoutPanel1.TabIndex = 0;
//
// panel8
//
this.panel8.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.panel8.Controls.Add(this.splitContainer3);
this.panel8.Controls.Add(this.label3);
this.panel8.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel8.Location = new System.Drawing.Point(0, 0);
this.panel8.Name = "panel8";
this.panel8.Padding = new System.Windows.Forms.Padding(2);
this.panel8.Size = new System.Drawing.Size(299, 257);
this.panel8.TabIndex = 3;
//
// label3
//
this.label3.Dock = System.Windows.Forms.DockStyle.Top;
this.label3.Location = new System.Drawing.Point(2, 2);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(291, 23);
this.label3.TabIndex = 3;
this.label3.Text = "Byte to Hangul";
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// splitContainer3
//
this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer3.Location = new System.Drawing.Point(2, 25);
this.splitContainer3.Name = "splitContainer3";
this.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer3.Panel1
//
this.splitContainer3.Panel1.Controls.Add(this.tboxHexHangul);
//
// splitContainer3.Panel2
//
this.splitContainer3.Panel2.Controls.Add(this.panel7);
this.splitContainer3.Size = new System.Drawing.Size(291, 226);
this.splitContainer3.SplitterDistance = 110;
this.splitContainer3.TabIndex = 4;
//
// tboxHexHangul
//
this.tboxHexHangul.Dock = System.Windows.Forms.DockStyle.Fill;
this.tboxHexHangul.Location = new System.Drawing.Point(0, 0);
this.tboxHexHangul.Multiline = true;
this.tboxHexHangul.Name = "tboxHexHangul";
this.tboxHexHangul.Size = new System.Drawing.Size(291, 110);
this.tboxHexHangul.TabIndex = 0;
//
// panel7
//
this.panel7.Controls.Add(this.tboxHangul);
this.panel7.Controls.Add(this.cboxEncoding);
this.panel7.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel7.Location = new System.Drawing.Point(0, 0);
this.panel7.Name = "panel7";
this.panel7.Size = new System.Drawing.Size(291, 112);
this.panel7.TabIndex = 0;
//
// cboxEncoding
//
this.cboxEncoding.Dock = System.Windows.Forms.DockStyle.Top;
this.cboxEncoding.FormattingEnabled = true;
this.cboxEncoding.Location = new System.Drawing.Point(0, 0);
this.cboxEncoding.Name = "cboxEncoding";
this.cboxEncoding.Size = new System.Drawing.Size(291, 20);
this.cboxEncoding.TabIndex = 3;
//
// tboxHangul
//
this.tboxHangul.Dock = System.Windows.Forms.DockStyle.Fill;
this.tboxHangul.Location = new System.Drawing.Point(0, 20);
this.tboxHangul.Multiline = true;
this.tboxHangul.Name = "tboxHangul";
this.tboxHangul.Size = new System.Drawing.Size(291, 92);
this.tboxHangul.TabIndex = 4;
//
// FrmHsmsViewer
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.panel1);
this.Name = "FrmHsmsViewer";
this.Text = "Form1";
this.panel1.ResumeLayout(false);
this.panel3.ResumeLayout(false);
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel1.PerformLayout();
this.splitContainer1.Panel2.ResumeLayout(false);
this.splitContainer1.Panel2.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.panel5.ResumeLayout(false);
this.panel6.ResumeLayout(false);
this.panel4.ResumeLayout(false);
this.splitContainer2.Panel1.ResumeLayout(false);
this.splitContainer2.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
this.splitContainer2.ResumeLayout(false);
this.panel2.ResumeLayout(false);
this.panel8.ResumeLayout(false);
this.splitContainer3.Panel1.ResumeLayout(false);
this.splitContainer3.Panel1.PerformLayout();
this.splitContainer3.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit();
this.splitContainer3.ResumeLayout(false);
this.panel7.ResumeLayout(false);
this.panel7.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Panel panel3;
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
private System.Windows.Forms.Button btnHtoS;
private System.Windows.Forms.Button btnStoH;
private System.Windows.Forms.TextBox tboxHsms;
private System.Windows.Forms.Panel panel5;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox tboxSecs;
private System.Windows.Forms.Panel panel6;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Panel panel4;
private System.Windows.Forms.SplitContainer splitContainer2;
private System.Windows.Forms.PropertyGrid propertyGrid1;
private System.Windows.Forms.Panel panel8;
private System.Windows.Forms.SplitContainer splitContainer3;
private System.Windows.Forms.TextBox tboxHexHangul;
private System.Windows.Forms.Panel panel7;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox tboxHangul;
private System.Windows.Forms.ComboBox cboxEncoding;
}
}

View File

@@ -0,0 +1,163 @@
#define xSECS2HSMS
using JWH;
using JWH.SECS;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace DDUtilityApp.LOGPARSER
{
public partial class FrmHsmsViewer : Form
{
#region [ Properties ] ------------------------------------------------
public SECSMessage SECSMessage { get; set; } = null;
#endregion
#region [ FrmTest01 ] -------------------------------------------------
public FrmHsmsViewer()
{
InitializeComponent();
this.SetLayout();
this.SetEventHandler();
}
public void SetLayout()
{
Font font = new Font("돋움체", 9.0F);
this.panel1.Height = 16;
this.tboxHsms.Font = font;
this.tboxHsms.ScrollBars = ScrollBars.Both;
this.tboxHsms.WordWrap = false;
this.tboxHsms.MaxLength = 3276700;
this.tboxHsms.AllowDrop = true;
this.tboxSecs.Font = font;
this.tboxSecs.ScrollBars = ScrollBars.Both;
this.tboxSecs.WordWrap = false;
this.tboxSecs.MaxLength = 3276700;
this.tboxSecs.ReadOnly = true;
this.tboxHexHangul.Font = font;
this.tboxHexHangul.WordWrap = true;
this.tboxHangul.Font = font;
this.tboxHangul.WordWrap = true;
this.cboxEncoding.DropDownStyle = ComboBoxStyle.DropDownList;
this.cboxEncoding.Items.Clear();
this.cboxEncoding.Items.Add(new KeyValuePair<string, Encoding>("Default", Encoding.Default));
this.cboxEncoding.Items.Add(new KeyValuePair<string, Encoding>("UTF7", Encoding.UTF7));
this.cboxEncoding.Items.Add(new KeyValuePair<string, Encoding>("UTF8", Encoding.UTF8));
this.cboxEncoding.Items.Add(new KeyValuePair<string, Encoding>("UTF32", Encoding.UTF32));
this.cboxEncoding.Items.Add(new KeyValuePair<string, Encoding>("ASCII", Encoding.ASCII));
this.cboxEncoding.Items.Add(new KeyValuePair<string, Encoding>("Unicode", Encoding.Unicode));
this.cboxEncoding.Items.Add(new KeyValuePair<string, Encoding>("BigEndianUnicode", Encoding.BigEndianUnicode));
this.cboxEncoding.DisplayMember = "Key";
this.cboxEncoding.SelectedIndex = 0;
}
public void SetEventHandler()
{
this.tboxHsms.DragDrop += Control_DragDrop;
this.tboxHsms.DragEnter += Control_DragEnter;
this.btnHtoS.Click += BtnHsmsToSecs_Click;
this.btnStoH.Click += BtnSecstoHsms_Click;
this.cboxEncoding.SelectedIndexChanged += HexHangul2Hangul;
this.tboxHexHangul.TextChanged += HexHangul2Hangul;
}
private void HexHangul2Hangul(object sender, EventArgs e)
{
string value = this.tboxHexHangul.Text.Replace(" ", "");
byte[] bytes = value.ConvertBytes(16);
Encoding encoding = ((KeyValuePair<string, Encoding>)this.cboxEncoding.SelectedItem).Value;
string result = encoding.GetString(bytes, 0, bytes.Length);
this.tboxHangul.Text = result;
}
#endregion
#region [ Control Event ] ---------------------------------------------
private void Control_DragDrop(object sender, DragEventArgs e)
{
if (sender == this.tboxHsms)
{
string strHsms = (string)e.Data.GetData(DataFormats.Text);
this.tboxHsms.Text = strHsms;
this.BtnHsmsToSecs_Click(this.btnHtoS, null);
}
}
private void Control_DragEnter(object sender, DragEventArgs e)
{
if (sender == this.tboxHsms)
{
if (e.Data.GetDataPresent(DataFormats.Text)) e.Effect = DragDropEffects.Copy;
}
}
private void BtnHsmsToSecs_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrEmpty(this.tboxHsms.Text)) return;
byte[] arrayByte = this.tboxHsms.Text.ConvertBytes(16);
this.SECSMessage = new SECSMessage(arrayByte);
//this.tboxSecs.Text = $"[{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}] RCVD {item.ToString(0)}";
this.tboxSecs.Text = $"{this.SECSMessage.ToFullString()}";
this.propertyGrid1.SelectedObject = this.SECSMessage;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
private void BtnSecstoHsms_Click(object sender, EventArgs e)
{
try
{
#if SECS2HSMS
if (string.IsNullOrEmpty(this.tboxSecs.Text)) return;
this.SECSMessage = new SECSMessage(this.tboxSecs.Text);
#else
if (this.SECSMessage == null) return;
#endif
//this.tboxSecs.Text = $"[{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}] RCVD {item.ToString(0)}";
this.tboxHsms.Text = this.SECSMessage.ToHexString();
this.propertyGrid1.SelectedObject = this.SECSMessage;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
#endregion
#region [ Methods ] ---------------------------------------------------
#endregion
}
}

View 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>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,345 @@
<?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.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
</root>

View File

@@ -0,0 +1,587 @@
namespace DDUtilityApp.LOGPARSER
{
partial class FrmLogParser01
{
/// <summary>
/// 필수 디자이너 변수입니다.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 사용 중인 모든 리소스를 정리합니다.
/// </summary>
/// <param name="disposing">관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form
/// <summary>
/// 디자이너 지원에 필요한 메서드입니다.
/// 이 메서드의 내용을 코드 편집기로 수정하지 마세요.
/// </summary>
private void InitializeComponent()
{
Telerik.WinControls.UI.TableViewDefinition tableViewDefinition2 = new Telerik.WinControls.UI.TableViewDefinition();
this.pnlRoot = new System.Windows.Forms.Panel();
this.spnlRoot = new System.Windows.Forms.SplitContainer();
this.pnlControls = new System.Windows.Forms.Panel();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.pnlFiles = new System.Windows.Forms.Panel();
this.lviewFiles = new System.Windows.Forms.ListView();
this.panel1 = new System.Windows.Forms.Panel();
this.tboxFilename = new System.Windows.Forms.TextBox();
this.flowLayoutPanel2 = new System.Windows.Forms.FlowLayoutPanel();
this.btnFileAdd = new System.Windows.Forms.Button();
this.btnFileRemove = new System.Windows.Forms.Button();
this.btnClear = new System.Windows.Forms.Button();
this.btnParsing = new System.Windows.Forms.Button();
this.pnlButtons = new System.Windows.Forms.FlowLayoutPanel();
this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
this.chkAutoClear = new System.Windows.Forms.CheckBox();
this.chkDownload = new System.Windows.Forms.CheckBox();
this.chkFilterLinktest = new System.Windows.Forms.CheckBox();
this.flowLayoutPanel3 = new System.Windows.Forms.FlowLayoutPanel();
this.btnClearFilter = new System.Windows.Forms.Button();
this.btnColumnResize = new System.Windows.Forms.Button();
this.spnl00 = new System.Windows.Forms.SplitContainer();
this.pnlDisplayL = new System.Windows.Forms.Panel();
this.tabControl1 = new System.Windows.Forms.TabControl();
this.tabPage1 = new System.Windows.Forms.TabPage();
this.tboxLog = new System.Windows.Forms.TextBox();
this.tabPage2 = new System.Windows.Forms.TabPage();
this.tboxException = new System.Windows.Forms.TextBox();
this.tabPage3 = new System.Windows.Forms.TabPage();
this.pnlDisplayR = new System.Windows.Forms.Panel();
this.grid = new Telerik.WinControls.UI.RadGridView();
this.winGrid = new System.Windows.Forms.DataGridView();
this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.pnlRoot.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.spnlRoot)).BeginInit();
this.spnlRoot.Panel1.SuspendLayout();
this.spnlRoot.Panel2.SuspendLayout();
this.spnlRoot.SuspendLayout();
this.pnlControls.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
this.pnlFiles.SuspendLayout();
this.panel1.SuspendLayout();
this.flowLayoutPanel2.SuspendLayout();
this.pnlButtons.SuspendLayout();
this.flowLayoutPanel1.SuspendLayout();
this.flowLayoutPanel3.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.spnl00)).BeginInit();
this.spnl00.Panel1.SuspendLayout();
this.spnl00.Panel2.SuspendLayout();
this.spnl00.SuspendLayout();
this.pnlDisplayL.SuspendLayout();
this.tabControl1.SuspendLayout();
this.tabPage1.SuspendLayout();
this.tabPage2.SuspendLayout();
this.pnlDisplayR.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.grid)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.grid.MasterTemplate)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.winGrid)).BeginInit();
this.SuspendLayout();
//
// pnlRoot
//
this.pnlRoot.Controls.Add(this.spnlRoot);
this.pnlRoot.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlRoot.Location = new System.Drawing.Point(0, 0);
this.pnlRoot.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.pnlRoot.Name = "pnlRoot";
this.pnlRoot.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.pnlRoot.Size = new System.Drawing.Size(948, 518);
this.pnlRoot.TabIndex = 0;
//
// spnlRoot
//
this.spnlRoot.Dock = System.Windows.Forms.DockStyle.Fill;
this.spnlRoot.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.spnlRoot.Location = new System.Drawing.Point(3, 2);
this.spnlRoot.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.spnlRoot.Name = "spnlRoot";
this.spnlRoot.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// spnlRoot.Panel1
//
this.spnlRoot.Panel1.Controls.Add(this.pnlControls);
this.spnlRoot.Panel1.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);
//
// spnlRoot.Panel2
//
this.spnlRoot.Panel2.Controls.Add(this.spnl00);
this.spnlRoot.Size = new System.Drawing.Size(942, 514);
this.spnlRoot.SplitterDistance = 128;
this.spnlRoot.SplitterWidth = 3;
this.spnlRoot.TabIndex = 1;
//
// pnlControls
//
this.pnlControls.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.pnlControls.Controls.Add(this.splitContainer1);
this.pnlControls.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlControls.Location = new System.Drawing.Point(3, 2);
this.pnlControls.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.pnlControls.Name = "pnlControls";
this.pnlControls.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.pnlControls.Size = new System.Drawing.Size(936, 124);
this.pnlControls.TabIndex = 7;
//
// splitContainer1
//
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
this.splitContainer1.Location = new System.Drawing.Point(3, 2);
this.splitContainer1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.splitContainer1.Name = "splitContainer1";
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.pnlFiles);
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.pnlButtons);
this.splitContainer1.Size = new System.Drawing.Size(928, 118);
this.splitContainer1.SplitterDistance = 512;
this.splitContainer1.TabIndex = 8;
//
// pnlFiles
//
this.pnlFiles.Controls.Add(this.lviewFiles);
this.pnlFiles.Controls.Add(this.panel1);
this.pnlFiles.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlFiles.Location = new System.Drawing.Point(0, 0);
this.pnlFiles.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.pnlFiles.Name = "pnlFiles";
this.pnlFiles.Size = new System.Drawing.Size(512, 118);
this.pnlFiles.TabIndex = 1;
//
// lviewFiles
//
this.lviewFiles.Dock = System.Windows.Forms.DockStyle.Fill;
this.lviewFiles.HideSelection = false;
this.lviewFiles.Location = new System.Drawing.Point(0, 0);
this.lviewFiles.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.lviewFiles.Name = "lviewFiles";
this.lviewFiles.Size = new System.Drawing.Size(512, 91);
this.lviewFiles.TabIndex = 3;
this.lviewFiles.UseCompatibleStateImageBehavior = false;
//
// panel1
//
this.panel1.Controls.Add(this.tboxFilename);
this.panel1.Controls.Add(this.flowLayoutPanel2);
this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom;
this.panel1.Location = new System.Drawing.Point(0, 91);
this.panel1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.panel1.Name = "panel1";
this.panel1.Padding = new System.Windows.Forms.Padding(0, 2, 0, 0);
this.panel1.Size = new System.Drawing.Size(512, 27);
this.panel1.TabIndex = 2;
//
// tboxFilename
//
this.tboxFilename.Dock = System.Windows.Forms.DockStyle.Fill;
this.tboxFilename.Location = new System.Drawing.Point(0, 2);
this.tboxFilename.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.tboxFilename.Name = "tboxFilename";
this.tboxFilename.Size = new System.Drawing.Size(136, 21);
this.tboxFilename.TabIndex = 17;
//
// flowLayoutPanel2
//
this.flowLayoutPanel2.AutoSize = true;
this.flowLayoutPanel2.Controls.Add(this.btnFileAdd);
this.flowLayoutPanel2.Controls.Add(this.btnFileRemove);
this.flowLayoutPanel2.Controls.Add(this.btnClear);
this.flowLayoutPanel2.Controls.Add(this.btnParsing);
this.flowLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Right;
this.flowLayoutPanel2.Location = new System.Drawing.Point(136, 2);
this.flowLayoutPanel2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.flowLayoutPanel2.Name = "flowLayoutPanel2";
this.flowLayoutPanel2.Size = new System.Drawing.Size(376, 25);
this.flowLayoutPanel2.TabIndex = 16;
this.flowLayoutPanel2.WrapContents = false;
//
// btnFileAdd
//
this.btnFileAdd.Location = new System.Drawing.Point(3, 0);
this.btnFileAdd.Margin = new System.Windows.Forms.Padding(3, 0, 3, 2);
this.btnFileAdd.Name = "btnFileAdd";
this.btnFileAdd.Size = new System.Drawing.Size(88, 20);
this.btnFileAdd.TabIndex = 16;
this.btnFileAdd.Text = "Add";
this.btnFileAdd.UseVisualStyleBackColor = true;
//
// btnFileRemove
//
this.btnFileRemove.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnFileRemove.Location = new System.Drawing.Point(97, 0);
this.btnFileRemove.Margin = new System.Windows.Forms.Padding(3, 0, 3, 2);
this.btnFileRemove.Name = "btnFileRemove";
this.btnFileRemove.Size = new System.Drawing.Size(88, 20);
this.btnFileRemove.TabIndex = 17;
this.btnFileRemove.Text = "Remove";
this.btnFileRemove.UseVisualStyleBackColor = true;
//
// btnClear
//
this.btnClear.Location = new System.Drawing.Point(191, 0);
this.btnClear.Margin = new System.Windows.Forms.Padding(3, 0, 3, 2);
this.btnClear.Name = "btnClear";
this.btnClear.Size = new System.Drawing.Size(88, 20);
this.btnClear.TabIndex = 11;
this.btnClear.Text = "Clear";
this.btnClear.UseVisualStyleBackColor = true;
//
// btnParsing
//
this.btnParsing.Location = new System.Drawing.Point(285, 0);
this.btnParsing.Margin = new System.Windows.Forms.Padding(3, 0, 3, 2);
this.btnParsing.Name = "btnParsing";
this.btnParsing.Size = new System.Drawing.Size(88, 20);
this.btnParsing.TabIndex = 18;
this.btnParsing.Text = "Parsing(F5)";
this.btnParsing.UseVisualStyleBackColor = true;
//
// pnlButtons
//
this.pnlButtons.AutoSize = true;
this.pnlButtons.Controls.Add(this.flowLayoutPanel1);
this.pnlButtons.Controls.Add(this.flowLayoutPanel3);
this.pnlButtons.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlButtons.Location = new System.Drawing.Point(0, 0);
this.pnlButtons.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.pnlButtons.Name = "pnlButtons";
this.pnlButtons.Size = new System.Drawing.Size(412, 118);
this.pnlButtons.TabIndex = 5;
//
// flowLayoutPanel1
//
this.flowLayoutPanel1.AutoSize = true;
this.flowLayoutPanel1.Controls.Add(this.chkAutoClear);
this.flowLayoutPanel1.Controls.Add(this.chkDownload);
this.flowLayoutPanel1.Controls.Add(this.chkFilterLinktest);
this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Top;
this.flowLayoutPanel1.Location = new System.Drawing.Point(3, 2);
this.flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.flowLayoutPanel1.Name = "flowLayoutPanel1";
this.flowLayoutPanel1.Size = new System.Drawing.Size(279, 20);
this.flowLayoutPanel1.TabIndex = 11;
//
// chkAutoClear
//
this.chkAutoClear.AutoSize = true;
this.chkAutoClear.Checked = true;
this.chkAutoClear.CheckState = System.Windows.Forms.CheckState.Checked;
this.chkAutoClear.Location = new System.Drawing.Point(3, 2);
this.chkAutoClear.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.chkAutoClear.Name = "chkAutoClear";
this.chkAutoClear.Size = new System.Drawing.Size(83, 16);
this.chkAutoClear.TabIndex = 4;
this.chkAutoClear.Text = "Auto Clear";
this.chkAutoClear.UseVisualStyleBackColor = true;
//
// chkDownload
//
this.chkDownload.AutoSize = true;
this.chkDownload.Checked = true;
this.chkDownload.CheckState = System.Windows.Forms.CheckState.Checked;
this.chkDownload.Location = new System.Drawing.Point(92, 2);
this.chkDownload.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.chkDownload.Name = "chkDownload";
this.chkDownload.Size = new System.Drawing.Size(80, 16);
this.chkDownload.TabIndex = 6;
this.chkDownload.Text = "Download";
this.chkDownload.UseVisualStyleBackColor = true;
//
// chkFilterLinktest
//
this.chkFilterLinktest.AutoSize = true;
this.chkFilterLinktest.Checked = true;
this.chkFilterLinktest.CheckState = System.Windows.Forms.CheckState.Checked;
this.chkFilterLinktest.Location = new System.Drawing.Point(178, 2);
this.chkFilterLinktest.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.chkFilterLinktest.Name = "chkFilterLinktest";
this.chkFilterLinktest.Size = new System.Drawing.Size(98, 16);
this.chkFilterLinktest.TabIndex = 13;
this.chkFilterLinktest.Text = "Filter Linktest";
this.chkFilterLinktest.UseVisualStyleBackColor = true;
//
// flowLayoutPanel3
//
this.flowLayoutPanel3.AutoSize = true;
this.flowLayoutPanel3.Controls.Add(this.btnClearFilter);
this.flowLayoutPanel3.Controls.Add(this.btnColumnResize);
this.flowLayoutPanel3.Location = new System.Drawing.Point(3, 26);
this.flowLayoutPanel3.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.flowLayoutPanel3.Name = "flowLayoutPanel3";
this.flowLayoutPanel3.Size = new System.Drawing.Size(251, 24);
this.flowLayoutPanel3.TabIndex = 12;
//
// btnClearFilter
//
this.btnClearFilter.Location = new System.Drawing.Point(3, 2);
this.btnClearFilter.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnClearFilter.Name = "btnClearFilter";
this.btnClearFilter.Size = new System.Drawing.Size(88, 20);
this.btnClearFilter.TabIndex = 13;
this.btnClearFilter.Text = "Clear Filter";
this.btnClearFilter.UseVisualStyleBackColor = true;
//
// btnColumnResize
//
this.btnColumnResize.Location = new System.Drawing.Point(97, 2);
this.btnColumnResize.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnColumnResize.Name = "btnColumnResize";
this.btnColumnResize.Size = new System.Drawing.Size(151, 20);
this.btnColumnResize.TabIndex = 14;
this.btnColumnResize.Text = "Column Resize(F6)";
this.btnColumnResize.UseVisualStyleBackColor = true;
//
// spnl00
//
this.spnl00.Dock = System.Windows.Forms.DockStyle.Fill;
this.spnl00.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.spnl00.Location = new System.Drawing.Point(0, 0);
this.spnl00.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.spnl00.Name = "spnl00";
//
// spnl00.Panel1
//
this.spnl00.Panel1.Controls.Add(this.pnlDisplayL);
//
// spnl00.Panel2
//
this.spnl00.Panel2.Controls.Add(this.pnlDisplayR);
this.spnl00.Size = new System.Drawing.Size(942, 383);
this.spnl00.SplitterDistance = 438;
this.spnl00.TabIndex = 0;
//
// pnlDisplayL
//
this.pnlDisplayL.Controls.Add(this.tabControl1);
this.pnlDisplayL.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlDisplayL.Location = new System.Drawing.Point(0, 0);
this.pnlDisplayL.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.pnlDisplayL.Name = "pnlDisplayL";
this.pnlDisplayL.Size = new System.Drawing.Size(438, 383);
this.pnlDisplayL.TabIndex = 0;
//
// tabControl1
//
this.tabControl1.Controls.Add(this.tabPage1);
this.tabControl1.Controls.Add(this.tabPage2);
this.tabControl1.Controls.Add(this.tabPage3);
this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tabControl1.Location = new System.Drawing.Point(0, 0);
this.tabControl1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.tabControl1.Name = "tabControl1";
this.tabControl1.SelectedIndex = 0;
this.tabControl1.Size = new System.Drawing.Size(438, 383);
this.tabControl1.TabIndex = 1;
//
// tabPage1
//
this.tabPage1.Controls.Add(this.tboxLog);
this.tabPage1.Location = new System.Drawing.Point(4, 22);
this.tabPage1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.tabPage1.Name = "tabPage1";
this.tabPage1.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.tabPage1.Size = new System.Drawing.Size(430, 357);
this.tabPage1.TabIndex = 0;
this.tabPage1.Text = "Log Files";
this.tabPage1.UseVisualStyleBackColor = true;
//
// tboxLog
//
this.tboxLog.AllowDrop = true;
this.tboxLog.Dock = System.Windows.Forms.DockStyle.Fill;
this.tboxLog.Location = new System.Drawing.Point(3, 2);
this.tboxLog.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.tboxLog.Multiline = true;
this.tboxLog.Name = "tboxLog";
this.tboxLog.ScrollBars = System.Windows.Forms.ScrollBars.Both;
this.tboxLog.Size = new System.Drawing.Size(424, 353);
this.tboxLog.TabIndex = 1;
//
// tabPage2
//
this.tabPage2.Controls.Add(this.tboxException);
this.tabPage2.Location = new System.Drawing.Point(4, 22);
this.tabPage2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.tabPage2.Name = "tabPage2";
this.tabPage2.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.tabPage2.Size = new System.Drawing.Size(375, 381);
this.tabPage2.TabIndex = 1;
this.tabPage2.Text = "Execption";
this.tabPage2.UseVisualStyleBackColor = true;
//
// tboxException
//
this.tboxException.AllowDrop = true;
this.tboxException.Dock = System.Windows.Forms.DockStyle.Fill;
this.tboxException.Location = new System.Drawing.Point(3, 2);
this.tboxException.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.tboxException.Multiline = true;
this.tboxException.Name = "tboxException";
this.tboxException.ScrollBars = System.Windows.Forms.ScrollBars.Both;
this.tboxException.Size = new System.Drawing.Size(369, 377);
this.tboxException.TabIndex = 2;
//
// tabPage3
//
this.tabPage3.Location = new System.Drawing.Point(4, 22);
this.tabPage3.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.tabPage3.Name = "tabPage3";
this.tabPage3.Size = new System.Drawing.Size(375, 381);
this.tabPage3.TabIndex = 2;
this.tabPage3.Text = "Equipment";
this.tabPage3.UseVisualStyleBackColor = true;
//
// pnlDisplayR
//
this.pnlDisplayR.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.pnlDisplayR.Controls.Add(this.grid);
this.pnlDisplayR.Controls.Add(this.winGrid);
this.pnlDisplayR.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlDisplayR.Location = new System.Drawing.Point(0, 0);
this.pnlDisplayR.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.pnlDisplayR.Name = "pnlDisplayR";
this.pnlDisplayR.Size = new System.Drawing.Size(500, 383);
this.pnlDisplayR.TabIndex = 1;
//
// grid
//
this.grid.Dock = System.Windows.Forms.DockStyle.Fill;
this.grid.Location = new System.Drawing.Point(0, 0);
this.grid.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
//
//
//
this.grid.MasterTemplate.ViewDefinition = tableViewDefinition2;
this.grid.Name = "grid";
this.grid.Size = new System.Drawing.Size(498, 381);
this.grid.TabIndex = 1;
//
// winGrid
//
this.winGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.winGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.Column1,
this.Column2});
this.winGrid.Location = new System.Drawing.Point(0, 0);
this.winGrid.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.winGrid.Name = "winGrid";
this.winGrid.RowTemplate.Height = 27;
this.winGrid.Size = new System.Drawing.Size(238, 183);
this.winGrid.TabIndex = 0;
//
// Column1
//
this.Column1.HeaderText = "Column1";
this.Column1.Name = "Column1";
//
// Column2
//
this.Column2.HeaderText = "Column2";
this.Column2.Name = "Column2";
//
// FrmLogParser01
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(948, 518);
this.Controls.Add(this.pnlRoot);
this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.Name = "FrmLogParser01";
this.Text = "Form1";
this.pnlRoot.ResumeLayout(false);
this.spnlRoot.Panel1.ResumeLayout(false);
this.spnlRoot.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.spnlRoot)).EndInit();
this.spnlRoot.ResumeLayout(false);
this.pnlControls.ResumeLayout(false);
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel2.ResumeLayout(false);
this.splitContainer1.Panel2.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.pnlFiles.ResumeLayout(false);
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.flowLayoutPanel2.ResumeLayout(false);
this.pnlButtons.ResumeLayout(false);
this.pnlButtons.PerformLayout();
this.flowLayoutPanel1.ResumeLayout(false);
this.flowLayoutPanel1.PerformLayout();
this.flowLayoutPanel3.ResumeLayout(false);
this.spnl00.Panel1.ResumeLayout(false);
this.spnl00.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.spnl00)).EndInit();
this.spnl00.ResumeLayout(false);
this.pnlDisplayL.ResumeLayout(false);
this.tabControl1.ResumeLayout(false);
this.tabPage1.ResumeLayout(false);
this.tabPage1.PerformLayout();
this.tabPage2.ResumeLayout(false);
this.tabPage2.PerformLayout();
this.pnlDisplayR.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.grid.MasterTemplate)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.grid)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.winGrid)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Panel pnlRoot;
private System.Windows.Forms.SplitContainer spnlRoot;
private System.Windows.Forms.Panel pnlDisplayL;
private System.Windows.Forms.SplitContainer spnl00;
private System.Windows.Forms.Panel pnlDisplayR;
private System.Windows.Forms.DataGridView winGrid;
private System.Windows.Forms.DataGridViewTextBoxColumn Column1;
private System.Windows.Forms.DataGridViewTextBoxColumn Column2;
private Telerik.WinControls.UI.RadGridView grid;
private System.Windows.Forms.Panel pnlControls;
private System.Windows.Forms.TabControl tabControl1;
private System.Windows.Forms.TabPage tabPage1;
private System.Windows.Forms.TextBox tboxLog;
private System.Windows.Forms.TabPage tabPage2;
private System.Windows.Forms.TextBox tboxException;
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.Panel pnlFiles;
private System.Windows.Forms.Button btnClear;
private System.Windows.Forms.FlowLayoutPanel pnlButtons;
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
private System.Windows.Forms.CheckBox chkAutoClear;
private System.Windows.Forms.CheckBox chkDownload;
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel3;
private System.Windows.Forms.Button btnClearFilter;
private System.Windows.Forms.Button btnColumnResize;
private System.Windows.Forms.ListView lviewFiles;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.CheckBox chkFilterLinktest;
private System.Windows.Forms.TextBox tboxFilename;
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel2;
private System.Windows.Forms.Button btnFileAdd;
private System.Windows.Forms.Button btnFileRemove;
private System.Windows.Forms.Button btnParsing;
private System.Windows.Forms.TabPage tabPage3;
}
}

View File

@@ -0,0 +1,567 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using DDUtilityApp.LOGPARSER.DATA;
using DDUtilityApp.LOGPARSER.PARSER;
using JWH;
using JWH.CONTROL;
using Telerik.WinControls.UI;
namespace DDUtilityApp.LOGPARSER
{
public partial class FrmLogParser01 : Form
{
private Font RadGridFont = new Font(new FontFamily("돋움체"), 11.0f);
private bool RadGridControlKey { get; set; } = false;
private StandardCollection Collection { get; set; } = new StandardCollection();
private FrmFindDialog FindDialog { get; set; } = null;
private string WindowText { get; set; } = $"[EverOne MCS] LOG File Viewer";
public FrmLogParser01()
{
InitializeComponent();
this.SetLayout();
this.SetEventHandler();
XLogger.Instance.Control = this.tboxException;
}
private void SetLayout()
{
this.AllowDrop = true;
this.Text = $"{this.WindowText} - Ver. {Application.ProductVersion}";
this.tboxLog.AllowDrop = true;
this.tboxLog.WordWrap = false;
this.tboxLog.Multiline = true;
this.tboxLog.HideSelection = false;
this.tboxLog.ScrollBars = ScrollBars.Both;
this.tboxLog.Font = new Font("돋움체", 9);
this.tboxException.WordWrap = false;
this.tboxException.Font = new Font("돋움체", 9);
this.lviewFiles.View = View.Details;
ColumnHeader header = this.lviewFiles.Columns.Add("File Name");
this.lviewFiles.CheckBoxes = true;
this.lviewFiles.MultiSelect = false;
this.lviewFiles.Sorting = SortOrder.Ascending;
this.lviewFiles.ListViewItemSorter = new ListViewItemComparer(0, this.lviewFiles.Sorting);
this.RadGrid_Setting();
}
private void SetEventHandler()
{
// DragDrop
this.DragDrop += Control_DragDrop;
this.DragEnter += Control_DragEnter;
this.tboxLog.DragDrop += Control_DragDrop;
this.tboxLog.DragEnter += Control_DragEnter;
this.tboxLog.KeyDown += TboxLog_KeyDown;
// File List
this.lviewFiles.Click += LviewFiles_Click;
this.lviewFiles.ColumnClick += LviewFiles_ColumnClick;
this.lviewFiles.Resize += LviewFiles_Resize;
this.tboxFilename.KeyDown += TboxFilename_KeyDown;
this.btnFileAdd.Click += BtnFileAdd_Click;
this.btnFileRemove.Click += BtnFileRemove_Click;
this.btnClear.Click += BtnFileClear_Click;
this.btnParsing.Click += BtnParsing_Click;
// Option
this.btnClearFilter.Click += BtnClearFilter_Click;
this.btnColumnResize.Click += BtnColumnResize_Click;
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
switch (keyData)
{
case Keys.F3:
if (this.FindDialog != null) this.FindDialog.Next();
break;
case Keys.F5:
this.BtnParsing_Click(this.btnParsing, new EventArgs());
break;
case Keys.F6:
this.BtnColumnResize_Click(this.btnColumnResize, new EventArgs());
break;
}
return base.ProcessCmdKey(ref msg, keyData);
}
#region [ DragDrop ] --------------------------------------------------
private void Control_DragDrop(object sender, DragEventArgs e)
{
XLogger.Instance.Info(e);
if (this.chkAutoClear.Checked) this.lviewFiles.Items.Clear();
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
foreach (string filePath in files)
{
ListViewItem lviewItem = this.lviewFiles.Items.Add(Path.GetFileName(filePath));
lviewItem.Checked = true;
lviewItem.Tag = filePath;
}
this.BtnParsing_Click(this.btnParsing, new EventArgs());
}
private void Control_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy;
}
#endregion
#region [ Control Event ] ---------------------------------------------
private void LviewFiles_Click(object sender, EventArgs e)
{
try
{
if (this.lviewFiles.Items.Count < 1) return;
if (this.lviewFiles.SelectedItems.Count < 1) return;
int index = -1;
index = this.lviewFiles.SelectedItems[0].Index;
this.tboxFilename.Text = this.lviewFiles.Items[index].Tag as string;
if (string.IsNullOrEmpty(this.tboxFilename.Text) == false && this.tboxFilename.Text.Length > 6)
{
this.tboxFilename.SelectionStart = this.tboxFilename.Text.Length - 6;
this.tboxFilename.SelectionLength = 2;
this.tboxFilename.Focus();
}
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
private void LviewFiles_ColumnClick(object sender, ColumnClickEventArgs e)
{
try
{
SortOrder sorting = SortOrder.None;
switch (this.lviewFiles.Sorting)
{
case SortOrder.None:
sorting = SortOrder.Ascending;
break;
case SortOrder.Ascending:
sorting = SortOrder.Descending;
break;
case SortOrder.Descending:
sorting = SortOrder.None;
break;
}
this.lviewFiles.Sorting = sorting;
this.lviewFiles.ListViewItemSorter = new ListViewItemComparer(e.Column, this.lviewFiles.Sorting);
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
private void LviewFiles_Resize(object sender, EventArgs e)
{
int width = this.lviewFiles.Width - 32;
int headerWidth = width / this.lviewFiles.Columns.Count;
foreach (ColumnHeader header in this.lviewFiles.Columns)
header.Width = headerWidth;
}
private void TboxFilename_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.Enter)
this.BtnFileAdd_Click(this.btnFileAdd, new EventArgs());
}
private void BtnFileAdd_Click(object sender, EventArgs e)
{
try
{
ListViewItem lviewItem = this.lviewFiles.Items.Add(Path.GetFileName(this.tboxFilename.Text));
lviewItem.Checked = true;
lviewItem.Tag = this.tboxFilename.Text;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
private void BtnFileRemove_Click(object sender, EventArgs e)
{
try
{
if (this.lviewFiles.SelectedItems.Count <= 0) return;
this.lviewFiles.SelectedItems[0].Remove();
this.tboxFilename.Text = string.Empty;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
private void BtnFileClear_Click(object sender, EventArgs e)
{
this.Text = $"{this.WindowText} - Ver. {Application.ProductVersion}";
this.lviewFiles.Items.Clear();
this.tboxLog.Clear();
this.tboxException.Clear();
this.grid.DataSource = null;
}
private void BtnParsing_Click(object sender, EventArgs e)
{
try
{
this.Cursor = Cursors.WaitCursor;
this.Parsing();
if (this.chkFilterLinktest.Checked)
this.grid.DataSource = this.Collection.Where(item => item.Column1 != "LINKTEST");
else
this.grid.DataSource = this.Collection;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
finally
{
this.Cursor = Cursors.Default;
}
}
private void BtnClearFilter_Click(object sender, EventArgs e)
{
this.grid.MasterTemplate.FilterDescriptors.Clear();
}
private void BtnColumnResize_Click(object sender, EventArgs e)
{
this.grid.BestFitColumns(BestFitColumnMode.DisplayedCells);
//foreach (GridViewColumn column in this.grid.Columns)
//{
// if (column.Name.ToUpper().StartsWith("COLUMN")) column.Width = 100;
// if (new string[] { "TID" }.Contains(column.Name.ToUpper())) column.Width = 100;
//}
}
private void TboxLog_KeyDown(object sender, KeyEventArgs e)
{
if ((e.KeyData & Keys.Control) == Keys.Control && (e.KeyData & Keys.F) == Keys.F)
{
if (this.FindDialog == null)
{
this.FindDialog = new FrmFindDialog(this.tboxLog);
this.FindDialog.StartPosition = FormStartPosition.Manual;
this.FindDialog.Location = this.grid.PointToScreen(new Point(10, 10));
this.FindDialog.FormClosed += (object sender1, FormClosedEventArgs e1) => { this.FindDialog = null; };
this.FindDialog.FInd += (object sender1, EventArgs e1) => { };
this.FindDialog.Show();
}
else
{
this.FindDialog.Activate();
}
this.FindDialog.SelectedText = this.tboxLog.SelectedText;
}
}
#endregion
#region [ Grid ] ------------------------------------------------------
private void RadGrid_Setting()
{
this.grid.Columns.Clear();
if (this.grid.GetType() == typeof(RadGridView))
{
RadGridView rgrid = this.grid as RadGridView;
rgrid.Font = this.RadGridFont;
rgrid.AllowAddNewRow = false;
rgrid.AddNewRowPosition = SystemRowPosition.Top;
rgrid.NewRowEnterKeyMode = RadGridViewNewRowEnterKeyMode.EnterMovesToLastAddedRow;
rgrid.SelectionMode = GridViewSelectionMode.FullRowSelect;
rgrid.AllowAutoSizeColumns = false;
rgrid.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.None;
rgrid.EnableFiltering = true;
rgrid.ShowFilteringRow = false;
rgrid.ShowHeaderCellButtons = true;
rgrid.ShowNoDataText = true;
rgrid.ShowRowErrors = true;
rgrid.ShowGroupedColumns = true;
rgrid.ShowGroupPanelScrollbars = true;
rgrid.AllowEditRow = false;
rgrid.TableElement.RowHeaderColumnWidth = 80;
rgrid.DataBindingComplete += RadGrid_DataBindingComplete;
rgrid.SelectionChanged += RadGrid_SelectionChanged;
rgrid.ViewCellFormatting += RadGrid_ViewCellFormatting;
rgrid.CellDoubleClick += RadGrid_CellDoubleClick;
rgrid.KeyDown += RadGrid_KeyDown;
rgrid.KeyUp += RadGrid_KeyUp;
rgrid.CellClick += RadGrid_CellClick;
}
}
private void RadGrid_KeyUp(object sender, KeyEventArgs e)
{
this.RadGridControlKey = e.Control;
}
private void RadGrid_KeyDown(object sender, KeyEventArgs e)
{
this.RadGridControlKey = e.Control;
}
private void RadGrid_CellClick(object sender, GridViewCellEventArgs e)
{
try
{
RadGridView rgrid = sender as RadGridView;
if (rgrid == null) rgrid = this.grid;
if (this.RadGridControlKey == false) return;
foreach (GridViewDataColumn column in rgrid.Columns)
{
foreach (BaseFormattingObject obj in column.ConditionalFormattingObjectList)
{
if (new string[] { "Marking" }.Contains(obj.Name))
{
ExpressionFormattingObject formatting = obj as ExpressionFormattingObject;
formatting.Expression += $" AND {e.Column.Name} = '{e.Value}'";
}
}
}
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
private void RadGrid_CellDoubleClick(object sender, GridViewCellEventArgs e)
{
try
{
RadGridView rgrid = sender as RadGridView;
if (rgrid == null) rgrid = this.grid;
List<BaseFormattingObject> lstFormat = new List<BaseFormattingObject>();
foreach (GridViewDataColumn column in rgrid.Columns)
{
lstFormat.Clear();
foreach (BaseFormattingObject obj in column.ConditionalFormattingObjectList)
{
if (new string[] { "Level_Error", "Type_Error", "Server_Error", "Return_1" }.Contains(obj.Name)) continue;
lstFormat.Add(obj);
}
foreach (BaseFormattingObject obj in lstFormat)
column.ConditionalFormattingObjectList.Remove(obj);
}
var value = e.Value;
//DateTime column Convert
if (e.Value.GetType() == typeof(DateTime))
{
var tempData = (DateTime)e.Value;
value = tempData.ToString("yyyy-MM-dd HH:mm:ss.fff");
}
ExpressionFormattingObject formatting = new ExpressionFormattingObject($"Marking", $"{e.Column.Name} = '{value}'", true);
formatting.RowBackColor = Color.FromArgb(128, 0, 255, 0);
rgrid.Columns[e.Column.Name].ConditionalFormattingObjectList.Add(formatting);
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
private void RadGrid_ViewCellFormatting(object sender, CellFormattingEventArgs e)
{
if (e.CellElement is GridRowHeaderCellElement && e.Row is GridViewDataRowInfo)
{
#if ROW_INDEX
GridDataView dataView = this.grid.MasterTemplate.DataView as GridDataView;
e.CellElement.Text = (dataView.Indexer.Items.IndexOf(e.Row) + 1).ToString();
#else
StandardData standardData = e.Row.DataBoundItem as StandardData;
e.CellElement.Text = (standardData != null ? standardData.LineNumber.ToString() : "");
#endif
e.CellElement.TextImageRelation = TextImageRelation.ImageBeforeText;
}
else
{
e.CellElement.ResetValue(LightVisualElement.TextImageRelationProperty, Telerik.WinControls.ValueResetFlags.Local);
}
}
private void RadGrid_DataBindingComplete(object sender, GridViewBindingCompleteEventArgs e)
{
RadGridView rgrid = sender as RadGridView;
if (rgrid == null) return;
if (rgrid.Columns.Contains("LineNumber")) rgrid.Columns["LineNumber"].IsVisible = false;
if (rgrid.Columns.Contains("DateTime")) rgrid.Columns["DateTime"].FormatString = "{0:yyyy-MM-dd HH:mm:ss.fff}";
if (rgrid.Columns.Contains("Service")) rgrid.Columns["Service"].IsVisible = false;
if (rgrid.Columns.Contains("Body")) rgrid.Columns["Body"].IsVisible = false;
if (rgrid.Columns.Contains("Level"))
{
rgrid.Columns["Level"].TextAlignment = ContentAlignment.MiddleCenter;
ExpressionFormattingObject formatting = new ExpressionFormattingObject($"Level_Error", "Level='ERROR'", true);
formatting.RowBackColor = Color.FromArgb(128, 255, 0, 0);
rgrid.Columns["Level"].ConditionalFormattingObjectList.Add(formatting);
}
if (rgrid.Columns.Contains("Type"))
{
//rgrid.Columns["Type"].TextAlignment = ContentAlignment.MiddleCenter;
ExpressionFormattingObject formatting = new ExpressionFormattingObject($"Type_Error", "Server<>'TID' and Type='ERROR'", true);
formatting.RowBackColor = Color.FromArgb(128, 255, 0, 0);
rgrid.Columns["Type"].ConditionalFormattingObjectList.Add(formatting);
}
if (rgrid.Columns.Contains("Return"))
{
rgrid.Columns["Return"].TextAlignment = ContentAlignment.MiddleCenter;
ExpressionFormattingObject formatting = new ExpressionFormattingObject($"Return_1", "Return<>0", true);
formatting.RowBackColor = Color.FromArgb(128, 255, 0, 0);
rgrid.Columns["Return"].ConditionalFormattingObjectList.Add(formatting);
}
//if (this.chkFilterLinktest.Checked)
//{
// FilterDescriptor filter = new FilterDescriptor("Column1", FilterOperator.IsNotEqualTo, "LINKTEST");
// filter.IsFilterEditor = true;
// this.grid.FilterDescriptors.Add(filter);
//}
rgrid.BestFitColumns(BestFitColumnMode.DisplayedCells);
}
private void RadGrid_SelectionChanged(object sender, EventArgs e)
{
try
{
RadGridView rgrid = sender as RadGridView;
if (rgrid == null) return;
StandardData data = rgrid.SelectedRows.FirstOrDefault().DataBoundItem as StandardData;
if (data == null) return;
int dataLineNumber = data.LineNumber - 1;
int startLineNumber = dataLineNumber - 10;
int bottomLineNumber = dataLineNumber + 100;
int dataIndex = this.tboxLog.Text.IndexOf($"{data.LineNumber.ToString("000000")}:");
int difference = dataIndex - this.tboxLog.GetFirstCharIndexFromLine(dataLineNumber);
this.tboxLog.SuspendLayout();
if (bottomLineNumber >= this.tboxLog.Lines.Length) bottomLineNumber = this.tboxLog.Lines.Length - 1;
this.tboxLog.SelectionStart = this.tboxLog.GetFirstCharIndexFromLine(bottomLineNumber) + difference;
this.tboxLog.ScrollToCaret();
if (startLineNumber < 0) startLineNumber = 0;
this.tboxLog.SelectionStart = this.tboxLog.GetFirstCharIndexFromLine(startLineNumber) + difference;
this.tboxLog.ScrollToCaret();
this.tboxLog.SelectionStart = this.tboxLog.GetFirstCharIndexFromLine(dataLineNumber) + difference;
this.tboxLog.SelectionLength = 6;
this.tboxLog.ScrollToCaret();
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
finally
{
this.tboxLog.ResumeLayout();
}
}
#endregion
private StandardCollection Parsing()
{
try
{
this.tboxLog.Clear();
this.Collection.Clear();
List<string> lstFileName = new List<string>();
string strTitle = string.Empty;
// Process Unit: File
foreach (ListViewItem lviewItem in this.lviewFiles.Items)
{
if (lviewItem.Checked == false) continue;
XLogger.Instance.Info(lviewItem.Text);
string sourceFileName = lviewItem.Tag as string;
if (this.chkDownload.Checked)
{
string destPath = $@"{Application.StartupPath}\Download";
if (System.IO.Directory.Exists(destPath) == false) System.IO.Directory.CreateDirectory(destPath);
if (string.IsNullOrEmpty(strTitle)) strTitle = System.IO.Path.GetFileNameWithoutExtension(sourceFileName);
string destFileName = $@"{destPath}\{System.IO.Path.GetFileName(sourceFileName)}";
System.IO.File.Copy(sourceFileName, destFileName, true);
sourceFileName = destFileName;
}
lstFileName.Add(sourceFileName);
} // Process Unit: File
EisParser logParser = new EisParser(lstFileName.ToArray());
logParser.Parsing();
this.Text = $"{strTitle} - Ver. {Application.ProductVersion}";
this.tboxLog.Text = logParser.LogString.ToString();
this.Collection.AddRange(logParser.StandardCollection);
return this.Collection;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
return this.Collection;
}
}
}
}

View File

@@ -0,0 +1,132 @@
<?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>
<metadata name="Column1.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column2.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column1.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column2.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

View File

@@ -0,0 +1,800 @@
namespace DDUtilityApp.LOGPARSER
{
partial class FrmLogParser02
{
/// <summary>
/// 필수 디자이너 변수입니다.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 사용 중인 모든 리소스를 정리합니다.
/// </summary>
/// <param name="disposing">관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form
/// <summary>
/// 디자이너 지원에 필요한 메서드입니다.
/// 이 메서드의 내용을 코드 편집기로 수정하지 마세요.
/// </summary>
private void InitializeComponent()
{
Telerik.WinControls.UI.TableViewDefinition tableViewDefinition1 = new Telerik.WinControls.UI.TableViewDefinition();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmLogParser02));
this.pnlRoot = new System.Windows.Forms.Panel();
this.spnlRoot = new System.Windows.Forms.SplitContainer();
this.pnlControls = new System.Windows.Forms.Panel();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.splitContainer2 = new System.Windows.Forms.SplitContainer();
this.pnlEquipment = new System.Windows.Forms.Panel();
this.pnlFiles = new System.Windows.Forms.Panel();
this.lviewFiles = new System.Windows.Forms.ListView();
this.panel1 = new System.Windows.Forms.Panel();
this.tboxFilename = new System.Windows.Forms.TextBox();
this.flowLayoutPanel2 = new System.Windows.Forms.FlowLayoutPanel();
this.btnFileAdd = new System.Windows.Forms.Button();
this.btnFileRemove = new System.Windows.Forms.Button();
this.btnFileClear = new System.Windows.Forms.Button();
this.btnParsing = new System.Windows.Forms.Button();
this.panel3 = new System.Windows.Forms.Panel();
this.btnEqpSelector = new System.Windows.Forms.Button();
this.tboxEqModelID = new System.Windows.Forms.TextBox();
this.tboxEqDescription = new System.Windows.Forms.TextBox();
this.tboxEquipmentID = new System.Windows.Forms.TextBox();
this.pnlButtons = new System.Windows.Forms.FlowLayoutPanel();
this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
this.chkAutoClear = new System.Windows.Forms.CheckBox();
this.chkDownload = new System.Windows.Forms.CheckBox();
this.chkFilterLinktest = new System.Windows.Forms.CheckBox();
this.flowLayoutPanel3 = new System.Windows.Forms.FlowLayoutPanel();
this.btnClearFilter = new System.Windows.Forms.Button();
this.btnColumnResize = new System.Windows.Forms.Button();
this.btnOpenOriginal = new System.Windows.Forms.Button();
this.btnSecsDefine = new System.Windows.Forms.Button();
this.btnOpenWorkFlow = new System.Windows.Forms.Button();
this.panel4 = new System.Windows.Forms.Panel();
this.tabControl2 = new System.Windows.Forms.TabControl();
this.tabPage4 = new System.Windows.Forms.TabPage();
this.spnl00 = new System.Windows.Forms.SplitContainer();
this.pnlDisplayL = new System.Windows.Forms.Panel();
this.tabControl1 = new System.Windows.Forms.TabControl();
this.tabPage1 = new System.Windows.Forms.TabPage();
this.tboxLog = new System.Windows.Forms.TextBox();
this.tabPage2 = new System.Windows.Forms.TabPage();
this.tboxException = new System.Windows.Forms.TextBox();
this.pnlDisplayR = new System.Windows.Forms.Panel();
this.grid = new JWH.CONTROL.GridViewEx();
this.flowLayoutPanel4 = new System.Windows.Forms.FlowLayoutPanel();
this.label1 = new System.Windows.Forms.Label();
this.tboxLineNumber = new System.Windows.Forms.TextBox();
this.btnGoLineNumber = new System.Windows.Forms.Button();
this.pnlRoot.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.spnlRoot)).BeginInit();
this.spnlRoot.Panel1.SuspendLayout();
this.spnlRoot.Panel2.SuspendLayout();
this.spnlRoot.SuspendLayout();
this.pnlControls.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
this.splitContainer2.Panel1.SuspendLayout();
this.splitContainer2.Panel2.SuspendLayout();
this.splitContainer2.SuspendLayout();
this.pnlEquipment.SuspendLayout();
this.pnlFiles.SuspendLayout();
this.panel1.SuspendLayout();
this.flowLayoutPanel2.SuspendLayout();
this.panel3.SuspendLayout();
this.pnlButtons.SuspendLayout();
this.flowLayoutPanel1.SuspendLayout();
this.flowLayoutPanel3.SuspendLayout();
this.panel4.SuspendLayout();
this.tabControl2.SuspendLayout();
this.tabPage4.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.spnl00)).BeginInit();
this.spnl00.Panel1.SuspendLayout();
this.spnl00.Panel2.SuspendLayout();
this.spnl00.SuspendLayout();
this.pnlDisplayL.SuspendLayout();
this.tabControl1.SuspendLayout();
this.tabPage1.SuspendLayout();
this.tabPage2.SuspendLayout();
this.pnlDisplayR.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.grid)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.grid.MasterTemplate)).BeginInit();
this.flowLayoutPanel4.SuspendLayout();
this.SuspendLayout();
//
// pnlRoot
//
this.pnlRoot.Controls.Add(this.spnlRoot);
this.pnlRoot.Controls.Add(this.flowLayoutPanel4);
this.pnlRoot.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlRoot.Location = new System.Drawing.Point(0, 0);
this.pnlRoot.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.pnlRoot.Name = "pnlRoot";
this.pnlRoot.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.pnlRoot.Size = new System.Drawing.Size(1145, 602);
this.pnlRoot.TabIndex = 0;
//
// spnlRoot
//
this.spnlRoot.Dock = System.Windows.Forms.DockStyle.Fill;
this.spnlRoot.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.spnlRoot.Location = new System.Drawing.Point(3, 2);
this.spnlRoot.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.spnlRoot.Name = "spnlRoot";
this.spnlRoot.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// spnlRoot.Panel1
//
this.spnlRoot.Panel1.Controls.Add(this.pnlControls);
this.spnlRoot.Panel1.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);
//
// spnlRoot.Panel2
//
this.spnlRoot.Panel2.Controls.Add(this.panel4);
this.spnlRoot.Size = new System.Drawing.Size(1139, 571);
this.spnlRoot.SplitterDistance = 161;
this.spnlRoot.SplitterWidth = 3;
this.spnlRoot.TabIndex = 1;
//
// pnlControls
//
this.pnlControls.Controls.Add(this.splitContainer1);
this.pnlControls.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlControls.Location = new System.Drawing.Point(3, 2);
this.pnlControls.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.pnlControls.Name = "pnlControls";
this.pnlControls.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.pnlControls.Size = new System.Drawing.Size(1133, 157);
this.pnlControls.TabIndex = 7;
//
// splitContainer1
//
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
this.splitContainer1.Location = new System.Drawing.Point(3, 2);
this.splitContainer1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.splitContainer1.Name = "splitContainer1";
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.splitContainer2);
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.pnlButtons);
this.splitContainer1.Size = new System.Drawing.Size(1127, 153);
this.splitContainer1.SplitterDistance = 719;
this.splitContainer1.TabIndex = 8;
//
// splitContainer2
//
this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
this.splitContainer2.Location = new System.Drawing.Point(0, 0);
this.splitContainer2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.splitContainer2.Name = "splitContainer2";
//
// splitContainer2.Panel1
//
this.splitContainer2.Panel1.Controls.Add(this.pnlEquipment);
//
// splitContainer2.Panel2
//
this.splitContainer2.Panel2.Controls.Add(this.panel3);
this.splitContainer2.Size = new System.Drawing.Size(719, 153);
this.splitContainer2.SplitterDistance = 380;
this.splitContainer2.TabIndex = 0;
//
// pnlEquipment
//
this.pnlEquipment.Controls.Add(this.pnlFiles);
this.pnlEquipment.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlEquipment.Location = new System.Drawing.Point(0, 0);
this.pnlEquipment.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.pnlEquipment.Name = "pnlEquipment";
this.pnlEquipment.Size = new System.Drawing.Size(380, 153);
this.pnlEquipment.TabIndex = 1;
//
// pnlFiles
//
this.pnlFiles.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.pnlFiles.Controls.Add(this.lviewFiles);
this.pnlFiles.Controls.Add(this.panel1);
this.pnlFiles.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlFiles.Location = new System.Drawing.Point(0, 0);
this.pnlFiles.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.pnlFiles.Name = "pnlFiles";
this.pnlFiles.Padding = new System.Windows.Forms.Padding(3, 2, 5, 2);
this.pnlFiles.Size = new System.Drawing.Size(380, 153);
this.pnlFiles.TabIndex = 2;
//
// lviewFiles
//
this.lviewFiles.Dock = System.Windows.Forms.DockStyle.Fill;
this.lviewFiles.HideSelection = false;
this.lviewFiles.Location = new System.Drawing.Point(3, 2);
this.lviewFiles.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.lviewFiles.Name = "lviewFiles";
this.lviewFiles.Size = new System.Drawing.Size(370, 88);
this.lviewFiles.TabIndex = 0;
this.lviewFiles.UseCompatibleStateImageBehavior = false;
//
// panel1
//
this.panel1.Controls.Add(this.tboxFilename);
this.panel1.Controls.Add(this.flowLayoutPanel2);
this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom;
this.panel1.Location = new System.Drawing.Point(3, 90);
this.panel1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.panel1.Name = "panel1";
this.panel1.Padding = new System.Windows.Forms.Padding(0, 2, 0, 0);
this.panel1.Size = new System.Drawing.Size(370, 59);
this.panel1.TabIndex = 3;
//
// tboxFilename
//
this.tboxFilename.Dock = System.Windows.Forms.DockStyle.Fill;
this.tboxFilename.Location = new System.Drawing.Point(0, 2);
this.tboxFilename.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.tboxFilename.Multiline = true;
this.tboxFilename.Name = "tboxFilename";
this.tboxFilename.Size = new System.Drawing.Size(370, 33);
this.tboxFilename.TabIndex = 0;
//
// flowLayoutPanel2
//
this.flowLayoutPanel2.AutoSize = true;
this.flowLayoutPanel2.Controls.Add(this.btnFileAdd);
this.flowLayoutPanel2.Controls.Add(this.btnFileRemove);
this.flowLayoutPanel2.Controls.Add(this.btnFileClear);
this.flowLayoutPanel2.Controls.Add(this.btnParsing);
this.flowLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Bottom;
this.flowLayoutPanel2.Location = new System.Drawing.Point(0, 35);
this.flowLayoutPanel2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.flowLayoutPanel2.Name = "flowLayoutPanel2";
this.flowLayoutPanel2.Padding = new System.Windows.Forms.Padding(0, 2, 0, 0);
this.flowLayoutPanel2.Size = new System.Drawing.Size(370, 24);
this.flowLayoutPanel2.TabIndex = 18;
this.flowLayoutPanel2.WrapContents = false;
//
// btnFileAdd
//
this.btnFileAdd.Location = new System.Drawing.Point(3, 2);
this.btnFileAdd.Margin = new System.Windows.Forms.Padding(3, 0, 3, 2);
this.btnFileAdd.Name = "btnFileAdd";
this.btnFileAdd.Size = new System.Drawing.Size(70, 20);
this.btnFileAdd.TabIndex = 1;
this.btnFileAdd.Text = "Add";
this.btnFileAdd.UseVisualStyleBackColor = true;
//
// btnFileRemove
//
this.btnFileRemove.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnFileRemove.Location = new System.Drawing.Point(79, 2);
this.btnFileRemove.Margin = new System.Windows.Forms.Padding(3, 0, 3, 2);
this.btnFileRemove.Name = "btnFileRemove";
this.btnFileRemove.Size = new System.Drawing.Size(70, 20);
this.btnFileRemove.TabIndex = 2;
this.btnFileRemove.Text = "Remove";
this.btnFileRemove.UseVisualStyleBackColor = true;
//
// btnFileClear
//
this.btnFileClear.Location = new System.Drawing.Point(155, 2);
this.btnFileClear.Margin = new System.Windows.Forms.Padding(3, 0, 3, 2);
this.btnFileClear.Name = "btnFileClear";
this.btnFileClear.Size = new System.Drawing.Size(70, 20);
this.btnFileClear.TabIndex = 3;
this.btnFileClear.Text = "Clear";
this.btnFileClear.UseVisualStyleBackColor = true;
//
// btnParsing
//
this.btnParsing.Location = new System.Drawing.Point(231, 2);
this.btnParsing.Margin = new System.Windows.Forms.Padding(3, 0, 3, 2);
this.btnParsing.Name = "btnParsing";
this.btnParsing.Size = new System.Drawing.Size(88, 20);
this.btnParsing.TabIndex = 0;
this.btnParsing.Text = "Parsing(F5)";
this.btnParsing.UseVisualStyleBackColor = true;
//
// panel3
//
this.panel3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel3.Controls.Add(this.btnEqpSelector);
this.panel3.Controls.Add(this.tboxEqModelID);
this.panel3.Controls.Add(this.tboxEqDescription);
this.panel3.Controls.Add(this.tboxEquipmentID);
this.panel3.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel3.Location = new System.Drawing.Point(0, 0);
this.panel3.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.panel3.Name = "panel3";
this.panel3.Size = new System.Drawing.Size(335, 153);
this.panel3.TabIndex = 0;
//
// btnEqpSelector
//
this.btnEqpSelector.Location = new System.Drawing.Point(4, 75);
this.btnEqpSelector.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnEqpSelector.Name = "btnEqpSelector";
this.btnEqpSelector.Size = new System.Drawing.Size(170, 20);
this.btnEqpSelector.TabIndex = 0;
this.btnEqpSelector.Text = "Equipment Select ...";
this.btnEqpSelector.UseVisualStyleBackColor = true;
//
// tboxEqModelID
//
this.tboxEqModelID.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tboxEqModelID.Location = new System.Drawing.Point(4, 52);
this.tboxEqModelID.Margin = new System.Windows.Forms.Padding(3, 2, 3, 1);
this.tboxEqModelID.Name = "tboxEqModelID";
this.tboxEqModelID.Size = new System.Drawing.Size(327, 21);
this.tboxEqModelID.TabIndex = 3;
//
// tboxEqDescription
//
this.tboxEqDescription.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tboxEqDescription.Location = new System.Drawing.Point(4, 29);
this.tboxEqDescription.Margin = new System.Windows.Forms.Padding(3, 2, 3, 1);
this.tboxEqDescription.Name = "tboxEqDescription";
this.tboxEqDescription.Size = new System.Drawing.Size(327, 21);
this.tboxEqDescription.TabIndex = 2;
//
// tboxEquipmentID
//
this.tboxEquipmentID.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tboxEquipmentID.Location = new System.Drawing.Point(4, 5);
this.tboxEquipmentID.Margin = new System.Windows.Forms.Padding(3, 2, 3, 1);
this.tboxEquipmentID.Name = "tboxEquipmentID";
this.tboxEquipmentID.Size = new System.Drawing.Size(327, 21);
this.tboxEquipmentID.TabIndex = 0;
//
// pnlButtons
//
this.pnlButtons.AutoSize = true;
this.pnlButtons.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.pnlButtons.Controls.Add(this.flowLayoutPanel1);
this.pnlButtons.Controls.Add(this.flowLayoutPanel3);
this.pnlButtons.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlButtons.Location = new System.Drawing.Point(0, 0);
this.pnlButtons.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.pnlButtons.Name = "pnlButtons";
this.pnlButtons.Size = new System.Drawing.Size(404, 153);
this.pnlButtons.TabIndex = 5;
//
// flowLayoutPanel1
//
this.flowLayoutPanel1.AutoSize = true;
this.flowLayoutPanel1.Controls.Add(this.chkAutoClear);
this.flowLayoutPanel1.Controls.Add(this.chkDownload);
this.flowLayoutPanel1.Controls.Add(this.chkFilterLinktest);
this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Top;
this.flowLayoutPanel1.Location = new System.Drawing.Point(3, 2);
this.flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.flowLayoutPanel1.Name = "flowLayoutPanel1";
this.flowLayoutPanel1.Size = new System.Drawing.Size(279, 20);
this.flowLayoutPanel1.TabIndex = 11;
//
// chkAutoClear
//
this.chkAutoClear.AutoSize = true;
this.chkAutoClear.Checked = true;
this.chkAutoClear.CheckState = System.Windows.Forms.CheckState.Checked;
this.chkAutoClear.Location = new System.Drawing.Point(3, 2);
this.chkAutoClear.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.chkAutoClear.Name = "chkAutoClear";
this.chkAutoClear.Size = new System.Drawing.Size(83, 16);
this.chkAutoClear.TabIndex = 4;
this.chkAutoClear.Text = "Auto Clear";
this.chkAutoClear.UseVisualStyleBackColor = true;
//
// chkDownload
//
this.chkDownload.AutoSize = true;
this.chkDownload.Checked = true;
this.chkDownload.CheckState = System.Windows.Forms.CheckState.Checked;
this.chkDownload.Location = new System.Drawing.Point(92, 2);
this.chkDownload.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.chkDownload.Name = "chkDownload";
this.chkDownload.Size = new System.Drawing.Size(80, 16);
this.chkDownload.TabIndex = 6;
this.chkDownload.Text = "Download";
this.chkDownload.UseVisualStyleBackColor = true;
//
// chkFilterLinktest
//
this.chkFilterLinktest.AutoSize = true;
this.chkFilterLinktest.Checked = true;
this.chkFilterLinktest.CheckState = System.Windows.Forms.CheckState.Checked;
this.chkFilterLinktest.Location = new System.Drawing.Point(178, 2);
this.chkFilterLinktest.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.chkFilterLinktest.Name = "chkFilterLinktest";
this.chkFilterLinktest.Size = new System.Drawing.Size(98, 16);
this.chkFilterLinktest.TabIndex = 13;
this.chkFilterLinktest.Text = "Filter Linktest";
this.chkFilterLinktest.UseVisualStyleBackColor = true;
//
// flowLayoutPanel3
//
this.flowLayoutPanel3.AutoSize = true;
this.flowLayoutPanel3.Controls.Add(this.btnClearFilter);
this.flowLayoutPanel3.Controls.Add(this.btnColumnResize);
this.flowLayoutPanel3.Controls.Add(this.btnOpenOriginal);
this.flowLayoutPanel3.Controls.Add(this.btnSecsDefine);
this.flowLayoutPanel3.Controls.Add(this.btnOpenWorkFlow);
this.flowLayoutPanel3.Location = new System.Drawing.Point(3, 26);
this.flowLayoutPanel3.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.flowLayoutPanel3.Name = "flowLayoutPanel3";
this.flowLayoutPanel3.Size = new System.Drawing.Size(360, 48);
this.flowLayoutPanel3.TabIndex = 14;
//
// btnClearFilter
//
this.btnClearFilter.Location = new System.Drawing.Point(3, 2);
this.btnClearFilter.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnClearFilter.Name = "btnClearFilter";
this.btnClearFilter.Size = new System.Drawing.Size(114, 20);
this.btnClearFilter.TabIndex = 13;
this.btnClearFilter.Text = "Clear Filter";
this.btnClearFilter.UseVisualStyleBackColor = true;
//
// btnColumnResize
//
this.btnColumnResize.Location = new System.Drawing.Point(123, 2);
this.btnColumnResize.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnColumnResize.Name = "btnColumnResize";
this.btnColumnResize.Size = new System.Drawing.Size(151, 20);
this.btnColumnResize.TabIndex = 14;
this.btnColumnResize.Text = "Column Resize(F6)";
this.btnColumnResize.UseVisualStyleBackColor = true;
//
// btnOpenOriginal
//
this.btnOpenOriginal.Location = new System.Drawing.Point(3, 26);
this.btnOpenOriginal.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnOpenOriginal.Name = "btnOpenOriginal";
this.btnOpenOriginal.Size = new System.Drawing.Size(114, 20);
this.btnOpenOriginal.TabIndex = 16;
this.btnOpenOriginal.Text = "Original ...";
this.btnOpenOriginal.UseVisualStyleBackColor = true;
//
// btnSecsDefine
//
this.btnSecsDefine.Location = new System.Drawing.Point(123, 26);
this.btnSecsDefine.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnSecsDefine.Name = "btnSecsDefine";
this.btnSecsDefine.Size = new System.Drawing.Size(114, 20);
this.btnSecsDefine.TabIndex = 18;
this.btnSecsDefine.Text = "SECS Define ...";
this.btnSecsDefine.UseVisualStyleBackColor = true;
//
// btnOpenWorkFlow
//
this.btnOpenWorkFlow.Location = new System.Drawing.Point(243, 26);
this.btnOpenWorkFlow.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnOpenWorkFlow.Name = "btnOpenWorkFlow";
this.btnOpenWorkFlow.Size = new System.Drawing.Size(114, 20);
this.btnOpenWorkFlow.TabIndex = 19;
this.btnOpenWorkFlow.Text = "WorkFlow ...";
this.btnOpenWorkFlow.UseVisualStyleBackColor = true;
//
// panel4
//
this.panel4.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.panel4.Controls.Add(this.tabControl2);
this.panel4.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel4.Location = new System.Drawing.Point(0, 0);
this.panel4.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.panel4.Name = "panel4";
this.panel4.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.panel4.Size = new System.Drawing.Size(1139, 407);
this.panel4.TabIndex = 2;
//
// tabControl2
//
this.tabControl2.Controls.Add(this.tabPage4);
this.tabControl2.Dock = System.Windows.Forms.DockStyle.Fill;
this.tabControl2.Location = new System.Drawing.Point(3, 2);
this.tabControl2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.tabControl2.Name = "tabControl2";
this.tabControl2.SelectedIndex = 0;
this.tabControl2.Size = new System.Drawing.Size(1129, 399);
this.tabControl2.TabIndex = 1;
//
// tabPage4
//
this.tabPage4.Controls.Add(this.spnl00);
this.tabPage4.Location = new System.Drawing.Point(4, 22);
this.tabPage4.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.tabPage4.Name = "tabPage4";
this.tabPage4.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.tabPage4.Size = new System.Drawing.Size(1121, 373);
this.tabPage4.TabIndex = 0;
this.tabPage4.Text = "Log Viewer";
this.tabPage4.UseVisualStyleBackColor = true;
//
// spnl00
//
this.spnl00.Dock = System.Windows.Forms.DockStyle.Fill;
this.spnl00.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.spnl00.Location = new System.Drawing.Point(3, 2);
this.spnl00.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.spnl00.Name = "spnl00";
//
// spnl00.Panel1
//
this.spnl00.Panel1.Controls.Add(this.pnlDisplayL);
//
// spnl00.Panel2
//
this.spnl00.Panel2.Controls.Add(this.pnlDisplayR);
this.spnl00.Size = new System.Drawing.Size(1115, 369);
this.spnl00.SplitterDistance = 438;
this.spnl00.TabIndex = 0;
//
// pnlDisplayL
//
this.pnlDisplayL.Controls.Add(this.tabControl1);
this.pnlDisplayL.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlDisplayL.Location = new System.Drawing.Point(0, 0);
this.pnlDisplayL.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.pnlDisplayL.Name = "pnlDisplayL";
this.pnlDisplayL.Size = new System.Drawing.Size(438, 369);
this.pnlDisplayL.TabIndex = 0;
//
// tabControl1
//
this.tabControl1.Controls.Add(this.tabPage1);
this.tabControl1.Controls.Add(this.tabPage2);
this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tabControl1.Location = new System.Drawing.Point(0, 0);
this.tabControl1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.tabControl1.Name = "tabControl1";
this.tabControl1.SelectedIndex = 0;
this.tabControl1.Size = new System.Drawing.Size(438, 369);
this.tabControl1.TabIndex = 1;
//
// tabPage1
//
this.tabPage1.Controls.Add(this.tboxLog);
this.tabPage1.Location = new System.Drawing.Point(4, 22);
this.tabPage1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.tabPage1.Name = "tabPage1";
this.tabPage1.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.tabPage1.Size = new System.Drawing.Size(430, 343);
this.tabPage1.TabIndex = 0;
this.tabPage1.Text = "Log Files";
this.tabPage1.UseVisualStyleBackColor = true;
//
// tboxLog
//
this.tboxLog.AllowDrop = true;
this.tboxLog.Dock = System.Windows.Forms.DockStyle.Fill;
this.tboxLog.Location = new System.Drawing.Point(3, 2);
this.tboxLog.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.tboxLog.Multiline = true;
this.tboxLog.Name = "tboxLog";
this.tboxLog.ScrollBars = System.Windows.Forms.ScrollBars.Both;
this.tboxLog.Size = new System.Drawing.Size(424, 339);
this.tboxLog.TabIndex = 1;
//
// tabPage2
//
this.tabPage2.Controls.Add(this.tboxException);
this.tabPage2.Location = new System.Drawing.Point(4, 22);
this.tabPage2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.tabPage2.Name = "tabPage2";
this.tabPage2.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.tabPage2.Size = new System.Drawing.Size(375, 377);
this.tabPage2.TabIndex = 1;
this.tabPage2.Text = "Execption";
this.tabPage2.UseVisualStyleBackColor = true;
//
// tboxException
//
this.tboxException.AllowDrop = true;
this.tboxException.Dock = System.Windows.Forms.DockStyle.Fill;
this.tboxException.Location = new System.Drawing.Point(3, 2);
this.tboxException.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.tboxException.Multiline = true;
this.tboxException.Name = "tboxException";
this.tboxException.ScrollBars = System.Windows.Forms.ScrollBars.Both;
this.tboxException.Size = new System.Drawing.Size(369, 373);
this.tboxException.TabIndex = 2;
//
// pnlDisplayR
//
this.pnlDisplayR.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.pnlDisplayR.Controls.Add(this.grid);
this.pnlDisplayR.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlDisplayR.Location = new System.Drawing.Point(0, 0);
this.pnlDisplayR.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.pnlDisplayR.Name = "pnlDisplayR";
this.pnlDisplayR.Size = new System.Drawing.Size(673, 369);
this.pnlDisplayR.TabIndex = 1;
//
// grid
//
this.grid.ColumnResizeKey = System.Windows.Forms.Keys.F6;
this.grid.Dock = System.Windows.Forms.DockStyle.Fill;
this.grid.Location = new System.Drawing.Point(0, 0);
this.grid.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
//
//
//
this.grid.MasterTemplate.ViewDefinition = tableViewDefinition1;
this.grid.Name = "grid";
this.grid.Size = new System.Drawing.Size(671, 367);
this.grid.TabIndex = 0;
//
// flowLayoutPanel4
//
this.flowLayoutPanel4.AutoSize = true;
this.flowLayoutPanel4.Controls.Add(this.label1);
this.flowLayoutPanel4.Controls.Add(this.tboxLineNumber);
this.flowLayoutPanel4.Controls.Add(this.btnGoLineNumber);
this.flowLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Bottom;
this.flowLayoutPanel4.Location = new System.Drawing.Point(3, 573);
this.flowLayoutPanel4.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.flowLayoutPanel4.Name = "flowLayoutPanel4";
this.flowLayoutPanel4.Padding = new System.Windows.Forms.Padding(1);
this.flowLayoutPanel4.Size = new System.Drawing.Size(1139, 27);
this.flowLayoutPanel4.TabIndex = 18;
//
// label1
//
this.label1.Location = new System.Drawing.Point(4, 1);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(90, 22);
this.label1.TabIndex = 5;
this.label1.Text = "Line Number: ";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// tboxLineNumber
//
this.tboxLineNumber.Location = new System.Drawing.Point(100, 3);
this.tboxLineNumber.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.tboxLineNumber.Name = "tboxLineNumber";
this.tboxLineNumber.Size = new System.Drawing.Size(99, 21);
this.tboxLineNumber.TabIndex = 6;
this.tboxLineNumber.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// btnGoLineNumber
//
this.btnGoLineNumber.Location = new System.Drawing.Point(205, 3);
this.btnGoLineNumber.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnGoLineNumber.Name = "btnGoLineNumber";
this.btnGoLineNumber.Size = new System.Drawing.Size(52, 20);
this.btnGoLineNumber.TabIndex = 8;
this.btnGoLineNumber.Text = "Go";
this.btnGoLineNumber.UseVisualStyleBackColor = true;
//
// FrmLogParser02
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1145, 602);
this.Controls.Add(this.pnlRoot);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.Name = "FrmLogParser02";
this.Text = "Form1";
this.pnlRoot.ResumeLayout(false);
this.pnlRoot.PerformLayout();
this.spnlRoot.Panel1.ResumeLayout(false);
this.spnlRoot.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.spnlRoot)).EndInit();
this.spnlRoot.ResumeLayout(false);
this.pnlControls.ResumeLayout(false);
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel2.ResumeLayout(false);
this.splitContainer1.Panel2.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.splitContainer2.Panel1.ResumeLayout(false);
this.splitContainer2.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
this.splitContainer2.ResumeLayout(false);
this.pnlEquipment.ResumeLayout(false);
this.pnlFiles.ResumeLayout(false);
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.flowLayoutPanel2.ResumeLayout(false);
this.panel3.ResumeLayout(false);
this.panel3.PerformLayout();
this.pnlButtons.ResumeLayout(false);
this.pnlButtons.PerformLayout();
this.flowLayoutPanel1.ResumeLayout(false);
this.flowLayoutPanel1.PerformLayout();
this.flowLayoutPanel3.ResumeLayout(false);
this.panel4.ResumeLayout(false);
this.tabControl2.ResumeLayout(false);
this.tabPage4.ResumeLayout(false);
this.spnl00.Panel1.ResumeLayout(false);
this.spnl00.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.spnl00)).EndInit();
this.spnl00.ResumeLayout(false);
this.pnlDisplayL.ResumeLayout(false);
this.tabControl1.ResumeLayout(false);
this.tabPage1.ResumeLayout(false);
this.tabPage1.PerformLayout();
this.tabPage2.ResumeLayout(false);
this.tabPage2.PerformLayout();
this.pnlDisplayR.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.grid.MasterTemplate)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.grid)).EndInit();
this.flowLayoutPanel4.ResumeLayout(false);
this.flowLayoutPanel4.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Panel pnlRoot;
private System.Windows.Forms.SplitContainer spnlRoot;
private System.Windows.Forms.Panel pnlDisplayL;
private System.Windows.Forms.SplitContainer spnl00;
private System.Windows.Forms.Panel pnlDisplayR;
private System.Windows.Forms.Panel pnlControls;
private System.Windows.Forms.TabControl tabControl1;
private System.Windows.Forms.TabPage tabPage1;
private System.Windows.Forms.TextBox tboxLog;
private System.Windows.Forms.TabPage tabPage2;
private System.Windows.Forms.TextBox tboxException;
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.Panel pnlEquipment;
private System.Windows.Forms.FlowLayoutPanel pnlButtons;
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
private System.Windows.Forms.CheckBox chkAutoClear;
private System.Windows.Forms.CheckBox chkDownload;
private System.Windows.Forms.CheckBox chkFilterLinktest;
private System.Windows.Forms.TabControl tabControl2;
private System.Windows.Forms.TabPage tabPage4;
private System.Windows.Forms.Button btnEqpSelector;
private System.Windows.Forms.TextBox tboxEquipmentID;
private System.Windows.Forms.TextBox tboxEqDescription;
private System.Windows.Forms.TextBox tboxEqModelID;
private System.Windows.Forms.Panel pnlFiles;
private System.Windows.Forms.ListView lviewFiles;
private System.Windows.Forms.Panel panel1;
private JWH.CONTROL.GridViewEx grid;
private System.Windows.Forms.SplitContainer splitContainer2;
private System.Windows.Forms.Panel panel3;
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel4;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox tboxLineNumber;
private System.Windows.Forms.Button btnGoLineNumber;
private System.Windows.Forms.Panel panel4;
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel3;
private System.Windows.Forms.Button btnClearFilter;
private System.Windows.Forms.Button btnColumnResize;
private System.Windows.Forms.Button btnOpenOriginal;
private System.Windows.Forms.Button btnSecsDefine;
private System.Windows.Forms.Button btnOpenWorkFlow;
private System.Windows.Forms.TextBox tboxFilename;
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel2;
private System.Windows.Forms.Button btnFileAdd;
private System.Windows.Forms.Button btnFileRemove;
private System.Windows.Forms.Button btnFileClear;
private System.Windows.Forms.Button btnParsing;
}
}

View File

@@ -0,0 +1,726 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using DDUtilityApp.LOGPARSER.DATA;
using DDUtilityApp.LOGPARSER.PARSER;
using DDUtilityApp.SECS;
using JWH;
using JWH.CONTROL;
using Telerik.WinControls.UI;
namespace DDUtilityApp.LOGPARSER
{
public partial class FrmLogParser02 : Form
{
#region [ Properties ] ------------------------------------------------
private bool RadGridControlKey { get; set; } = false;
private StandardCollection Collection { get; set; } = new StandardCollection();
private LogParser Parser { get; set; } = new AgvParser();
private EisEquipment Equipment { get; set; } = null;
private SECSDefine SECSDefine { get; set; } = null;
private FrmFindDialog FindDialog { get; set; } = null;
private string WindowText { get; set; } = $"[EverOne] MIS Log Viewer";
public static string BasePath { get; set; }
public static string DownloadPath { get; set; }
public static string WorkflowPath { get; set; }
#endregion
#region [ FrmLogParser02 ] --------------------------------------------
public FrmLogParser02()
{
InitializeComponent();
this.SetLayout();
this.SetEventHandler();
XLogger.Instance.Control = this.tboxException;
}
private void SetLayout()
{
this.AllowDrop = true;
this.Text = $"{this.WindowText} - Ver. {Application.ProductVersion}";
BasePath = $"{Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)}\\DDUtility\\";
DownloadPath = $"{BasePath}Download";
WorkflowPath = $"{BasePath}WorkFlow";
this.tboxLog.AllowDrop = true;
this.tboxLog.WordWrap = false;
this.tboxLog.Multiline = true;
this.tboxLog.HideSelection = false;
this.tboxLog.ScrollBars = ScrollBars.Both;
this.tboxLog.Font = new Font("돋움체", 9);
this.tboxException.WordWrap = false;
this.tboxException.Font = new Font("돋움체", 9);
this.lviewFiles.View = View.Details;
ColumnHeader header = this.lviewFiles.Columns.Add("File Name");
this.lviewFiles.CheckBoxes = true;
this.lviewFiles.MultiSelect = false;
this.lviewFiles.Sorting = System.Windows.Forms.SortOrder.Ascending;
this.lviewFiles.ListViewItemSorter = new ListViewItemComparer(0, this.lviewFiles.Sorting);
this.RadGrid_Setting();
this.btnEqpSelector.Enabled = false;
this.btnSecsDefine.Enabled = false;
this.btnOpenWorkFlow.Enabled = false;
this.ActiveControl = this.btnParsing;
}
private void SetEventHandler()
{
// DragDrop
this.DragDrop += Control_DragDrop;
this.DragEnter += Control_DragEnter;
this.tboxLog.DragDrop += Control_DragDrop;
this.tboxLog.DragEnter += Control_DragEnter;
this.tboxLog.KeyDown += TboxLog_KeyDown;
// File List
this.lviewFiles.Click += LviewFiles_Click;
this.lviewFiles.ColumnClick += LviewFiles_ColumnClick;
this.lviewFiles.Resize += LviewFiles_Resize;
this.tboxFilename.KeyDown += TboxFilename_KeyDown;
this.btnFileAdd.Click += BtnFileAdd_Click;
this.btnFileRemove.Click += BtnFileRemove_Click;
this.btnFileClear.Click += BtnFileClear_Click;
this.btnParsing.Click += BtnParsing_Click;
this.btnEqpSelector.Click += BtnEqpSelector_Click;
// Option
this.btnClearFilter.Click += BtnClearFilter_Click;
this.btnColumnResize.Click += BtnColumnResize_Click;
this.btnOpenOriginal.Click += BtnOpenOriginal_Click;
this.btnSecsDefine.Click += BtnSecsDefine_Click;
this.btnOpenWorkFlow.Click += BtnOpenWorkFlow_Click;
// StatusBar
this.btnGoLineNumber.Click += BtnGoLineNumber_Click;
this.tboxLineNumber.KeyDown += TboxLineNumber_KeyDown;
// Grid
this.grid.DataBindingComplete += RadGrid_DataBindingComplete;
this.grid.SelectionChanged += RadGrid_SelectionChanged;
this.grid.ViewCellFormatting += RadGrid_ViewCellFormatting;
this.grid.CellDoubleClick += RadGrid_CellDoubleClick;
this.grid.KeyDown += RadGrid_KeyDown;
this.grid.KeyUp += RadGrid_KeyUp;
this.grid.CellClick += RadGrid_CellClick;
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
switch (keyData)
{
case Keys.F3:
if (this.FindDialog != null) this.FindDialog.Next();
break;
case Keys.F5:
this.BtnParsing_Click(this.btnParsing, new EventArgs());
break;
case Keys.F6:
this.BtnColumnResize_Click(this.btnColumnResize, new EventArgs());
break;
}
return base.ProcessCmdKey(ref msg, keyData);
}
#endregion
#region [ Control Event ] ---------------------------------------------
private void Control_DragDrop(object sender, DragEventArgs e)
{
XLogger.Instance.Info(e);
if (this.chkAutoClear.Checked) this.lviewFiles.Items.Clear();
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
foreach (string filePath in files)
{
ListViewItem lviewItem = this.lviewFiles.Items.Add(Path.GetFileName(filePath));
lviewItem.Checked = true;
lviewItem.Tag = filePath;
}
this.BtnParsing_Click(this.btnParsing, new EventArgs());
}
private void Control_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy;
}
private void TboxLog_KeyDown(object sender, KeyEventArgs e)
{
if ((e.KeyData & Keys.Control) == Keys.Control && (e.KeyData & Keys.F) == Keys.F)
{
if (this.FindDialog == null)
{
this.FindDialog = new FrmFindDialog(this.tboxLog);
this.FindDialog.StartPosition = FormStartPosition.Manual;
this.FindDialog.Location = this.grid.PointToScreen(new Point(10, 10));
this.FindDialog.FormClosed += (object sender1, FormClosedEventArgs e1) => { this.FindDialog = null; };
this.FindDialog.FInd += (object sender1, EventArgs e1) => { };
this.FindDialog.Show();
}
else
{
this.FindDialog.Activate();
}
this.FindDialog.SelectedText = this.tboxLog.SelectedText;
}
}
private void LviewFiles_Click(object sender, EventArgs e)
{
try
{
if (this.lviewFiles.Items.Count < 1) return;
if (this.lviewFiles.SelectedItems.Count < 1) return;
int index = -1;
index = this.lviewFiles.SelectedItems[0].Index;
this.tboxFilename.Text = this.lviewFiles.Items[index].Tag as string;
if (string.IsNullOrEmpty(this.tboxFilename.Text) == false && this.tboxFilename.Text.Length > 6)
{
this.tboxFilename.SelectionStart = this.tboxFilename.Text.Length - 6;
this.tboxFilename.SelectionLength = 2;
this.tboxFilename.Focus();
}
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
private void LviewFiles_ColumnClick(object sender, ColumnClickEventArgs e)
{
try
{
System.Windows.Forms.SortOrder sorting = System.Windows.Forms.SortOrder.None;
switch (this.lviewFiles.Sorting)
{
case System.Windows.Forms.SortOrder.None:
sorting = System.Windows.Forms.SortOrder.Ascending;
break;
case System.Windows.Forms.SortOrder.Ascending:
sorting = System.Windows.Forms.SortOrder.Descending;
break;
case System.Windows.Forms.SortOrder.Descending:
sorting = System.Windows.Forms.SortOrder.None;
break;
}
this.lviewFiles.Sorting = sorting;
this.lviewFiles.ListViewItemSorter = new ListViewItemComparer(e.Column, this.lviewFiles.Sorting);
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
private void LviewFiles_Resize(object sender, EventArgs e)
{
int width = this.lviewFiles.Width - 32;
int headerWidth = width / this.lviewFiles.Columns.Count;
foreach (ColumnHeader header in this.lviewFiles.Columns)
header.Width = headerWidth;
}
private void TboxFilename_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.Enter)
this.BtnFileAdd_Click(this.btnFileAdd, new EventArgs());
}
private void BtnFileAdd_Click(object sender, EventArgs e)
{
try
{
ListViewItem lviewItem = this.lviewFiles.Items.Add(Path.GetFileName(this.tboxFilename.Text));
lviewItem.Checked = true;
lviewItem.Tag = this.tboxFilename.Text;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
private void BtnFileRemove_Click(object sender, EventArgs e)
{
try
{
if (this.lviewFiles.SelectedItems.Count <= 0) return;
this.lviewFiles.SelectedItems[0].Remove();
this.tboxFilename.Text = string.Empty;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
private void BtnFileClear_Click(object sender, EventArgs e)
{
this.Text = $"{this.WindowText} - Ver. {Application.ProductVersion}";
this.lviewFiles.Items.Clear();
this.tboxLog.Clear();
this.tboxException.Clear();
this.grid.DataSource = null;
}
private void BtnParsing_Click(object sender, EventArgs e)
{
try
{
this.Cursor = Cursors.WaitCursor;
this.Parsing();
if (this.chkFilterLinktest.Checked)
this.grid.AutoBinding(this.Collection.Where(item => item.Column1 != "LINKTEST").ToArray());
else
this.grid.AutoBinding(this.Collection.ToArray());
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
finally
{
this.Cursor = Cursors.Default;
}
}
private void BtnEqpSelector_Click(object sender, EventArgs e)
{
try
{
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
}
}
private void BtnClearFilter_Click(object sender, EventArgs e)
{
this.grid.MasterTemplate.FilterDescriptors.Clear();
}
private void BtnColumnResize_Click(object sender, EventArgs e)
{
this.grid.BestFitColumns(BestFitColumnMode.DisplayedCells);
}
private void BtnOpenOriginal_Click(object sender, EventArgs e)
{
try
{
List<string> lstFileName = new List<string>();
// Process Unit: File
foreach (ListViewItem lviewItem in this.lviewFiles.Items)
{
if (lviewItem.Checked == false) continue;
XLogger.Instance.Info(lviewItem.Text);
string sourceFileName = lviewItem.Tag as string;
string destPath = DownloadPath;
if (System.IO.Directory.Exists(destPath) == false) System.IO.Directory.CreateDirectory(destPath);
string destFileName = $@"{destPath}\{System.IO.Path.GetFileName(sourceFileName)}";
if (this.chkDownload.Checked == false) System.IO.File.Copy(sourceFileName, destFileName, true);
sourceFileName = destFileName;
lstFileName.Add(sourceFileName);
} // Process Unit: File
foreach (string filename in lstFileName)
Process.Start(filename);
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
private void BtnSecsDefine_Click(object sender, EventArgs e)
{
FrmSecsDefine frm = new FrmSecsDefine(this.Parser.SECSDefine);
frm.StartPosition = FormStartPosition.Manual;
int x = this.Location.X + this.Width - frm.Width - 32;
int y = this.Location.Y + 32;
frm.Location = new Point(x, y);
frm.Text = this.tboxEqModelID.Text;
frm.Show(this);
}
private void BtnOpenWorkFlow_Click(object sender, EventArgs e)
{
try
{
FrmWorkFlow dlg = new FrmWorkFlow();
//dlg.Owner = this;
dlg.Size = this.Size;
dlg.Location = this.Location;
dlg.StartPosition = FormStartPosition.Manual;
//dlg.StartPosition = FormStartPosition.CenterParent;
dlg.Text = this.tboxEqModelID.Text;
dlg.Show();
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
private void TboxLineNumber_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.Enter)
this.BtnGoLineNumber_Click(this.btnGoLineNumber, new EventArgs());
}
private void BtnGoLineNumber_Click(object sender, EventArgs e)
{
this.Cursor = Cursors.WaitCursor;
try
{
int lineNumber = -1;
int.TryParse(this.tboxLineNumber.Text, out lineNumber);
foreach (GridViewRowInfo row in this.grid.Rows)
{
try
{
StandardData standardData = row.DataBoundItem as StandardData;
if (standardData == null) continue;
if (lineNumber <= standardData.LineNumber)
{
row.IsSelected = true;
row.IsCurrent = true;
break;
}
}
catch (Exception ex)
{
XLogger.Instance.Debug(ex);
}
}
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
finally
{
this.Cursor = Cursors.Default;
}
}
#endregion
#region [ Grid ] ------------------------------------------------------
private void RadGrid_Setting()
{
this.grid.MultiSelect = true;
this.grid.Columns.Clear();
//this.grid.AddColumn("LineNumber");
this.grid.AddColumn("DateTime");
this.grid.AddColumn("Level");
this.grid.AddColumn("Server");
this.grid.AddColumn("Service");
this.grid.AddColumn("Type");
this.grid.AddColumn("MessageName");
this.grid.AddColumn("Return");
this.grid.AddColumn("Value");
this.grid.AddColumn("EquipmentID");
this.grid.AddColumn("PortID", "VEHICLEID");
this.grid.AddColumn("CarrierID");
this.grid.AddColumn("LotID");
this.grid.AddColumn("HostPanelID", "SourcePort");
this.grid.AddColumn("PanelID", "DestPort");
this.grid.AddColumn("PanelQty");
this.grid.AddColumn("TID");
this.grid.AddColumn("SystemByte");
this.grid.AddColumn("Column1", "CommandID");
this.grid.AddColumn("Column2", "WayPoint");
this.grid.AddColumn("Column3");
this.grid.AddColumn("Column4");
this.grid.AddColumn("Column5");
}
private void RadGrid_KeyUp(object sender, KeyEventArgs e)
{
this.RadGridControlKey = e.Control;
}
private void RadGrid_KeyDown(object sender, KeyEventArgs e)
{
this.RadGridControlKey = e.Control;
}
private void RadGrid_CellClick(object sender, GridViewCellEventArgs e)
{
try
{
RadGridView rgrid = sender as RadGridView;
if (rgrid == null) rgrid = this.grid;
if (this.RadGridControlKey == false) return;
foreach (GridViewDataColumn column in rgrid.Columns)
{
foreach (BaseFormattingObject obj in column.ConditionalFormattingObjectList)
{
if (new string[] { "Marking" }.Contains(obj.Name))
{
ExpressionFormattingObject formatting = obj as ExpressionFormattingObject;
formatting.Expression += $" AND {e.Column.Name} = '{e.Value}'";
}
}
}
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
private void RadGrid_CellDoubleClick(object sender, GridViewCellEventArgs e)
{
try
{
RadGridView rgrid = sender as RadGridView;
if (rgrid == null) rgrid = this.grid;
// RowHeader.DoubleClick
if (e.ColumnIndex == -1)
{
StandardData standardData = e.Row.DataBoundItem as StandardData;
if (standardData != null)
{
this.tboxLineNumber.Text = standardData.LineNumber.ToString();
this.tboxLineNumber.Tag = e.Row;
}
return;
}
List<BaseFormattingObject> lstFormat = new List<BaseFormattingObject>();
foreach (GridViewDataColumn column in rgrid.Columns)
{
lstFormat.Clear();
foreach (BaseFormattingObject obj in column.ConditionalFormattingObjectList)
{
if (new string[] { "Level_Error", "Type_Error", "Server_Error", "Return_1" }.Contains(obj.Name)) continue;
lstFormat.Add(obj);
}
foreach (BaseFormattingObject obj in lstFormat)
column.ConditionalFormattingObjectList.Remove(obj);
}
var value = e.Value;
//DateTime column Convert
if (e.Value.GetType() == typeof(DateTime))
{
var tempData = (DateTime)e.Value;
value = tempData.ToString("yyyy-MM-dd HH:mm:ss.fff");
}
ExpressionFormattingObject formatting = new ExpressionFormattingObject($"Marking", $"{e.Column.Name} = '{value}'", true);
formatting.RowBackColor = Color.FromArgb(128, 0, 255, 0);
rgrid.Columns[e.Column.Name].ConditionalFormattingObjectList.Add(formatting);
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
private void RadGrid_ViewCellFormatting(object sender, CellFormattingEventArgs e)
{
if (e.CellElement is GridRowHeaderCellElement && e.Row is GridViewDataRowInfo)
{
#if ROW_INDEX
GridDataView dataView = this.grid.MasterTemplate.DataView as GridDataView;
e.CellElement.Text = (dataView.Indexer.Items.IndexOf(e.Row) + 1).ToString();
#else
StandardData standardData = e.Row.DataBoundItem as StandardData;
e.CellElement.Text = (standardData != null ? standardData.LineNumber.ToString() : "");
#endif
//e.CellElement.TextImageRelation = TextImageRelation.ImageBeforeText;
}
else
{
e.CellElement.ResetValue(LightVisualElement.TextImageRelationProperty, Telerik.WinControls.ValueResetFlags.Local);
}
}
private void RadGrid_DataBindingComplete(object sender, GridViewBindingCompleteEventArgs e)
{
RadGridView rgrid = sender as RadGridView;
if (rgrid == null) return;
if (rgrid.Columns.Contains("LineNumber")) rgrid.Columns["LineNumber"].IsVisible = false;
if (rgrid.Columns.Contains("DateTime")) rgrid.Columns["DateTime"].FormatString = "{0:yyyy-MM-dd HH:mm:ss.fff}";
if (rgrid.Columns.Contains("Body")) rgrid.Columns["Body"].IsVisible = false;
if (rgrid.Columns.Contains("Level"))
{
rgrid.Columns["Level"].TextAlignment = ContentAlignment.MiddleCenter;
ExpressionFormattingObject formatting = new ExpressionFormattingObject($"Level_Error", "Level='ERROR'", true);
formatting.RowBackColor = Color.FromArgb(128, 255, 0, 0);
rgrid.Columns["Level"].ConditionalFormattingObjectList.Add(formatting);
}
if (rgrid.Columns.Contains("Type"))
{
ExpressionFormattingObject formatting = new ExpressionFormattingObject($"Type_Error", "Server<>'TID' and Type='ERROR'", true);
formatting.RowBackColor = Color.FromArgb(128, 255, 0, 0);
rgrid.Columns["Type"].ConditionalFormattingObjectList.Add(formatting);
}
if (rgrid.Columns.Contains("Return"))
{
rgrid.Columns["Return"].TextAlignment = ContentAlignment.MiddleCenter;
ExpressionFormattingObject formatting = new ExpressionFormattingObject($"Return_1", "Return<>0", true);
formatting.RowBackColor = Color.FromArgb(128, 255, 0, 0);
rgrid.Columns["Return"].ConditionalFormattingObjectList.Add(formatting);
}
rgrid.BestFitColumns(BestFitColumnMode.DisplayedCells);
}
private void RadGrid_SelectionChanged(object sender, EventArgs e)
{
try
{
this.Cursor = Cursors.WaitCursor;
RadGridView rgrid = sender as RadGridView;
if (rgrid == null) return;
if (rgrid.SelectedRows.Count < 1) return;
StandardData data = rgrid.SelectedRows.FirstOrDefault().DataBoundItem as StandardData;
if (data == null) return;
int dataLineNumber = data.LineNumber - 1;
int startLineNumber = dataLineNumber - 10;
int bottomLineNumber = dataLineNumber + 100;
int dataIndex = this.tboxLog.Text.IndexOf($"{data.LineNumber.ToString("000000")}:");
int difference = dataIndex - this.tboxLog.GetFirstCharIndexFromLine(dataLineNumber);
this.tboxLog.SuspendLayout();
if (bottomLineNumber >= this.tboxLog.Lines.Length) bottomLineNumber = this.tboxLog.Lines.Length - 1;
this.tboxLog.SelectionStart = this.tboxLog.GetFirstCharIndexFromLine(bottomLineNumber) + difference;
this.tboxLog.ScrollToCaret();
if (startLineNumber < 0) startLineNumber = 0;
this.tboxLog.SelectionStart = this.tboxLog.GetFirstCharIndexFromLine(startLineNumber) + difference;
this.tboxLog.ScrollToCaret();
this.tboxLog.SelectionStart = this.tboxLog.GetFirstCharIndexFromLine(dataLineNumber) + difference;
this.tboxLog.SelectionLength = 6;
this.tboxLog.ScrollToCaret();
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
finally
{
this.tboxLog.ResumeLayout();
this.Cursor = Cursors.Default;
}
}
#endregion
#region [ Method ] ----------------------------------------------------
private StandardCollection Parsing()
{
try
{
this.tboxLog.Clear();
this.Collection.Clear();
List<string> lstFileName = new List<string>();
string strTitle = string.Empty;
// Process Unit: File
foreach (ListViewItem lviewItem in this.lviewFiles.Items)
{
if (lviewItem.Checked == false) continue;
XLogger.Instance.Info(lviewItem.Text);
string sourceFileName = lviewItem.Tag as string;
if (this.chkDownload.Checked)
{
string destPath = DownloadPath;
if (System.IO.Directory.Exists(destPath) == false) System.IO.Directory.CreateDirectory(destPath);
if (string.IsNullOrEmpty(strTitle)) strTitle = System.IO.Path.GetFileNameWithoutExtension(sourceFileName);
string destFileName = $@"{destPath}\{System.IO.Path.GetFileName(sourceFileName)}";
System.IO.File.Copy(sourceFileName, destFileName, true);
sourceFileName = destFileName;
}
lstFileName.Add(sourceFileName);
} // Process Unit: File
this.Parser.ModelID = this.tboxEqModelID.Text;
this.Parser.SECSDefine = this.SECSDefine;
this.Parser.Parsing(lstFileName.ToArray());
this.Text = $"{strTitle} - Ver. {Application.ProductVersion}";
this.tboxLog.Text = this.Parser.LogString.ToString();
this.Collection.AddRange(this.Parser.StandardCollection);
return this.Collection;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
return this.Collection;
}
}
#endregion
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,247 @@
namespace DDUtilityApp.LOGPARSER
{
partial class FrmLogParser04
{
/// <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.radDock1 = new Telerik.WinControls.UI.Docking.RadDock();
this.documentContainer1 = new Telerik.WinControls.UI.Docking.DocumentContainer();
this.toolWindow1 = new Telerik.WinControls.UI.Docking.ToolWindow();
this.toolTabStrip1 = new Telerik.WinControls.UI.Docking.ToolTabStrip();
this.toolTop = new Telerik.WinControls.UI.Docking.ToolWindow();
this.toolWindow3 = new Telerik.WinControls.UI.Docking.ToolWindow();
this.documentWindow1 = new Telerik.WinControls.UI.Docking.DocumentWindow();
this.documentTabStrip1 = new Telerik.WinControls.UI.Docking.DocumentTabStrip();
this.toolTabStrip4 = new Telerik.WinControls.UI.Docking.ToolTabStrip();
this.toolTabStrip3 = new Telerik.WinControls.UI.Docking.ToolTabStrip();
this.radSplitContainer3 = new Telerik.WinControls.UI.RadSplitContainer();
((System.ComponentModel.ISupportInitialize)(this.radDock1)).BeginInit();
this.radDock1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.documentContainer1)).BeginInit();
this.documentContainer1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.toolTabStrip1)).BeginInit();
this.toolTabStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.documentTabStrip1)).BeginInit();
this.documentTabStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.toolTabStrip4)).BeginInit();
this.toolTabStrip4.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.toolTabStrip3)).BeginInit();
this.toolTabStrip3.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.radSplitContainer3)).BeginInit();
this.radSplitContainer3.SuspendLayout();
this.SuspendLayout();
//
// radDock1
//
this.radDock1.ActiveWindow = this.toolTop;
this.radDock1.Controls.Add(this.toolTabStrip3);
this.radDock1.Controls.Add(this.radSplitContainer3);
this.radDock1.Dock = System.Windows.Forms.DockStyle.Fill;
this.radDock1.Location = new System.Drawing.Point(3, 3);
this.radDock1.MainDocumentContainer = this.documentContainer1;
this.radDock1.Name = "radDock1";
this.radDock1.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
//
//
this.radDock1.RootElement.MinSize = new System.Drawing.Size(25, 25);
this.radDock1.Size = new System.Drawing.Size(1000, 715);
this.radDock1.TabIndex = 0;
this.radDock1.TabStop = false;
//
// documentContainer1
//
this.documentContainer1.Controls.Add(this.documentTabStrip1);
this.documentContainer1.Name = "documentContainer1";
//
//
//
this.documentContainer1.RootElement.MinSize = new System.Drawing.Size(25, 25);
this.documentContainer1.SizeInfo.AbsoluteSize = new System.Drawing.Size(439, 200);
this.documentContainer1.SizeInfo.SizeMode = Telerik.WinControls.UI.Docking.SplitPanelSizeMode.Fill;
this.documentContainer1.SizeInfo.SplitterCorrection = new System.Drawing.Size(-143, 0);
//
// toolWindow1
//
this.toolWindow1.Caption = null;
this.toolWindow1.Font = new System.Drawing.Font("굴림", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.toolWindow1.Location = new System.Drawing.Point(1, 24);
this.toolWindow1.Name = "toolWindow1";
this.toolWindow1.PreviousDockState = Telerik.WinControls.UI.Docking.DockState.Docked;
this.toolWindow1.Size = new System.Drawing.Size(341, 475);
this.toolWindow1.Text = "toolWindow1";
//
// toolTabStrip1
//
this.toolTabStrip1.CanUpdateChildIndex = true;
this.toolTabStrip1.Controls.Add(this.toolWindow1);
this.toolTabStrip1.Location = new System.Drawing.Point(0, 0);
this.toolTabStrip1.Name = "toolTabStrip1";
//
//
//
this.toolTabStrip1.RootElement.MinSize = new System.Drawing.Size(25, 25);
this.toolTabStrip1.SelectedIndex = 0;
this.toolTabStrip1.Size = new System.Drawing.Size(343, 501);
this.toolTabStrip1.SizeInfo.AbsoluteSize = new System.Drawing.Size(343, 200);
this.toolTabStrip1.SizeInfo.SplitterCorrection = new System.Drawing.Size(143, 0);
this.toolTabStrip1.TabIndex = 1;
this.toolTabStrip1.TabStop = false;
//
// toolTop
//
this.toolTop.Caption = null;
this.toolTop.Font = new System.Drawing.Font("굴림", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.toolTop.Location = new System.Drawing.Point(1, 24);
this.toolTop.Name = "toolTop";
this.toolTop.PreviousDockState = Telerik.WinControls.UI.Docking.DockState.Docked;
this.toolTop.Size = new System.Drawing.Size(988, 174);
this.toolTop.Text = "toolWindow2";
//
// toolWindow3
//
this.toolWindow3.Caption = null;
this.toolWindow3.Font = new System.Drawing.Font("굴림", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.toolWindow3.Location = new System.Drawing.Point(1, 24);
this.toolWindow3.Name = "toolWindow3";
this.toolWindow3.PreviousDockState = Telerik.WinControls.UI.Docking.DockState.Docked;
this.toolWindow3.Size = new System.Drawing.Size(198, 475);
this.toolWindow3.Text = "toolWindow3";
//
// documentWindow1
//
this.documentWindow1.Font = new System.Drawing.Font("굴림", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.documentWindow1.Location = new System.Drawing.Point(6, 29);
this.documentWindow1.Name = "documentWindow1";
this.documentWindow1.PreviousDockState = Telerik.WinControls.UI.Docking.DockState.TabbedDocument;
this.documentWindow1.Size = new System.Drawing.Size(427, 466);
this.documentWindow1.Text = "documentWindow1";
//
// documentTabStrip1
//
this.documentTabStrip1.CanUpdateChildIndex = true;
this.documentTabStrip1.Controls.Add(this.documentWindow1);
this.documentTabStrip1.Location = new System.Drawing.Point(0, 0);
this.documentTabStrip1.Name = "documentTabStrip1";
//
//
//
this.documentTabStrip1.RootElement.MinSize = new System.Drawing.Size(25, 25);
this.documentTabStrip1.SelectedIndex = 0;
this.documentTabStrip1.Size = new System.Drawing.Size(439, 501);
this.documentTabStrip1.TabIndex = 0;
this.documentTabStrip1.TabStop = false;
//
// toolTabStrip4
//
this.toolTabStrip4.CanUpdateChildIndex = true;
this.toolTabStrip4.Controls.Add(this.toolWindow3);
this.toolTabStrip4.Location = new System.Drawing.Point(790, 0);
this.toolTabStrip4.Name = "toolTabStrip4";
//
//
//
this.toolTabStrip4.RootElement.MinSize = new System.Drawing.Size(25, 25);
this.toolTabStrip4.SelectedIndex = 0;
this.toolTabStrip4.Size = new System.Drawing.Size(200, 501);
this.toolTabStrip4.TabIndex = 2;
this.toolTabStrip4.TabStop = false;
//
// toolTabStrip3
//
this.toolTabStrip3.CanUpdateChildIndex = true;
this.toolTabStrip3.Controls.Add(this.toolTop);
this.toolTabStrip3.Location = new System.Drawing.Point(5, 5);
this.toolTabStrip3.Name = "toolTabStrip3";
//
//
//
this.toolTabStrip3.RootElement.MinSize = new System.Drawing.Size(25, 25);
this.toolTabStrip3.SelectedIndex = 0;
this.toolTabStrip3.Size = new System.Drawing.Size(990, 200);
this.toolTabStrip3.TabIndex = 1;
this.toolTabStrip3.TabStop = false;
//
// radSplitContainer3
//
this.radSplitContainer3.Controls.Add(this.toolTabStrip1);
this.radSplitContainer3.Controls.Add(this.documentContainer1);
this.radSplitContainer3.Controls.Add(this.toolTabStrip4);
this.radSplitContainer3.IsCleanUpTarget = true;
this.radSplitContainer3.Location = new System.Drawing.Point(5, 209);
this.radSplitContainer3.Name = "radSplitContainer3";
this.radSplitContainer3.Padding = new System.Windows.Forms.Padding(5);
//
//
//
this.radSplitContainer3.RootElement.MinSize = new System.Drawing.Size(25, 25);
this.radSplitContainer3.Size = new System.Drawing.Size(990, 501);
this.radSplitContainer3.TabIndex = 0;
this.radSplitContainer3.TabStop = false;
//
// FrmLogParser04
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1006, 721);
this.Controls.Add(this.radDock1);
this.Name = "FrmLogParser04";
this.Padding = new System.Windows.Forms.Padding(3);
this.Text = "FrmLogParser04";
((System.ComponentModel.ISupportInitialize)(this.radDock1)).EndInit();
this.radDock1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.documentContainer1)).EndInit();
this.documentContainer1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.toolTabStrip1)).EndInit();
this.toolTabStrip1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.documentTabStrip1)).EndInit();
this.documentTabStrip1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.toolTabStrip4)).EndInit();
this.toolTabStrip4.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.toolTabStrip3)).EndInit();
this.toolTabStrip3.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.radSplitContainer3)).EndInit();
this.radSplitContainer3.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private Telerik.WinControls.UI.Docking.RadDock radDock1;
private Telerik.WinControls.UI.Docking.DocumentContainer documentContainer1;
private Telerik.WinControls.UI.Docking.ToolWindow toolTop;
private Telerik.WinControls.UI.Docking.ToolTabStrip toolTabStrip3;
private Telerik.WinControls.UI.RadSplitContainer radSplitContainer3;
private Telerik.WinControls.UI.Docking.ToolTabStrip toolTabStrip1;
private Telerik.WinControls.UI.Docking.ToolWindow toolWindow1;
private Telerik.WinControls.UI.Docking.DocumentTabStrip documentTabStrip1;
private Telerik.WinControls.UI.Docking.DocumentWindow documentWindow1;
private Telerik.WinControls.UI.Docking.ToolTabStrip toolTabStrip4;
private Telerik.WinControls.UI.Docking.ToolWindow toolWindow3;
}
}

View File

@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DDUtilityApp.LOGPARSER
{
public partial class FrmLogParser04 : Form
{
public FrmLogParser04()
{
InitializeComponent();
}
}
}

View 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>

View File

@@ -0,0 +1,198 @@
namespace DDUtilityApp.LOGPARSER
{
partial class FrmMessageReplyTime
{
/// <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()
{
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend();
System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
Telerik.WinControls.UI.TableViewDefinition tableViewDefinition1 = new Telerik.WinControls.UI.TableViewDefinition();
this.btnGenerate = new System.Windows.Forms.Button();
this.panel1 = new System.Windows.Forms.Panel();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.panel2 = new System.Windows.Forms.Panel();
this.button1 = new System.Windows.Forms.Button();
this.cboxMessageName = new System.Windows.Forms.ComboBox();
this.label1 = new System.Windows.Forms.Label();
this.chart = new System.Windows.Forms.DataVisualization.Charting.Chart();
this.grid = new JWH.CONTROL.GridViewEx();
this.panel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
this.panel2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.chart)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.grid)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.grid.MasterTemplate)).BeginInit();
this.SuspendLayout();
//
// btnGenerate
//
this.btnGenerate.Location = new System.Drawing.Point(12, 12);
this.btnGenerate.Name = "btnGenerate";
this.btnGenerate.Size = new System.Drawing.Size(113, 23);
this.btnGenerate.TabIndex = 0;
this.btnGenerate.Text = "DataGenerate";
this.btnGenerate.UseVisualStyleBackColor = true;
//
// panel1
//
this.panel1.Controls.Add(this.splitContainer1);
this.panel1.Controls.Add(this.panel2);
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(800, 450);
this.panel1.TabIndex = 1;
//
// splitContainer1
//
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.splitContainer1.Location = new System.Drawing.Point(0, 47);
this.splitContainer1.Name = "splitContainer1";
this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.BackColor = System.Drawing.SystemColors.ActiveCaption;
this.splitContainer1.Panel1.Controls.Add(this.chart);
this.splitContainer1.Panel1.Padding = new System.Windows.Forms.Padding(2);
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.grid);
this.splitContainer1.Size = new System.Drawing.Size(800, 403);
this.splitContainer1.SplitterDistance = 190;
this.splitContainer1.TabIndex = 2;
//
// panel2
//
this.panel2.Controls.Add(this.button1);
this.panel2.Controls.Add(this.cboxMessageName);
this.panel2.Controls.Add(this.label1);
this.panel2.Controls.Add(this.btnGenerate);
this.panel2.Dock = System.Windows.Forms.DockStyle.Top;
this.panel2.Location = new System.Drawing.Point(0, 0);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(800, 47);
this.panel2.TabIndex = 1;
//
// button1
//
this.button1.Location = new System.Drawing.Point(605, 12);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 4;
this.button1.Text = "button1";
this.button1.UseVisualStyleBackColor = true;
//
// cboxMessageName
//
this.cboxMessageName.FormattingEnabled = true;
this.cboxMessageName.Location = new System.Drawing.Point(299, 14);
this.cboxMessageName.Name = "cboxMessageName";
this.cboxMessageName.Size = new System.Drawing.Size(300, 20);
this.cboxMessageName.TabIndex = 3;
//
// label1
//
this.label1.Location = new System.Drawing.Point(166, 12);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(126, 23);
this.label1.TabIndex = 2;
this.label1.Text = "Message Name :";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// chart
//
chartArea1.Name = "ChartArea1";
this.chart.ChartAreas.Add(chartArea1);
this.chart.Dock = System.Windows.Forms.DockStyle.Fill;
legend1.Name = "Legend1";
this.chart.Legends.Add(legend1);
this.chart.Location = new System.Drawing.Point(2, 2);
this.chart.Name = "chart";
series1.ChartArea = "ChartArea1";
series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
series1.Legend = "Legend1";
series1.Name = "Series1";
series1.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.DateTime;
this.chart.Series.Add(series1);
this.chart.Size = new System.Drawing.Size(796, 186);
this.chart.TabIndex = 0;
this.chart.Text = "chart1";
//
// grid
//
this.grid.ColumnResizeKey = System.Windows.Forms.Keys.F6;
this.grid.Dock = System.Windows.Forms.DockStyle.Fill;
this.grid.Location = new System.Drawing.Point(0, 0);
//
//
//
this.grid.MasterTemplate.ViewDefinition = tableViewDefinition1;
this.grid.Name = "grid";
this.grid.Size = new System.Drawing.Size(800, 209);
this.grid.TabIndex = 0;
//
// FrmMessageReplyTime
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.panel1);
this.Name = "FrmMessageReplyTime";
this.Text = "FrmMessageReplyTime";
this.panel1.ResumeLayout(false);
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.chart)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.grid.MasterTemplate)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.grid)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Button btnGenerate;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.SplitContainer splitContainer1;
private JWH.CONTROL.GridViewEx grid;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.ComboBox cboxMessageName;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.DataVisualization.Charting.Chart chart;
}
}

View File

@@ -0,0 +1,275 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
using DDUtilityApp.LOGPARSER.DATA;
using JWH;
using JWH.DATA;
namespace DDUtilityApp.LOGPARSER
{
public partial class FrmMessageReplyTime : Form
{
#region [ Deleage ] ===================================================
#endregion
#region [ Events ] ====================================================
#endregion
#region [ Variables ] =================================================
#endregion
#region [ Properties ] ================================================
public StandardCollection StandardCollection { get; set; } = null;
public Dictionary<string, List<StandardDataPair>> MessageCollection { get; set; } = new Dictionary<string, List<StandardDataPair>>();
#endregion
#region [ Constructor ] ===============================================
public FrmMessageReplyTime()
{
InitializeComponent();
this.SetLayout();
this.SetEventHandler();
}
public FrmMessageReplyTime(StandardCollection standardCollection) : this()
{
this.StandardCollection = standardCollection;
}
private void SetLayout()
{
Font font = new Font("돋움체", 9);
this.cboxMessageName.Font = font;
this.RadGrid_Setting();
this.Chart_Setting();
}
private void SetEventHandler()
{
this.btnGenerate.Click += this.BtnGenerate_Click;
this.cboxMessageName.SelectedIndexChanged += this.CboxMessageName_SelectedIndexChanged;
this.button1.Click += this.Button1_Click;
}
#endregion
#region [ Control Events ] ============================================
private void BtnGenerate_Click(object sender, EventArgs e)
{
this.Generate();
List<string> lstMessage = new List<string>();
lstMessage.Add("");
lstMessage.AddRange(this.MessageCollection.Keys.ToArray());
lstMessage.Sort();
this.cboxMessageName.DataSource = lstMessage.ToArray();
this.cboxMessageName.SelectedIndex = 0;
}
private void Generate()
{
Dictionary<string, List<StandardDataPair>> dicSrc = new Dictionary<string, List<StandardDataPair>>();
try
{
this.MessageCollection.Clear();
string[] arrServer = new string[] { "MES", "FDC", "RMS", "RTD" };
foreach (StandardData data in this.StandardCollection)
{
if (arrServer.Contains(data.Server) == false) continue;
if (string.IsNullOrWhiteSpace(data.TID)) continue;
string key = data.MessageName.Replace("Reply", "");
if (dicSrc.ContainsKey(key) == false)
{
dicSrc.Add(key, new List<StandardDataPair>());
StandardDataPair pair = dicSrc[key].Where(x => x.TID == data.TID).FirstOrDefault();
if (pair == null) dicSrc[key].Add(new StandardDataPair(data));
else pair.Add(data);
}
else
{
StandardDataPair pair = dicSrc[key].Where(x => x.TID == data.TID).FirstOrDefault();
if (pair == null) dicSrc[key].Add(new StandardDataPair(data));
else pair.Add(data);
}
}
foreach (KeyValuePair<string, List<StandardDataPair>> srcPair in dicSrc)
{
string key = srcPair.Key;
foreach (StandardDataPair pair in srcPair.Value)
{
if (pair.Request == null || pair.Response == null) continue;
if (this.MessageCollection.ContainsKey(key) == false) MessageCollection.Add(key, new List<StandardDataPair>());
this.MessageCollection[key].Add(pair);
}
}
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
private void CboxMessageName_SelectedIndexChanged(object sender, EventArgs e)
{
this.chart.Series.Clear();
List<StandardDataPair> lst = new List<StandardDataPair>();
if (string.IsNullOrEmpty(this.cboxMessageName.Text))
{
foreach (KeyValuePair<string, List<StandardDataPair>> pair in this.MessageCollection)
{
lst.AddRange(pair.Value.ToArray());
this.Chart_AddSeries(pair.Key).Points.DataBind(pair.Value.ToArray(), "RequestTime", "Interval", "Label=Interval");
}
}
else
{
string key = this.cboxMessageName.Text;
if (this.MessageCollection.ContainsKey(key) == false) return;
lst.AddRange(this.MessageCollection[key].ToArray());
//this.Chart_AddSeries(this.cboxMessageName.Text);
this.Chart_AddSeries(key).Points.DataBind(this.MessageCollection[key].ToArray(), "RequestTime", "Interval", "Label=Interval");
}
this.grid.AutoBinding(lst.ToArray());
//this.chart.DataSource = lst.ToArray();
//this.chart.DataBindCrossTable(lst.ToArray(), "MessageName", "RequestTime", "Interval", "Label=MessageName");
}
private void Button1_Click(object sender, EventArgs e)
{
this.Chart_Setting();
//this.chart.Series.Clear();
//CartesianSeries series = this.chart.Series[0] as CartesianSeries;
//series.CombineMode = ChartSeriesCombineMode.None;
}
#endregion
#region [ Public Method ] =============================================
#endregion
#region [ Method ] ====================================================
private void RadGrid_Setting()
{
this.grid.MultiSelect = true;
this.grid.Columns.Clear();
this.grid.TableElement.RowHeight = 20;
this.grid.AddColumn("MessageName");
this.grid.AddColumn("RequestTime");
this.grid.AddColumn("ResponseTime");
this.grid.AddColumn("Interval", "", true, "{0:#,##0.000}");
}
private void Chart_Setting()
{
//this.chart.ChartAreas[0].AxisX.ScaleView.Zoom()
//ChartArea chartArea = new ChartArea();
//this.chart.ChartAreas.Add(chartArea);
//Legend legend = new Legend();
//this.chart.Legends.Add(legend);
}
private Series Chart_AddSeries(string name)
{
Series series = new Series();
series.Name = name;
series.LegendText = name;
series.ChartType = SeriesChartType.Line;
series.XValueType = ChartValueType.Time;
series.XValueMember = "RequestTime";
series.YValueType = ChartValueType.Double;
series.YValueMembers = "Interval";
this.chart.Series.Add(series);
return series;
}
#endregion
}
public class StandardDataPair : DataTableBase
{
public StandardData Request { get; set; } = null;
public StandardData Response { get; set;} = null;
public string MessageName { get; set; } = string.Empty;
public string TID { get; set; } = string.Empty;
public DateTime RequestTime { get { return (this.Request == null ? DateTime.MinValue : this.Request.DateTime); } }
public DateTime ResponseTime { get { return (this.Response == null ? DateTime.MinValue : this.Response.DateTime); } }
public double Interval { get { return this.GetInterval(); } }
public StandardDataPair() { }
public StandardDataPair(params StandardData[] datas)
{
foreach(StandardData data in datas)
this.Add(data);
}
public override string ToString()
{
return this.GetInterval().ToString();
}
public void Add(StandardData data)
{
if (data == null) return;
if (string.IsNullOrWhiteSpace(this.TID)) this.TID = data.TID;
else if (this.TID != data.TID) return;
if (data.MessageName.ToUpper().EndsWith("Reply".ToUpper())) this.Response = data;
else { this.Request = data; this.MessageName = data.MessageName; }
}
/// <summary>
/// 응답시간(초)
/// </summary>
/// <returns></returns>
public double GetInterval()
{
double interval = 0;
if (this.Request == null || this.Response == null) return interval;
TimeSpan timeSpan = this.Response.DateTime.Subtract(this.Request.DateTime);
interval = timeSpan.TotalSeconds;
return interval;
}
}
}

View 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>

View File

@@ -0,0 +1,309 @@
namespace DDUtilityApp.LOGPARSER
{
partial class FrmMessageReplyTime1
{
/// <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()
{
Telerik.WinControls.UI.CartesianArea cartesianArea1 = new Telerik.WinControls.UI.CartesianArea();
Telerik.WinControls.UI.TableViewDefinition tableViewDefinition1 = new Telerik.WinControls.UI.TableViewDefinition();
Telerik.WinControls.UI.TableViewDefinition tableViewDefinition2 = new Telerik.WinControls.UI.TableViewDefinition();
this.btnGenerate = new System.Windows.Forms.Button();
this.panel1 = new System.Windows.Forms.Panel();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.chart = new Telerik.WinControls.UI.RadChartView();
this.splitContainer2 = new System.Windows.Forms.SplitContainer();
this.grid = new JWH.CONTROL.GridViewEx();
this.gridAnalysis = new JWH.CONTROL.GridViewEx();
this.panel2 = new System.Windows.Forms.Panel();
this.label3 = new System.Windows.Forms.Label();
this.numTrimmedBegin = new System.Windows.Forms.NumericUpDown();
this.numTrimmedEnd = new System.Windows.Forms.NumericUpDown();
this.chkShowLabel = new System.Windows.Forms.CheckBox();
this.button1 = new System.Windows.Forms.Button();
this.cboxMessageName = new System.Windows.Forms.ComboBox();
this.label1 = new System.Windows.Forms.Label();
this.chkTrimmed = new System.Windows.Forms.CheckBox();
this.panel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.chart)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
this.splitContainer2.Panel1.SuspendLayout();
this.splitContainer2.Panel2.SuspendLayout();
this.splitContainer2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.grid)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.grid.MasterTemplate)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.gridAnalysis)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.gridAnalysis.MasterTemplate)).BeginInit();
this.panel2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.numTrimmedBegin)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numTrimmedEnd)).BeginInit();
this.SuspendLayout();
//
// btnGenerate
//
this.btnGenerate.Location = new System.Drawing.Point(12, 12);
this.btnGenerate.Name = "btnGenerate";
this.btnGenerate.Size = new System.Drawing.Size(113, 23);
this.btnGenerate.TabIndex = 0;
this.btnGenerate.Text = "Generate";
this.btnGenerate.UseVisualStyleBackColor = true;
//
// panel1
//
this.panel1.Controls.Add(this.splitContainer1);
this.panel1.Controls.Add(this.panel2);
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(800, 450);
this.panel1.TabIndex = 1;
//
// splitContainer1
//
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.splitContainer1.Location = new System.Drawing.Point(0, 76);
this.splitContainer1.Name = "splitContainer1";
this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.BackColor = System.Drawing.SystemColors.ActiveCaption;
this.splitContainer1.Panel1.Controls.Add(this.chart);
this.splitContainer1.Panel1.Padding = new System.Windows.Forms.Padding(2);
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.splitContainer2);
this.splitContainer1.Size = new System.Drawing.Size(800, 374);
this.splitContainer1.SplitterDistance = 190;
this.splitContainer1.TabIndex = 2;
//
// chart
//
cartesianArea1.ShowGrid = true;
this.chart.AreaDesign = cartesianArea1;
this.chart.Dock = System.Windows.Forms.DockStyle.Fill;
this.chart.Location = new System.Drawing.Point(2, 2);
this.chart.Name = "chart";
this.chart.SelectionMode = Telerik.WinControls.UI.ChartSelectionMode.SingleDataPoint;
this.chart.ShowLegend = true;
this.chart.ShowPanZoom = true;
this.chart.ShowToolTip = true;
this.chart.ShowTrackBall = true;
this.chart.Size = new System.Drawing.Size(796, 186);
this.chart.TabIndex = 0;
//
// splitContainer2
//
this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer2.Location = new System.Drawing.Point(0, 0);
this.splitContainer2.Name = "splitContainer2";
//
// splitContainer2.Panel1
//
this.splitContainer2.Panel1.Controls.Add(this.grid);
//
// splitContainer2.Panel2
//
this.splitContainer2.Panel2.Controls.Add(this.gridAnalysis);
this.splitContainer2.Size = new System.Drawing.Size(800, 180);
this.splitContainer2.SplitterDistance = 411;
this.splitContainer2.TabIndex = 1;
//
// grid
//
this.grid.ColumnResizeKey = System.Windows.Forms.Keys.F6;
this.grid.Dock = System.Windows.Forms.DockStyle.Fill;
this.grid.Location = new System.Drawing.Point(0, 0);
//
//
//
this.grid.MasterTemplate.ViewDefinition = tableViewDefinition1;
this.grid.Name = "grid";
this.grid.Size = new System.Drawing.Size(411, 180);
this.grid.TabIndex = 0;
//
// gridAnalysis
//
this.gridAnalysis.ColumnResizeKey = System.Windows.Forms.Keys.F6;
this.gridAnalysis.Dock = System.Windows.Forms.DockStyle.Fill;
this.gridAnalysis.Location = new System.Drawing.Point(0, 0);
//
//
//
this.gridAnalysis.MasterTemplate.ViewDefinition = tableViewDefinition2;
this.gridAnalysis.Name = "gridAnalysis";
this.gridAnalysis.Size = new System.Drawing.Size(385, 180);
this.gridAnalysis.TabIndex = 1;
//
// panel2
//
this.panel2.Controls.Add(this.chkTrimmed);
this.panel2.Controls.Add(this.label3);
this.panel2.Controls.Add(this.numTrimmedBegin);
this.panel2.Controls.Add(this.numTrimmedEnd);
this.panel2.Controls.Add(this.chkShowLabel);
this.panel2.Controls.Add(this.button1);
this.panel2.Controls.Add(this.cboxMessageName);
this.panel2.Controls.Add(this.label1);
this.panel2.Controls.Add(this.btnGenerate);
this.panel2.Dock = System.Windows.Forms.DockStyle.Top;
this.panel2.Location = new System.Drawing.Point(0, 0);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(800, 76);
this.panel2.TabIndex = 0;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(316, 18);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(14, 12);
this.label3.TabIndex = 8;
this.label3.Text = "~";
//
// numTrimmedBegin
//
this.numTrimmedBegin.Location = new System.Drawing.Point(255, 14);
this.numTrimmedBegin.Name = "numTrimmedBegin";
this.numTrimmedBegin.Size = new System.Drawing.Size(55, 21);
this.numTrimmedBegin.TabIndex = 7;
this.numTrimmedBegin.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// numTrimmedEnd
//
this.numTrimmedEnd.Location = new System.Drawing.Point(336, 14);
this.numTrimmedEnd.Name = "numTrimmedEnd";
this.numTrimmedEnd.Size = new System.Drawing.Size(55, 21);
this.numTrimmedEnd.TabIndex = 5;
this.numTrimmedEnd.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
this.numTrimmedEnd.Value = new decimal(new int[] {
80,
0,
0,
0});
//
// chkShowLabel
//
this.chkShowLabel.AutoSize = true;
this.chkShowLabel.Location = new System.Drawing.Point(451, 42);
this.chkShowLabel.Name = "chkShowLabel";
this.chkShowLabel.Size = new System.Drawing.Size(91, 16);
this.chkShowLabel.TabIndex = 1;
this.chkShowLabel.Text = "Show Label";
this.chkShowLabel.UseVisualStyleBackColor = true;
//
// button1
//
this.button1.Location = new System.Drawing.Point(397, 13);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 4;
this.button1.Text = "button1";
this.button1.UseVisualStyleBackColor = true;
//
// cboxMessageName
//
this.cboxMessageName.FormattingEnabled = true;
this.cboxMessageName.Location = new System.Drawing.Point(145, 40);
this.cboxMessageName.Name = "cboxMessageName";
this.cboxMessageName.Size = new System.Drawing.Size(300, 20);
this.cboxMessageName.TabIndex = 3;
//
// label1
//
this.label1.Location = new System.Drawing.Point(12, 39);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(127, 23);
this.label1.TabIndex = 2;
this.label1.Text = "Message Name :";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// chkTrimmed
//
this.chkTrimmed.AutoSize = true;
this.chkTrimmed.Location = new System.Drawing.Point(145, 16);
this.chkTrimmed.Name = "chkTrimmed";
this.chkTrimmed.Size = new System.Drawing.Size(104, 16);
this.chkTrimmed.TabIndex = 9;
this.chkTrimmed.Text = "절사평균(%) : ";
this.chkTrimmed.UseVisualStyleBackColor = true;
//
// FrmMessageReplyTime1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.panel1);
this.Name = "FrmMessageReplyTime1";
this.Text = "FrmMessageReplyTime";
this.panel1.ResumeLayout(false);
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.chart)).EndInit();
this.splitContainer2.Panel1.ResumeLayout(false);
this.splitContainer2.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
this.splitContainer2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.grid.MasterTemplate)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.grid)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.gridAnalysis.MasterTemplate)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.gridAnalysis)).EndInit();
this.panel2.ResumeLayout(false);
this.panel2.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.numTrimmedBegin)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.numTrimmedEnd)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Button btnGenerate;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.SplitContainer splitContainer1;
private JWH.CONTROL.GridViewEx grid;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.ComboBox cboxMessageName;
private System.Windows.Forms.Button button1;
private Telerik.WinControls.UI.RadChartView chart;
private System.Windows.Forms.CheckBox chkShowLabel;
private System.Windows.Forms.SplitContainer splitContainer2;
private JWH.CONTROL.GridViewEx gridAnalysis;
private System.Windows.Forms.NumericUpDown numTrimmedEnd;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.NumericUpDown numTrimmedBegin;
private System.Windows.Forms.CheckBox chkTrimmed;
}
}

View File

@@ -0,0 +1,579 @@
#define XDateTimeAxis
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using DDUtilityApp.LOGPARSER.DATA;
using JWH;
using JWH.DATA;
using Telerik.Charting;
using Telerik.WinControls.UI;
namespace DDUtilityApp.LOGPARSER
{
public partial class FrmMessageReplyTime1 : Form
{
#region [ Deleage ] ===================================================
#endregion
#region [ Events ] ====================================================
#endregion
#region [ Variables ] =================================================
private Dictionary<string, StandardDataAnalysis> AnalysisCollection = new Dictionary<string, StandardDataAnalysis>();
private CartesianAxis HorizontalAxis { get; set; } = null;
private LinearAxis VerticalAxis { get; set; } = null;
#endregion
#region [ Properties ] ================================================
public StandardCollection StandardCollection { get; set; } = null;
public Dictionary<string, List<StandardDataPair>> MessageCollection { get; set; } = new Dictionary<string, List<StandardDataPair>>();
public RadGridView GridView { get; set; } = null;
#endregion
#region [ Constructor ] ===============================================
public FrmMessageReplyTime1()
{
InitializeComponent();
this.SetLayout();
this.SetEventHandler();
}
public FrmMessageReplyTime1(StandardCollection standardCollection) : this()
{
this.StandardCollection = standardCollection;
}
private void SetLayout()
{
Font font = new Font("돋움체", 9);
this.cboxMessageName.Font = font;
this.Grid_Setting();
this.GridAnalysis_Setting();
this.Chart_Setting();
}
private void SetEventHandler()
{
this.btnGenerate.Click += this.BtnGenerate_Click;
this.chkTrimmed.CheckedChanged += this.ChkTrimmed_CheckedChanged;
this.button1.Click += this.Button1_Click;
this.cboxMessageName.SelectedIndexChanged += this.CboxMessageName_SelectedIndexChanged;
this.chkShowLabel.CheckedChanged += this.ChkShowLabel_CheckedChanged;
ChartTrackballController controller = new ChartTrackballController();
controller.TextNeeded += this.ChartTrackball_TextNeeded;
this.chart.Controllers.Add(controller);
this.grid.RowFormatting += this.Grid_RowFormatting;
this.grid.CellDoubleClick += this.Grid_CellDoubleClick;
this.gridAnalysis.RowFormatting += this.GridAnalysis_RowFormatting;
this.gridAnalysis.CellFormatting += this.GridAnalysis_CellFormatting;
}
#endregion
#region [ Control Events ] ============================================
private void BtnGenerate_Click(object sender, EventArgs e)
{
this.Generate();
}
private void ChkTrimmed_CheckedChanged(object sender, EventArgs e)
{
}
private void CboxMessageName_SelectedIndexChanged(object sender, EventArgs e)
{
this.chart.Series.Clear();
try
{
#region Grid Display
List<StandardDataPair> lst = new List<StandardDataPair>();
if (string.IsNullOrEmpty(this.cboxMessageName.Text))
{
foreach (KeyValuePair<string, List<StandardDataPair>> pair in this.MessageCollection)
{
lst.AddRange(pair.Value.ToArray());
this.Chart_AddSeries(pair.Key, pair.Value.ToArray());
}
}
else
{
string key = this.cboxMessageName.Text;
if (this.MessageCollection.ContainsKey(key) == false) return;
lst.AddRange(this.MessageCollection[key].ToArray());
this.Chart_AddSeries(key, this.MessageCollection[key].ToArray());
}
this.grid.AutoBinding(lst.ToArray());
#endregion
#region Chart Display
if (lst.Count < 1) return;
if (this.chart.Series.Count < 1) return;
StandardDataPair min = lst[0];
StandardDataPair max = lst[0];
foreach (StandardDataPair pair in lst)
{
if (pair.RequestTime < min.RequestTime) min = pair;
if (pair.RequestTime > max.RequestTime) max = pair;
}
foreach (CartesianAxis item in this.chart.Axes)
{
if (item.GetType() == typeof(DateTimeContinuousAxis))
{
DateTimeContinuousAxis axis = item as DateTimeContinuousAxis;
//datetimeAxis.PlotMode = AxisPlotMode.BetweenTicks;
//datetimeAxis.LabelFormat = "{0:d}";
axis.MajorStepUnit = TimeInterval.Hour;
axis.LabelFormatProvider = new DateTimeFormatProvider();
}
else if (item.GetType() == typeof(CategoricalAxis))
{
CategoricalAxis axis = item as CategoricalAxis;
if (lst.Count < 10) axis.MajorTickInterval = 1;
else axis.MajorTickInterval = (int)Math.Round(lst.Count / 10.0);
}
else if (item.GetType() == typeof(LinearAxis))
{
LinearAxis axis = item as LinearAxis;
}
}
#endregion
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
private void Button1_Click(object sender, EventArgs e)
{
}
private void ChkShowLabel_CheckedChanged(object sender, EventArgs e)
{
foreach (ChartSeries series in this.chart.Series)
series.ShowLabels = this.chkShowLabel.Checked;
}
private void ChartTrackball_TextNeeded(object sender, TextNeededEventArgs e)
{
StandardDataPair data = e.Points[0].DataPoint.DataItem as StandardDataPair;
if (data != null)
{
e.Text = $"{data.RequestTime}{Environment.NewLine}{data.MessageName} : {data.Interval}";
}
}
private void Grid_RowFormatting(object sender, RowFormattingEventArgs e)
{
StandardDataPair stdPair = e.RowElement.RowInfo.DataBoundItem as StandardDataPair;
if (stdPair == null) return;
if (this.AnalysisCollection.ContainsKey(stdPair.MessageName) == false) return;
StandardDataAnalysis stdAnalysis = this.AnalysisCollection[stdPair.MessageName];
if (stdAnalysis.CheckOver(stdPair)) e.RowElement.ForeColor = Color.Red;
else e.RowElement.ForeColor = SystemColors.ControlText;
}
private void Grid_CellDoubleClick(object sender, GridViewCellEventArgs e)
{
StandardDataPair pair = e.Row.DataBoundItem as StandardDataPair;
if (pair == null) return;
if (this.GridView == null) return;
RadGridView grid = this.GridView;
try
{
this.Cursor = Cursors.WaitCursor;
StandardData data = pair.Request;
if (e.Column.FieldName.ToUpper() == "RESPONSETIME") data = pair.Response;
int lineNumber = data.LineNumber;
foreach (GridViewRowInfo row in grid.Rows)
{
try
{
StandardData standardData = row.DataBoundItem as StandardData;
if (standardData == null) continue;
if (lineNumber <= standardData.LineNumber)
{
this.grid.Focus();
row.IsSelected = false;
row.IsCurrent = false;
row.IsSelected = true;
row.IsCurrent = true;
break;
}
}
catch (Exception ex)
{
XLogger.Instance.Debug(ex);
}
}
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
finally
{
this.Cursor = Cursors.Default;
}
}
private void GridAnalysis_RowFormatting(object sender, RowFormattingEventArgs e)
{
}
private void GridAnalysis_CellFormatting(object sender, CellFormattingEventArgs e)
{
string[] arrTrimmed = new string[] { "TrimmedMean", "TrimmedStdDeviation" };
string[] arrArithmetic = new string[] { "ArithmeticMean", "ArithmeticStdDeviation" };
if (this.chkTrimmed.Checked)
{
if (arrArithmetic.Contains(e.Column.FieldName)) e.CellElement.ForeColor = Color.LightGray;
else e.CellElement.ForeColor = SystemColors.ControlText;
}
else
{
if (arrTrimmed.Contains(e.Column.FieldName)) e.CellElement.ForeColor = Color.LightGray;
else e.CellElement.ForeColor = SystemColors.ControlText;
}
}
#endregion
#region [ Public Method ] =============================================
public void Generate()
{
this.DataGenerate();
this.DataAnalysis();
List<string> lstMessage = new List<string>();
lstMessage.Add("");
lstMessage.AddRange(this.MessageCollection.Keys.ToArray());
lstMessage.Sort();
this.cboxMessageName.DataSource = lstMessage.ToArray();
this.cboxMessageName.SelectedIndex = 0;
}
#endregion
#region [ Method ] ====================================================
private void DataGenerate()
{
Dictionary<string, List<StandardDataPair>> dicSrc = new Dictionary<string, List<StandardDataPair>>();
try
{
this.MessageCollection.Clear();
string[] arrServer = new string[] { "MES", "FDC", "RMS", "RTD" };
foreach (StandardData data in this.StandardCollection)
{
if (arrServer.Contains(data.Server) == false) continue;
if (string.IsNullOrWhiteSpace(data.TID)) continue;
string key = data.MessageName.Replace("Reply", "");
if (dicSrc.ContainsKey(key) == false)
{
dicSrc.Add(key, new List<StandardDataPair>());
StandardDataPair pair = dicSrc[key].Where(x => x.TID == data.TID).FirstOrDefault();
if (pair == null) dicSrc[key].Add(new StandardDataPair(data));
else pair.Add(data);
}
else
{
StandardDataPair pair = dicSrc[key].Where(x => x.TID == data.TID).FirstOrDefault();
if (pair == null) dicSrc[key].Add(new StandardDataPair(data));
else pair.Add(data);
}
}
foreach (KeyValuePair<string, List<StandardDataPair>> srcPair in dicSrc)
{
string key = srcPair.Key;
foreach (StandardDataPair pair in srcPair.Value)
{
if (pair.Request == null || pair.Response == null) continue;
if (this.MessageCollection.ContainsKey(key) == false) MessageCollection.Add(key, new List<StandardDataPair>());
this.MessageCollection[key].Add(pair);
}
}
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
private void DataAnalysis()
{
this.AnalysisCollection.Clear();
foreach (KeyValuePair<string, List<StandardDataPair>> item in this.MessageCollection)
{
if (this.AnalysisCollection.ContainsKey(item.Key) == false)
{
StandardDataAnalysis analysis = new StandardDataAnalysis(item.Key);
analysis.UseTrimmed = this.chkTrimmed.Checked;
analysis.TrimmedBegin = (double)this.numTrimmedBegin.Value;
analysis.TrimmedEnd = (double)this.numTrimmedEnd.Value;
this.AnalysisCollection.Add(item.Key, analysis);
}
this.AnalysisCollection[item.Key].AddRange(item.Value.ToArray());
}
this.gridAnalysis.AutoBinding(this.AnalysisCollection.Values.ToArray());
}
private void Grid_Setting()
{
this.grid.MultiSelect = true;
this.grid.Columns.Clear();
this.grid.TableElement.RowHeight = 20;
this.grid.AddColumn("MessageName");
this.grid.AddColumn("RequestTime");
this.grid.AddColumn("ResponseTime");
this.grid.AddColumn("Interval", "", true, "{0:#,##0.000}");
}
private void GridAnalysis_Setting()
{
this.gridAnalysis.MultiSelect = true;
this.gridAnalysis.Columns.Clear();
this.gridAnalysis.TableElement.RowHeight = 20;
this.gridAnalysis.AddColumn("MessageName");
this.gridAnalysis.AddColumn("Count");
this.gridAnalysis.AddColumn("Min", "", true, "{0:#,##0.000}");
this.gridAnalysis.AddColumn("Max", "", true, "{0:#,##0.000}");
this.gridAnalysis.AddColumn("TrimmedMean", "절사평균", true, "{0:#,##0.000}");
this.gridAnalysis.AddColumn("TrimmedStdDeviation", "절사편차", true, "{0:#,##0.000}");
this.gridAnalysis.AddColumn("ArithmeticMean", "산술평균", true, "{0:#,##0.000}");
this.gridAnalysis.AddColumn("ArithmeticStdDeviation", "산술편차", true, "{0:#,##0.000}");
}
private void Chart_Setting()
{
this.chart.ShowGrid = true;
this.chart.ShowLegend = true;
#if DateTimeAxis
this.HorizontalAxis = new DateTimeContinuousAxis()
{
MajorStepUnit = TimeInterval.Hour,
LabelFormatProvider = new DateTimeFormatProvider()
};
this.VerticalAxis = new LinearAxis()
{
};
#else
this.HorizontalAxis = new CategoricalAxis()
{
};
this.VerticalAxis = new LinearAxis()
{
};
#endif
}
private ChartSeries Chart_AddSeries(string name, StandardDataPair[] values)
{
LineSeries series = new LineSeries();
series.Name = name;
//series.HorizontalAxis = this.HorizontalAxis;
//series.VerticalAxis = this.VerticalAxis;
series.PointSize = new SizeF(3, 3);
series.BorderWidth = 2;
series.CategoryMember = "RequestTime";
series.ValueMember = "Interval";
series.ShowLabels = this.chkShowLabel.Checked;
series.Spline = true;
series.CombineMode = ChartSeriesCombineMode.Stack;
series.DataSource = values;
this.chart.Series.Add(series);
return series;
}
#endregion
}
public class DateTimeFormatProvider : IFormatProvider, ICustomFormatter
{
public object GetFormat(Type formatType)
{
return this;
}
public string Format(string format, object arg, IFormatProvider formatProvider)
{
DateTime val = (DateTime)arg;
return val.ToString("HH:mm:ss");
}
}
public class StandardDataAnalysis : DataTableBase
{
/// <summary>MessageName</summary>
public string MessageName { get; set; } = string.Empty;
public int Count { get { return this.Collection.Count; } }
public bool UseTrimmed { get; set; } = false;
public double Min { get; set; } = -1;
public double Max { get; set; } = -1;
/// <summary>산술평균</summary>
public double ArithmeticMean { get; set; } = 0;
/// <summary>산술평균>표준편차</summary>
public double ArithmeticStdDeviation { get; set; } = 0;
/// <summary>절사평균</summary>
public double TrimmedMean { get; set; } = 0;
/// <summary>절사평균>표준편차</summary>
public double TrimmedStdDeviation { get; set; } = 0;
/// <summary>절사평균 범위</summary>
public double TrimmedBegin { get; set; } = 0;
/// <summary>절사평균 범위</summary>
public double TrimmedEnd { get; set; } = 80;
private List<StandardDataPair> Collection { get; set; } = new List<StandardDataPair>();
public StandardDataAnalysis() { }
public StandardDataAnalysis(string name, params StandardDataPair[] value)
{
this.MessageName = name;
this.Collection.AddRange(value);
if (value.Length > 0) this.Calculation();
}
public void AddRange(params StandardDataPair[] values)
{
this.Collection.AddRange(values);
this.Calculation();
}
private void Calculation()
{
double sum = 0;
double average = 0;
#region
sum = 0;
int trimStartIndex = (int)(this.Collection.Count * (this.TrimmedBegin / 100));
int trimEndIndex = (int)(this.Collection.Count * (this.TrimmedEnd / 100));
int trimCount = 0;
int trimIndex = -1;
foreach (StandardDataPair item in this.Collection.OrderBy(item => item.Interval))
{
trimIndex++;
if (trimIndex < trimStartIndex) continue;
if (trimIndex > trimEndIndex) break;
sum += item.Interval;
trimCount++;
}
average = sum / trimCount;
this.TrimmedMean = average;
#endregion
#region
sum = 0;
double min = -1;
double max = -1;
foreach (StandardDataPair item in this.Collection)
{
sum += item.Interval;
if (item.Interval < min || min == -1) min = item.Interval;
if (item.Interval > max || max == -1) max = item.Interval;
}
average = sum / this.Collection.Count;
this.Min = min; this.Max = max;
this.ArithmeticMean = average;
#endregion
double deviation = 0;
double sumTrimVariance = 0;
double sumArithmeticVariance = 0;
double variance = 0;
foreach (StandardDataPair item in this.Collection)
{
deviation = item.Interval - this.TrimmedMean; // 절사평균 편차
sumTrimVariance += Math.Pow(deviation, 2);
deviation = item.Interval - this.ArithmeticMean; // 산술평균 편차
sumArithmeticVariance += Math.Pow(deviation, 2);
}
variance = sumTrimVariance / this.Collection.Count; // 절사평균 분산
this.TrimmedStdDeviation = Math.Sqrt(variance); // 절사평균 표준편차
variance = sumArithmeticVariance / this.Collection.Count; // 산술평균 분산
this.ArithmeticStdDeviation = Math.Sqrt(variance); // 산술평균 표준편차
}
public bool CheckOver(StandardDataPair pair)
{
double average = 0;
if (this.UseTrimmed) average = this.ArithmeticMean; else average = this.TrimmedMean;
double min = average - (this.ArithmeticStdDeviation / 2);
double max = average + (this.ArithmeticStdDeviation / 2);
if (pair.Interval > max) return true;
return false;
}
}
}

View 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>

View File

@@ -0,0 +1,75 @@
namespace DDUtilityApp.LOGPARSER
{
partial class FrmSecsDefine
{
/// <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.panel1 = new System.Windows.Forms.Panel();
this.tboxMessage = new System.Windows.Forms.TextBox();
this.panel1.SuspendLayout();
this.SuspendLayout();
//
// panel1
//
this.panel1.Controls.Add(this.tboxMessage);
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Name = "panel1";
this.panel1.Padding = new System.Windows.Forms.Padding(3);
this.panel1.Size = new System.Drawing.Size(617, 683);
this.panel1.TabIndex = 0;
//
// tboxMessage
//
this.tboxMessage.Dock = System.Windows.Forms.DockStyle.Fill;
this.tboxMessage.Location = new System.Drawing.Point(3, 3);
this.tboxMessage.Multiline = true;
this.tboxMessage.Name = "tboxMessage";
this.tboxMessage.ScrollBars = System.Windows.Forms.ScrollBars.Both;
this.tboxMessage.Size = new System.Drawing.Size(611, 677);
this.tboxMessage.TabIndex = 0;
//
// FrmSecsDefine
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(617, 683);
this.Controls.Add(this.panel1);
this.Name = "FrmSecsDefine";
this.Text = "FrmSecsDefine";
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.TextBox tboxMessage;
}
}

View File

@@ -0,0 +1,61 @@
using DDUtilityApp.SECS;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DDUtilityApp.LOGPARSER
{
public partial class FrmSecsDefine : Form
{
public SECSDefine SECSDefine { get; set; }
public FrmSecsDefine()
{
InitializeComponent();
this.SetLayout();
this.SetEventHandler();
}
public FrmSecsDefine(SECSDefine secsDefine) : this()
{
this.SECSDefine = secsDefine;
this.SetMessage();
}
protected void SetLayout()
{
this.tboxMessage.Font = new Font("돋움체", 9.0F);
this.tboxMessage.WordWrap = false;
}
protected void SetEventHandler()
{
}
private void SetMessage()
{
if (this.SECSDefine == null) return;
StringBuilder sb = new StringBuilder();
foreach (CEID ceid in this.SECSDefine.CeidCollection.OrderBy(item => int.Parse(item.ID)))
{
sb.AppendLine(ceid.ToXml());
sb.AppendLine();
}
this.tboxMessage.Text = sb.ToString();
this.tboxMessage.SelectionStart = 0;
}
}
}

View 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>

View File

@@ -0,0 +1,267 @@
namespace DDUtilityApp.LOGPARSER
{
partial class FrmWorkFlow
{
/// <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()
{
Telerik.WinControls.UI.TableViewDefinition tableViewDefinition1 = new Telerik.WinControls.UI.TableViewDefinition();
this.panel1 = new System.Windows.Forms.Panel();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.splitContainer2 = new System.Windows.Forms.SplitContainer();
this.panel4 = new System.Windows.Forms.Panel();
this.btnSelectFolder = new System.Windows.Forms.Button();
this.tboxLocalPath = new System.Windows.Forms.TextBox();
this.rbtnLocal = new System.Windows.Forms.RadioButton();
this.rbtnRemote = new System.Windows.Forms.RadioButton();
this.panel2 = new System.Windows.Forms.Panel();
this.gridFile = new JWH.CONTROL.GridViewEx();
this.panel3 = new System.Windows.Forms.Panel();
this.tboxWorkflow = new System.Windows.Forms.TextBox();
this.btnOpenFolder = new System.Windows.Forms.Button();
this.panel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
this.splitContainer2.Panel1.SuspendLayout();
this.splitContainer2.Panel2.SuspendLayout();
this.splitContainer2.SuspendLayout();
this.panel4.SuspendLayout();
this.panel2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.gridFile)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.gridFile.MasterTemplate)).BeginInit();
this.panel3.SuspendLayout();
this.SuspendLayout();
//
// panel1
//
this.panel1.Controls.Add(this.splitContainer1);
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.panel1.Name = "panel1";
this.panel1.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.panel1.Size = new System.Drawing.Size(920, 470);
this.panel1.TabIndex = 0;
//
// splitContainer1
//
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.splitContainer1.Location = new System.Drawing.Point(3, 2);
this.splitContainer1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.splitContainer1.Name = "splitContainer1";
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.splitContainer2);
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.panel3);
this.splitContainer1.Size = new System.Drawing.Size(914, 466);
this.splitContainer1.SplitterDistance = 600;
this.splitContainer1.TabIndex = 0;
//
// splitContainer2
//
this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.splitContainer2.IsSplitterFixed = true;
this.splitContainer2.Location = new System.Drawing.Point(0, 0);
this.splitContainer2.Name = "splitContainer2";
this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer2.Panel1
//
this.splitContainer2.Panel1.Controls.Add(this.panel4);
//
// splitContainer2.Panel2
//
this.splitContainer2.Panel2.Controls.Add(this.panel2);
this.splitContainer2.Size = new System.Drawing.Size(600, 466);
this.splitContainer2.SplitterDistance = 63;
this.splitContainer2.TabIndex = 3;
//
// panel4
//
this.panel4.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel4.Controls.Add(this.btnOpenFolder);
this.panel4.Controls.Add(this.btnSelectFolder);
this.panel4.Controls.Add(this.tboxLocalPath);
this.panel4.Controls.Add(this.rbtnLocal);
this.panel4.Controls.Add(this.rbtnRemote);
this.panel4.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel4.Location = new System.Drawing.Point(0, 0);
this.panel4.Name = "panel4";
this.panel4.Size = new System.Drawing.Size(600, 63);
this.panel4.TabIndex = 2;
//
// btnOpen
//
this.btnSelectFolder.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnSelectFolder.Location = new System.Drawing.Point(560, 27);
this.btnSelectFolder.Name = "btnOpen";
this.btnSelectFolder.Size = new System.Drawing.Size(33, 23);
this.btnSelectFolder.TabIndex = 3;
this.btnSelectFolder.Text = "...";
this.btnSelectFolder.UseVisualStyleBackColor = true;
//
// tboxLocalPath
//
this.tboxLocalPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tboxLocalPath.Location = new System.Drawing.Point(89, 28);
this.tboxLocalPath.Name = "tboxLocalPath";
this.tboxLocalPath.Size = new System.Drawing.Size(467, 21);
this.tboxLocalPath.TabIndex = 2;
//
// rbtnLocal
//
this.rbtnLocal.AutoSize = true;
this.rbtnLocal.Location = new System.Drawing.Point(8, 31);
this.rbtnLocal.Name = "rbtnLocal";
this.rbtnLocal.Size = new System.Drawing.Size(54, 16);
this.rbtnLocal.TabIndex = 1;
this.rbtnLocal.Text = "Local";
this.rbtnLocal.UseVisualStyleBackColor = true;
//
// rbtnRemote
//
this.rbtnRemote.AutoSize = true;
this.rbtnRemote.Checked = true;
this.rbtnRemote.Location = new System.Drawing.Point(8, 9);
this.rbtnRemote.Name = "rbtnRemote";
this.rbtnRemote.Size = new System.Drawing.Size(66, 16);
this.rbtnRemote.TabIndex = 0;
this.rbtnRemote.TabStop = true;
this.rbtnRemote.Text = "Remote";
this.rbtnRemote.UseVisualStyleBackColor = true;
//
// panel2
//
this.panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel2.Controls.Add(this.gridFile);
this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel2.Location = new System.Drawing.Point(0, 0);
this.panel2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(600, 399);
this.panel2.TabIndex = 3;
//
// gridFile
//
this.gridFile.ColumnResizeKey = System.Windows.Forms.Keys.F6;
this.gridFile.Dock = System.Windows.Forms.DockStyle.Fill;
this.gridFile.Location = new System.Drawing.Point(0, 0);
this.gridFile.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
//
//
//
this.gridFile.MasterTemplate.ViewDefinition = tableViewDefinition1;
this.gridFile.Name = "gridFile";
this.gridFile.Size = new System.Drawing.Size(598, 397);
this.gridFile.TabIndex = 0;
//
// panel3
//
this.panel3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel3.Controls.Add(this.tboxWorkflow);
this.panel3.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel3.Location = new System.Drawing.Point(0, 0);
this.panel3.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.panel3.Name = "panel3";
this.panel3.Size = new System.Drawing.Size(310, 466);
this.panel3.TabIndex = 0;
//
// tboxWorkflow
//
this.tboxWorkflow.Dock = System.Windows.Forms.DockStyle.Fill;
this.tboxWorkflow.Location = new System.Drawing.Point(0, 0);
this.tboxWorkflow.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.tboxWorkflow.Multiline = true;
this.tboxWorkflow.Name = "tboxWorkflow";
this.tboxWorkflow.Size = new System.Drawing.Size(308, 464);
this.tboxWorkflow.TabIndex = 0;
//
// btnOpenFolder
//
this.btnOpenFolder.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnOpenFolder.Location = new System.Drawing.Point(486, 2);
this.btnOpenFolder.Name = "btnOpenFolder";
this.btnOpenFolder.Size = new System.Drawing.Size(107, 23);
this.btnOpenFolder.TabIndex = 4;
this.btnOpenFolder.Text = "Open Folder";
this.btnOpenFolder.UseVisualStyleBackColor = true;
//
// FrmWorkFlow
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(920, 470);
this.Controls.Add(this.panel1);
this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.Name = "FrmWorkFlow";
this.Text = "FrmWorkFlow";
this.panel1.ResumeLayout(false);
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.splitContainer2.Panel1.ResumeLayout(false);
this.splitContainer2.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
this.splitContainer2.ResumeLayout(false);
this.panel4.ResumeLayout(false);
this.panel4.PerformLayout();
this.panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.gridFile.MasterTemplate)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.gridFile)).EndInit();
this.panel3.ResumeLayout(false);
this.panel3.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.Panel panel3;
private System.Windows.Forms.TextBox tboxWorkflow;
private System.Windows.Forms.SplitContainer splitContainer2;
private System.Windows.Forms.Panel panel4;
private System.Windows.Forms.Button btnSelectFolder;
private System.Windows.Forms.TextBox tboxLocalPath;
private System.Windows.Forms.RadioButton rbtnLocal;
private System.Windows.Forms.RadioButton rbtnRemote;
private System.Windows.Forms.Panel panel2;
private JWH.CONTROL.GridViewEx gridFile;
private System.Windows.Forms.Button btnOpenFolder;
}
}

View File

@@ -0,0 +1,256 @@
using DDUtilityApp.DATA;
using DDUtilityApp.LOGPARSER.DATA;
using JWH;
using JWH.NETWORK;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Telerik.WinControls.UI;
namespace DDUtilityApp.LOGPARSER
{
public partial class FrmWorkFlow : Form
{
#region [ Properties ] ------------------------------------------------
public CompressInformation CompressInformation { get; set; } = null;
public EisEquipment Equipment { get; set; }
#endregion
#region [ FrmWorkFlow ] ------------------------------------------------
public FrmWorkFlow()
{
InitializeComponent();
this.SetLayout();
this.SetEventHandler();
}
protected void SetLayout()
{
this.AllowDrop = true;
if (GlobalVariable.Instance.WorkflowLocation == "Local") this.rbtnLocal.Checked = true;
else this.rbtnRemote.Checked = true;
this.tboxLocalPath.Text = GlobalVariable.Instance.WorkflowCompressPath;
this.tboxWorkflow.Font = new Font("돋움체", 9.0f);
this.tboxWorkflow.ScrollBars = ScrollBars.Both;
this.tboxWorkflow.WordWrap = false;
this.gridFile.TableElement.RowHeight = 20;
//this.gridFile.AddColumn("ModelID");
//this.gridFile.AddColumn("Version");
this.gridFile.AddColumn("ModuleName");
this.gridFile.AddColumn("Trigger");
this.gridFile.AddColumn("Workflow");
this.gridFile.AddColumn("Description");
//this.gridFile.AddColumn("GemSettingID");
}
protected void SetEventHandler()
{
this.DragDrop += Control_DragDrop;
this.DragEnter += Control_DragEnter;
this.Load += FrmWorkFlow_Load;
this.btnSelectFolder.Click += BtnSelectFolder_Click;
this.btnOpenFolder.Click += BtnOpenFolder_Click;
this.gridFile.CellDoubleClick += GridFile_CellDoubleClick;
this.gridFile.DataBindingComplete += GridFile_DataBindingComplete;
}
private void FrmWorkFlow_Load(object sender, EventArgs e)
{
this.SetWorkflowFiles();
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
switch (keyData)
{
case Keys.F6:
this.gridFile.BestFitColumns(Telerik.WinControls.UI.BestFitColumnMode.DisplayedCells);
break;
}
return base.ProcessCmdKey(ref msg, keyData);
}
#endregion
#region [ Control Events ] --------------------------------------------
private void Control_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy;
}
private void Control_DragDrop(object sender, DragEventArgs e)
{
XLogger.Instance.Info(e);
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
this.Download(files[0]);
}
private void BtnSelectFolder_Click(object sender, EventArgs e)
{
FolderBrowserDialog dlg = new FolderBrowserDialog();
dlg.SelectedPath = this.tboxLocalPath.Text;
if (dlg.ShowDialog() != DialogResult.OK) return;
this.tboxLocalPath.Text =$@"{dlg.SelectedPath}\";
}
private void BtnOpenFolder_Click(object sender, EventArgs e)
{
try
{
if (this.CompressInformation == null) return;
Process.Start(this.CompressInformation.ExtractPath);
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
private void GridFile_CellDoubleClick(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e)
{
try
{
this.tboxWorkflow.Clear();
if (this.CompressInformation == null) this.Download();
if (this.CompressInformation == null) return;
string fileName = e.Row.Cells[2].Value as string;
foreach (FileInfo fileInfo in this.CompressInformation.Files)
{
if (string.Compare(fileInfo.Name, fileName, true) == 0)
{
FileStream fileStream = fileInfo.OpenRead();
StreamReader reader = new StreamReader(fileStream);
this.tboxWorkflow.Text = reader.ReadToEnd();
reader.Close();
fileStream.Close();
}
}
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
private void GridFile_DataBindingComplete(object sender, GridViewBindingCompleteEventArgs e)
{
this.gridFile.BestFitColumns(BestFitColumnMode.DisplayedCells);
}
#endregion
#region [ Method ] ----------------------------------------------------
private void SetWorkflowFiles()
{
StringBuilder sb = new StringBuilder();
sb.AppendLine($"SELECT * ");
sb.AppendLine($"FROM WorkflowMapping ");
sb.AppendLine($"WHERE ModelID = '{this.Equipment.ModelID}' ");
sb.AppendLine($" AND Version = '{this.Equipment.RunningVersion}' ");
sb.AppendLine($" AND Workflow IS NOT NULL ");
sb.AppendLine($"ORDER BY ModuleName, 'Trigger', Workflow ");
DataSet ds = this.Equipment.Server.ExecuteQuery(sb.ToString());
this.gridFile.DataSource = ds.Tables[0];
this.gridFile.GroupDescriptors.Add(new GridGroupByExpression(this.gridFile.Columns[0]));
}
private void Download(string path = "")
{
try
{
this.Cursor = Cursors.WaitCursor;
string downFullName = $@"{GlobalVariable.Instance.WorkflowPath}{this.Equipment.ModelID}_{this.Equipment.RunningVersion}.Compress";
if (string.IsNullOrEmpty(path))
{
if (this.rbtnLocal.Checked)
{
path = $"{this.tboxLocalPath.Text}/{this.Equipment.ModelID}/{this.Equipment.RunningVersion}/ALL.COMPRESS";
System.IO.File.Copy(path, downFullName, true);
}
else
{
string uri = $"ftp://{this.Equipment.Server.FTPAddress}:{this.Equipment.Server.FTPPort}/";
string uid = this.Equipment.Server.FTPUserID;
string pwd = this.Equipment.Server.FTPPassword;
path = $"{this.Equipment.ModelID}/{this.Equipment.RunningVersion}";
FtpClient client = new FtpClient(uri, uid, pwd);
string[] lstName = client.GetList(path);
string fullName = string.Empty;
foreach (string name in lstName)
{
if (string.Compare(name, $"ALL.COMPRESS", true) == 0)
{
fullName = name;
break;
}
}
if (string.IsNullOrEmpty(fullName)) return;
bool result = client.Download($"{path}/ALL.COMPRESS", downFullName);
if (result == false) return;
}
}
else
{
downFullName = $@"{GlobalVariable.Instance.WorkflowPath}{System.IO.Path.GetFileName(path)}";
System.IO.File.Copy(path, downFullName, true);
}
this.CompressInformation = new CompressInformation(downFullName);
if (this.rbtnLocal.Checked)
{
GlobalVariable.Instance.WorkflowLocation = "Local";
if (!string.IsNullOrEmpty(this.tboxLocalPath.Text)) GlobalVariable.Instance.WorkflowCompressPath = this.tboxLocalPath.Text;
}
else
{
GlobalVariable.Instance.WorkflowLocation = "Remote";
}
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
}
finally
{
this.Cursor = Cursors.Default;
}
}
#endregion
}
}

View 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>

View File

@@ -0,0 +1,140 @@
using DDUtilityApp.SECS;
using JWH;
using System;
using System.Collections.Generic;
using System.Xml;
namespace DDUtilityApp.LOGPARSER
{
public class GemSetting
{
public string ModelName { get; protected set; } = "COMMON";
public Dictionary<string, CEID> CeidDictionary = new Dictionary<string, CEID>();
public Dictionary<string, RPT> RptDictionary = new Dictionary<string, RPT>();
public Dictionary<string, SECSDefine> EquipmentModelDictionary = new Dictionary<string, SECSDefine>();
public GemSetting(string filename, string modelName = "COMMON")
{
this.Load(filename);
this.SetModelName(modelName);
}
public void Load(string filename)
{
XmlDocument document = null;
try
{
if (string.IsNullOrEmpty(filename)) return;
document = new XmlDocument();
document.Load(filename);
foreach (XmlNode child in document.ChildNodes[0])
{
if (string.Compare(child.Name, "MODEL", true) == 0)
{
string modelName = child.Attributes["NAME"].Value;
if (string.IsNullOrEmpty(modelName)) continue;
SECSDefine eqModel = new SECSDefine(child);
this.EquipmentModelDictionary.Add(modelName, eqModel);
}
}
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
finally
{
}
}
public void SetModelName(string modelName)
{
try
{
this.ModelName = modelName;
if (this.EquipmentModelDictionary.ContainsKey("COMMON"))
{
SECSDefine model = this.EquipmentModelDictionary["COMMON"];
this.CeidDictionary = new Dictionary<string, CEID>(model.CeidDictionary);
this.RptDictionary = new Dictionary<string, RPT>(model.RptDictionary);
}
if (this.ModelName != "COMMON" && this.EquipmentModelDictionary.ContainsKey(this.ModelName))
{
SECSDefine model = this.EquipmentModelDictionary[this.ModelName];
foreach (KeyValuePair<string, CEID> pair in model.CeidDictionary)
if (this.CeidDictionary.ContainsKey(pair.Key)) this.CeidDictionary[pair.Key] = pair.Value;
else this.CeidDictionary.Add(pair.Key, pair.Value);
foreach (KeyValuePair<string, RPT> pair in model.RptDictionary)
if (this.RptDictionary.ContainsKey(pair.Key)) this.RptDictionary[pair.Key] = pair.Value;
else this.RptDictionary.Add(pair.Key, pair.Value);
}
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
/// <summary>
/// Change ID, Name, Format
/// </summary>
/// <param name="item"></param>
public void Setting(SECSItem item)
{
try
{
if (item.Stream != "6" || item.Function != "11") return;
if (item.ChildItems.Count != 3) return;
item.ChildItems[0].Name = "DATAID";
item.ChildItems[1].Name = "CEID";
if (this.CeidDictionary.ContainsKey(item.ChildItems[1].Value) == false) return;
CEID ceid = this.CeidDictionary[item.ChildItems[1].Value];
if (ceid != null) item.ChildItems[1].Description = ceid.Name;
foreach (SECSItem report in item.ChildItems[2])
{
if (report.ChildItems.Count != 2) continue;
report.ChildItems[0].Name = "RPTID";
if (this.RptDictionary.ContainsKey(report.ChildItems[0].Value) == false) continue;
RPT rpt = this.RptDictionary[report.ChildItems[0].Value];
if (rpt == null) continue;
int i = 0;
foreach (VID vid in rpt.VidCollection)
{
SECSItem secsVid = report.ChildItems[1].ChildItems[i];
secsVid.ID = vid.ID;
if (string.IsNullOrEmpty(secsVid.Name))
{
secsVid.Name = vid.Name;
//secsVid.Format = vid.Format;
//secsVid.Length = vid.Length;
}
i++;
}
}
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
}
}

View File

@@ -0,0 +1,278 @@
using JWH;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
namespace DDUtilityApp.DATA
{
/// <summary>
/// Log Server 접속정보
/// </summary>
public class LogServer
{
#region [ Properties ] ------------------------------------------------
public string Name { get; set; }
public string DBConnectionString { get; set; }
public Dictionary<string, Account> NetworkAccount { get; set; } = new Dictionary<string, Account>();
public string FTPAddress { get; set; }
public int FTPPort { get; set; } = 21;
public string FTPUserID { get; set; }
public string FTPPassword { get; set; }
public string DBGetEquipments { get; set; }
public string DBGetModelDetails { get; set; }
public string DBGetModelInfo { get; set; }
/// <summary>
/// GetLogPath()에서 사용 할 Format 문자열을 설정하거나 가져옵니다.
/// <para>{0}\eisap01_eislog\Log\\{1}</para>
/// </summary>
//public Dictionary<string, string> QueryGetLogPath { get; set; } = new Dictionary<string, string>();
#endregion
#region [ LogServer ] -------------------------------------------------
public LogServer(string name, string dbConnectionString = "")
{
this.Name = name;
this.DBConnectionString = dbConnectionString;
}
#endregion
#region [ Method ] ----------------------------------------------------
public DataTable GetEquipments()
{
SqlConnection sqlConnection = null;
DataTable dt = null;
try
{
if (string.IsNullOrEmpty(this.DBConnectionString)) throw new Exception($"ConnectionString 속성에 값이 존재하지 않습니다.");
if (string.IsNullOrEmpty(this.DBGetEquipments)) throw new Exception($"QueryGetEquipment 속성에 값이 존재하지 않습니다.");
sqlConnection = new SqlConnection();
sqlConnection.ConnectionString = this.DBConnectionString;
sqlConnection.Open();
SqlCommand sqlCommand = new SqlCommand();
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandType = CommandType.Text;
sqlCommand.CommandText = this.DBGetEquipments;
DataSet ds = new DataSet();
SqlDataAdapter sqlAdapter = new SqlDataAdapter(sqlCommand);
sqlAdapter.Fill(ds);
sqlConnection.Close();
if (ds != null && ds.Tables.Count > 0) dt = ds.Tables[0];
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
throw ex;
}
finally
{
if (sqlConnection != null && sqlConnection.State != ConnectionState.Closed)
{
sqlConnection.Close();
sqlConnection.Dispose();
}
}
return dt;
}
public DataTable GetModelDetails(string modelID)
{
SqlConnection sqlConnection = null;
DataTable dt = null;
try
{
if (string.IsNullOrEmpty(this.DBConnectionString)) throw new Exception($"ConnectionString 속성에 값이 존재하지 않습니다.");
if (string.IsNullOrEmpty(this.DBGetEquipments)) throw new Exception($"QueryGetEquipment 속성에 값이 존재하지 않습니다.");
sqlConnection = new SqlConnection();
sqlConnection.ConnectionString = this.DBConnectionString;
sqlConnection.Open();
SqlCommand sqlCommand = new SqlCommand();
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandType = CommandType.Text;
sqlCommand.CommandText = this.DBGetModelDetails;
sqlCommand.Parameters.Add(new SqlParameter("@MODEL_ID", modelID));
DataSet ds = new DataSet();
SqlDataAdapter sqlAdapter = new SqlDataAdapter(sqlCommand);
sqlAdapter.Fill(ds);
sqlConnection.Close();
if (ds != null && ds.Tables.Count > 0) dt = ds.Tables[0];
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
throw ex;
}
finally
{
if (sqlConnection != null && sqlConnection.State != ConnectionState.Closed)
{
sqlConnection.Close();
sqlConnection.Dispose();
}
}
return dt;
}
public DataTable GetModelInfo(string modelID)
{
SqlConnection sqlConnection = null;
DataTable dt = null;
try
{
if (string.IsNullOrEmpty(this.DBConnectionString)) throw new Exception($"ConnectionString 속성에 값이 존재하지 않습니다.");
if (string.IsNullOrEmpty(this.DBGetEquipments)) throw new Exception($"QueryGetEquipment 속성에 값이 존재하지 않습니다.");
sqlConnection = new SqlConnection();
sqlConnection.ConnectionString = this.DBConnectionString;
sqlConnection.Open();
SqlCommand sqlCommand = new SqlCommand();
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandType = CommandType.Text;
sqlCommand.CommandText = this.DBGetModelInfo;
sqlCommand.Parameters.Add(new SqlParameter("@MODEL_ID", modelID));
DataSet ds = new DataSet();
SqlDataAdapter sqlAdapter = new SqlDataAdapter(sqlCommand);
sqlAdapter.Fill(ds);
sqlConnection.Close();
if (ds != null && ds.Tables.Count > 0) dt = ds.Tables[0];
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
throw ex;
}
finally
{
if (sqlConnection != null && sqlConnection.State != ConnectionState.Closed)
{
sqlConnection.Close();
sqlConnection.Dispose();
}
}
return dt;
}
public string GetLogPath(string serverIP, string equipmentID)
{
try
{
Account account = this.NetworkAccount[serverIP];
return $@"\\{account.IPAddress}\{account.DefaultPath}{equipmentID}\";
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
return string.Empty;
}
}
public DataSet ExecuteQuery(string query)
{
SqlConnection sqlConnection = null;
DataSet ds = new DataSet();
try
{
if (string.IsNullOrEmpty(this.DBConnectionString)) throw new Exception($"ConnectionString 속성에 값이 존재하지 않습니다.");
sqlConnection = new SqlConnection();
sqlConnection.ConnectionString = this.DBConnectionString;
sqlConnection.Open();
SqlCommand sqlCommand = new SqlCommand();
sqlCommand.CommandTimeout = 5000;
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandType = CommandType.Text;
sqlCommand.CommandText = query;
SqlDataAdapter sqlAdapter = new SqlDataAdapter(sqlCommand);
sqlAdapter.Fill(ds);
sqlConnection.Close();
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
throw ex;
}
finally
{
if (sqlConnection != null && sqlConnection.State != ConnectionState.Closed)
{
sqlConnection.Close();
sqlConnection.Dispose();
}
}
return ds;
}
public override string ToString()
{
return this.Name;
}
#endregion
}
public class Account
{
public string IPAddress { get; set; }
public string UserID { get; set; }
public string Password { get; set; }
public string DefaultPath { get; set; }
public Account()
{
}
public Account(string ipAddress, string uid, string pwd, string defaultPath = "")
{
this.IPAddress = ipAddress;
this.UserID = uid;
this.Password = pwd;
this.DefaultPath = defaultPath;
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,171 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Windows.Forms;
using DDUtilityApp.LOGPARSER.DATA;
using DDUtilityApp.SECS;
using JWH;
using JWH.CONTROL;
namespace DDUtilityApp.LOGPARSER.PARSER
{
public abstract class LogParser
{
public delegate object Parser(StreamReader reader, ref string startLine);
#region [ Properties ] ------------------------------------------------
public string Text { get; set; } = "[EverOne] Log Viewer";
public string ServerName { get; set; } = string.Empty;
public string EquipmentID { get; set; } = string.Empty;
public string ModelID { get; set; }
public SECSDefine SECSDefine { get; set; } = null;
public List<string> Files { get; set; } = new List<string>();
public StandardCollection StandardCollection { get; set; } = new StandardCollection();
public StringBuilder LogString { get; set; } = new StringBuilder();
protected int LogDTimeStart { get; set; } = 0;
protected string LogDTime { get; set; } = "yyyy-MM-dd HH:mm:ss.fff";
protected int LineNumber { get; set; } = 0;
protected string LastReadLine { get; set; } = string.Empty;
protected long StreamPosition { get; set; } = 0;
#endregion
#region [ LogParser ] -------------------------------------------------
public LogParser()
{
}
public LogParser(params string[] files) : this()
{
//this.Childs.AddRange(from file in files orderby file select file);
this.Files.AddRange(files);
}
protected void Initilize()
{
this.StandardCollection.Clear();
this.LogString.Clear();
this.LineNumber = 0;
}
#endregion
#region [ Method ] ----------------------------------------------------
public virtual void SetGridHeader(GridViewEx grid)
{
grid.AddColumn("DateTime");
grid.AddColumn("Level");
grid.AddColumn("Server");
grid.AddColumn("Service");
grid.AddColumn("Type");
grid.AddColumn("MessageName");
grid.AddColumn("Return");
grid.AddColumn("Value");
grid.AddColumn("LotID");
grid.AddColumn("CarrierID");
grid.AddColumn("EquipmentID");
grid.AddColumn("PortID");
grid.AddColumn("SystemByte");
grid.AddColumn("ModuleID");
grid.AddColumn("HostPanelID");
grid.AddColumn("PanelID");
grid.AddColumn("PanelQty");
grid.AddColumn("TID");
grid.AddColumn("Column1");
grid.AddColumn("Column2");
grid.AddColumn("Column3");
grid.AddColumn("Column4");
grid.AddColumn("Column5");
}
public virtual void SaveGridHeader(GridViewEx grid)
{
}
public virtual string[] FileSelector(FrmLogParser sender, params string[] args)
{
string directoryName = string.Empty;
string fileName = string.Empty;
if (args != null && args.Length > 0)
{
directoryName = Path.GetDirectoryName(args[0]);
fileName = Path.GetFileName(args[0]);
}
OpenFileDialog dlg = new OpenFileDialog();
dlg.Multiselect = true;
dlg.InitialDirectory = directoryName;
dlg.FileName = fileName;
if (dlg.ShowDialog() == DialogResult.OK)
return dlg.FileNames;
return null;
}
public abstract bool Parsing();
public bool Parsing(params string[] files)
{
this.Files.Clear();
this.Files.AddRange(files);
return this.Parsing();
}
protected string GetReadLine(StreamReader reader, bool isWrite = true)
{
try
{
this.StreamPosition = reader.BaseStream.Position;
string strLine = reader.ReadLine();
if (isWrite)
{
this.LineNumber++;
this.LogString.AppendLine($"{this.LineNumber.ToString("000000")}: {strLine}");
//XLogger.Instance.Debug($"{this.LineNumber.ToString("000000")}: {strLine}");
}
return strLine;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
return string.Empty;
}
}
protected void LogString_Append(string strLine)
{
foreach (string value in strLine.Split(new string[] { Environment.NewLine }, StringSplitOptions.None))
{
this.LineNumber++;
this.LogString.AppendLine($"{this.LineNumber.ToString("000000")}: {value}");
//XLogger.Instance.Debug($"{this.LineNumber.ToString("000000")}: {value}");
}
}
#endregion
}
}

View File

@@ -0,0 +1,184 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Windows.Forms;
using JWH.DATA;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Driver;
namespace JWH.MONGODB
{
public class FDCMongoDB
{
public static string ConnectionString { get; set; } = "mongodb://192.168.8.181:27001";
public static string DatabaseName { get; set; } = "fdc";
public static List<BsonDocument> GetListCollection()
{
MongoClient client = new MongoClient(ConnectionString);
IMongoDatabase database = client.GetDatabase(DatabaseName);
List<BsonDocument> item = database.ListCollectionsAsync().Result.ToListAsync<BsonDocument>().Result;
return item;
}
public static List<TraceCollection> GetCollectionData(string collectionName, DateTime dtStart, DateTime dtEnd, TraceCollection condition = null)
{
MongoClient client = new MongoClient(ConnectionString);
IMongoDatabase database = client.GetDatabase(DatabaseName);
IMongoCollection<TraceCollection> collection = database.GetCollection<TraceCollection>(collectionName);
// # ALL Data
//var lst = collection.Find(_ => true).ToList();
// # Use BsonDocument
//var filter = new BsonDocument("LotID", "13089570006B");
// # Use Builders.Filter
//var filterBuilder = Builders<TraceCollection>.Filter;
//var filter = filterBuilder.Eq(x => x.LotID, "13109360026B");
FilterDefinitionBuilder<TraceCollection> filterBuilder = Builders<TraceCollection>.Filter;
FilterDefinition<TraceCollection> filter = filterBuilder.Gte(x => x.EVENTTIME, dtStart) & filterBuilder.Lt(x => x.EVENTTIME, dtEnd);
if (condition != null)
{
string[] SkipPropertys = new string[] { "_id", "EVENTTIME" };
foreach (PropertyInfo property in condition.GetType().GetProperties())
{
object value = property.GetValue(condition);
if (value != null)
{
if (property.Name.Equals("LotID")) filter &= filterBuilder.Eq(x => x.LotID, value);
continue;
}
}
}
List<TraceCollection> document = collection.Find(filter).ToList();
return document;
}
public static bool GetCollectionSize_Flag = false;
public static async void GetCollectionSize(string filename, Action<string> complete, params object[] controls)
{
GetCollectionSize_Flag = true;
StreamWriter writer = null;
BsonDocument document = null;
try
{
ProgressBar progressBar = null;
Control textBox = null;
foreach(object ctrl in controls)
{
if (ctrl.GetType() == typeof(ProgressBar)) progressBar = (ProgressBar)ctrl;
if (ctrl.GetType() == typeof(Label)) textBox = (Label)ctrl;
if (ctrl.GetType() == typeof(TextBox)) textBox = (TextBox)ctrl;
}
MongoClient client = new MongoClient(ConnectionString);
IMongoDatabase database = client.GetDatabase(DatabaseName);
List<BsonDocument> collections = database.ListCollectionsAsync().Result.ToListAsync<BsonDocument>().Result;
if (progressBar != null)
{
progressBar.Maximum = collections.Count;
progressBar.Minimum = 0;
progressBar.Value = 0;
}
string[] elementNames = new string[] { "size", "count", "avgObjSize", "storageSize", "freeStorageSize", "totalIndexSize", "totalSize" };
StringBuilder sb = new StringBuilder();
sb.Append($"EQ, SVID, name, ");
foreach (string elementName in elementNames) sb.Append($"{elementName}, ");
writer = new StreamWriter(filename);
writer.WriteLine(sb.ToString());
for (int i = 0; i < collections.Count; i++)
{
BsonDocument collection = collections[i];
string collectionName = collection.GetElement("name").Value.ToString();
var command = new JsonCommand<BsonDocument>("{collstats:\"" + collectionName + "\"}");
document = await database.RunCommandAsync(command);
string[] elementValues = new string[] { "", "", "", "", "", "", "" };
BsonElement[] elements = document.ToArray();
foreach(BsonElement element in elements)
{
for (int j = 0; j < elementNames.Length; j++)
{
if (element.Name == elementNames[j])
{
elementValues[j] = element.Value.ToString();
break;
}
}
}
sb.Clear();
string[] splitName = collectionName.Split('.');
if (splitName.Length == 2) sb.Append($"{splitName[0]}, {splitName[1]}, {collectionName}, ");
else sb.Append($", , {collectionName},");
foreach (string value in elementValues) sb.Append($"{value}, ");
writer.WriteLine(sb.ToString());
if (progressBar != null) progressBar.Value = i;
if (textBox != null) textBox.Text = $"{i.ToString("#,##0")} / {collections.Count.ToString("#,##0")}"; ;
if (!GetCollectionSize_Flag) break;
}
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
filename = string.Empty;
}
finally
{
FDCMongoDB.GetCollectionSize_Flag = false;
if (writer != null) writer.Close();
complete(filename);
}
}
public class TraceCollection : DataTableBase
{
public ObjectId _id { get; set; }
public List<object> LotList { get; set; }
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime EVENTTIME { get; set; }
public string VIDName { get; set; }
public object Value { get; set; }
public string LotID { get; set; }
public string MaterialID { get; set; }
public string ProductID { get; set; }
public object UnitNO { get; set; }
public string Recipe { get; set; }
public string ProcessID { get; set; }
public string VORNR { get; set; }
public string UnitState { get; set; }
public string Sign { get; set; }
}
}
}

401
DDUtilityApp/MONGO/FrmFDCMongo.Designer.cs generated Normal file
View File

@@ -0,0 +1,401 @@
namespace DDUtilityApp.MONGO
{
partial class FrmFDCMongo
{
/// <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()
{
Telerik.WinControls.UI.TableViewDefinition tableViewDefinition4 = new Telerik.WinControls.UI.TableViewDefinition();
this.panel1 = new System.Windows.Forms.Panel();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.splitContainer3 = new System.Windows.Forms.SplitContainer();
this.btnGetCollectionSizeStart = new Telerik.WinControls.UI.RadButton();
this.tboxEquipmentID = new Telerik.WinControls.UI.RadTextBox();
this.btnEquipmentFind = new Telerik.WinControls.UI.RadButton();
this.tree = new Telerik.WinControls.UI.RadTreeView();
this.splitContainer2 = new System.Windows.Forms.SplitContainer();
this.panel2 = new System.Windows.Forms.Panel();
this.radLabel2 = new Telerik.WinControls.UI.RadLabel();
this.radLabel1 = new Telerik.WinControls.UI.RadLabel();
this.btnRefresh = new Telerik.WinControls.UI.RadButton();
this.dpEnd = new Telerik.WinControls.UI.RadDateTimePicker();
this.dpStart = new Telerik.WinControls.UI.RadDateTimePicker();
this.statusStrip = new Telerik.WinControls.UI.RadStatusStrip();
this.ssName = new Telerik.WinControls.UI.RadLabelElement();
this.ssStatus01 = new Telerik.WinControls.UI.RadLabelElement();
this.ssStatus02 = new Telerik.WinControls.UI.RadLabelElement();
this.ssMessage = new Telerik.WinControls.UI.RadLabelElement();
this.pbarCollectionSize = new System.Windows.Forms.ProgressBar();
this.lblProgressValue = new System.Windows.Forms.Label();
this.grid = new JWH.CONTROL.GridViewEx();
this.panel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit();
this.splitContainer3.Panel1.SuspendLayout();
this.splitContainer3.Panel2.SuspendLayout();
this.splitContainer3.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.btnGetCollectionSizeStart)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.tboxEquipmentID)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.btnEquipmentFind)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.tree)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
this.splitContainer2.Panel1.SuspendLayout();
this.splitContainer2.Panel2.SuspendLayout();
this.splitContainer2.SuspendLayout();
this.panel2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.radLabel2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.radLabel1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.btnRefresh)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.dpEnd)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.dpStart)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.statusStrip)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.grid)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.grid.MasterTemplate)).BeginInit();
this.SuspendLayout();
//
// panel1
//
this.panel1.Controls.Add(this.splitContainer1);
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Name = "panel1";
this.panel1.Padding = new System.Windows.Forms.Padding(3);
this.panel1.Size = new System.Drawing.Size(800, 424);
this.panel1.TabIndex = 0;
//
// splitContainer1
//
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.splitContainer1.Location = new System.Drawing.Point(3, 3);
this.splitContainer1.Name = "splitContainer1";
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.splitContainer3);
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.splitContainer2);
this.splitContainer1.Size = new System.Drawing.Size(794, 418);
this.splitContainer1.SplitterDistance = 375;
this.splitContainer1.TabIndex = 0;
//
// splitContainer3
//
this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer3.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.splitContainer3.IsSplitterFixed = true;
this.splitContainer3.Location = new System.Drawing.Point(0, 0);
this.splitContainer3.Name = "splitContainer3";
this.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer3.Panel1
//
this.splitContainer3.Panel1.Controls.Add(this.lblProgressValue);
this.splitContainer3.Panel1.Controls.Add(this.pbarCollectionSize);
this.splitContainer3.Panel1.Controls.Add(this.btnGetCollectionSizeStart);
this.splitContainer3.Panel1.Controls.Add(this.tboxEquipmentID);
this.splitContainer3.Panel1.Controls.Add(this.btnEquipmentFind);
//
// splitContainer3.Panel2
//
this.splitContainer3.Panel2.Controls.Add(this.tree);
this.splitContainer3.Size = new System.Drawing.Size(375, 418);
this.splitContainer3.SplitterDistance = 75;
this.splitContainer3.TabIndex = 1;
//
// btnGetCollectionSizeStart
//
this.btnGetCollectionSizeStart.Location = new System.Drawing.Point(298, 34);
this.btnGetCollectionSizeStart.Name = "btnGetCollectionSizeStart";
this.btnGetCollectionSizeStart.Size = new System.Drawing.Size(73, 21);
this.btnGetCollectionSizeStart.TabIndex = 2;
this.btnGetCollectionSizeStart.Text = "Start";
//
// tboxEquipmentID
//
this.tboxEquipmentID.Location = new System.Drawing.Point(10, 9);
this.tboxEquipmentID.Name = "tboxEquipmentID";
this.tboxEquipmentID.Size = new System.Drawing.Size(282, 20);
this.tboxEquipmentID.TabIndex = 1;
//
// btnEquipmentFind
//
this.btnEquipmentFind.Location = new System.Drawing.Point(298, 8);
this.btnEquipmentFind.Name = "btnEquipmentFind";
this.btnEquipmentFind.Size = new System.Drawing.Size(73, 21);
this.btnEquipmentFind.TabIndex = 0;
this.btnEquipmentFind.Text = "Find";
//
// tree
//
this.tree.Dock = System.Windows.Forms.DockStyle.Fill;
this.tree.Location = new System.Drawing.Point(0, 0);
this.tree.Name = "tree";
this.tree.Size = new System.Drawing.Size(375, 339);
this.tree.SpacingBetweenNodes = -1;
this.tree.TabIndex = 0;
//
// splitContainer2
//
this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.splitContainer2.IsSplitterFixed = true;
this.splitContainer2.Location = new System.Drawing.Point(0, 0);
this.splitContainer2.Name = "splitContainer2";
this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer2.Panel1
//
this.splitContainer2.Panel1.Controls.Add(this.panel2);
//
// splitContainer2.Panel2
//
this.splitContainer2.Panel2.Controls.Add(this.grid);
this.splitContainer2.Size = new System.Drawing.Size(415, 418);
this.splitContainer2.SplitterDistance = 75;
this.splitContainer2.TabIndex = 2;
//
// panel2
//
this.panel2.Controls.Add(this.radLabel2);
this.panel2.Controls.Add(this.radLabel1);
this.panel2.Controls.Add(this.btnRefresh);
this.panel2.Controls.Add(this.dpEnd);
this.panel2.Controls.Add(this.dpStart);
this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel2.Location = new System.Drawing.Point(0, 0);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(415, 75);
this.panel2.TabIndex = 0;
//
// radLabel2
//
this.radLabel2.AutoSize = false;
this.radLabel2.Location = new System.Drawing.Point(3, 37);
this.radLabel2.Name = "radLabel2";
this.radLabel2.Size = new System.Drawing.Size(100, 18);
this.radLabel2.TabIndex = 8;
this.radLabel2.Text = "End Date : ";
this.radLabel2.TextAlignment = System.Drawing.ContentAlignment.MiddleRight;
//
// radLabel1
//
this.radLabel1.AutoSize = false;
this.radLabel1.Location = new System.Drawing.Point(3, 11);
this.radLabel1.Name = "radLabel1";
this.radLabel1.Size = new System.Drawing.Size(100, 18);
this.radLabel1.TabIndex = 7;
this.radLabel1.Text = "Start Date : ";
this.radLabel1.TextAlignment = System.Drawing.ContentAlignment.MiddleRight;
//
// btnRefresh
//
this.btnRefresh.Location = new System.Drawing.Point(294, 10);
this.btnRefresh.Name = "btnRefresh";
this.btnRefresh.Size = new System.Drawing.Size(110, 20);
this.btnRefresh.TabIndex = 4;
this.btnRefresh.Text = "Refresh";
//
// dpEnd
//
this.dpEnd.Format = System.Windows.Forms.DateTimePickerFormat.Short;
this.dpEnd.Location = new System.Drawing.Point(109, 36);
this.dpEnd.Name = "dpEnd";
this.dpEnd.Size = new System.Drawing.Size(179, 20);
this.dpEnd.TabIndex = 2;
this.dpEnd.TabStop = false;
this.dpEnd.Text = "2024-03-28";
this.dpEnd.Value = new System.DateTime(2024, 3, 28, 11, 24, 49, 907);
//
// dpStart
//
this.dpStart.Location = new System.Drawing.Point(109, 10);
this.dpStart.Name = "dpStart";
this.dpStart.Size = new System.Drawing.Size(179, 20);
this.dpStart.TabIndex = 0;
this.dpStart.TabStop = false;
this.dpStart.Text = "2024년 3월 28일 목요일";
this.dpStart.Value = new System.DateTime(2024, 3, 28, 11, 24, 49, 907);
//
// statusStrip
//
this.statusStrip.Items.AddRange(new Telerik.WinControls.RadItem[] {
this.ssName,
this.ssStatus01,
this.ssStatus02,
this.ssMessage});
this.statusStrip.Location = new System.Drawing.Point(0, 424);
this.statusStrip.Name = "statusStrip";
this.statusStrip.Size = new System.Drawing.Size(800, 26);
this.statusStrip.TabIndex = 1;
//
// ssName
//
this.ssName.Alignment = System.Drawing.ContentAlignment.MiddleLeft;
this.ssName.Name = "ssName";
this.statusStrip.SetSpring(this.ssName, false);
this.ssName.Text = "Collection";
this.ssName.TextWrap = true;
//
// ssStatus01
//
this.ssStatus01.Alignment = System.Drawing.ContentAlignment.MiddleLeft;
this.ssStatus01.BorderHighlightThickness = 2;
this.ssStatus01.BorderVisible = false;
this.ssStatus01.Name = "ssStatus01";
this.ssStatus01.Padding = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.statusStrip.SetSpring(this.ssStatus01, false);
this.ssStatus01.Text = "수집시간";
this.ssStatus01.TextWrap = true;
//
// ssStatus02
//
this.ssStatus02.Alignment = System.Drawing.ContentAlignment.MiddleLeft;
this.ssStatus02.BorderVisible = false;
this.ssStatus02.FlipText = false;
this.ssStatus02.Name = "ssStatus02";
this.statusStrip.SetSpring(this.ssStatus02, false);
this.ssStatus02.Text = "출력시간";
this.ssStatus02.TextWrap = true;
//
// ssMessage
//
this.ssMessage.Alignment = System.Drawing.ContentAlignment.MiddleLeft;
this.ssMessage.Name = "ssMessage";
this.statusStrip.SetSpring(this.ssMessage, false);
this.ssMessage.Text = "";
this.ssMessage.TextWrap = true;
//
// pbarCollectionSize
//
this.pbarCollectionSize.Location = new System.Drawing.Point(10, 34);
this.pbarCollectionSize.Name = "pbarCollectionSize";
this.pbarCollectionSize.Size = new System.Drawing.Size(282, 21);
this.pbarCollectionSize.TabIndex = 3;
//
// lblProgressValue
//
this.lblProgressValue.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.lblProgressValue.BackColor = System.Drawing.Color.Transparent;
this.lblProgressValue.Location = new System.Drawing.Point(99, 57);
this.lblProgressValue.Name = "lblProgressValue";
this.lblProgressValue.Size = new System.Drawing.Size(194, 18);
this.lblProgressValue.TabIndex = 4;
this.lblProgressValue.Text = "label1";
this.lblProgressValue.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// grid
//
this.grid.BackColor = System.Drawing.SystemColors.ControlLightLight;
this.grid.ColumnResizeKey = System.Windows.Forms.Keys.F6;
this.grid.Dock = System.Windows.Forms.DockStyle.Fill;
this.grid.Location = new System.Drawing.Point(0, 0);
this.grid.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
//
//
//
this.grid.MasterTemplate.ViewDefinition = tableViewDefinition4;
this.grid.Name = "grid";
//
//
//
this.grid.RootElement.ControlBounds = new System.Drawing.Rectangle(0, 0, 240, 150);
this.grid.Size = new System.Drawing.Size(415, 339);
this.grid.TabIndex = 1;
//
// FrmFDCMongo
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.panel1);
this.Controls.Add(this.statusStrip);
this.Name = "FrmFDCMongo";
this.Text = "FrmFDC";
this.panel1.ResumeLayout(false);
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.splitContainer3.Panel1.ResumeLayout(false);
this.splitContainer3.Panel1.PerformLayout();
this.splitContainer3.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit();
this.splitContainer3.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.btnGetCollectionSizeStart)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.tboxEquipmentID)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.btnEquipmentFind)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.tree)).EndInit();
this.splitContainer2.Panel1.ResumeLayout(false);
this.splitContainer2.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
this.splitContainer2.ResumeLayout(false);
this.panel2.ResumeLayout(false);
this.panel2.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.radLabel2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.radLabel1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.btnRefresh)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.dpEnd)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.dpStart)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.statusStrip)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.grid.MasterTemplate)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.grid)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.SplitContainer splitContainer1;
private Telerik.WinControls.UI.RadTreeView tree;
private System.Windows.Forms.SplitContainer splitContainer2;
private JWH.CONTROL.GridViewEx grid;
private System.Windows.Forms.SplitContainer splitContainer3;
private System.Windows.Forms.Panel panel2;
private Telerik.WinControls.UI.RadDateTimePicker dpEnd;
private Telerik.WinControls.UI.RadDateTimePicker dpStart;
private Telerik.WinControls.UI.RadButton btnRefresh;
private Telerik.WinControls.UI.RadStatusStrip statusStrip;
private Telerik.WinControls.UI.RadLabelElement ssName;
private Telerik.WinControls.UI.RadLabelElement ssStatus01;
private Telerik.WinControls.UI.RadLabelElement ssStatus02;
private Telerik.WinControls.UI.RadLabelElement ssMessage;
private Telerik.WinControls.UI.RadTextBox tboxEquipmentID;
private Telerik.WinControls.UI.RadButton btnEquipmentFind;
private Telerik.WinControls.UI.RadLabel radLabel2;
private Telerik.WinControls.UI.RadLabel radLabel1;
private Telerik.WinControls.UI.RadButton btnGetCollectionSizeStart;
private System.Windows.Forms.ProgressBar pbarCollectionSize;
private System.Windows.Forms.Label lblProgressValue;
}
}

View File

@@ -0,0 +1,387 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Windows.Forms;
using JWH;
using JWH.MONGODB;
using MongoDB.Bson;
using Telerik.WinControls.Data;
using Telerik.WinControls.UI;
using static JWH.MONGODB.FDCMongoDB;
namespace DDUtilityApp.MONGO
{
public partial class FrmFDCMongo : Form
{
public string EquipmentID { get; set; } = string.Empty;
public string VID { get; set; } = string.Empty;
public DateTime DateTimeStart { get; set; } = DateTime.Now.Date;
public DateTime DateTimeEnd { get; set; } = DateTime.Now.AddDays(1).Date;
public FrmFDCMongo()
{
InitializeComponent();
this.SetLayout();
this.SetEventHandler();
}
private void SetLayout()
{
this.Text = $"FDC MongoDB";
this.dpStart.CustomFormat = "yyyy-MM-dd HH:mm";
this.dpStart.Format = DateTimePickerFormat.Custom;
this.dpStart.Value = this.DateTimeStart;
this.dpEnd.CustomFormat = "yyyy-MM-dd HH:mm";
this.dpEnd.Format = DateTimePickerFormat.Custom;
this.dpEnd.Value = this.DateTimeEnd;
this.pbarCollectionSize.Visible = false;
this.lblProgressValue.Visible = false;
this.tree.ShowLines = true;
this.tree.ShowRootLines = true;
this.GridSetting();
}
private void SetEventHandler()
{
this.Shown += this.FrmFDC_Shown;
this.tboxEquipmentID.KeyDown += this.TboxEquipmentID_KeyDown;
this.btnEquipmentFind.Click += this.BtnEquipmentFind_Click;
this.dpStart.ValueChanged += this.DpStart_ValueChanged;
this.dpEnd.ValueChanged += this.DpEnd_ValueChanged;
this.btnRefresh.Click += this.BtnRefresh_Click;
this.btnGetCollectionSizeStart.Click += this.BtnGetCollectionSizeStart_Click;
this.tree.SelectedNodeChanged += this.Tree_SelectedNodeChanged;
}
#region [ Event ] =====================================================
private void FrmFDC_Shown(object sender, EventArgs e)
{
this.SetTree();
if (string.IsNullOrEmpty(this.EquipmentID)) return;
this.tboxEquipmentID.Text = this.EquipmentID;
this.dpStart.Value = this.DateTimeStart;
this.dpEnd.Value = this.DateTimeEnd;
this.BtnEquipmentFind_Click(null, null);
}
private void DpStart_ValueChanged(object sender, EventArgs e)
{
this.DateTimeStart = this.dpStart.Value;
}
private void DpEnd_ValueChanged(object sender, EventArgs e)
{
this.DateTimeEnd = this.dpEnd.Value;
}
private void BtnRefresh_Click(object sender, EventArgs e)
{
DateTime timeStart = DateTime.Now;
List<TraceCollection> data = null;
try
{
this.Cursor = Cursors.WaitCursor;
this.ssName.Text = "GRID";
DateTime dtStart = this.DateTimeStart;
DateTime dtEnd = this.DateTimeEnd;
data = FDCMongoDB.GetCollectionData($"{this.EquipmentID}.{this.VID}", dtStart, dtEnd);
timeStart = this.StatusLabelDisplay(this.ssStatus01, "수집", timeStart, DateTime.Now);
this.grid.AutoBinding(data.ToArray());
}
catch (Exception ex)
{
throw ex;
}
finally
{
this.StatusLabelDisplay(this.ssStatus02, "출력", timeStart, DateTime.Now);
this.ssMessage.Text = $"RowCount is {data?.Count.ToString("#,##0")}";
this.Cursor = Cursors.Default;
}
}
private void TboxEquipmentID_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
this.BtnEquipmentFind_Click(null, null);
}
private void BtnEquipmentFind_Click(object sender, EventArgs e)
{
RadTreeNode node = this.tree.Find(x => x.Name.StartsWith(this.tboxEquipmentID.Text));
if (node != null)
{
this.tree.ClearSelection();
node.Selected = true;
node.ExpandAll();
}
}
private void BtnGetCollectionSizeStart_Click(object sender, EventArgs e)
{
if (FDCMongoDB.GetCollectionSize_Flag)
{
this.GetCollectionSize_Complete();
return;
}
SaveFileDialog dlg = new SaveFileDialog();
dlg.Title = "FDC Collection Infomation";
dlg.Filter = "CSV|*.csv";
dlg.FilterIndex = 0;
dlg.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
dlg.FileName = $"FDC_Collection-{DateTime.Now.ToString("yyyyMMddHHmm")}.csv";
if (dlg.ShowDialog() != DialogResult.OK) return;
this.lblProgressValue.Text = "";
this.lblProgressValue.Visible = true;
this.pbarCollectionSize.Visible = true;
this.btnGetCollectionSizeStart.Text = "Stop";
FDCMongoDB.GetCollectionSize(dlg.FileName, this.GetCollectionSize_Complete, this.pbarCollectionSize, this.lblProgressValue);
}
private void GetCollectionSize_Complete(string filename = "")
{
FDCMongoDB.GetCollectionSize_Flag = false;
this.btnGetCollectionSizeStart.Text = "Start";
this.pbarCollectionSize.Visible = false;
this.lblProgressValue.Visible = false;
if (string.IsNullOrEmpty(filename)) return;
Process.Start(filename);
}
#endregion
#region [ Method ] ====================================================
private DateTime StatusLabelDisplay(RadLabelElement control, string name, DateTime start, DateTime end)
{
TimeSpan span = end.Subtract(start);
StringBuilder sb = new StringBuilder();
if (!string.IsNullOrEmpty(name)) sb.Append($"{name} ");
sb.Append($"[{span.Seconds}.{span.Milliseconds.ToString("D3")}sec] ");
sb.Append($"{start.ToString("HH:mm:ss.fff")}~{end.ToString("HH:mm:ss.fff")}");
control.Text = sb.ToString();
return end;
}
#endregion
#region [ Tree: Equipment & VID List ] ================================
private void SetTree()
{
DateTime timeStart = DateTime.Now;
SortedDictionary<string, List<string>> dicEquipment = new SortedDictionary<string, List<string>>();
try
{
this.Cursor = Cursors.WaitCursor;
this.ssName.Text = "TREE";
timeStart = DateTime.Now;
List<BsonDocument> lst = FDCMongoDB.GetListCollection();
timeStart = this.StatusLabelDisplay(this.ssStatus01, "수집", timeStart, DateTime.Now);
foreach (BsonDocument doc in lst)
{
string[] values = doc.GetElement("name").Value.ToString().Split(new char[] { '=', '.' });
if (values.Length != 2)
{
XLogger.Instance.Error($"Split Fail: {doc.GetElement(0)}");
continue;
}
string name = values[0];
string vid = values[1];
if (!dicEquipment.ContainsKey(name))
dicEquipment[name] = new List<string>();
dicEquipment[name].Add(vid);
}
DataTable dt = this.GetMesEquipment();
this.tree.Nodes.Clear();
foreach (string equipmentID in dicEquipment.Keys)
{
string text = equipmentID;
RadTreeNode nodeParent = null;
DataRow[] drEquipmnet = dt.Select($"EQUIPMENTID='{equipmentID}'");
if (drEquipmnet?.Length > 0)
{
string facilityName = drEquipmnet[0]["FACILITYNAME"].ToString();
string equipmentName = drEquipmnet[0]["DESCRIPTION"].ToString();
string segmentID = drEquipmnet[0]["PROCESSSEGMENTID"].ToString();
string segmentName = drEquipmnet[0]["PROCESSSEGMENTNAME"].ToString();
if (!this.tree.Nodes.Contains(facilityName))
this.tree.Nodes.Add(facilityName).Name = facilityName;
nodeParent = this.tree.Nodes[facilityName];
//if (!nodeParent.Nodes.Contains(segmentID))
// nodeParent.Nodes.Add($"[{segmentID}] {segmentName}").Name = segmentID;
//nodeParent = nodeParent.Nodes[segmentID];
text = $"[{equipmentID}] {equipmentName}({dicEquipment[equipmentID].Count})";
}
RadTreeNode node = new RadTreeNode(text);
node.Name = equipmentID;
if (nodeParent != null) nodeParent.Nodes.Add(node);
else this.tree.Nodes.Add(node);
foreach (string vid in dicEquipment[equipmentID])
{
RadTreeNode nodeVID = node.Nodes.Add(vid);
nodeVID.Name = $"{equipmentID}.{vid}";
nodeVID.Tag = $"{equipmentID}.{vid}";
}
}
this.tree.SortOrder = System.Windows.Forms.SortOrder.Ascending;
}
catch (Exception ex)
{
throw ex;
}
finally
{
this.StatusLabelDisplay(this.ssStatus02, "출력", timeStart, DateTime.Now);
this.ssMessage.Text = $"Equipment is {dicEquipment.Count.ToString("#,##0")}";
this.Cursor = Cursors.Default;
}
}
private DataTable GetMesEquipment()
{
SqlConnection sqlConnection = null;
DataSet ds = null;
DataTable dt = null;
try
{
string connectionString = string.Empty;
StringBuilder query = new StringBuilder();
query.AppendLine($" SELECT A.SITEID, ");
query.AppendLine($" A.FACILITYID, ");
query.AppendLine($" D.FACILITYNAME, ");
query.AppendLine($" B.PROCESSSEGMENTID, ");
query.AppendLine($" B.PROCESSSEGMENTNAME, ");
query.AppendLine($" A.SUBCATEGORY, ");
query.AppendLine($" C.EQUIPMENTID AS MAINEQUIPMENTID, ");
query.AppendLine($" C.EQUIPMENTNAME AS MAINEQUIPMENTNAME, ");
query.AppendLine($" A.EQUIPMENTID, ");
query.AppendLine($" A.EQUIPMENTNAME, ");
query.AppendLine($" A.DESCRIPTION, ");
query.AppendLine($" A.OPERATIONMODE, ");
query.AppendLine($" A.CONTROLMODE, ");
query.AppendLine($" A.LASTTRACKINLOTID, ");
query.AppendLine($" A.LASTTRACKOUTLOTID, ");
query.AppendLine($" A.MAKER, ");
query.AppendLine($" A.EQPSTATE, ");
query.AppendLine($" A.LOCATION ");
query.AppendLine($" FROM CIM_EQUIPMENT A (nolock) ");
query.AppendLine($" INNER JOIN CIM_PROCESSSEGMENT B (nolock) ON A.PROCESSSEGMENTID = B.PROCESSSEGMENTID AND A.SITEID = B.SITEID ");
query.AppendLine($" INNER JOIN CIM_EQUIPMENT C (nolock) ON A.PARENTID = C.EQUIPMENTID AND A.SITEID = C.SITEID ");
query.AppendLine($" INNER JOIN CIM_FACILITY D (nolock) ON A.PHYSICALLOCATION = D.FACILITYID AND a.SITEID = d.SITEID ");
query.AppendLine($" WHERE A.SITEID='1130' ");
connectionString = $@"server=192.168.8.232;database=ddmes;uid=DDB2MESAdmin;pwd=Yhqe4csJXJ4W5$%;";
sqlConnection = new SqlConnection();
sqlConnection.ConnectionString = connectionString;
sqlConnection.Open();
SqlCommand sqlCommand = new SqlCommand();
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandType = CommandType.Text;
sqlCommand.CommandText = query.ToString();
ds = new DataSet();
SqlDataAdapter sqlAdapter = new SqlDataAdapter(sqlCommand);
sqlAdapter.Fill(ds);
sqlConnection.Close();
if (ds != null && ds.Tables.Count > 0) dt = ds.Tables[0];
return dt;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
return null;
}
finally
{
if (sqlConnection != null && sqlConnection.State != ConnectionState.Closed)
{
sqlConnection.Close();
sqlConnection.Dispose();
}
}
}
private void Tree_SelectedNodeChanged(object sender, RadTreeViewEventArgs e)
{
if (e.Node == null || e.Node.Tag == null) return;
string[] values = e.Node.Tag.ToString().Split('.');
if (values.Length != 2) return;
this.EquipmentID = values[0];
this.VID = values[1];
this.BtnRefresh_Click(null, null);
}
#endregion
#region [ Grid: TraceCollection ] =====================================
private void GridSetting()
{
this.grid.MultiSelect = true;
this.grid.Columns.Clear();
this.grid.TableElement.RowHeight = 20;
this.grid.HeaderTextToTitleCase = false;
this.grid.AddColumn("EVENTTIME", "EventTime");
this.grid.AddColumn("VIDName");
this.grid.AddColumn("Value");
this.grid.AddColumn("LotID");
this.grid.AddColumn("MaterialID");
this.grid.AddColumn("ProductID");
this.grid.AddColumn("Recipe");
this.grid.AddColumn("UnitNO");
this.grid.AddColumn("ProcessID");
this.grid.AddColumn("VORNR");
this.grid.AddColumn("UnitState");
this.grid.AddColumn("Sign");
}
#endregion
}
}

View 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>

220
DDUtilityApp/Program.cs Normal file
View File

@@ -0,0 +1,220 @@
using DDUtilityApp.LOGPARSER;
using DDUtilityApp.LOGPARSER.PARSER;
using DDUtilityApp.MONGO;
using JWH;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Security.Principal;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DDUtilityApp
{
static class Program
{
/// <summary>
/// 해당 응용 프로그램의 주 진입점입니다.
/// </summary>
[STAThread]
static void Main(params string[] args)
{
try
{
XLogger.Instance.Info("START");
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form frm = null;
if (args.Length > 0)
{
if (string.Compare(args[0], "FrmLogParser", true) == 0 && args.Length >= 3)
{
FrmLogParser frmLogParser = new FrmLogParser(new EisParser0(), args[1], args[2]);
frm = frmLogParser;
}
if (string.Compare(args[0], "FrmFDCMongo", true) == 0)
{
FrmFDCMongo frmFDCMongo = new FrmFDCMongo();
if (args.Length > 1) frmFDCMongo.EquipmentID = args[1];
if (args.Length > 2)
{
DateTime dateTime = DateTime.Now.Date;
DateTime.TryParse(args[2], out dateTime);
frmFDCMongo.DateTimeStart = dateTime;
}
if (args.Length > 3)
{
DateTime dateTime = DateTime.Now.AddDays(1).Date;
DateTime.TryParse(args[3], out dateTime);
frmFDCMongo.DateTimeEnd = dateTime;
}
frm = frmFDCMongo;
}
}
if (frm == null)
{
#region [ FrmMain ]
FrmMain frmMain = new FrmMain();
frmMain.Text = $"[EverOne] DDUtility - Ver. {Application.ProductVersion}";
frmMain.MinimizeBox = false;
frmMain.MaximizeBox = false;
frmMain.FormBorderStyle = FormBorderStyle.FixedDialog;
#region [ ]
frmMain.Buttons.Add("EIS Log Viewer", new EisParser0());
frmMain.Buttons.Add("MIS Log Viewer", new AgvParser());
frmMain.Buttons.Add("FDC Mongo Viewer", typeof(MONGO.FrmFDCMongo));
frmMain.Buttons.Add("TIB Simulator", typeof(TIBRENDEZVOUS.FrmSimulator01));
frmMain.Buttons.Add("HSMS Converter", typeof(LOGPARSER.FrmHsmsViewer));
frmMain.Buttons.Add("TibcoConfig.Xml", typeof(ETC.FrmTIbcoConfig));
#if DEBUG
frmMain.Buttons.Add("FTP Test", typeof(SPECDOCUMENT.FrmSpecDocument));
#endif
#endregion
Application.Run(frmMain);
if (frmMain.DialogResult != DialogResult.OK) return;
if (frmMain.SelectedObject == null) return;
if (frmMain.SelectedObject is Type)
{
Type frmType = frmMain.SelectedObject as Type;
// 관리자 권한으로 실행
if (new string[] { "FRMTIBCOCONFIG" }.Contains(frmType.Name.ToUpper()))
{
if (IsAdministrator() == false)
{
try
{
ProcessStartInfo processStartInfo = new ProcessStartInfo();
processStartInfo.UseShellExecute = true;
processStartInfo.FileName = Application.ExecutablePath;
processStartInfo.WorkingDirectory = Environment.CurrentDirectory;
processStartInfo.Verb = "runas";
Process process = Process.Start(processStartInfo);
return;
}
catch (Exception ex)
{
XLogger.Instance.Warn(ex);
}
}
}
Assembly assembly = Assembly.GetAssembly(frmType);
frm = assembly.CreateInstance(frmType.FullName) as Form;
}
else if (frmMain.SelectedObject is LogParser)
{
FrmLogParser frmLogParser = new FrmLogParser();
frmLogParser.LogParser = frmMain.SelectedObject as LogParser;
frm = frmLogParser;
}
#endregion
}
if (frm == null) return;
frm.StartPosition = GlobalVariable.Instance.FormStartPosition;
frm.WindowState = GlobalVariable.Instance.FormWindowState;
System.Drawing.Rectangle rectangle = new System.Drawing.Rectangle(GlobalVariable.Instance.FormLocation, GlobalVariable.Instance.FormSize);
Screen screen = Screen.FromRectangle(rectangle);
System.Drawing.Size minimumSize = frm.MinimumSize;
if (screen.WorkingArea.Width < frm.MinimumSize.Width) minimumSize.Width = screen.WorkingArea.Width;
if (screen.WorkingArea.Height < frm.MinimumSize.Height) minimumSize.Height = screen.WorkingArea.Height;
frm.MinimumSize = minimumSize;
frm.Location = GlobalVariable.Instance.FormLocation;
frm.Size = GlobalVariable.Instance.FormSize;
if ((frm.MinimumSize.Width > GlobalVariable.Instance.FormSize.Width)
|| (frm.MinimumSize.Height > GlobalVariable.Instance.FormSize.Height)
)
{
}
// Exception Handling
AppDomain.CurrentDomain.UnhandledException += AppDomain_UnhandledException;
Application.ThreadException += Application_ThreadException;
Application.Run(frm);
GlobalVariable.Instance.FormStartPosition = frm.StartPosition;
GlobalVariable.Instance.FormWindowState = frm.WindowState;
GlobalVariable.Instance.FormLocation = frm.Location;
if (frm.WindowState == FormWindowState.Normal) GlobalVariable.Instance.FormSize = frm.Size;
GlobalVariable.Instance.SaveSetting();
XLogger.Instance.Info("END");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
XLogger.Instance.Fatal(ex);
}
}
public static bool IsAdministrator()
{
WindowsIdentity identity = WindowsIdentity.GetCurrent();
if (identity != null)
{
WindowsPrincipal principal = new WindowsPrincipal(identity);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
return false;
}
/// <summary>
/// AppDomain.UnhandledException
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private static void AppDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
try
{
Exception ex = e.ExceptionObject as Exception;
XLogger.Instance.Fatal(ex);
if (e.IsTerminating) throw new Exception(ex.Message);
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
/// <summary>
/// Application.ThreadException
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
try
{
Exception ex = e.Exception as Exception;
XLogger.Instance.Fatal(ex);
MessageBox.Show(ex.Message, "Application Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
}
}

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해
// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
// 이러한 특성 값을 변경하세요.
[assembly: AssemblyTitle("EverOne EES Utility")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Copyright 2024. Jungwoo.Han all rights reserved")]
[assembly: AssemblyCopyright("Copyright ©2024")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
[assembly: ComVisible(false)]
// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
[assembly: Guid("b8459f14-92d3-482c-a932-65e76e6d11f6")]
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
//
// 주 버전
// 부 버전
// 빌드 번호
// 수정 버전
//
// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호가 자동으로
// 지정되도록 할 수 있습니다.
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("2025.01.07.0")]
[assembly: AssemblyFileVersion("2025.01.07.0")]

View File

@@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 이 코드는 도구를 사용하여 생성되었습니다.
// 런타임 버전:4.0.30319.42000
//
// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
// 이러한 변경 내용이 손실됩니다.
// </auto-generated>
//------------------------------------------------------------------------------
namespace DDUtilityApp.Properties {
using System;
/// <summary>
/// 지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다.
/// </summary>
// 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder
// 클래스에서 자동으로 생성되었습니다.
// 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여 ResGen을
// 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// 이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다.
/// </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("DDUtilityApp.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대해 현재 스레드의 CurrentUICulture 속성을
/// 재정의합니다.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@@ -0,0 +1,117 @@
<?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.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: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" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</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" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 이 코드는 도구를 사용하여 생성되었습니다.
// 런타임 버전:4.0.30319.42000
//
// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
// 이러한 변경 내용이 손실됩니다.
// </auto-generated>
//------------------------------------------------------------------------------
namespace DDUtilityApp.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.10.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

View File

@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

View File

@@ -0,0 +1,11 @@
Telerik.WinControls.UI.RadListView, Telerik.WinControls.UI, Version=2019.1.219.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e
Telerik.WinControls.UI.RadChartView, Telerik.WinControls.ChartView, Version=2019.1.219.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e
Telerik.WinControls.UI.RadTreeView, Telerik.WinControls.UI, Version=2019.1.219.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e
Telerik.WinControls.UI.RadButton, Telerik.WinControls.UI, Version=2019.1.219.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e
Telerik.WinControls.UI.RadTimePicker, Telerik.WinControls.UI, Version=2019.1.219.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e
Telerik.WinControls.UI.RadDateTimePicker, Telerik.WinControls.UI, Version=2019.1.219.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e
Telerik.WinControls.UI.RadStatusStrip, Telerik.WinControls.UI, Version=2019.1.219.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e
Telerik.WinControls.UI.RadDropDownList, Telerik.WinControls.UI, Version=2019.1.219.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e
Telerik.WinControls.UI.RadCheckedDropDownList, Telerik.WinControls.UI, Version=2019.1.219.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e
Telerik.WinControls.UI.RadLabel, Telerik.WinControls.UI, Version=2019.1.219.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e
Telerik.WinControls.UI.RadTextBox, Telerik.WinControls.UI, Version=2019.1.219.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e

View File

@@ -0,0 +1,2 @@
DevExpress.XtraTreeList.TreeList, DevExpress.XtraTreeList.v18.2, Version=18.2.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
Telerik.WinControls.UI.RadGridView, Telerik.WinControls.GridView, Version=2019.1.219.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e

5
DDUtilityApp/ReadMe.txt Normal file
View File

@@ -0,0 +1,5 @@
# Ver 0.1.0.3
- [Patch] 1024라인을 초과하는 문자열 관련하여 SelectionStart() 위치 조정.
# Ver 0.1.0.4
- [Add] Download 옵션 추가.
갱신중인 파일의 경우 로컬 다운로드 후에 파일 오픈을 실행합니다.

135
DDUtilityApp/SECS/CEID.cs Normal file
View File

@@ -0,0 +1,135 @@
using JWH;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
namespace DDUtilityApp.SECS
{
public class CEID
{
public static CEID CreateCEID(XmlNode node)
{
CEID ceid = new CEID();
try
{
foreach (XmlAttribute attribute in node.Attributes)
{
if (string.Compare(attribute.Name, "ID", true) == 0) ceid.ID = attribute.Value;
if (string.Compare(attribute.Name, "Name", true) == 0) ceid.Name = attribute.Value;
if (string.Compare(attribute.Name, "Description", true) == 0) ceid.Description = attribute.Value;
}
if (string.IsNullOrEmpty(ceid.ID))
{
XLogger.Instance.Warn($"CEID.ID 값이 존재하지 않습니다.");
return null;
}
int seq = 1;
foreach (XmlNode child in node.ChildNodes)
{
RPT rpt = RPT.CreateRPT(child);
if (rpt.Seq == -1) rpt.Seq = seq++;
else seq = rpt.Seq + 1;
if (rpt != null) ceid.RptDictionary.Add(rpt.ID, rpt);
}
return ceid;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
return null;
}
}
#region [ Properties ] ------------------------------------------------
public string ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public bool Enable { get; set; } = true;
public Dictionary<string, RPT> RptDictionary { get; set; } = new Dictionary<string, RPT>();
public IEnumerable<RPT> RptCollection { get { return this.RptDictionary.Values; } }
#endregion
#region [ CEID ] ------------------------------------------------------
public CEID()
{
}
public CEID(string id, string name = "", string description = "", bool enable = true)
{
this.ID = id;
this.Name = name;
this.Description = description;
this.Enable = enable;
}
#endregion
#region [ Method ] ----------------------------------------------------
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.Append($"ID={this.ID}");
sb.Append($", Name={this.Name}");
if (!string.IsNullOrEmpty(this.Description)) sb.Append($", Description={this.Description}");
if (this.Enable == false) sb.Append($", Enable={this.Enable}");
StringBuilder sbRpt = new StringBuilder();
sbRpt.Append($"RPT[{this.RptCollection.Count()}] {{ ");
foreach (RPT rpt in this.RptCollection)
sbRpt.Append($"{rpt.ID} ");
sbRpt.Append($"}}");
return $"{sb.ToString()}, {sbRpt.ToString()}";
}
public string ToXml(string indent = "", bool inReport = true, bool inSvid = true)
{
StringBuilder sb = new StringBuilder();
if (inReport)
{
sb.Append($"{indent}<CEID ID='{this.ID}'");
sb.Append($" NAME='{this.Name}'");
sb.Append($" ENABLE='{this.Enable}' ");
if (!string.IsNullOrEmpty(this.Description)) sb.Append($" DESCRIPTION='{this.Description}'");
sb.AppendLine($">");
foreach (RPT rpt in this.RptCollection.OrderBy(x => x.Seq))
sb.AppendLine($"{indent}{rpt.ToXml($" ", inSvid)}");
sb.Append($"{indent}</CEID>");
}
else
{
sb.Append($"{indent}<CEID ID='{this.ID}'");
sb.Append($" NAME='{this.Name}'");
sb.Append($" ENABLE='{this.Enable}' ");
if (!string.IsNullOrEmpty(this.Description)) sb.Append($" DESCRIPTION='{this.Description}'");
sb.Append($" />");
}
return sb.ToString();
}
#endregion
}
}

134
DDUtilityApp/SECS/RPT.cs Normal file
View File

@@ -0,0 +1,134 @@
using JWH;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
namespace DDUtilityApp.SECS
{
public class RPT
{
public static RPT CreateRPT(XmlNode node)
{
RPT rpt = new RPT();
try
{
foreach (XmlAttribute attribute in node.Attributes)
{
if (string.Compare(attribute.Name, "ID", true) == 0) rpt.ID = attribute.Value;
if (string.Compare(attribute.Name, "Seq", true) == 0) { int nSeq; int.TryParse(attribute.Value, out nSeq); rpt.Seq = nSeq; };
if (string.Compare(attribute.Name, "Name", true) == 0) rpt.Name = attribute.Value;
if (string.Compare(attribute.Name, "Description", true) == 0) rpt.Description = attribute.Value;
}
if (string.IsNullOrEmpty(rpt.ID))
{
XLogger.Instance.Warn($"RPT.ID 값이 존재하지 않습니다.");
return null;
}
int seq = 1;
foreach (XmlNode child in node.ChildNodes)
{
VID vid = VID.CreateVID(child);
if (vid.Seq == -1) vid.Seq = seq++;
else seq = rpt.Seq + 1;
if (vid != null) rpt.VidDictionary.Add(vid.ID, vid);
}
return rpt;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
return null;
}
}
#region [ Properties ] ------------------------------------------------
public string ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public int Seq { get; set; } = -1;
public Dictionary<string, VID> VidDictionary { get; set; } = new Dictionary<string, VID>();
public IEnumerable<VID> VidCollection { get { return this.VidDictionary.Values; } }
#endregion
#region [ RPT ] -------------------------------------------------------
public RPT()
{
}
public RPT(string id, string name = "", string description = "")
{
this.ID = id;
this.Name = name;
this.Description = description;
}
#endregion
#region [ Method ] ----------------------------------------------------
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.Append($"ID={this.ID}");
sb.Append($", Name={this.Name}");
if (!string.IsNullOrEmpty(this.Description)) sb.Append($", Description={this.Description}");
StringBuilder sbVid = new StringBuilder();
sbVid.Append($"VID[{this.VidCollection.Count()}] {{ ");
foreach(VID vid in this.VidCollection)
sbVid.Append($"{vid.ID} ");
sbVid.Append($"}}");
return $"{sb.ToString()}, {sbVid.ToString()}";
}
public string ToXml(string indent = "", bool inSvid = true)
{
StringBuilder sb = new StringBuilder();
if (inSvid)
{
sb.Append($"{indent}<RPT ID='{this.ID}'");
if (!string.IsNullOrEmpty(this.Name)) sb.Append($" NAME='{this.Name}'");
if (!string.IsNullOrEmpty(this.Description)) sb.Append($" DESCRIPTION='{this.Description}'");
sb.AppendLine($">");
foreach (VID vid in this.VidCollection.OrderBy(x => x.Seq))
sb.AppendLine($"{indent}{vid.ToXml($" ", true)}");
sb.Append($"{indent}</RPT>");
}
else
{
sb.Append($"{indent}<RPT");
sb.Append($" SEQ ='{this.Seq}'");
sb.Append($" ID ='{this.ID}'");
if (!string.IsNullOrEmpty(this.Name)) sb.Append($" NAME='{this.Name}'");
sb.Append($" />");
}
return sb.ToString();
}
#endregion
}
}

View File

@@ -0,0 +1,272 @@
using EIS.Framework.Service.GEM;
using JWH;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Xml;
namespace DDUtilityApp.SECS
{
public class SECSDefine
{
#region [ Properties ] ------------------------------------------------
public string Name { get; set; }
public Dictionary<string, CEID> CeidDictionary { get; set; } = new Dictionary<string, CEID>();
public Dictionary<string, RPT> RptDictionary { get; set; } = new Dictionary<string, RPT>();
public Dictionary<string, VID> VidDictionary { get; set; } = new Dictionary<string, VID>();
public IEnumerable<CEID> CeidCollection { get { return CeidDictionary.Values; } }
public IEnumerable<RPT> RptCollection { get { return RptDictionary.Values; } }
public IEnumerable<VID> VidCollection { get { return VidDictionary.Values; } }
#endregion
#region [ SECSSetting ] -----------------------------------------------
public SECSDefine()
{
}
public SECSDefine(XmlNode node)
{
try
{
this.Name = node.Attributes["NAME"].Value;
foreach (XmlNode child in node.ChildNodes)
{
if (string.Compare(child.Name, "CEID_LIST", true) == 0) this.Load_CEID(child);
else if (string.Compare(child.Name, "RPT_LIST", true) == 0) this.Load_RPT(child);
}
this.VidDictionary = this.GetVidDictionary();
Trace.WriteLine($" <MODEL NAME='{this.Name}'>");
Trace.WriteLine($" <CEID_LIST>");
foreach (CEID ceid in this.CeidCollection.OrderBy(x => x.ID))
Trace.WriteLine($"{ceid.ToXml(" ")}");
Trace.WriteLine($" </CEID_LIST>");
Trace.WriteLine($" <RPT_LIST>");
foreach (RPT rpt in this.RptCollection.OrderBy(x => x.ID))
Trace.WriteLine($"{rpt.ToXml(" ")}");
Trace.WriteLine($" </RPT_LIST>");
Trace.WriteLine($" <VID_LIST>");
foreach (VID vid in this.VidCollection.OrderBy(x => x.ID))
Trace.WriteLine($"{vid.ToXml(" ")}");
Trace.WriteLine($" </VID_LIST>");
Trace.WriteLine($" </MODEL>");
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
public SECSDefine(EIS.Framework.Service.GEM.GEMSettings gem)
{
try
{
foreach (VIDInfo gemVid in gem.VIDList.Values)
{
VID vid = new VID(gemVid.ID, gemVid.Name, gemVid.Class.ToString(), "", gemVid.Description);
this.VidDictionary.Add(vid.ID, vid);
//Trace.WriteLine($"<VID ID='{gemVid.ID}' NAME='{gemVid.Name}' CLASS='{gemVid.Class}' DESCRIPTION='{gemVid.Description}' />");
}
foreach (RPTIDInfo gemRpt in gem.RPTIDList.Values)
{
RPT rpt = new RPT(gemRpt.ID, "", gemRpt.Description);
this.RptDictionary.Add(rpt.ID, rpt);
int vidSeq = 1;
foreach (string strVid in gemRpt.VIDList)
{
VID vid = this.VidDictionary[strVid].Clone();
vid.Seq = vidSeq++;
rpt.VidDictionary.Add(strVid, vid);
}
//Trace.WriteLine($"<RPT ID='{gemRpt.ID}'>");
//foreach (string vID in gemRpt.VIDList)
// Trace.WriteLine($" <VID ID='{vID}' />");
//Trace.WriteLine($"</RPT>");
}
foreach (CEIDInfo gemCeid in gem.CEIDList.Values)
{
CEID ceid = new CEID(gemCeid.ID, gemCeid.Name, gemCeid.Description, gemCeid.Enable);
this.CeidDictionary.Add(ceid.ID, ceid);
int rptSeq = 1;
foreach (string strRpt in gemCeid.RPTIDList)
{
RPT rpt = this.RptDictionary[strRpt].Clone();
rpt.Seq = rptSeq++;
ceid.RptDictionary.Add(rpt.ID, rpt);
}
//Trace.WriteLine($"<CEID ID='{gemCeid.ID}' NAME='{gemCeid.Name}' ENABLE='{gemCeid.Enable}' DESCRIPTION='{gemCeid.Description}'>");
//foreach (string rptID in gemCeid.RPTIDList)
// Trace.WriteLine($" <RPT ID='{rptID}' />");
//Trace.WriteLine($"</CEID>");
}
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
#endregion
#region [ Method ] ----------------------------------------------------
private void Load_CEID(XmlNode root)
{
try
{
CEID ceid = null;
foreach (XmlNode node in root.ChildNodes)
{
ceid = CEID.CreateCEID(node);
if (ceid != null)
{
if (this.CeidDictionary.ContainsKey(ceid.ID))
XLogger.Instance.Warn($"CEID.ID={ceid.ID} 가 이미 존재합니다.");
else
this.CeidDictionary.Add(ceid.ID, ceid);
}
else
{
XLogger.Instance.Warn($"CEID를 생성하지 못하였습니다.");
}
}
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
private void Load_RPT(XmlNode root)
{
try
{
RPT rpt = null;
foreach (XmlNode node in root.ChildNodes)
{
rpt = RPT.CreateRPT(node);
if (rpt != null)
{
if (this.RptDictionary.ContainsKey(rpt.ID))
XLogger.Instance.Warn($"RPT.ID={rpt.ID} 가 이미 존재합니다.");
else
this.RptDictionary.Add(rpt.ID, rpt);
}
else
{
XLogger.Instance.Warn($"RPT를 생성하지 못하였습니다.");
}
}
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
private Dictionary<string, VID> GetVidDictionary()
{
Dictionary<string, VID> dicVID = new Dictionary<string, VID>();
try
{
foreach (RPT rpt in this.RptCollection)
{
foreach (VID vid in rpt.VidCollection)
{
if (dicVID.ContainsKey(vid.ID)) continue;
dicVID.Add(vid.ID, vid);
}
}
return dicVID;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
return dicVID;
}
}
public void SetInformation(SECSItem item)
{
try
{
if ($"S{item.Stream}F{item.Function}" == "S6F11")
{
if (item.ChildItems.Count != 3)
{
XLogger.Instance.Warn($"S6F11 하위 항목의 갯수가 일치하지 않습니다.");
return;
}
if (string.IsNullOrEmpty(item.ChildItems[0].Name)) item.ChildItems[0].Name = "DATAID";
if (string.IsNullOrEmpty(item.ChildItems[1].Name)) item.ChildItems[1].Name = "CEID";
if (!this.CeidDictionary.ContainsKey(item.ChildItems[1].Value))
{
XLogger.Instance.Warn($"CEID={item.ChildItems[1].Value}가 정의되지 않았습니다.");
return;
}
CEID ceid = this.CeidDictionary[item.ChildItems[1].Value];
item.ChildItems[1].Description = ceid.Name;
foreach (SECSItem itemRPT in item.ChildItems[2].ChildItems)
{
if (itemRPT.ChildItems.Count != 2)
{
XLogger.Instance.Warn($"CEID={item.ChildItems[1].Value}의 레포트 갯수가 일치하지 않습니다.");
continue;
}
if (string.IsNullOrEmpty(itemRPT.ChildItems[0].Name)) itemRPT.ChildItems[0].Name = "RPTID";
if (!this.RptDictionary.ContainsKey(itemRPT.ChildItems[0].Value))
{
XLogger.Instance.Warn($"RPTID={itemRPT.ChildItems[0].Value}가 정의되지 않았습니다.");
continue;
}
RPT rpt = this.RptDictionary[itemRPT.ChildItems[0].Value];
if (rpt.VidDictionary.Count != itemRPT.ChildItems[1].Count)
{
XLogger.Instance.Warn($"RPTID={itemRPT.ChildItems[0].Value}의 VID 갯수가 일치하지 않습니다.");
continue;
}
int index = 0;
foreach (VID vid in rpt.VidCollection)
{
if (string.IsNullOrEmpty(itemRPT.ChildItems[1][index].Name)) itemRPT.ChildItems[1][index].Name = vid.Name;
if (string.IsNullOrEmpty(itemRPT.ChildItems[1][index].Description)) itemRPT.ChildItems[1][index].Description = vid.Description;
index++;
}
}
}
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
#endregion
}
}

View File

@@ -0,0 +1,163 @@
using JWH;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DDUtilityApp.SECS
{
public class SECSItem : IList<SECSItem>
{
#region [ Propeties ] -------------------------------------------------
public string Stream { get; set; } = string.Empty;
public string Function { get; set; } = string.Empty;
public string ID { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
public string Format { get; set; } = string.Empty;
public int Length { get; set; } = 0;
public string Value { get; set; } = string.Empty;
public string Description { get; set; } = string.Empty;
public SECSItem Parent { get; set; } = null;
public List<SECSItem> ChildItems { get; set; } = new List<SECSItem>();
#endregion
#region [ SECSItem ] -------------------------------------------------
public SECSItem()
{
}
public SECSItem(SECSItem parent)
{
this.Parent = parent;
}
public SECSItem(string stream, string function)
{
this.Stream = stream;
this.Function = function;
}
#endregion
#region [ Method ] ----------------------------------------------------
public override string ToString()
{
try
{
StringBuilder sb = new StringBuilder();
sb.AppendFormat($"<{this.Format} ");
sb.AppendFormat($"[{this.Length}] ");
if (!string.IsNullOrEmpty(this.Name)) sb.AppendFormat($"{this.Name} ");
if (new string[] { "L" }.Contains(this.Format) == false) sb.AppendFormat($"'{this.Value}' ");
if (new string[] { "L" }.Contains(this.Format) == false) sb.AppendFormat($">");
return sb.ToString();
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
return string.Empty;
}
}
public string ToFullString(string intendted = "")
{
try
{
StringBuilder sb = new StringBuilder();
sb.AppendLine(intendted + this.ToString());
foreach(SECSItem item in this.ChildItems)
sb.AppendFormat(item.ToFullString(intendted + " "));
return sb.ToString();
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
return string.Empty;
}
}
#endregion
#region [ IList<SECSItem> ] -------------------------------------------
public int Count => this.ChildItems.Count;
public bool IsReadOnly => throw new NotImplementedException();
public SECSItem this[int index] { get => this.ChildItems[index]; set => this.ChildItems[index] = value; }
public int IndexOf(SECSItem item)
{
throw new NotImplementedException();
}
public void Insert(int index, SECSItem item)
{
throw new NotImplementedException();
}
public void RemoveAt(int index)
{
throw new NotImplementedException();
}
public void Add(SECSItem item)
{
item.Parent = this;
this.ChildItems.Add(item);
}
public void Clear()
{
throw new NotImplementedException();
}
public bool Contains(SECSItem item)
{
throw new NotImplementedException();
}
public void CopyTo(SECSItem[] array, int arrayIndex)
{
throw new NotImplementedException();
}
public bool Remove(SECSItem item)
{
throw new NotImplementedException();
}
public IEnumerator<SECSItem> GetEnumerator()
{
return this.ChildItems.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
throw new NotImplementedException();
}
#endregion
}
}

View File

@@ -0,0 +1,71 @@
using JWH;
using System;
using System.Collections;
using System.Collections.Generic;
namespace DDUtilityApp.SECS
{
static class SECSLib
{
public static Dictionary<string, Type> ItemFormat = new Dictionary<string, Type>()
{
{ "L", typeof(IList) }, { "A", typeof(string) }, { "B", typeof(byte) }, { "BOOL", typeof(bool) },
{ "J", typeof(int) }, { "F4", typeof(float) }, { "F8", typeof(float) },
{ "I1", typeof(Int16) }, { "I2", typeof(Int16) }, { "I4", typeof(Int32) }, { "I8", typeof(Int64) },
{ "U1", typeof(UInt16) }, { "U2", typeof(UInt16) }, { "U4", typeof(UInt32) }, { "U8", typeof(UInt64) },
};
public enum ItemType { None, Format, Length, Name, Value }
public static SECSItem[] GetItemByName(this SECSItem item, params string[] names)
{
List<SECSItem> items = new List<SECSItem>();
foreach (string name in names)
if (string.Compare(item.Name, name, true) == 0) items.Add(item);
foreach(SECSItem childItem in item)
items.AddRange(childItem.GetItemByName(names));
return items.ToArray();
}
public static SECSItem[] GetItemCPValue(this SECSItem item, params string[] names)
{
List<SECSItem> items = new List<SECSItem>();
if (item.ChildItems.Count != 2) return items.ToArray();
foreach (SECSItem childItem in item.ChildItems[1])
{
if (childItem.Format != "L") continue;
if (childItem.ChildItems.Count != 2) continue;
foreach(string name in names)
{
if (string.Compare(childItem.ChildItems[0].Value, name, true) == 0)
{
items.Add(childItem.ChildItems[1]);
break;
}
}
}
return items.ToArray();
}
public static SECSItem[] GetItemByID(this SECSItem item, string id)
{
List<SECSItem> items = new List<SECSItem>();
if (string.Compare(item.ID, id, true) == 0) items.Add(item);
foreach (SECSItem childItem in item)
items.AddRange(childItem.GetItemByID(id));
return items.ToArray();
}
}
}

115
DDUtilityApp/SECS/VID.cs Normal file
View File

@@ -0,0 +1,115 @@
using JWH;
using System;
using System.Text;
using System.Xml;
namespace DDUtilityApp.SECS
{
public class VID
{
public static VID CreateVID(XmlNode node)
{
VID vid = new VID();
try
{
foreach (XmlAttribute attribute in node.Attributes)
{
if (string.Compare(attribute.Name, "ID", true) == 0) vid.ID = attribute.Value;
if (string.Compare(attribute.Name, "Seq", true) == 0) { int seq; int.TryParse(attribute.Value, out seq); vid.Seq = seq; };
if (string.Compare(attribute.Name, "Name", true) == 0) vid.Name = attribute.Value;
if (string.Compare(attribute.Name, "Format", true) == 0) vid.Format = attribute.Value;
if (string.Compare(attribute.Name, "Length", true) == 0) { int length; int.TryParse(attribute.Value, out length); vid.Length = length; };
if (string.Compare(attribute.Name, "Description", true) == 0) vid.Description = attribute.Value;
}
if (string.IsNullOrEmpty(vid.ID))
{
XLogger.Instance.Warn($"VID.ID 값이 존재하지 않습니다.");
return null;
}
return vid;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
return null;
}
}
#region [ Properties ] ------------------------------------------------
public string ID { get; set; }
public string Name { get; set; }
public string Class { get; set; } = "SVID";
public string Format { get; set; }
public int Length { get; set; } = 1;
public string Description { get; set; }
public int Seq { get; set; } = -1;
#endregion
#region [ VID ] -------------------------------------------------------
public VID()
{
}
public VID(string id, string name="", string vidClass="", string format="", string description="")
{
this.ID = id;
this.Name = name;
this.Class = vidClass;
this.Format = format;
this.Description = description;
}
#endregion
#region [ Method ] ----------------------------------------------------
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.Append($"ID={this.ID}");
sb.Append($", Name={this.Name}");
if (string.IsNullOrEmpty(this.Format) == false) sb.Append($", Format={this.Format}");
if (string.IsNullOrEmpty(this.Description) == false) sb.Append($", Description={this.Description}");
return $"{sb.ToString()}";
}
public string ToXml(string indent = "", bool inSeq = false)
{
StringBuilder sb = new StringBuilder();
if (inSeq) sb.Append($"{indent}<SVID SEQ='{this.Seq}'");
else sb.Append($"{indent}<VID");
sb.Append($" ID='{this.ID}'");
sb.Append($" NAME='{this.Name}'");
if (!string.IsNullOrEmpty(this.Format))
{
sb.Append($" FORMAT='{this.Format}'");
sb.Append($" LENGTH='{this.Length}'");
}
if (!string.IsNullOrEmpty(this.Description)) sb.Append($" DESCRIPTION='{this.Description}'");
sb.Append($" />");
return sb.ToString();
}
#endregion
}
}

View File

@@ -0,0 +1,41 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DDUtilityApp.SPECDOCUMENT
{
[Serializable]
public class DocumentInfo
{
#region [ Variables ] =================================================
#endregion
#region [ Properties ] ================================================
public string Name { get; set; } = string.Empty;
public string Version { get; set; } = string.Empty;
public string Description { get; set; } = string.Empty;
public string Path { get; set; } = string.Empty;
#endregion
#region [ DocumentInfo ] ==============================================
#endregion
#region [ Public Methods ] ============================================
#endregion
#region [ Methods ] ===================================================
#endregion
}
}

View File

@@ -0,0 +1,92 @@
namespace DDUtilityApp.SPECDOCUMENT
{
partial class FrmSpecDocument
{
/// <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.pnlForm = new System.Windows.Forms.Panel();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.tree = new System.Windows.Forms.TreeView();
this.pnlForm.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.SuspendLayout();
this.SuspendLayout();
//
// pnlForm
//
this.pnlForm.Controls.Add(this.splitContainer1);
this.pnlForm.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlForm.Location = new System.Drawing.Point(0, 0);
this.pnlForm.Name = "pnlForm";
this.pnlForm.Size = new System.Drawing.Size(800, 450);
this.pnlForm.TabIndex = 0;
//
// splitContainer1
//
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.Location = new System.Drawing.Point(0, 0);
this.splitContainer1.Name = "splitContainer1";
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.tree);
this.splitContainer1.Size = new System.Drawing.Size(800, 450);
this.splitContainer1.SplitterDistance = 266;
this.splitContainer1.TabIndex = 0;
//
// tree
//
this.tree.Dock = System.Windows.Forms.DockStyle.Fill;
this.tree.Location = new System.Drawing.Point(0, 0);
this.tree.Name = "tree";
this.tree.Size = new System.Drawing.Size(266, 450);
this.tree.TabIndex = 0;
//
// FrmSpecDocument
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.pnlForm);
this.Name = "FrmSpecDocument";
this.Text = "FrmSpecDocument";
this.pnlForm.ResumeLayout(false);
this.splitContainer1.Panel1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Panel pnlForm;
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.TreeView tree;
}
}

View File

@@ -0,0 +1,98 @@
using JWH.NETWORK;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DDUtilityApp.SPECDOCUMENT
{
public partial class FrmSpecDocument : Form
{
#region [ Variables ] =================================================
private SpecDocument SpecDocument { get; set; } = null;
#endregion
#region [ Properties ] ================================================
#endregion
#region [ FrmSpecDocument ] ===========================================
public FrmSpecDocument()
{
InitializeComponent();
this.SetLayout();
this.SetEventHandler();
this.SpecDocument = new SpecDocument("ftp://127.0.0.1:2100", "", "");
//this.SpecDocument = new SpecDocument("ftp://192.168.8.217", "", "");
//192.168.8.217
}
private void SetLayout()
{
}
public void SetEventHandler()
{
this.Load += this.FrmSpecDocument_Load;
this.FormClosed += this.FrmSpecDocument_FormClosed;
this.tree.AfterExpand += this.Tree_AfterExpand;
}
private string TreeNodeLastFullPath { get; set; } = string.Empty;
private void Tree_AfterExpand(object sender, TreeViewEventArgs e)
{
FtpDirectory ftpDirectory = e.Node.Tag as FtpDirectory;
if (ftpDirectory == null) return;
if (string.Compare(this.TreeNodeLastFullPath, e.Node.FullPath) == 0) return;
int index = e.Node.Index;
this.TreeNodeLastFullPath = e.Node.FullPath;
TreeNode parent = e.Node.Parent;
FtpClient ftpClient = this.SpecDocument.GetFtpClient();
ftpDirectory.GetChilds(ftpClient, 1);
TreeNode newNode = ftpDirectory.GetTreeNode();
newNode.Expand();
this.tree.SuspendLayout();
parent.Nodes.Insert(index, newNode);
e.Node.Remove();
this.tree.ResumeLayout();
}
private void FrmSpecDocument_Load(object sender, EventArgs e)
{
this.SpecDocument.ReBuild(1);
TreeNode node = this.SpecDocument.GetTreeNode();
this.tree.Nodes.Add(node);
}
private void FrmSpecDocument_FormClosed(object sender, FormClosedEventArgs e)
{
}
#endregion
#region [ Events ] ====================================================
#endregion
#region [ Methods ] ===================================================
#endregion
}
}

View 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>

View File

@@ -0,0 +1,128 @@
using JWH;
using JWH.NETWORK;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DDUtilityApp.SPECDOCUMENT
{
[Serializable]
public class SpecDocument
{
#region [ Variables ] =================================================
#endregion
#region [ Properties ] ================================================
public string URI { get; set; } = string.Empty;
public string UID { get; set; } = string.Empty;
public string PWD { get; set; } = string.Empty;
public List<SpecInfo> SpecInfos { get; set; } = new List<SpecInfo>();
public List<FtpObject> Childs { get; set; } = new List<FtpObject>();
#endregion
#region [ SpecDocument ] ==============================================
public SpecDocument()
{
}
public SpecDocument(string uri, string uid, string pwd)
{
this.URI = uri;
this.UID = uid;
this.PWD = pwd;
}
#endregion
#region [ Public Methods ] ============================================
public bool ReBuild(int depth = 0)
{
FtpObject[] ftpObjects = this.GetChilds(depth);
this.Childs.Clear();
this.Childs.AddRange(ftpObjects);
return true;
}
public TreeNode GetTreeNode()
{
TreeNode node = new TreeNode(this.URI, 1, 0);
foreach(FtpObject child in this.Childs)
{
node.Nodes.Add(child.GetTreeNode());
}
return node;
}
public void Refresh(FtpObject ftpObject, int depth = 0)
{
}
public void Refresh(TreeNode node, int depth = 0)
{
FtpObject ftpObject = node.Tag as FtpObject;
if (ftpObject == null) return;
}
#endregion
#region [ Methods ] ===================================================
public FtpClient GetFtpClient()
{
try
{
FtpClient ftpClient = new FtpClient(this.URI, this.UID, this.PWD);
return ftpClient;
}
catch (Exception ex)
{
throw ex;
}
}
private FtpObject[] GetChilds(int depth = 0)
{
try
{
List<FtpObject> lstChild = new List<FtpObject>();
FtpClient ftpClient = this.GetFtpClient();
foreach(FtpObject child in ftpClient.GetFtpObjects(""))
{
lstChild.Add(child);
if (child.GetType() == typeof(FtpDirectory) && depth > 0)
{
FtpDirectory ftpDirectory = child as FtpDirectory;
ftpDirectory.GetChilds(ftpClient, depth - 1);
}
}
return lstChild.ToArray();
}
catch (Exception ex)
{
throw ex;
}
}
#endregion
}
}

View File

@@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DDUtilityApp.SPECDOCUMENT
{
[Serializable]
public class SpecInfo
{
#region [ Variables ] =================================================
#endregion
#region [ Properties ] ================================================
public string Name { get; set; } = string.Empty;
public string Description { get; set; } = string.Empty;
public List<DocumentInfo> DocumentInfos { get; set; } = new List<DocumentInfo>();
#endregion
#region [ SpecInfo ] ==================================================
#endregion
#region [ Public Methods ] ============================================
#endregion
#region [ Methods ] ===================================================
#endregion
}
}

71
DDUtilityApp/TEST/FrmTest01.Designer.cs generated Normal file
View File

@@ -0,0 +1,71 @@
namespace DDUtilityApp.TEST
{
partial class FrmTest01
{
/// <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.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(69, 64);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(106, 30);
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.UseVisualStyleBackColor = true;
//
// button2
//
this.button2.Location = new System.Drawing.Point(181, 64);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(106, 30);
this.button2.TabIndex = 1;
this.button2.Text = "button2";
this.button2.UseVisualStyleBackColor = true;
//
// FrmTest01
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Name = "FrmTest01";
this.Text = "FrmTest01";
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
}
}

View File

@@ -0,0 +1,105 @@
using EIS.Framework.Service.GEM;
using JWH;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DDUtilityApp.TEST
{
public partial class FrmTest01 : Form
{
public string FileName { get; set; }
public FrmTest01()
{
InitializeComponent();
this.SetLayout();
this.SetEventHandler();
}
protected void SetLayout()
{
}
protected void SetEventHandler()
{
this.button1.Click += Button1_Click;
this.button2.Click += Button2_Click;
}
private void Button1_Click(object sender, EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
if (dlg.ShowDialog() != DialogResult.OK) return;
this.FileName = dlg.FileName;
}
private void Button2_Click(object sender, EventArgs e)
{
FileInfo file = new FileInfo(this.FileName);
Decompress(file);
}
private static string directoryPath = @".\temp";
public static void Compress(DirectoryInfo directorySelected)
{
foreach (FileInfo fileToCompress in directorySelected.GetFiles())
{
using (FileStream originalFileStream = fileToCompress.OpenRead())
{
if ((File.GetAttributes(fileToCompress.FullName) &
FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".gz")
{
using (FileStream compressedFileStream = File.Create(fileToCompress.FullName + ".gz"))
{
using (GZipStream compressionStream = new GZipStream(compressedFileStream,
CompressionMode.Compress))
{
originalFileStream.CopyTo(compressionStream);
}
}
FileInfo info = new FileInfo(directoryPath + Path.DirectorySeparatorChar + fileToCompress.Name + ".gz");
Console.WriteLine($"Compressed {fileToCompress.Name} from {fileToCompress.Length.ToString()} to {info.Length.ToString()} bytes.");
}
}
}
}
public static void Decompress(FileInfo fileToDecompress)
{
using (FileStream originalFileStream = fileToDecompress.OpenRead())
{
string currentFileName = fileToDecompress.FullName;
string newFileName = currentFileName.Remove(currentFileName.Length - fileToDecompress.Extension.Length);
using (FileStream decompressedFileStream = File.Create(newFileName))
{
using (GZipStream decompressionStream = new GZipStream(originalFileStream, CompressionMode.Decompress))
{
decompressionStream.CopyTo(decompressedFileStream);
Console.WriteLine($"Decompressed: {fileToDecompress.Name}");
}
}
}
}
}
}

View 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>

Binary file not shown.

View File

@@ -0,0 +1,13 @@
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="TIBCO.Rendezvous"
publicKeyToken="1A696D1F90F6158A"
culture="" />
<bindingRedirect oldVersion="1.0.0.0-1.0.5155.23393"
newVersion="1.0.5155.23393" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

Binary file not shown.

View File

@@ -0,0 +1,83 @@
using System;
using System.ComponentModel;
using System.Text;
using System.Xml;
using JWH;
using JWH.DATA;
namespace DDUtilityApp.TIBRENDEZVOUS.DATA
{
public class Daemon : DataTableBase
{
public string Name { get; set; } = string.Empty;
public string Value { get; set; } = string.Empty;
[ReadOnly(true)]
public string Description { get { return $"[{this.Name}] {this.Value}"; } }
public Daemon()
{
}
public Daemon(string name, string value)
{
this.Name = name;
this.Value = value;
}
public Daemon(XmlNode node)
{
try
{
node.PropertiesCopyAttribute(this);
this.Value = node.InnerText;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
public string ToXmlString(string indent = "")
{
try
{
StringBuilder sb = new StringBuilder();
sb.AppendLine($"{indent}<{this.GetType().Name}>{this.Value}</{this.GetType().Name}>");
return sb.ToString();
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
throw ex;
}
}
public override string ToString()
{
return $"[{this.Name}] {this.Value}";
}
public override bool Equals(object obj)
{
Daemon other = obj as Daemon;
if (other == null) return false;
if (!this.Name.Equals(other.Name)) return false;
if (!this.Value.Equals(other.Value)) return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
}

View File

@@ -0,0 +1,123 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Xml;
using JWH;
using JWH.DATA;
namespace DDUtilityApp.TIBRENDEZVOUS.DATA
{
public class Mode : DataTableBase
{
public string Name { get; set; } = string.Empty;
public List<Service> Services { get; set; } = new List<Service>();
public List<Network> Networks { get; set; } = new List<Network>();
public List<Daemon> Daemons { get; set; } = new List<Daemon>();
public List<Subject> Subjects { get; set; } = new List<Subject>();
public List<SendSubject> SendSubjects { get; set; } = new List<SendSubject>();
[ReadOnly(true)]
public string Description { get { return $"{this.Name}"; } }
public Mode()
{
}
public Mode(string name)
{
this.Name = name;
}
public Mode(XmlNode node)
{
try
{
node.PropertiesCopyAttribute(this);
XmlNode[] nodes = null;
// Services
nodes = node.GetNodesByName("Service");
foreach (XmlNode item in nodes)
this.Services.Add(new Service(item));
// Networks
nodes = node.GetNodesByName("Network");
foreach (XmlNode item in nodes)
this.Networks.Add(new Network(item));
// Daemons
nodes = node.GetNodesByName("Daemon");
foreach (XmlNode item in nodes)
this.Daemons.Add(new Daemon(item));
// Subjects
nodes = node.GetNodesByName("Subject");
foreach (XmlNode item in nodes)
this.Subjects.Add(new Subject(item));
// SendSubjects
nodes = node.GetNodesByName("SendSubject");
foreach (XmlNode item in nodes)
this.SendSubjects.Add(new SendSubject(item));
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
public string ToXmlString(string indent = "")
{
try
{
string indent02 = $"{indent} ";
string indent04 = $"{indent02} ";
StringBuilder sb = new StringBuilder();
sb.AppendLine($"{indent}<{this.GetType().Name} Name=\"{this.Name}\">");
// Services
foreach (Service value in this.Services)
sb.Append(value.ToXmlString(indent04));
// Networks
foreach (Network value in this.Networks)
sb.Append(value.ToXmlString(indent04));
// Daemons
foreach (Daemon value in this.Daemons)
sb.Append(value.ToXmlString(indent04));
// Subjects
foreach (Subject value in this.Subjects)
sb.Append(value.ToXmlString(indent04));
// SendSubjects
foreach (SendSubject value in this.SendSubjects)
sb.Append(value.ToXmlString(indent04));
sb.AppendLine($"{indent}</{this.GetType().Name}>");
return sb.ToString();
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
throw ex;
}
}
public override string ToString()
{
return $"{this.Name}";
}
}
}

View File

@@ -0,0 +1,83 @@
using System;
using System.ComponentModel;
using System.Text;
using System.Xml;
using JWH;
using JWH.DATA;
namespace DDUtilityApp.TIBRENDEZVOUS.DATA
{
public class Network : DataTableBase
{
public string Name { get; set; } = string.Empty;
public string Value { get; set; } = string.Empty;
[ReadOnly(true)]
public string Description { get { return $"[{this.Name}] {this.Value}"; } }
public Network()
{
}
public Network(string name, string value)
{
this.Name = name;
this.Value = value;
}
public Network(XmlNode node)
{
try
{
node.PropertiesCopyAttribute(this);
this.Value = node.InnerText;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
}
public string ToXmlString(string indent = "")
{
try
{
StringBuilder sb = new StringBuilder();
sb.AppendLine($"{indent}<{this.GetType().Name}>{this.Value}</{this.GetType().Name}>");
return sb.ToString();
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
throw ex;
}
}
public override string ToString()
{
return $"[{this.Name}] {this.Value}";
}
public override bool Equals(object obj)
{
Network other = obj as Network;
if (other == null) return false;
if (!this.Name.Equals(other.Name)) return false;
if (!this.Value.Equals(other.Value)) return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
}

Some files were not shown because too many files have changed in this diff Show More