프로젝트

일반

사용자정보

개정판 d7e20d2d

IDd7e20d2dad8780ab6ede36daf8f904e52efd6f80
상위 b4b23404
하위 dea506e2

김태성이(가) 약 5년 전에 추가함

markus 성능개선
- 일정 페이지범위를 local 저장소에 저장

Change-Id: Ib6ef3d770a360c40acf01d6de04668bee653eee4

차이점 보기:

DataBase/EntityModel/App.config
8 8
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
9 9
  </startup>
10 10
  <connectionStrings>
11
    <add name="MarkusModel" connectionString="metadata=res://*/MarkusModel.csdl|res://*/MarkusModel.ssdl|res://*/MarkusModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(LocalDB)\MSSQLLocalDB;attachdbfilename=D:\Source\Repos\MARKUS\DataBase\MarkusDatabase\MarkusDB.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /></connectionStrings>
11
    <add name="MarkusModel" connectionString="metadata=res://*/MarkusModel.csdl|res://*/MarkusModel.ssdl|res://*/MarkusModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(LocalDB)\MSSQLLocalDB;attachdbfilename=|DataDirectory|\MarkusDB.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
12
  </connectionStrings>
12 13
  <entityFramework>
13 14
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
14 15
    <providers>
DataBase/EntityModel/FINAL_PDF.cs
16 16
    {
17 17
        public string ID { get; set; }
18 18
        public string PROJECT_NO { get; set; }
19
        public int DOCINFO_ID { get; set; }
19
        public string DOCINFO_ID { get; set; }
20 20
        public int MARKUPINFO_ID { get; set; }
21 21
        public string CREATE_USER_ID { get; set; }
22 22
        public System.DateTime CREATE_DATETIME { get; set; }
DataBase/EntityModel/MarkusModel.Context.cs
33 33
        public virtual DbSet<DOCUMENT_ITEM> DOCUMENT_ITEM { get; set; }
34 34
        public virtual DbSet<ERROR_LOG> ERROR_LOG { get; set; }
35 35
        public virtual DbSet<FAVORITE_DOC> FAVORITE_DOC { get; set; }
36
        public virtual DbSet<FINAL_PDF> FINAL_PDF { get; set; }
37 36
        public virtual DbSet<LOGIN_STAMP> LOGIN_STAMP { get; set; }
38 37
        public virtual DbSet<MARKUP_CHECKLIST> MARKUP_CHECKLIST { get; set; }
39 38
        public virtual DbSet<MARKUP_DATA> MARKUP_DATA { get; set; }
......
50 49
        public virtual DbSet<SIGN_INFO> SIGN_INFO { get; set; }
51 50
        public virtual DbSet<SYMBOL_PRIVATE> SYMBOL_PRIVATE { get; set; }
52 51
        public virtual DbSet<SYMBOL_PUBLIC> SYMBOL_PUBLIC { get; set; }
52
        public virtual DbSet<FINAL_PDF> FINAL_PDF { get; set; }
53 53
    }
54 54
}
DataBase/EntityModel/MarkusModel.Designer.cs
1
// 모델 'D:\Source\Repos\MARKUS\DataBase\EntityModel\EntityModel\MarkusModel.edmx'에 대해 T4 코드 생성이 사용됩니다. 
1
// 모델 'D:\Source\Repos\MARKUS\DataBase\EntityModel\MarkusModel.edmx'에 대해 T4 코드 생성이 사용됩니다. 
2 2
// 레거시 코드 생성을 사용하려면 '코드 생성 전략' 디자이너 속성의 값을
3 3
// 'Legacy ObjectContext'로 변경하십시오. 이 속성은 모델이 디자이너에서 열릴 때
4 4
// 속성 창에서 사용할 수 있습니다.
DataBase/EntityModel/MarkusModel.edmx
4 4
  <edmx:Runtime>
5 5
    <!-- SSDL content -->
6 6
    <edmx:StorageModels>
7
      <Schema Namespace="MarkusDBModel.Store" Provider="System.Data.SqlClient" ProviderManifestToken="2012" Alias="Self" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm/ssdl">
7
    <Schema Namespace="MarkusDBModel.Store" Provider="System.Data.SqlClient" ProviderManifestToken="2012" Alias="Self" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm/ssdl">
8 8
        <EntityType Name="ATTACH_URL">
9 9
          <Key>
10 10
            <PropertyRef Name="ID" />
......
119 119
          </Key>
120 120
          <Property Name="ID" Type="nvarchar" MaxLength="50" Nullable="false" />
121 121
          <Property Name="PROJECT_NO" Type="nvarchar" MaxLength="10" Nullable="false" />
122
          <Property Name="DOCINFO_ID" Type="int" Nullable="false" />
122
          <Property Name="DOCINFO_ID" Type="nvarchar" MaxLength="50" Nullable="false" />
123 123
          <Property Name="MARKUPINFO_ID" Type="int" Nullable="false" />
124 124
          <Property Name="CREATE_USER_ID" Type="nvarchar" MaxLength="50" Nullable="false" />
125 125
          <Property Name="CREATE_DATETIME" Type="datetime" Nullable="false" />
......
462 462
            <End Role="SYMBOL_PRIVATE" EntitySet="SYMBOL_PRIVATE" />
463 463
          </AssociationSet>
464 464
        </EntityContainer>
465
      </Schema>
466
    </edmx:StorageModels>
465
      </Schema></edmx:StorageModels>
467 466
    <!-- CSDL content -->
468 467
    <edmx:ConceptualModels>
469 468
      <Schema Namespace="MarkusDBModel" Alias="Self" annotation:UseStrongSpatialTypes="false" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm">
......
581 580
          <Property Name="PAGE_NO" Type="Int32" Nullable="false" />
582 581
          <NavigationProperty Name="MEMBER" Relationship="Self.FK_FAVORIT_DOC_FAVORIT_DOC" FromRole="FAVORITE_DOC" ToRole="MEMBER" />
583 582
        </EntityType>
584
        <EntityType Name="FINAL_PDF">
585
          <Key>
586
            <PropertyRef Name="ID" />
587
          </Key>
588
          <Property Name="ID" Type="String" MaxLength="50" FixedLength="false" Unicode="true" Nullable="false" />
589
          <Property Name="PROJECT_NO" Type="String" MaxLength="10" FixedLength="false" Unicode="true" Nullable="false" />
590
          <Property Name="DOCINFO_ID" Type="Int32" Nullable="false" />
591
          <Property Name="MARKUPINFO_ID" Type="Int32" Nullable="false" />
592
          <Property Name="CREATE_USER_ID" Type="String" MaxLength="50" FixedLength="false" Unicode="true" Nullable="false" />
593
          <Property Name="CREATE_DATETIME" Type="DateTime" Nullable="false" Precision="3" />
594
          <Property Name="STATUS" Type="Int32" Nullable="false" />
595
          <Property Name="TOTAL_PAGE" Type="Int32" Nullable="false" />
596
          <Property Name="CURRENT_PAGE" Type="Int32" Nullable="false" />
597
          <Property Name="EXCEPTION" Type="String" MaxLength="Max" FixedLength="false" Unicode="true" />
598
          <Property Name="END_DATETIME" Type="DateTime" Precision="3" />
599
          <Property Name="START_DATETIME" Type="DateTime" Precision="3" />
600
          <Property Name="DOCUMENT_ID" Type="String" MaxLength="50" FixedLength="false" Unicode="true" />
601
        </EntityType>
602 583
        <EntityType Name="LOGIN_STAMP">
603 584
          <Key>
604 585
            <PropertyRef Name="ID" />
......
890 871
          <EntitySet Name="DOCUMENT_ITEM" EntityType="Self.DOCUMENT_ITEM" />
891 872
          <EntitySet Name="ERROR_LOG" EntityType="Self.ERROR_LOG" />
892 873
          <EntitySet Name="FAVORITE_DOC" EntityType="Self.FAVORITE_DOC" />
893
          <EntitySet Name="FINAL_PDF" EntityType="Self.FINAL_PDF" />
894 874
          <EntitySet Name="LOGIN_STAMP" EntityType="Self.LOGIN_STAMP" />
895 875
          <EntitySet Name="MARKUP_CHECKLIST" EntityType="Self.MARKUP_CHECKLIST" />
896 876
          <EntitySet Name="MARKUP_DATA" EntityType="Self.MARKUP_DATA" />
......
939 919
            <End Role="MEMBER" EntitySet="MEMBER" />
940 920
            <End Role="SYMBOL_PRIVATE" EntitySet="SYMBOL_PRIVATE" />
941 921
          </AssociationSet>
