Class: Twb::ColumnField

Inherits:
TabClass show all
Includes:
Comparable
Defined in:
lib/twb/columnfield.rb

Constant Summary collapse

@@dataTypeRoleMap =
{
  'date'     => :dimension,
  'datetime' => :dimension, 
  'boolean'  => :dimension,
  'integer'  => :measure,
  'float'    => :measure,
  'real'     => :measure,
  'string'   => :dimension,
}

Instance Attribute Summary collapse

Attributes inherited from TabClass

#ttlogfile, #ttlogfilename, #uuid

Instance Method Summary collapse

Methods inherited from TabClass

#docFile, #emit, #setDocFileName

Constructor Details

#initialize(fieldNode, datasource = nil) ⇒ ColumnField

Returns a new instance of ColumnField.



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/twb/columnfield.rb', line 72

def initialize(fieldNode, datasource=nil)
  @datasource         = datasource
  @node               = fieldNode
  @name               = load('name').sub(/^\[/,'').sub(/\]$/,'')
  @caption            = load 'caption'
  @uiname             = @caption.nil? ? @name : @caption
  #--
  loadAttributes @node
  # @dataType           = load 'datatype'
  # @userDataType       = load 'user-datatype'
  # @defaultFormat      = load 'default-format'
  # @paramDomainType    = load 'param-domain-type'
  # @type               = load 'type'
  # @value              = load 'value'
  # @alias              = load 'alias'
  # @semanticRole       = load 'semantic-role'
  # @aggregation        = load 'aggregation'
  # @autoColumn         = load 'auto-column'
  # @datatypeCustomized = load 'datatype-customized'
end

Instance Attribute Details

#aggregationObject (readonly)

Returns the value of attribute aggregation.



66
67
68
# File 'lib/twb/columnfield.rb', line 66

def aggregation
  @aggregation
end

#aliasObject (readonly)

Returns the value of attribute alias.



63
64
65
# File 'lib/twb/columnfield.rb', line 63

def alias
  @alias
end

#aliasesObject (readonly)

Returns the value of attribute aliases.



70
71
72
# File 'lib/twb/columnfield.rb', line 70

def aliases
  @aliases
end

#autoColumnObject (readonly)

Returns the value of attribute autoColumn.



67
68
69
# File 'lib/twb/columnfield.rb', line 67

def autoColumn
  @autoColumn
end

#calcFieldObject (readonly)

def loadRole

role = @node['role']
if role.nil? 
  role = @@dataTypeRoleMap[@dataType].nil? ? @dataType : @@dataTypeRoleMap[@dataType]
end
return role

end



154
155
156
# File 'lib/twb/columnfield.rb', line 154

def calcField
  @calcField
end

#captionObject (readonly)

Returns the value of attribute caption.



62
63
64
# File 'lib/twb/columnfield.rb', line 62

def caption
  @caption
end

#dataTypeObject (readonly)

Returns the value of attribute dataType.



64
65
66
# File 'lib/twb/columnfield.rb', line 64

def dataType
  @dataType
end

#datatypeCustomizedObject (readonly)

Returns the value of attribute datatypeCustomized.



67
68
69
# File 'lib/twb/columnfield.rb', line 67

def datatypeCustomized
  @datatypeCustomized
end

#defaultFormatObject (readonly)

Returns the value of attribute defaultFormat.



64
65
66
# File 'lib/twb/columnfield.rb', line 64

def defaultFormat
  @defaultFormat
end

#hasaliasesObject (readonly)

Returns the value of attribute hasaliases.



63
64
65
# File 'lib/twb/columnfield.rb', line 63

def hasaliases
  @hasaliases
end

#hiddenObject (readonly)

Returns the value of attribute hidden.



67
68
69
# File 'lib/twb/columnfield.rb', line 67

def hidden
  @hidden
end

#nameObject (readonly)

Returns the value of attribute name.



62
63
64
# File 'lib/twb/columnfield.rb', line 62

def name
  @name
end

#nodeObject (readonly)

XML Attributes known to exist in TWB xml


aggregation aggregation-param alias auto-column caption datatype datatype-customized default-format default-role default-type hidden layered name param-domain-type pivot role semantic-role SplitFieldIndex SplitFieldOrigin type user-datatype value visual-totals



61
62
63
# File 'lib/twb/columnfield.rb', line 61

def node
  @node
end

#paramDomainTypeObject (readonly)

Returns the value of attribute paramDomainType.



64
65
66
# File 'lib/twb/columnfield.rb', line 64

def paramDomainType
  @paramDomainType
end

#pathObject (readonly)

Returns the value of attribute path.



69
70
71
# File 'lib/twb/columnfield.rb', line 69

def path
  @path
end

#propertiesObject (readonly)

XML Attributes known to exist in TWB xml


aggregation aggregation-param alias auto-column caption datatype datatype-customized default-format default-role default-type hidden layered name param-domain-type pivot role semantic-role SplitFieldIndex SplitFieldOrigin type user-datatype value visual-totals



61
62
63
# File 'lib/twb/columnfield.rb', line 61

def properties
  @properties
end

#roleObject (readonly)

Returns the value of attribute role.



65
66
67
# File 'lib/twb/columnfield.rb', line 65

def role
  @role
end

#semanticRoleObject (readonly)

Returns the value of attribute semanticRole.



66
67
68
# File 'lib/twb/columnfield.rb', line 66

def semanticRole
  @semanticRole
end

#typeObject (readonly)

Returns the value of attribute type.



65
66
67
# File 'lib/twb/columnfield.rb', line 65

def type
  @type
end

#uinameObject (readonly)

Returns the value of attribute uiname.



62
63
64
# File 'lib/twb/columnfield.rb', line 62

