Class: Birt::Core::RptDesign

Inherits:
Object
  • Object
show all
Defined in:
lib/birt/core/rpt_design.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(rpt_design_path) ⇒ RptDesign

Returns a new instance of RptDesign.



19
20
21
22
23
# File 'lib/birt/core/rpt_design.rb', line 19

def initialize(rpt_design_path)
  self.rpt_design_path = rpt_design_path
  @data_sources, @data_sets = {}, {}
  @reports = {tables: {}, line_charts: {}}
end

Instance Attribute Details

#data_setsObject

数据集



13
14
15
# File 'lib/birt/core/rpt_design.rb', line 13

def data_sets
  @data_sets
end

#data_sourcesObject

数据源



10
11
12
# File 'lib/birt/core/rpt_design.rb', line 10

def data_sources
  @data_sources
end

#display_name(root = nil) ⇒ Object

报表的名字



7
8
9
# File 'lib/birt/core/rpt_design.rb', line 7

def display_name
  @display_name
end

#reportsObject

图表



16
17
18
# File 'lib/birt/core/rpt_design.rb', line 16

def reports
  @reports
end

#rpt_design_pathObject

design文件路径



4
5
6
# File 'lib/birt/core/rpt_design.rb', line 4

def rpt_design_path
  @rpt_design_path
end

Instance Method Details

#parse_rptObject

解析文件



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/birt/core/rpt_design.rb', line 35

def parse_rpt
  _root = REXML::Document.new(File.read(self.rpt_design_path)).root

  #报表名称
  @display_name = self.display_name(_root)

  #数据源
  _root.each_element(xpath = '/report/data-sources/oda-data-source') do |item|
    @data_sources[item.attribute(:name).value] = Birt::Core::DataSource.new(item)
  end

  #数据集
  _root.each_element(xpath='/report/data-sets/oda-data-set') do |item|
    @data_sets[item.attribute(:name).value] = Birt::Core::DataSet.new(item) do |data_set|
      data_set.data_source = @data_sources[item.get_elements("property[@name='dataSource']")[0].text]
    end
  end

  #table报表
  _root.each_element(xpath='/report/body/table') do |item|
    @reports[:tables]["#{item.attribute(:id).value}"] = Birt::Core::TableReport.new(item) do |report|
      report.data_set = @data_sets[item.get_elements("property[@name='dataSet']")[0].text]
    end
  end

  #Chart报表
  _root.each_element(xpath="/report/body/extended-item[@extensionName='Chart']") do |item|
    item_data = REXML::Document.new(item.get_elements("xml-property[@name='xmlRepresentation']")[0].text).root

    #线性报表
    if item_data.get_elements("Type")[0].text=='Line Chart'
      @reports[:line_charts]["#{item.attribute(:id).value}"] = Birt::Core::LineChartReport.new(item_data) do |report|
        report.id = item.attribute(:id).value
        report.data_set = @data_sets[item.get_elements("property[@name='dataSet']")[0].text]
      end
      @reports[:line_charts]["#{item.attribute(:id).value}"].json
    end
  end
end