922
          <EntitySet Name="FINAL_PDF" EntityType="MarkusDBModel.FINAL_PDF" />
942 923
        </EntityContainer>
924
        <EntityType Name="FINAL_PDF">
925
          <Key>
926
            <PropertyRef Name="ID" />
927
          </Key>
928
          <Property Name="ID" Type="String" Nullable="false" MaxLength="50" FixedLength="false" Unicode="true" />
929
          <Property Name="PROJECT_NO" Type="String" Nullable="false" MaxLength="10" FixedLength="false" Unicode="true" />
930
          <Property Name="DOCINFO_ID" Type="String" Nullable="false" MaxLength="50" FixedLength="false" Unicode="true" />
931
          <Property Name="MARKUPINFO_ID" Type="Int32" Nullable="false" />
932
          <Property Name="CREATE_USER_ID" Type="String" Nullable="false" MaxLength="50" FixedLength="false" Unicode="true" />
933
          <Property Name="CREATE_DATETIME" Type="DateTime" Nullable="false" Precision="3" />
934
          <Property Name="STATUS" Type="Int32" Nullable="false" />
935
          <Property Name="TOTAL_PAGE" Type="Int32" Nullable="false" />
936
          <Property Name="CURRENT_PAGE" Type="Int32" Nullable="false" />
937
          <Property Name="EXCEPTION" Type="String" MaxLength="Max" FixedLength="false" Unicode="true" />
938
          <Property Name="END_DATETIME" Type="DateTime" Precision="3" />
939
          <Property Name="START_DATETIME" Type="DateTime" Precision="3" />
940
          <Property Name="DOCUMENT_ID" Type="String" MaxLength="50" FixedLength="false" Unicode="true" />
941
        </EntityType>
943 942
      </Schema>
944 943
    </edmx:ConceptualModels>
945 944
    <!-- C-S mapping content -->
......
1062 1061
              </MappingFragment>
1063 1062
            </EntityTypeMapping>
1064 1063
          </EntitySetMapping>
1065
          <EntitySetMapping Name="FINAL_PDF">
1066
            <EntityTypeMapping TypeName="MarkusDBModel.FINAL_PDF">
1067
              <MappingFragment StoreEntitySet="FINAL_PDF">
1068
                <ScalarProperty Name="ID" ColumnName="ID" />
1069
                <ScalarProperty Name="PROJECT_NO" ColumnName="PROJECT_NO" />
1070
                <ScalarProperty Name="DOCINFO_ID" ColumnName="DOCINFO_ID" />
1071
                <ScalarProperty Name="MARKUPINFO_ID" ColumnName="MARKUPINFO_ID" />
1072
                <ScalarProperty Name="CREATE_USER_ID" ColumnName="CREATE_USER_ID" />
1073
                <ScalarProperty Name="CREATE_DATETIME" ColumnName="CREATE_DATETIME" />
1074
                <ScalarProperty Name="STATUS" ColumnName="STATUS" />
1075
                <ScalarProperty Name="TOTAL_PAGE" ColumnName="TOTAL_PAGE" />
1076
                <ScalarProperty Name="CURRENT_PAGE" ColumnName="CURRENT_PAGE" />
1077
                <ScalarProperty Name="EXCEPTION" ColumnName="EXCEPTION" />
1078
                <ScalarProperty Name="END_DATETIME" ColumnName="END_DATETIME" />
1079
                <ScalarProperty Name="START_DATETIME" ColumnName="START_DATETIME" />
1080
                <ScalarProperty Name="DOCUMENT_ID" ColumnName="DOCUMENT_ID" />
1081
              </MappingFragment>
1082
            </EntityTypeMapping>
1083
          </EntitySetMapping>
1084 1064
          <EntitySetMapping Name="LOGIN_STAMP">
1085 1065
            <EntityTypeMapping TypeName="MarkusDBModel.LOGIN_STAMP">
1086 1066
              <MappingFragment StoreEntitySet="LOGIN_STAMP">
......
1273 1253
              </MappingFragment>
1274 1254
            </EntityTypeMapping>
1275 1255
          </EntitySetMapping>
1256
          <EntitySetMapping Name="FINAL_PDF">
1257
            <EntityTypeMapping TypeName="MarkusDBModel.FINAL_PDF">
1258
              <MappingFragment StoreEntitySet="FINAL_PDF">
1259
                <ScalarProperty Name="DOCUMENT_ID" ColumnName="DOCUMENT_ID" />
1260
                <ScalarProperty Name="START_DATETIME" ColumnName="START_DATETIME" />
1261
                <ScalarProperty Name="END_DATETIME" ColumnName="END_DATETIME" />
1262
                <ScalarProperty Name="EXCEPTION" ColumnName="EXCEPTION" />
1263
                <ScalarProperty Name="CURRENT_PAGE" ColumnName="CURRENT_PAGE" />
1264
                <ScalarProperty Name="TOTAL_PAGE" ColumnName="TOTAL_PAGE" />
1265
                <ScalarProperty Name="STATUS" ColumnName="STATUS" />
1266
                <ScalarProperty Name="CREATE_DATETIME" ColumnName="CREATE_DATETIME" />
1267
                <ScalarProperty Name="CREATE_USER_ID" ColumnName="CREATE_USER_ID" />
1268
                <ScalarProperty Name="MARKUPINFO_ID" ColumnName="MARKUPINFO_ID" />
1269
                <ScalarProperty Name="DOCINFO_ID" ColumnName="DOCINFO_ID" />
1270
                <ScalarProperty Name="PROJECT_NO" ColumnName="PROJECT_NO" />
1271
                <ScalarProperty Name="ID" ColumnName="ID" />
1272
              </MappingFragment>
1273
            </EntityTypeMapping>
1274
          </EntitySetMapping>
1276 1275
        </EntityContainerMapping>
1277 1276
      </Mapping>
1278 1277
    </edmx:Mappings>
DataBase/EntityModel/MarkusModel.edmx.diagram
13 13
        <EntityTypeShape EntityType="MarkusDBModel.DOCUMENT_ITEM" Width="1.5" PointX="5.75" PointY="9" IsExpanded="true" />
14 14
        <EntityTypeShape EntityType="MarkusDBModel.ERROR_LOG" Width="1.5" PointX="0.75" PointY="11.75" IsExpanded="true" />
15 15
        <EntityTypeShape EntityType="MarkusDBModel.FAVORITE_DOC" Width="1.5" PointX="3" PointY="1.25" IsExpanded="true" />
16
        <EntityTypeShape EntityType="MarkusDBModel.FINAL_PDF" Width="1.5" PointX="2.75" PointY="11.75" IsExpanded="true" />
17 16
        <EntityTypeShape EntityType="MarkusDBModel.LOGIN_STAMP" Width="1.5" PointX="12.75" PointY="0.75" IsExpanded="true" />
18 17
        <EntityTypeShape EntityType="MarkusDBModel.MARKUP_CHECKLIST" Width="1.5" PointX="12.75" PointY="7.75" IsExpanded="true" />
19 18
        <EntityTypeShape EntityType="MarkusDBModel.MARKUP_DATA" Width="1.5" PointX="12.5" PointY="4.75" IsExpanded="true" />
......
38 37
        <AssociationConnector Association="MarkusDBModel.FK_MARKUPINFOMARKUPINFO_VERSION" ManuallyRouted="false" />
39 38
        <AssociationConnector Association="MarkusDBModel.FK_SIGNINFO_MEMBER" ManuallyRouted="false" />
40 39
        <AssociationConnector Association="MarkusDBModel.FK_SYMBOL_PRIVATE_MEMBER" ManuallyRouted="false" />
40
        <EntityTypeShape EntityType="MarkusDBModel.FINAL_PDF" Width="1.5" PointX="0.75" PointY="15.75" />
41 41
      </Diagram>
42 42
    </edmx:Diagrams>
43 43
  </edmx:Designer>
FileDownloader/PageItem.cs
1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5
using System.Threading.Tasks;
6

  
7
namespace PageManager
8
{
9
    public class PageItem
10
    {
11
        public int PageNo { get; set; }
12

  
13
        public Uri OriginalUri { get; set; }
14

  
15
        public Uri LocalUri { get; set; }
16

  
17
        public string LocalFilePath { get; set; }
18

  
19
        public bool IsDownLoad { get; set; }
20
    }
21
}
FileDownloader/PageManager.csproj
1
<?xml version="1.0" encoding="utf-8"?>
2
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
4
  <PropertyGroup>
5
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
6
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
7
    <ProjectGuid>{92103E04-A8DB-4ECD-8883-82EB585AA814}</ProjectGuid>
8
    <OutputType>Library</OutputType>