def uiname
  @uiname
end

#valueObject (readonly)

Returns the value of attribute value.



65
66
67
# File 'lib/twb/columnfield.rb', line 65

def value
  @value
end

Instance Method Details

#<=>(other) ⇒ Object



267
268
269
# File 'lib/twb/columnfield.rb', line 267

def <=>(other)
  @name <=> other.name
end

#commentObject



178
179
180
# File 'lib/twb/columnfield.rb', line 178

def comment
  @commentLines ||= loadComment
end

#eql?(other) ⇒ Boolean

Returns:

  • (Boolean)


271
272
273
# File 'lib/twb/columnfield.rb', line 271

def eql?(other)
  @name == other.name
end

#hasComment?Boolean

Returns:

  • (Boolean)


230
231
232
233
# File 'lib/twb/columnfield.rb', line 230

def hasComment?
  loadComment if @commentLines.nil?
  @commentLines.empty?
end

#hashObject



275
276
277
# File 'lib/twb/columnfield.rb', line 275

def hash
  @name.hash
end

#idObject



93
94
95
# File 'lib/twb/columnfield.rb', line 93

def id
    @id ||= @id = @name.hash
end

#load(nodeName) ⇒ Object



97
98
99
100
101
# File 'lib/twb/columnfield.rb', line 97

def load nodeName
  attr = @node.attribute(nodeName)
  val  = attr.nil? ? nil : attr.text.strip
  return val
end

#loadAliasesObject



190
191
192
193
194
195
196
197
198
199
# File 'lib/twb/columnfield.rb', line 190

def loadAliases
  @aliases = {}
  if hasaliases
    @node.at_xpath('./aliases//alias').each do |an|
      dbvalue = an['key'].to_s.gsub(/^["]+/,'').gsub(/["]+$/,'')
      @aliases[ dbvalue ] = an['value']
    end
  end
  return @aliases
end

#loadAttributes(node) ⇒ Object



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/twb/columnfield.rb', line 103

def loadAttributes node
  # puts "augmenting with node:#{node}"
  @node = node
  if node.has_attribute?('aggregation')         then @aggregation        = node['aggregation']         end 
  if node.has_attribute?('alias')               then @alias              = node['alias']               end
  if node.has_attribute?('auto-column')         then @autoColumn         = node['auto-column']         end 
  if node.has_attribute?('datatype')            then @dataType           = node['datatype']            end
  if node.has_attribute?('datatype-customized') then @datatypeCustomized = node['datatype-customized'] end
  if node.has_attribute?('default-format')      then @defaultFormat      = node['default-format']      end
  if node.has_attribute?('param-domain-type')   then @paramDomainType    = node['param-domain-type']   end
  if node.has_attribute?('role')                then @role               = node['role']                end
  if node.has_attribute?('semantic-role')       then @semanticRole       = node['semantic-role']       end
  if node.has_attribute?('type')                then @type               = node['type']                end 
  if node.has_attribute?('user-datatype')       then @userDataType       = node['user-datatype']       end
  if node.has_attribute?('value')               then @value              = node['value']               end
  # loadAttr @aggregation,        'aggregation'
  # loadAttr @alias,              'alias'
  # loadAttr @autoColumn,         'auto-column'
  # loadAttr @dataType,           'datatype'
  # loadAttr @datatypeCustomized, 'datatype-customized'
  # loadAttr @defaultFormat,      'default-format'
  # loadAttr @paramDomainType,    'param-domain-type'
  # loadAttr @role,               'role'
  # loadAttr @semanticRole,       'semantic-role'
  # loadAttr @type,               'type'
  # loadAttr @userDataType,       'user-datatype'
  # loadAttr @value,              'value'
end

#loadCalcFieldObject



162
163
164
165
166
167
168
# File 'lib/twb/columnfield.rb', line 162

def loadCalcField
  if !@node.at_xpath('./calculation').nil?
    @calcField = Twb::CalculatedField.new @node, @datasource
  else 
    @calcField = nil
  end
end

#loadCommentObject

COMMENTED FIELDS


<column caption=‘Calculation1’ datatype=‘real’ name=‘’ role=‘measure’ type=‘quantitative’>

<calculation class='tableau' formula='[Formula Length] * 1.1' />
<desc>
  <formatted-text>
    <run>THIS IS A COMMENT</run>
  </formatted-text>
</desc>

</column> <column datatype=‘string’ name=‘[Data Source Name (tech) (CalculatedFieldsReferencedFields.csv)]’ role=‘dimension’ type=‘nominal’>

<desc>
  <formatted-text>
    <run>THIS IS A COMMENT</run>
  </formatted-text>
</desc>

</column>



218
219
220
221
222
223
224
225
226
227
228
# File 'lib/twb/columnfield.rb', line 218

def loadComment
  @commentLines = []
  runs = @node.xpath('./desc/formatted-text/run')
  runs.each do |run|
    lines = run.text.split(/\n/)
    lines.each do |line|
      @commentLines << line
    end
  end
  return @commentLines
end

#loadPropertiesObject



254
255
256
257
258
259
260
261
# File 'lib/twb/columnfield.rb', line 254

def loadProperties
  @properties = {} if @properties.nil?
  @node.attributes.each do |name,attr|
    @properties[name] = attr.value
  end
  @properties[:uiname] = @name
  return @properties
end

#pathbareObject



174
175
176
# File 'lib/twb/columnfield.rb', line 174

def pathbare
  @pathbare ||= path().gsub(/\[\]/,'')
end

#to_sObject



263
264
265
# File 'lib/twb/columnfield.rb', line 263

def to_s
  "n:#{@name}: uin:#{uiname}: "
end