class Twb::Util::TwbDashSheetDataDotBuilder

Attributes

dashCount[R]
dataSourceCount[R]
dotFile[R]
dotFileName[R]
sheetCount[R]
workbook[R]

Public Class Methods

new(twb) click to toggle source
# File lib/twb/util/twbDashSheetDataDotBuilder.rb, line 46
def initialize twb
  @workbook = if twb.instance_of?(Twb::Workbook)
              then twb
              else Twb::Workbook.new(twb)
              end
  @dashCount       = @workbook.dashboards.length
  @worksheets      = @workbook.worksheetNames
  @sheetCount      = @worksheets.length
  @datasources     = @workbook.datasourceUINames
  @dataSourceCount = @datasources.length
  pairs  = processDashboards
  pairs += processWorksheets
  pairs += processOrphans
  initDot
  buildBody(pairs)
  sameRank([@workbook.name]           )
  sameRank( @workbook.dashboardNames  )
  sameRank( @workbook.worksheetNames  )
  sameRank( @workbook.datasourceNames )
  buildHeader
  labelDataSources
  closeDot
end

Public Instance Methods

buildBody(pairs) click to toggle source
# File lib/twb/util/twbDashSheetDataDotBuilder.rb, line 76
def buildBody(pairs)
  @dotFile.puts "\n   subgraph cluster_1 {"
  @dotFile.puts "       color= grey;"
  @dotFile.puts ""
  pairs.each { |pair| @dotFile.puts "      \"#{pair[0]}\" -> \"#{pair[1]}\" " }
  @dotFile.puts ""
  @dotFile.puts "   }"
end
buildHeader() click to toggle source
# File lib/twb/util/twbDashSheetDataDotBuilder.rb, line 93
def buildHeader
 @dotFile.puts ''
 @dotFile.puts '   subgraph cluster_0 {'
 @dotFile.puts '     color=white;'
 @dotFile.puts '     node [shape="box3d"  style="filled" ];'
 @dotFile.puts '     "Workbook" -> "Dashboard" -> "Worksheet" -> "Data Source"'
 @dotFile.puts '   }'
end
closeDot() click to toggle source
# File lib/twb/util/twbDashSheetDataDotBuilder.rb, line 110
def closeDot
 @dotFile.puts ' '
 @dotFile.puts '}'
 @dotFile.close
end
initDot() click to toggle source
# File lib/twb/util/twbDashSheetDataDotBuilder.rb, line 70
def initDot
  @dotFileName = @workbook.name + '.dot'
  @dotFile = File.open(@dotFileName,'w')
  @dotFile.puts @@dotHeader
end
labelDataSources() click to toggle source
# File lib/twb/util/twbDashSheetDataDotBuilder.rb, line 102
def labelDataSources
  @dotFile.puts " "
  @workbook.datasources.each do |ds|
    name = ds.name
    @dotFile.puts "  \"#{name}\" [label=\"#{ds.uiname}\"];"
  end
end
processDashboards() click to toggle source
# File lib/twb/util/twbDashSheetDataDotBuilder.rb, line 116
def processDashboards
  pairs = []
  @workbook.dashboards.each do |dash|
    dashName = dash.name
    pairs          << [@workbook.name,dashName]
    dash.worksheets.each do |sheet|
      sheetName = sheet.name
      pairs << [dashName,sheetName]
      @worksheets.delete sheetName
    end
  end
  return pairs
end
processOrphans() click to toggle source
# File lib/twb/util/twbDashSheetDataDotBuilder.rb, line 143
def processOrphans
  pairs = []
  #@datasources.each { |dsn| pairs << [@workbook.name,dsn] }
  #@worksheets.each  { |wsn| pairs << [@workbook.name,wsn] }
  return pairs
end
processWorksheets() click to toggle source
# File lib/twb/util/twbDashSheetDataDotBuilder.rb, line 130
def processWorksheets
  pairs = []
  @workbook.worksheets.each do |sheet|
    sheetName   = sheet.name
    sheet.datasources.each do |ds|
      dsName = ds.name
      pairs  << [sheetName,ds.name]
      @datasources.delete ds.uiname
    end
  end
  return pairs
end
sameRank(elements) click to toggle source
# File lib/twb/util/twbDashSheetDataDotBuilder.rb, line 85
def sameRank(elements)
  @dotFile.puts "\n  {rank=same "
  elements.each do |e|
    @dotFile.puts "     \"#{e}\""
  end
  @dotFile.puts "  }"
end