9
    <AppDesignerFolder>Properties</AppDesignerFolder>
10
    <RootNamespace>PageManager</RootNamespace>
11
    <AssemblyName>PageManager</AssemblyName>
12
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
13
    <FileAlignment>512</FileAlignment>
14
    <Deterministic>true</Deterministic>
15
  </PropertyGroup>
16
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
17
    <DebugSymbols>true</DebugSymbols>
18
    <DebugType>full</DebugType>
19
    <Optimize>false</Optimize>
20
    <OutputPath>bin\Debug\</OutputPath>
21
    <DefineConstants>DEBUG;TRACE</DefineConstants>
22
    <ErrorReport>prompt</ErrorReport>
23
    <WarningLevel>4</WarningLevel>
24
  </PropertyGroup>
25
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
26
    <DebugType>pdbonly</DebugType>
27
    <Optimize>true</Optimize>
28
    <OutputPath>bin\Release\</OutputPath>
29
    <DefineConstants>TRACE</DefineConstants>
30
    <ErrorReport>prompt</ErrorReport>
31
    <WarningLevel>4</WarningLevel>
32
  </PropertyGroup>
33
  <ItemGroup>
34
    <Reference Include="PresentationCore" />
35
    <Reference Include="System" />
36
    <Reference Include="System.Core" />
37
    <Reference Include="System.Xml.Linq" />
38
    <Reference Include="System.Data.DataSetExtensions" />
39
    <Reference Include="Microsoft.CSharp" />
40
    <Reference Include="System.Data" />
41
    <Reference Include="System.Net.Http" />
42
    <Reference Include="System.Xml" />
43
    <Reference Include="WindowsBase" />
44
  </ItemGroup>
45
  <ItemGroup>
46
    <Compile Include="PageStorage.cs" />
47
    <Compile Include="PageItem.cs" />
48
    <Compile Include="Properties\AssemblyInfo.cs" />
49
    <Compile Include="TaskExtensions.cs" />
50
  </ItemGroup>
