~halega/+junk/sharpdevelop

« back to all changes in this revision

Viewing changes to src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/DesignerBinding/ReportDesignerLoader.cs

  • Committer: sk
  • Date: 2011-09-10 05:17:57 UTC
  • Revision ID: halega@halega.com-20110910051757-qfouz1llya9m6boy
4.1.0.7915 Release Candidate 1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
 
2
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
 
3
 
 
4
using System;
 
5
using System.Collections;
 
6
using System.Collections.Generic;
 
7
using System.ComponentModel.Design.Serialization;
 
8
using System.IO;
 
9
using System.Xml;
 
10
 
 
11
using ICSharpCode.Reports.Core;
 
12
using ICSharpCode.Reports.Core.Globals;
 
13
using ICSharpCode.SharpDevelop;
 
14
 
 
15
namespace ICSharpCode.Reports.Addin
 
16
{
 
17
        
 
18
        public class ReportDesignerLoader: BasicDesignerLoader
 
19
        {
 
20
                private IDesignerLoaderHost host;
 
21
                private IDesignerGenerator generator;
 
22
                private ReportModel reportModel;
 
23
                private Stream stream;
 
24
                
 
25
                #region Constructors
 
26
 
 
27
                public ReportDesignerLoader(IDesignerGenerator generator, Stream stream)                
 
28
                {
 
29
                        if (stream == null)
 
30
                                throw new ArgumentNullException("stream");
 
31
                        if (generator == null) {
 
32
                                throw new ArgumentNullException("generator");
 
33
                        }
 
34
                        this.generator = generator;
 
35
                        this.stream = stream;
 
36
                }
 
37
                
 
38
                #endregion
 
39
 
 
40
                
 
41
                #region Overriden methods of BasicDesignerLoader
 
42
                
 
43
                public override void BeginLoad(IDesignerLoaderHost host)
 
44
                {
 
45
                        if (host == null) {
 
46
                                throw new ArgumentNullException("host");
 
47
                        }
 
48
                        this.host = host;
 
49
                        host.AddService(typeof(ComponentSerializationService), new CodeDomComponentSerializationService((IServiceProvider)host));
 
50
                        host.AddService(typeof(IDesignerSerializationService), new DesignerSerializationService((IServiceProvider)host));
 
51
                        base.BeginLoad(host);
 
52
                }
 
53
                
 
54
                
 
55
                protected override void PerformLoad(IDesignerSerializationManager serializationManager)
 
56
                {
 
57
                        InternalReportLoader internalLoader = new InternalReportLoader(this.host,generator, stream);
 
58
                        internalLoader.LoadOrCreateReport();
 
59
                        this.reportModel = internalLoader.ReportModel;
 
60
                }
 
61
 
 
62
                
 
63
                protected override void OnEndLoad(bool successful, ICollection errors)
 
64
                {
 
65
                        base.OnEndLoad(successful, errors);
 
66
                }
 
67
                
 
68
                
 
69
                protected override void PerformFlush(IDesignerSerializationManager designerSerializationManager)
 
70
                {
 
71
                        System.Diagnostics.Trace.WriteLine("ReportDesignerLoader:PerformFlush");
 
72
                        generator.MergeFormChanges((System.CodeDom.CodeCompileUnit)null);
 
73
                }
 
74
                
 
75
                #endregion
 
76
 
 
77
                
 
78
                #region Reportmodel
 
79
                
 
80
                public ReportModel ReportModel {
 
81
                        get { return reportModel; }
 
82
                }
 
83
                
 
84
                public ReportModel CreateRenderableModel()
 
85
                {
 
86
                        ReportModel m = new ReportModel();
 
87
                        generator.MergeFormChanges((System.CodeDom.CodeCompileUnit)null);
 
88
                        XmlDocument doc = new XmlDocument();
 
89
                        doc.LoadXml(generator.ViewContent.ReportFileContent);
 
90
                        ReportLoader rl = new ReportLoader();
 
91
                        object root = rl.Load(doc.DocumentElement);
 
92
                        m = root as ReportModel;
 
93
                        
 
94
                        m.ReportSettings.FileName = generator.ViewContent.PrimaryFileName;
 
95
                        FilePathConverter.AdjustReportName(m);
 
96
                        return m;
 
97
                }
 
98
                
 
99
                #endregion
 
100
                
 
101
                #region Dispose
 
102
                
 
103
                public override void Dispose()
 
104
                {
 
105
                        // Always remove attached event handlers in Dispose.
 
106
                        base.Dispose();
 
107
                }
 
108
                
 
109
                #endregion
 
110
                
 
111
        }
 
112
 
 
113
        /// <summary>
 
114
        /// Load Report from File
 
115
        /// </summary>
 
116
        /// <param name="baseType"></param>
 
117
        /// <returns></returns>
 
118
 
 
119
        public class ReportLoader : BaseItemLoader
 
120
        {
 
121
                static Dictionary<Type, Type> baseToReport;
 
122
                
 
123
                public static Type GetReportType(Type baseType)
 
124
                {
 
125
                        if (baseType == null) return null;
 
126
                        if (baseToReport == null) {
 
127
                                baseToReport = new Dictionary<Type, Type>();
 
128
                                foreach (Type t in typeof(BaseSection).Assembly.GetTypes()) {
 
129
                                        
 
130
                                        if (t.BaseType != null && t.BaseType.Name.StartsWith("Base",
 
131
                                                                                             StringComparison.InvariantCulture)) {
 
132
                                                baseToReport[t.BaseType] = t;
 
133
                                        }
 
134
                                }
 
135
                        }
 
136
                        Type r;
 
137
                        baseToReport.TryGetValue(baseType, out r);
 
138
                        return r ?? baseType;
 
139
                }
 
140
                
 
141
                
 
142
                protected override Type GetTypeByName(string ns, string name)
 
143
                {
 
144
                        return GetReportType(base.GetTypeByName(ns, name));
 
145
                }
 
146
        }
 
147
}