51
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
52
</Project>
FileDownloader/PageStorage - 복사본.cs
1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5
using System.Threading.Tasks;
6
using System.Windows.Media.Imaging;
7

  
8
namespace PageManager
9
{
10
    public class PageStorage
11
    {
12
        List<PageItem> fileItems = new List<PageItem>();
13
        string _localStorage;
14
        string _BaseUri;
15

  
16
        BitmapFrame PageImage;
17

  
18
        public PageStorage(string BaseUri, string localStoragePath)
19
        {
20
            try
21
            {
22
                _BaseUri = BaseUri;
23
                _localStorage = localStoragePath;
24

  
25
                System.IO.Directory.CreateDirectory(_localStorage);
26

  
27

  
28
                //GetPageAsync(1).ConfigureAwait(false);
29
            }
30
            catch (Exception ex)
31
            {
32
                throw new Exception("PageStorage", ex);
33
            }
34
        }
35

  
36
        public void ResetImage()
37
        {
38
            if (PageImage != null)
39
            {
40
                PageImage.UriSource = null;
41
                PageImage = null;
42
            }
43

  
44
            //PageImage.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
45

  
46
        }
47

  
48
        public async Task<BitmapFrame> GetPageAsync(int PageNo)
49
        {
50
            try
51
            { = BitmapFrame.Create(new Uri(), BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
52
                ResetImage();
53

  
54
                PageImage = new BitmapImage
55
                {
56
                    CacheOption = BitmapCacheOption.OnDemand,
57
                    CreateOptions = BitmapCreateOptions.IgnoreImageCache
58
                };
59

  
60
                var page = fileItems.Where(x => x.PageNo == PageNo);
61

  
62
                PageImage.BeginInit();
63

  
64
                if (page.Count() > 0)
65
                {
66
                    PageImage.UriSource = page.First().LocalUri;
67
                }
68
                else
69
                {
70
                    string downloadFilePath = System.IO.Path.Combine(_localStorage,PageNo.ToString() + ".png");
71

  
72
                    PageItem item = new PageItem
73
                    {
74
                        PageNo = PageNo,
75
                        OriginalUri = new Uri(_BaseUri.Replace("{PageNo}", PageNo.ToString())),
76
                        LocalUri = new Uri(downloadFilePath, UriKind.Absolute),
77
                        LocalFilePath = downloadFilePath
78
                    };
79

  
80
                    fileItems.Add(item);
81

  
82
                    using (System.Net.WebClient client = new System.Net.WebClient())
83
                    {
84
                        client.UseDefaultCredentials = true;
85
                        var task = client.DownloadFileTaskAsync(item.OriginalUri, downloadFilePath);
86
                        
87
                        client.DownloadFileCompleted += (snd, evt) =>
88
                        {
89
                            item.IsDownLoad = true;
90
                        };
91

  
92
                        await task;
93
                    }
94

  
95
                    PageImage.UriSource = item.LocalUri;
96
                }
97

  
98
               PageImage.EndInit();
99
            }
100
            catch (Exception ex)
101
            {
102
                throw new Exception("GetPageAsync(string BasePageUri,int PageNo)", ex);
103
            }
104
            finally
105
            {
106
                GC.Collect(2);
107
                GC.Collect(2);
108
            }
109

  
110

  
111
            return PageImage;
112
        }
113

  
114
        public void Clear()
115
        {
116
            try
117
            {
118
                ResetImage();
119
            }
120
            catch (Exception ex)
121
            {
122
                System.Diagnostics.Debug.WriteLine(ex.ToString());
123
            }
124

  
125
            try
126
            {
127
                fileItems.ForEach(x =>
128
                {
129
                    System.IO.File.Delete(x.LocalFilePath);
130
                });
131

  
132
                System.IO.Directory.Delete(_localStorage, true);
133
            }
134
            catch (Exception ex)
135
            {
136
                System.Diagnostics.Debug.WriteLine(ex.ToString());
137
            }
138
        }
139
    }
140
}
FileDownloader/PageStorage.cs
1
using System;
2
using System.Collections.Generic;
3
using System.ComponentModel;
4
using System.Linq;
5
using System.Text;
6
using System.Threading.Tasks;
7
using System.Windows.Media.Imaging;
8

  
9
namespace PageManager
10
{
11
    public class PageStorage
12
    {
13
        private const int DEFUALT_TALK_PAGE_COUNT = 10;
14

  
15
        BackgroundWorker backgroundWorker;
16
        List<PageItem> fileItems = new List<PageItem>();
17
        string _localStorage;
18
        string _BaseUri;
19
        int _TotalPages;
20

  
21

  
22
        BitmapFrame PageImage;
23

  
24
        public PageStorage(string BaseUri, string localStoragePath,int totalPages)
25
        {
26
            try
27
            {
28
                backgroundWorker = new BackgroundWorker();
29
                backgroundWorker.DoWork += BackgroundWorker_DoWork;
30

  
31
                _BaseUri = BaseUri;
32
                _localStorage = localStoragePath;
33
                _TotalPages = totalPages;
34

  
35
                System.IO.Directory.CreateDirectory(_localStorage);
36

  
37
                backgroundWorker.RunWorkerAsync(new int[] { 1, 10 });
38
            }
39
            catch (Exception ex)
40
            {
41
                throw new Exception("PageStorage", ex);
42
            }
43
        }
44

  
45
        private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
46
        {
47
            int StartPageNo = -1;
48
            int TalkCount = -1;
49

  
50
            if (e.Argument != null)
51
            {
52

  
53
                var values = (e.Argument as int[]);
54

  
55
                if (values.Count() == 2)
56
                {
57

  
58
                    StartPageNo = values[0];
59
                    TalkCount = values[1];
60

  
61
                    DownloadPagesAsync(StartPageNo, TalkCount);
62
                }
63
            }
64
        }
65

  
66
        public void ResetImage()
67
        {
68
            //if (PageImage != null)
69
            //{
70
            //    PageImage = null;
71
            //}
72

  
73
            //PageImage.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
74

  
75
        }
76

  
77
        public async Task<BitmapFrame> GetPageAsync(int PageNo)
78
        {
79
            try
80
            {
81
                while(backgroundWorker.IsBusy)
82
                {
83
                    await Task.Delay(1000);
84

  
85
                    if(backgroundWorker.IsBusy)
86
                    {
87
                        backgroundWorker.CancelAsync();
88
                    }
89
                }
90

  
91
                System.Diagnostics.Debug.WriteLine("GetPageAsync");
92
                
93
                var pageItem = await DownloadPageAsync(PageNo);
94

  
95
                backgroundWorker.RunWorkerAsync(new int[] { PageNo + 1, 10 });
96
        
97
                PageImage = BitmapFrame.Create(pageItem.LocalUri, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
98
            }
99
            catch (Exception ex)
100
            {
101
                throw new Exception("GetPageAsync(string BasePageUri,int PageNo)", ex);
102
            }
103
            finally
104
            {
105
            }
106

  
107
            return PageImage;
108
        }
109

  
110
        public void DownloadPagesAsync(int StartPageNo, int TalkCount = 5)
111
        {
112
            if (StartPageNo + TalkCount > _TotalPages)
113
            {
114
                TalkCount = _TotalPages - StartPageNo;
115
            }
116

  
117
            if (TalkCount > 0)
118
            {
119
                for (int i = StartPageNo; i < StartPageNo + TalkCount; i++)
120
                {
121
                    try
122
                    {
123
                        DownloadPageAsync(i).RunAndForget();
124
                    }
125
                    catch (Exception ex)
126
                    {
127
                        System.Diagnostics.Debug.WriteLine("DownloadPagesAsync err", ex);
128
                    }
129
                }
130
            }
131
        }
132

  
133
        public async Task<PageItem> DownloadPageAsync(int PageNo)
134
        {
135
            PageItem result = new PageItem { PageNo = PageNo };
136

  
137
            try
138
            {
139
                var page = fileItems.Where(x => x.PageNo == PageNo);
140

  
141
                if (page.Count() > 0)
142
                {
143
                    System.Diagnostics.Debug.WriteLine("DownloadPageAsync fileItems");
144

  
145
                    PageItem item = page.First();
146

  
147
                    /// 파일 체크 후 없으면 다시 다운로드
148
                    if (System.IO.File.Exists(item.LocalFilePath))
149
                    {
150
                        result = page.First();
151
                    }
152
                    else
153
                    {
154
                        fileItems.Remove(item);
155

  
156
                        result = await DownloadPageAsync(PageNo);
157
                    }
158
                }
159
                else
160
                {
161

  
162
                    System.Diagnostics.Debug.WriteLine("DownloadPageAsync down");
163

  
164
                    string downloadFilePath = System.IO.Path.Combine(_localStorage, PageNo.ToString() + ".png");
165

  
166
                    PageItem item = new PageItem
167
                    {
168
                        PageNo = PageNo,
169
                        OriginalUri = new Uri(_BaseUri.Replace("{PageNo}", PageNo.ToString())),
170
                        LocalUri = new Uri(downloadFilePath, UriKind.Absolute),
171
                        LocalFilePath = downloadFilePath
172
                    };
173

  
174
                    using (System.Net.WebClient client = new System.Net.WebClient())
175
                    {
176
                        client.UseDefaultCredentials = true;
177
                        System.Net.IWebProxy webProxy = client.Proxy;
178

  
179
                        if (webProxy != null)
180
                        {
181
                            // Use the default credentials of the logged on user.
182
                            webProxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
183
                        }
184

  
185
                        var task = client.DownloadFileTaskAsync(item.OriginalUri, downloadFilePath);
186

  
187
                        client.DownloadFileCompleted += (snd, evt) =>
188
                        {
189
                            fileItems.Add(item);
190
                        };
191

  
192
                        await task;
193
                        System.Diagnostics.Debug.WriteLine("Download : " + item.LocalFilePath);
194
                        result = item;
195
                    }
196
                }
197
            }
198
            catch (Exception ex)
199
            {
200
                throw new Exception("DownloadPageAsync : ", ex);
201
            }
202
            finally
203
            {
204
            }
205

  
206
            return result;
207
        }
208

  
209
        public void Clear()
210
        {
211
            try
212
            {
213
                ResetImage();
214
            }
215
            catch (Exception ex)
216
            {
217
                System.Diagnostics.Debug.WriteLine(ex.ToString());
218
            }
219

  
220
            try
221
            {
222
                backgroundWorker.CancelAsync();
223
                backgroundWorker.Dispose();
224

  
225
                fileItems.ForEach(x =>
226
                {
227
                    System.IO.File.Delete(x.LocalFilePath);
228
                });
229

  
230
                System.IO.Directory.Delete(_localStorage, true);
231
            }
232
            catch (Exception ex)
233
            {
234
                System.Diagnostics.Debug.WriteLine(ex.ToString());
235
            }
236
        }
237
    }
238
}
FileDownloader/Properties/AssemblyInfo.cs
1
using System.Reflection;
2
using System.Runtime.CompilerServices;
3
using System.Runtime.InteropServices;
4

  
5
// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 
6
// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
7
// 이러한 특성 값을 변경하세요.
8
[assembly: AssemblyTitle("DownLoadManager")]
9
[assembly: AssemblyDescription("")]
10
[assembly: AssemblyConfiguration("")]
11
[assembly: AssemblyCompany("")]
12
[assembly: AssemblyProduct("DownLoadManager")]
13
[assembly: AssemblyCopyright("Copyright ©  2020")]
14
[assembly: AssemblyTrademark("")]
15
[assembly: AssemblyCulture("")]
16

  
17
// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 
18
// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
19
// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
20
[assembly: ComVisible(false)]
21

  
22
// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
23
[assembly: Guid("92103e04-a8db-4ecd-8883-82eb585aa814")]
24

  
25
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
26
//
27
//      주 버전
28
//      부 버전 
29
//      빌드 번호
30
//      수정 버전
31
//
32
// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
33
// 기본값으로 할 수 있습니다.
34
// [assembly: AssemblyVersion("1.0.*")]
35
[assembly: AssemblyVersion("1.0.0.0")]
36
[assembly: AssemblyFileVersion("1.0.0.0")]
FileDownloader/TaskExtensions.cs
1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5
using System.Threading.Tasks;
6

  
7
namespace PageManager
8
{
9
    public static class TaskExtensions
10
    {
11
        public static async void RunAndForget(
12
       this Task task, Action<Exception> onException = null)
13
        {
14
            try
15
            {
16
                await task;
17
            }
18
            catch (Exception ex)
19
            {
20
                onException?.Invoke(ex);
21
            }
22
        }
23
    }
24
}
FinalService/KCOM_FinalService/FinalService_Config/FinalService_Config.csproj
98 98
      <Project>{629dc8cd-d458-47ef-8f02-cd12c7001c3e}</Project>
99 99
      <Name>KCOMDataModel</Name>
100 100
    </ProjectReference>
101
    <ProjectReference Include="..\MarkupToPDF\MarkupToPDF.csproj">
102
      <Project>{a714bd67-8aac-4ed8-8ecf-7853c3549a68}</Project>
103
      <Name>MarkupToPDF</Name>
104
    </ProjectReference>
101 105
  </ItemGroup>
102 106
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
103 107
</Project>
FinalService/KCOM_FinalService/FinalService_Config/FormConfig.Designer.cs
37 37
            this.label3 = new System.Windows.Forms.Label();
38 38
            this.textBoxDocumentID = new System.Windows.Forms.TextBox();
39 39
            this.groupBox1 = new System.Windows.Forms.GroupBox();
40
            this.label4 = new System.Windows.Forms.Label();
41
            this.textBoxPDFMovePath = new System.Windows.Forms.TextBox();
42
            this.label5 = new System.Windows.Forms.Label();
43
            this.textBoxApprovedImgPath = new System.Windows.Forms.TextBox();
44
            this.buttonApprovedImgPath = new System.Windows.Forms.Button();
45
            this.textBoxCheckmarkImgPath = new System.Windows.Forms.TextBox();
46
            this.buttonCheckmarkImgPath = new System.Windows.Forms.Button();
47
            this.label6 = new System.Windows.Forms.Label();
48
            this.label7 = new System.Windows.Forms.Label();
49
            this.textBoxUpLoadServiceUrl = new System.Windows.Forms.TextBox();
50
            this.buttonUpLoadServiceUrl = new System.Windows.Forms.Button();
51
            this.textBoxConnectionString = new System.Windows.Forms.TextBox();
52
            this.label8 = new System.Windows.Forms.Label();
53
            this.buttonConnectionString = new System.Windows.Forms.Button();
54
            this.textBoxMARKUS_API = new System.Windows.Forms.TextBox();
55
            this.label9 = new System.Windows.Forms.Label();
56
            this.buttonMARKUS_API = new System.Windows.Forms.Button();
57 40
            this.buttonPDFMovePath = new System.Windows.Forms.Button();
41
            this.buttonMARKUS_API = new System.Windows.Forms.Button();
42
            this.label9 = new System.Windows.Forms.Label();
43
            this.textBoxMARKUS_API = new System.Windows.Forms.TextBox();
44
            this.buttonConnectionString = new System.Windows.Forms.Button();
45
            this.label8 = new System.Windows.Forms.Label();
46
            this.textBoxConnectionString = new System.Windows.Forms.TextBox();
47
            this.buttonUpLoadServiceUrl = new System.Windows.Forms.Button();
48
            this.textBoxUpLoadServiceUrl = new System.Windows.Forms.TextBox();
49
            this.label7 = new System.Windows.Forms.Label();
50
            this.label6 = new System.Windows.Forms.Label();
51
            this.buttonCheckmarkImgPath = new System.Windows.Forms.Button();
52
            this.textBoxCheckmarkImgPath = new System.Windows.Forms.TextBox();
53
            this.buttonApprovedImgPath = new System.Windows.Forms.Button();
54
            this.textBoxApprovedImgPath = new System.Windows.Forms.TextBox();
55
            this.label5 = new System.Windows.Forms.Label();
56
            this.textBoxPDFMovePath = new System.Windows.Forms.TextBox();
57
            this.label4 = new System.Windows.Forms.Label();
58 58
            this.buttonSave = new System.Windows.Forms.Button();
59
            this.button1 = new System.Windows.Forms.Button();
59 60
            this.groupBox1.SuspendLayout();
60 61
            this.SuspendLayout();
61 62
            // 
......
63 64
            // 
64 65
            this.buttonTest.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
65 66
            | System.Windows.Forms.AnchorStyles.Right)));
66
            this.buttonTest.Location = new System.Drawing.Point(602, 300);
67
            this.buttonTest.Location = new System.Drawing.Point(602, 273);
67 68
            this.buttonTest.Name = "buttonTest";
68 69
            this.buttonTest.Size = new System.Drawing.Size(205, 21);
69 70
            this.buttonTest.TabIndex = 0;
......
160 161
            this.groupBox1.TabStop = false;
161 162
            this.groupBox1.Text = "설정";
162 163
            // 
163
            // label4
164
            // buttonPDFMovePath
164 165
            // 
165
            this.label4.AutoSize = true;
166
            this.label4.Location = new System.Drawing.Point(6, 28);
167
            this.label4.Name = "label4";
168
            this.label4.Size = new System.Drawing.Size(96, 12);
169
            this.label4.TabIndex = 0;
170
            this.label4.Text = "PDFMovePath : ";
166
            this.buttonPDFMovePath.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
167
            this.buttonPDFMovePath.Location = new System.Drawing.Point(752, 25);
168
            this.buttonPDFMovePath.Name = "buttonPDFMovePath";
169
            this.buttonPDFMovePath.Size = new System.Drawing.Size(37, 23);
170
            this.buttonPDFMovePath.TabIndex = 17;
171
            this.buttonPDFMovePath.Text = "확인";
172
            this.buttonPDFMovePath.UseVisualStyleBackColor = true;
173
            this.buttonPDFMovePath.Click += new System.EventHandler(this.buttonPDFMovePath_Click);
171 174
            // 
172
            // textBoxPDFMovePath
175
            // buttonMARKUS_API
173 176
            // 
174
            this.textBoxPDFMovePath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
175
            | System.Windows.Forms.AnchorStyles.Right)));
176
            this.textBoxPDFMovePath.Location = new System.Drawing.Point(128, 25);
177
            this.textBoxPDFMovePath.Name = "textBoxPDFMovePath";
178
            this.textBoxPDFMovePath.Size = new System.Drawing.Size(618, 21);
179
            this.textBoxPDFMovePath.TabIndex = 1;
177
            this.buttonMARKUS_API.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
178
            this.buttonMARKUS_API.Location = new System.Drawing.Point(752, 160);
179
            this.buttonMARKUS_API.Name = "buttonMARKUS_API";
180
            this.buttonMARKUS_API.Size = new System.Drawing.Size(37, 23);
181
            this.buttonMARKUS_API.TabIndex = 16;
182
            this.buttonMARKUS_API.Text = "확인";
183
            this.buttonMARKUS_API.UseVisualStyleBackColor = true;
184
            this.buttonMARKUS_API.Click += new System.EventHandler(this.buttonMARKUS_API_Click);
180 185
            // 
181
            // label5
186
            // label9
182 187
            // 
183
            this.label5.AutoSize = true;
184
            this.label5.Location = new System.Drawing.Point(6, 55);
185
            this.label5.Name = "label5";
186
            this.label5.Size = new System.Drawing.Size(116, 12);
187
            this.label5.TabIndex = 2;
188
            this.label5.Text = "ApprovedImgPath : ";
188
            this.label9.AutoSize = true;
189
            this.label9.Location = new System.Drawing.Point(6, 163);
190
            this.label9.Name = "label9";
191
            this.label9.Size = new System.Drawing.Size(93, 12);
192
            this.label9.TabIndex = 15;
193
            this.label9.Text = "MARKUS_API : ";
189 194
            // 
190
            // textBoxApprovedImgPath
195
            // textBoxMARKUS_API
191 196
            // 
192
            this.textBoxApprovedImgPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
197
            this.textBoxMARKUS_API.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
193 198
            | System.Windows.Forms.AnchorStyles.Right)));
194
            this.textBoxApprovedImgPath.Location = new System.Drawing.Point(128, 52);
195
            this.textBoxApprovedImgPath.Name = "textBoxApprovedImgPath";
196
            this.textBoxApprovedImgPath.Size = new System.Drawing.Size(618, 21);
197
            this.textBoxApprovedImgPath.TabIndex = 3;
199
            this.textBoxMARKUS_API.Location = new System.Drawing.Point(128, 160);
200
            this.textBoxMARKUS_API.Name = "textBoxMARKUS_API";
201
            this.textBoxMARKUS_API.Size = new System.Drawing.Size(618, 21);
202
            this.textBoxMARKUS_API.TabIndex = 14;
198 203
            // 
199
            // buttonApprovedImgPath
204
            // buttonConnectionString
200 205
            // 
201
            this.buttonApprovedImgPath.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
202
            this.buttonApprovedImgPath.Location = new System.Drawing.Point(752, 52);
203
            this.buttonApprovedImgPath.Name = "buttonApprovedImgPath";
204
            this.buttonApprovedImgPath.Size = new System.Drawing.Size(37, 23);
205
            this.buttonApprovedImgPath.TabIndex = 4;
206
            this.buttonApprovedImgPath.Text = "확인";
207
            this.buttonApprovedImgPath.UseVisualStyleBackColor = true;
208
            this.buttonApprovedImgPath.Click += new System.EventHandler(this.buttonApprovedImgPath_Click);
206
            this.buttonConnectionString.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
207
            this.buttonConnectionString.Location = new System.Drawing.Point(752, 133);
208
            this.buttonConnectionString.Name = "buttonConnectionString";
209
            this.buttonConnectionString.Size = new System.Drawing.Size(37, 23);
210
            this.buttonConnectionString.TabIndex = 13;
211
            this.buttonConnectionString.Text = "확인";
212
            this.buttonConnectionString.UseVisualStyleBackColor = true;
213
            this.buttonConnectionString.Click += new System.EventHandler(this.buttonConnectionString_Click);
209 214
            // 
210
            // textBoxCheckmarkImgPath
215
            // label8
211 216
            // 
212
            this.textBoxCheckmarkImgPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
217
            this.label8.AutoSize = true;
218
            this.label8.Location = new System.Drawing.Point(6, 136);
219
            this.label8.Name = "label8";
220
            this.label8.Size = new System.Drawing.Size(113, 12);
221
            this.label8.TabIndex = 12;
222
            this.label8.Text = "ConnectionString : ";
223
            // 
224
            // textBoxConnectionString
225
            // 
226
            this.textBoxConnectionString.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
213 227
            | System.Windows.Forms.AnchorStyles.Right)));
214
            this.textBoxCheckmarkImgPath.Location = new System.Drawing.Point(128, 79);
215
            this.textBoxCheckmarkImgPath.Name = "textBoxCheckmarkImgPath";
216
            this.textBoxCheckmarkImgPath.Size = new System.Drawing.Size(618, 21);
217
            this.textBoxCheckmarkImgPath.TabIndex = 5;
228
            this.textBoxConnectionString.Location = new System.Drawing.Point(128, 133);
229
            this.textBoxConnectionString.Name = "textBoxConnectionString";
230
            this.textBoxConnectionString.Size = new System.Drawing.Size(618, 21);
231
            this.textBoxConnectionString.TabIndex = 11;
218 232
            // 
219
            // buttonCheckmarkImgPath
233
            // buttonUpLoadServiceUrl
220 234
            // 
221
            this.buttonCheckmarkImgPath.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
222
            this.buttonCheckmarkImgPath.Location = new System.Drawing.Point(752, 79);
223
            this.buttonCheckmarkImgPath.Name = "buttonCheckmarkImgPath";
224
            this.buttonCheckmarkImgPath.Size = new System.Drawing.Size(37, 23);
225
            this.buttonCheckmarkImgPath.TabIndex = 6;
226
            this.buttonCheckmarkImgPath.Text = "확인";
227
            this.buttonCheckmarkImgPath.UseVisualStyleBackColor = true;
228
            this.buttonCheckmarkImgPath.Click += new System.EventHandler(this.buttonCheckmarkImgPath_Click);
235
            this.buttonUpLoadServiceUrl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
236
            this.buttonUpLoadServiceUrl.Location = new System.Drawing.Point(752, 106);
237
            this.buttonUpLoadServiceUrl.Name = "buttonUpLoadServiceUrl";
238
            this.buttonUpLoadServiceUrl.Size = new System.Drawing.Size(37, 23);
239
            this.buttonUpLoadServiceUrl.TabIndex = 10;
240
            this.buttonUpLoadServiceUrl.Text = "확인";
241
            this.buttonUpLoadServiceUrl.UseVisualStyleBackColor = true;
229 242
            // 
230
            // label6
243
            // textBoxUpLoadServiceUrl
231 244
            // 
232
            this.label6.AutoSize = true;
233
            this.label6.Location = new System.Drawing.Point(6, 84);
234
            this.label6.Name = "label6";
235
            this.label6.Size = new System.Drawing.Size(127, 12);
236
            this.label6.TabIndex = 7;
237
            this.label6.Text = "CheckmarkImgPath : ";
245
            this.textBoxUpLoadServiceUrl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
246
            | System.Windows.Forms.AnchorStyles.Right)));
247
            this.textBoxUpLoadServiceUrl.Location = new System.Drawing.Point(128, 106);
248
            this.textBoxUpLoadServiceUrl.Name = "textBoxUpLoadServiceUrl";
249
            this.textBoxUpLoadServiceUrl.Size = new System.Drawing.Size(618, 21);
250
            this.textBoxUpLoadServiceUrl.TabIndex = 9;
238 251
            // 
239 252
            // label7
240 253
            // 
......
245 258
            this.label7.TabIndex = 8;
246 259
            this.label7.Text = "UpLoadServiceUrl : ";
247 260
            // 
248
            // textBoxUpLoadServiceUrl
261
            // label6
249 262
            // 
250
            this.textBoxUpLoadServiceUrl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
251
            | System.Windows.Forms.AnchorStyles.Right)));
252
            this.textBoxUpLoadServiceUrl.Location = new System.Drawing.Point(128, 106);
253
            this.textBoxUpLoadServiceUrl.Name = "textBoxUpLoadServiceUrl";
254
            this.textBoxUpLoadServiceUrl.Size = new System.Drawing.Size(618, 21);
255
            this.textBoxUpLoadServiceUrl.TabIndex = 9;
263
            this.label6.AutoSize = true;
264
            this.label6.Location = new System.Drawing.Point(6, 84);
265
            this.label6.Name = "label6";
266
            this.label6.Size = new System.Drawing.Size(127, 12);
267
            this.label6.TabIndex = 7;
268
            this.label6.Text = "CheckmarkImgPath : ";
256 269
            // 
257
            // buttonUpLoadServiceUrl
270
            // buttonCheckmarkImgPath
258 271
            // 
259
            this.buttonUpLoadServiceUrl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
260
            this.buttonUpLoadServiceUrl.Location = new System.Drawing.Point(752, 106);
261
            this.buttonUpLoadServiceUrl.Name = "buttonUpLoadServiceUrl";
262
            this.buttonUpLoadServiceUrl.Size = new System.Drawing.Size(37, 23);
263
            this.buttonUpLoadServiceUrl.TabIndex = 10;
264
            this.buttonUpLoadServiceUrl.Text = "확인";
265
            this.buttonUpLoadServiceUrl.UseVisualStyleBackColor = true;
272
            this.buttonCheckmarkImgPath.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
273
            this.buttonCheckmarkImgPath.Location = new System.Drawing.Point(752, 79);
274
            this.buttonCheckmarkImgPath.Name = "buttonCheckmarkImgPath";
275
            this.buttonCheckmarkImgPath.Size = new System.Drawing.Size(37, 23);
276
            this.buttonCheckmarkImgPath.TabIndex = 6;
277
            this.buttonCheckmarkImgPath.Text = "확인";
278
            this.buttonCheckmarkImgPath.UseVisualStyleBackColor = true;
279
            this.buttonCheckmarkImgPath.Click += new System.EventHandler(this.buttonCheckmarkImgPath_Click);
266 280
            // 
267
            // textBoxConnectionString
281
            // textBoxCheckmarkImgPath
268 282
            // 
269
            this.textBoxConnectionString.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
283
            this.textBoxCheckmarkImgPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
270 284
            | System.Windows.Forms.AnchorStyles.Right)));
271
            this.textBoxConnectionString.Location = new System.Drawing.Point(128, 133);
272
            this.textBoxConnectionString.Name = "textBoxConnectionString";
273
            this.textBoxConnectionString.Size = new System.Drawing.Size(618, 21);
274
            this.textBoxConnectionString.TabIndex = 11;
275
            // 
276
            // label8
277
            // 
278
            this.label8.AutoSize = true;
279
            this.label8.Location = new System.Drawing.Point(6, 136);
280
            this.label8.Name = "label8";
281
            this.label8.Size = new System.Drawing.Size(113, 12);
282
            this.label8.TabIndex = 12;
283
            this.label8.Text = "ConnectionString : ";
285
            this.textBoxCheckmarkImgPath.Location = new System.Drawing.Point(128, 79);
286
            this.textBoxCheckmarkImgPath.Name = "textBoxCheckmarkImgPath";
287
            this.textBoxCheckmarkImgPath.Size = new System.Drawing.Size(618, 21);
288
            this.textBoxCheckmarkImgPath.TabIndex = 5;
284 289
            // 
285
            // buttonConnectionString
290
            // buttonApprovedImgPath
286 291
            // 
287
            this.buttonConnectionString.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
288
            this.buttonConnectionString.Location = new System.Drawing.Point(752, 133);
289
            this.buttonConnectionString.Name = "buttonConnectionString";
290
            this.buttonConnectionString.Size = new System.Drawing.Size(37, 23);
291
            this.buttonConnectionString.TabIndex = 13;
292
            this.buttonConnectionString.Text = "확인";
293
            this.buttonConnectionString.UseVisualStyleBackColor = true;
294
            this.buttonConnectionString.Click += new System.EventHandler(this.buttonConnectionString_Click);
292
            this.buttonApprovedImgPath.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
293
            this.buttonApprovedImgPath.Location = new System.Drawing.Point(752, 52);
294
            this.buttonApprovedImgPath.Name = "buttonApprovedImgPath";
295
            this.buttonApprovedImgPath.Size = new System.Drawing.Size(37, 23);
296
            this.buttonApprovedImgPath.TabIndex = 4;
297
            this.buttonApprovedImgPath.Text = "확인";
298
            this.buttonApprovedImgPath.UseVisualStyleBackColor = true;
299
            this.buttonApprovedImgPath.Click += new System.EventHandler(this.buttonApprovedImgPath_Click);
295 300
            // 
296
            // textBoxMARKUS_API
301
            // textBoxApprovedImgPath
297 302
            // 
298
            this.textBoxMARKUS_API.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
303
            this.textBoxApprovedImgPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
299 304
            | System.Windows.Forms.AnchorStyles.Right)));
300
            this.textBoxMARKUS_API.Location = new System.Drawing.Point(128, 160);
301
            this.textBoxMARKUS_API.Name = "textBoxMARKUS_API";
302
            this.textBoxMARKUS_API.Size = new System.Drawing.Size(618, 21);
303
            this.textBoxMARKUS_API.TabIndex = 14;
305
            this.textBoxApprovedImgPath.Location = new System.Drawing.Point(128, 52);
306
            this.textBoxApprovedImgPath.Name = "textBoxApprovedImgPath";
307
            this.textBoxApprovedImgPath.Size = new System.Drawing.Size(618, 21);
308
            this.textBoxApprovedImgPath.TabIndex = 3;
304 309
            // 
305
            // label9
310
            // label5
306 311
            // 
307
            this.label9.AutoSize = true;
308
            this.label9.Location = new System.Drawing.Point(6, 163);
309
            this.label9.Name = "label9";
310
            this.label9.Size = new System.Drawing.Size(93, 12);
311
            this.label9.TabIndex = 15;
312
            this.label9.Text = "MARKUS_API : ";
312
            this.label5.AutoSize = true;
313
            this.label5.Location = new System.Drawing.Point(6, 55);
314
            this.label5.Name = "label5";
315
            this.label5.Size = new System.Drawing.Size(116, 12);
316
            this.label5.TabIndex = 2;
317
            this.label5.Text = "ApprovedImgPath : ";
313 318
            // 
314
            // buttonMARKUS_API
319
            // textBoxPDFMovePath
315 320
            // 
316
            this.buttonMARKUS_API.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
317
            this.buttonMARKUS_API.Location = new System.Drawing.Point(752, 160);
318
            this.buttonMARKUS_API.Name = "buttonMARKUS_API";
319
            this.buttonMARKUS_API.Size = new System.Drawing.Size(37, 23);
320
            this.buttonMARKUS_API.TabIndex = 16;
321
            this.buttonMARKUS_API.Text = "확인";
322
            this.buttonMARKUS_API.UseVisualStyleBackColor = true;
323
            this.buttonMARKUS_API.Click += new System.EventHandler(this.buttonMARKUS_API_Click);
321
            this.textBoxPDFMovePath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
322
            | System.Windows.Forms.AnchorStyles.Right)));
323
            this.textBoxPDFMovePath.Location = new System.Drawing.Point(128, 25);
324
            this.textBoxPDFMovePath.Name = "textBoxPDFMovePath";
325
            this.textBoxPDFMovePath.Size = new System.Drawing.Size(618, 21);
326
            this.textBoxPDFMovePath.TabIndex = 1;
324 327
            // 
325
            // buttonPDFMovePath
328
            // label4
326 329
            // 
327
            this.buttonPDFMovePath.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
328
            this.buttonPDFMovePath.Location = new System.Drawing.Point(752, 25);
329
            this.buttonPDFMovePath.Name = "buttonPDFMovePath";
330
            this.buttonPDFMovePath.Size = new System.Drawing.Size(37, 23);
331
            this.buttonPDFMovePath.TabIndex = 17;
332
            this.buttonPDFMovePath.Text = "확인";
333
            this.buttonPDFMovePath.UseVisualStyleBackColor = true;
334
            this.buttonPDFMovePath.Click += new System.EventHandler(this.buttonPDFMovePath_Click);
330
            this.label4.AutoSize = true;
331
            this.label4.Location = new System.Drawing.Point(6, 28);
332
            this.label4.Name = "label4";
333
            this.label4.Size = new System.Drawing.Size(96, 12);
334
            this.label4.TabIndex = 0;
335
            this.label4.Text = "PDFMovePath : ";
335 336
            // 
336 337
            // buttonSave
337 338
            // 
......
344 345
            this.buttonSave.UseVisualStyleBackColor = true;
345 346
            this.buttonSave.Click += new System.EventHandler(this.buttonSave_Click);
346 347
            // 
348
            // button1
349
            // 
350
            this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
351
            | System.Windows.Forms.AnchorStyles.Right)));
352
            this.button1.Location = new System.Drawing.Point(602, 299);
353
            this.button1.Name = "button1";
354
            this.button1.Size = new System.Drawing.Size(205, 21);
355
            this.button1.TabIndex = 19;
356
            this.button1.Text = "MarkupToPDF Test";
357
            this.button1.UseVisualStyleBackColor = true;
358
            this.button1.Click += new System.EventHandler(this.btMarkupToPDF_Click);
359
            // 
347 360
            // FormConfig
348 361
            // 
349 362
            this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
350 363
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
351 364
            this.ClientSize = new System.Drawing.Size(819, 565);
365
            this.Controls.Add(this.button1);
352 366
            this.Controls.Add(this.buttonSave);
353 367
            this.Controls.Add(this.groupBox1);
354 368
            this.Controls.Add(this.textBoxDocumentID);
......
399 413
        private System.Windows.Forms.TextBox textBoxUpLoadServiceUrl;
400 414
        private System.Windows.Forms.Label label7;
401 415
        private System.Windows.Forms.Button buttonSave;
416
        private System.Windows.Forms.Button button1;
402 417
    }
403 418
}
404 419

  
FinalService/KCOM_FinalService/FinalService_Config/FormConfig.cs
85 85
                }
86 86

  
87 87
                remObj = (RemFinalPDFObject)Activator.GetObject(typeof(RemFinalPDFObject),
88
                                              string.Format("tcp://localhost:{0}/remFinalPDF", this.textBoxPort.Text));
88
                                              string.Format("tcp://192.168.0.67:{0}/remFinalPDF", this.textBoxPort.Text));
89 89

  
90 90
                try
91 91
                {
92
                    result = remObj.SetFinalPDF(this.textBoxProjectNO.Text, this.textBoxDocumentID.Text);
93
                    result.FinalID = ShortGuid();
94
                    result.Status = FinalStatus.Success;
92
                    if (remObj == null)
93
                    {
94
                        this.textBoxLog.Text += "Service Null : " + string.Format("tcp://localhost:{0}/remFinalPDF", this.textBoxPort.Text);
95
                    }
96
                    else
97
                    {
98
                        result = remObj.SetFinalPDF(this.textBoxProjectNO.Text, this.textBoxDocumentID.Text);
99

  
100
                        result.FinalID = ShortGuid();
101
                        result.Status = FinalStatus.Success;
102
                    }
95 103
                }
96 104
                catch (Exception ex)
97 105
                {
98
                    this.textBoxLog.Text = ex.StackTrace.ToString();
106
                    this.textBoxLog.Text += result.Exception;
107
                    this.textBoxLog.Text += ex.StackTrace.ToString();
99 108
                }
100 109
            }
101 110
            catch (Exception ex)
102 111
            {
103
                this.textBoxLog.Text = ex.StackTrace.ToString();
112
                this.textBoxLog.Text += ex.StackTrace.ToString();
104 113
            }
105 114
        }
106 115

  
......
288 297
                MessageBox.Show(this, ex.StackTrace, "FinalService Config", MessageBoxButtons.OK, MessageBoxIcon.Error);
289 298
            }
290 299
        }
300

  
301
        private void btMarkupToPDF_Click(object sender, EventArgs e)
302
        {
303
        }
291 304
    }
292 305
}
FinalService/KCOM_FinalService/KCOM_FinalService/Remoting/RemFinalPDFStation.cs
279 279
                            ///TODO: RESULT FILE 경로 위치를 configuration으로 빼주세요
280 280
                            string resultpath = CommonLib.Common.GetConfigString("DebugResultUrlPath", "URL", "");
281 281

  
282
                            item.RESULT_FILE = String.Format(resultpath, _item.PROJECT_NO, sFolder, e.OriginPDFName);
282
                            try
283
                            {
284
                                item.RESULT_FILE = String.Format(resultpath, _item.PROJECT_NO, sFolder, _item.DOCUMENT_ID, e.OriginPDFName);
285
                            }
286
                            catch (Exception)
287
                            {
288
                                Program.FileLogger.Fatal(new Exception($"DebugResultUrlPath의 Index를 확인 하세요.{resultpath}"));
289
                            }
290

  
283 291
                            sendReqLog("RESULT_FILE_PATH", item.RESULT_FILE);
284 292
                            _entity.SaveChanges();
285 293
                            SetFinalState(_item.ID, FinalStatus.Success);
ImageComparer/ComparerTestWPF/License-LGPL.txt
1
		  GNU LESSER GENERAL PUBLIC LICENSE
2
		       Version 2.1, February 1999
3

  
4
 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
5
     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
6
 Everyone is permitted to copy and distribute verbatim copies
7
 of this license document, but changing it is not allowed.
8

  
9
[This is the first released version of the Lesser GPL.  It also counts
10
 as the successor of the GNU Library Public License, version 2, hence
11
 the version number 2.1.]
12

  
13
			    Preamble
14

  
15
  The licenses for most software are designed to take away your
16
freedom to share and change it.  By contrast, the GNU General Public
17
Licenses are intended to guarantee your freedom to share and change
18
free software--to make sure the software is free for all its users.
19

  
20
  This license, the Lesser General Public License, applies to some
21
specially designated software packages--typically libraries--of the
22
Free Software Foundation and other authors who decide to use it.  You
23
can use it too, but we suggest you first think carefully about whether
24
this license or the ordinary General Public License is the better
25
strategy to use in any particular case, based on the explanations below.
26

  
27
  When we speak of free software, we are referring to freedom of use,
28
not price.  Our General Public Licenses are designed to make sure that
29
you have the freedom to distribute copies of free software (and charge
30
for this service if you wish); that you receive source code or can get
31
it if you want it; that you can change the software and use pieces of
32
it in new free programs; and that you are informed that you can do
33
these things.
34

  
35
  To protect your rights, we need to make restrictions that forbid
36
distributors to deny you these rights or to ask you to surrender these
37
rights.  These restrictions translate to certain responsibilities for
38
you if you distribute copies of the library or if you modify it.
39

  
40
  For example, if you distribute copies of the library, whether gratis
41
or for a fee, you must give the recipients all the rights that we gave
42
you.  You must make sure that they, too, receive or can get the source
43
code.  If you link other code with the library, you must provide
44
complete object files to the recipients, so that they can relink them
45
with the library after making changes to the library and recompiling
46
it.  And you must show them these terms so they know their rights.
47

  
48
  We protect your rights with a two-step method: (1) we copyright the
49
library, and (2) we offer you this license, which gives you legal
50
permission to copy, distribute and/or modify the library.
51

  
52
  To protect each distributor, we want to make it very clear that
53
there is no warranty for the free library.  Also, if the library is
54
modified by someone else and passed on, the recipients should know
55
that what they have is not the original version, so that the original
56
author's reputation will not be affected by problems that might be
57
introduced by others.
58

  
59
  Finally, software patents pose a constant threat to the existence of
60
any free program.  We wish to make sure that a company cannot
61
effectively restrict the users of a free program by obtaining a
62
restrictive license from a patent holder.  Therefore, we insist that
63
any patent license obtained for a version of the library must be
64
consistent with the full freedom of use specified in this license.
65

  
66
  Most GNU software, including some libraries, is covered by the
67
ordinary GNU General Public License.  This license, the GNU Lesser
68
General Public License, applies to certain designated libraries, and
69
is quite different from the ordinary General Public License.  We use
70
this license for certain libraries in order to permit linking those
71
libraries into non-free programs.
72

  
73
  When a program is linked with a library, whether statically or using
74
a shared library, the combination of the two is legally speaking a
75
combined work, a derivative of the original library.  The ordinary
76
General Public License therefore permits such linking only if the
77
entire combination fits its criteria of freedom.  The Lesser General
78
Public License permits more lax criteria for linking other code with
79
the library.
80

  
81
  We call this license the "Lesser" General Public License because it
82
does Less to protect the user's freedom than the ordinary General
83
Public License.  It also provides other free software developers Less
84
of an advantage over competing non-free programs.  These disadvantages
85
are the reason we use the ordinary General Public License for many
86
libraries.  However, the Lesser license provides advantages in certain
87
special circumstances.
88

  
89
  For example, on rare occasions, there may be a special need to
90
encourage the widest possible use of a certain library, so that it becomes
91
a de-facto standard.  To achieve this, non-free programs must be
92
allowed to use the library.  A more frequent case is that a free
93
library does the same job as widely used non-free libraries.  In this
94
case, there is little to gain by limiting the free library to free
95
software only, so we use the Lesser General Public License.
96

  
97
  In other cases, permission to use a particular library in non-free
98
programs enables a greater number of people to use a large body of
99
free software.  For example, permission to use the GNU C Library in
100
non-free programs enables many more people to use the whole GNU
101
operating system, as well as its variant, the GNU/Linux operating
102
system.
103

  
104
  Although the Lesser General Public License is Less protective of the
105
users' freedom, it does ensure that the user of a program that is
106
linked with the Library has the freedom and the wherewithal to run
107
that program using a modified version of the Library.
108

  
109
  The precise terms and conditions for copying, distribution and
110
modification follow.  Pay close attention to the difference between a
111
"work based on the library" and a "work that uses the library".  The
112
former contains code derived from the library, whereas the latter must
113
be combined with the library in order to run.
114

  
115
		  GNU LESSER GENERAL PUBLIC LICENSE
116
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
117

  
118
  0. This License Agreement applies to any software library or other
119
program which contains a notice placed by the copyright holder or
120
other authorized party saying it may be distributed under the terms of
121
this Lesser General Public License (also called "this License").
122
Each licensee is addressed as "you".
123

  
124
  A "library" means a collection of software functions and/or data
125
prepared so as to be conveniently linked with application programs
126
(which use some of those functions and data) to form executables.
127

  
128
  The "Library", below, refers to any such software library or work
129
which has been distributed under these terms.  A "work based on the
130
Library" means either the Library or any derivative work under
131
copyright law: that is to say, a work containing the Library or a
132
portion of it, either verbatim or with modifications and/or translated
133
straightforwardly into another language.  (Hereinafter, translation is
134
included without limitation in the term "modification".)
135

  
136
  "Source code" for a work means the preferred form of the work for
137
making modifications to it.  For a library, complete source code means
138
all the source code for all modules it contains, plus any associated
139
interface definition files, plus the scripts used to control compilation
140
and installation of the library.
141

  
142
  Activities other than copying, distribution and modification are not
143
covered by this License; they are outside its scope.  The act of
144
running a program using the Library is not restricted, and output from
145
such a program is covered only if its contents constitute a work based
146
on the Library (independent of the use of the Library in a tool for
147
writing it).  Whether that is true depends on what the Library does
148
and what the program that uses the Library does.
149
  
150
  1. You may copy and distribute verbatim copies of the Library's
151
complete source code as you receive it, in any medium, provided that
152
you conspicuously and appropriately publish on each copy an
153
appropriate copyright notice and disclaimer of warranty; keep intact
154
all the notices that refer to this License and to the absence of any
155
warranty; and distribute a copy of this License along with the
156
Library.
157

  
158
  You may charge a fee for the physical act of transferring a copy,
159
and you may at your option offer warranty protection in exchange for a
160
fee.
161

  
162
  2. You may modify your copy or copies of the Library or any portion
163
of it, thus forming a work based on the Library, and copy and
164
distribute such modifications or work under the terms of Section 1
165
above, provided that you also meet all of these conditions:
166

  
167
    a) The modified work must itself be a software library.
168

  
169
    b) You must cause the files modified to carry prominent notices
170
    stating that you changed the files and the date of any change.
171

  
172
    c) You must cause the whole of the work to be licensed at no
173
    charge to all third parties under the terms of this License.
174

  
175
    d) If a facility in the modified Library refers to a function or a
176
    table of data to be supplied by an application program that uses
177
    the facility, other than as an argument passed when the facility
178
    is invoked, then you must make a good faith effort to ensure that,
179
    in the event an application does not supply such function or
180
    table, the facility still operates, and performs whatever part of
181
    its purpose remains meaningful.
182

  
183
    (For example, a function in a library to compute square roots has
184
    a purpose that is entirely well-defined independent of the
185
    application.  Therefore, Subsection 2d requires that any
186
    application-supplied function or table used by this function must
187
    be optional: if the application does not supply it, the square
188
    root function must still compute square roots.)
189

  
190
These requirements apply to the modified work as a whole.  If
191
identifiable sections of that work are not derived from the Library,
192
and can be reasonably considered independent and separate works in
193
themselves, then this License, and its terms, do not apply to those
194
sections when you distribute them as separate works.  But when you
195
distribute the same sections as part of a whole which is a work based
196
on the Library, the distribution of the whole must be on the terms of
197
this License, whose permissions for other licensees extend to the
198
entire whole, and thus to each and every part regardless of who wrote
199
it.
200

  
201
Thus, it is not the intent of this section to claim rights or contest
202
your rights to work written entirely by you; rather, the intent is to
203
exercise the right to control the distribution of derivative or
204
collective works based on the Library.
205

  
206
In addition, mere aggregation of another work not based on the Library
207
with the Library (or with a work based on the Library) on a volume of
208
a storage or distribution medium does not bring the other work under
209
the scope of this License.
210

  
211
  3. You may opt to apply the terms of the ordinary GNU General Public
212
License instead of this License to a given copy of the Library.  To do
213
this, you must alter all the notices that refer to this License, so
214
that they refer to the ordinary GNU General Public License, version 2,
215
instead of to this License.  (If a newer version than version 2 of the
216
ordinary GNU General Public License has appeared, then you can specify
217
that version instead if you wish.)  Do not make any other change in
218
these notices.
219

  
220
  Once this change is made in a given copy, it is irreversible for
221
that copy, so the ordinary GNU General Public License applies to all
222
subsequent copies and derivative works made from that copy.
223

  
224
  This option is useful when you wish to copy part of the code of
225
the Library into a program that is not a library.
226

  
227
  4. You may copy and distribute the Library (or a portion or
228
derivative of it, under Section 2) in object code or executable form
229
under the terms of Sections 1 and 2 above provided that you accompany
... 이 차이점은 표시할 수 있는 최대 줄수를 초과해서 이 차이점은 잘렸습니다.

내보내기 Unified diff

클립보드 이미지 추가 (최대 크기: 500 MB)