Module VirtP2V::UI::Convert
In: lib/virt-p2v/ui/convert.rb
lib/virt-p2v/ui/convert.rb

Methods

Classes and Modules

Class VirtP2V::UI::Convert::InvalidUIState

Constants

CONVERT_PROFILE_NAME = 0
CONVERT_NETWORK_CONVERT = 0
CONVERT_NETWORK_DEVICE = 1
CONVERT_FIXED_CONVERT = 0
CONVERT_FIXED_DEVICE = 1
CONVERT_FIXED_PROGRESS = 2
CONVERT_FIXED_SIZE_GB = 3
CONVERT_REMOVABLE_CONVERT = 0
CONVERT_REMOVABLE_DEVICE = 1
CONVERT_REMOVABLE_TYPE = 2
UI_STATE_INVALID = 0
UI_STATE_VALID = 1
UI_STATE_CONNECTING = 2
UI_STATE_CONVERTING = 3
UI_STATE_COMPLETE = 4
EV_VALID = 0
EV_BUTTON = 1
EV_CONNECTION = 2
EV_CONVERTED = 3
CONVERT_PROFILE_NAME = 0
CONVERT_NETWORK_CONVERT = 0
CONVERT_NETWORK_DEVICE = 1
CONVERT_FIXED_CONVERT = 0
CONVERT_FIXED_DEVICE = 1
CONVERT_FIXED_PROGRESS = 2
CONVERT_FIXED_SIZE_GB = 3
CONVERT_REMOVABLE_CONVERT = 0
CONVERT_REMOVABLE_DEVICE = 1
CONVERT_REMOVABLE_TYPE = 2
UI_STATE_INVALID = 0
UI_STATE_VALID = 1
UI_STATE_CONNECTING = 2
UI_STATE_CONVERTING = 3
UI_STATE_COMPLETE = 4
EV_VALID = 0
EV_BUTTON = 1
EV_CONNECTION = 2
EV_CONVERTED = 3

Public Class methods

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 390
390:     def self.check_numeric(widget)
391:         value = widget.text
392:         if value.nil? ? false : begin
393:             value = Integer(value)
394:             value > 0
395:         rescue
396:             false
397:         end
398:         then
399:             widget.secondary_icon_name = nil
400:         else
401:             widget.secondary_icon_name = 'gtk-dialog-warning'
402:             widget.secondary_icon_tooltip_text =
403:                 'Value must be an integer greater than 0'
404:         end
405: 
406:         update_values
407:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 390
390:     def self.check_numeric(widget)
391:         value = widget.text
392:         if value.nil? ? false : begin
393:             value = Integer(value)
394:             value > 0
395:         rescue
396:             false
397:         end
398:         then
399:             widget.secondary_icon_name = nil
400:         else
401:             widget.secondary_icon_name = 'gtk-dialog-warning'
402:             widget.secondary_icon_tooltip_text =
403:                 'Value must be an integer greater than 0'
404:         end
405: 
406:         update_values
407:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 235
235:     def self.convert
236:         @converter.convert(
237:             # status
238:             lambda { |msg|
239:                 @status.text = msg
240:             },
241:             # progress
242:             lambda { |dev, progress|
243:                 @fixeds.each { |model, path, iter|
244:                     next unless iter[CONVERT_FIXED_DEVICE] == dev
245: 
246:                     iter[CONVERT_FIXED_PROGRESS] = progress
247:                     break
248:                 }
249:             }
250:         ) { |result|
251:             @converter.connection.close
252: 
253:             # N.B. Explicit test against true is required here, as result may be
254:             # an Exception, which would also return true if evaluated alone
255:             if result == true then
256:                 @status.text = ''
257:                 event(EV_CONVERTED, true)
258:             else
259:                 @status.text = result.message
260:                 event(EV_CONVERTED, false)
261: 
262:                 # Reset transfer progress bars to zero
263:                 @fixeds.each { |model, path, iter|
264:                     iter[CONVERT_FIXED_PROGRESS] = 0
265:                 }
266:             end
267:         }
268:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 235
235:     def self.convert
236:         @converter.convert(
237:             # status
238:             lambda { |msg|
239:                 @status.text = msg
240:             },
241:             # progress
242:             lambda { |dev, progress|
243:                 @fixeds.each { |model, path, iter|
244:                     next unless iter[CONVERT_FIXED_DEVICE] == dev
245: 
246:                     iter[CONVERT_FIXED_PROGRESS] = progress
247:                     break
248:                 }
249:             }
250:         ) { |result|
251:             @converter.connection.close
252: 
253:             # N.B. Explicit test against true is required here, as result may be
254:             # an Exception, which would also return true if evaluated alone
255:             if result == true then
256:                 @status.text = ''
257:                 event(EV_CONVERTED, true)
258:             else
259:                 @status.text = result.message
260:                 event(EV_CONVERTED, false)
261: 
262:                 # Reset transfer progress bars to zero
263:                 @fixeds.each { |model, path, iter|
264:                     iter[CONVERT_FIXED_PROGRESS] = 0
265:                 }
266:             end
267:         }
268:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 424
424:     def self.convert_button_clicked
425:         event(EV_BUTTON, true)
426:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 424
424:     def self.convert_button_clicked
425:         event(EV_BUTTON, true)
426:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 382
382:     def self.convert_cpus_changed
383:         check_numeric(@cpus)
384:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 382
382:     def self.convert_cpus_changed
383:         check_numeric(@cpus)
384:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 283
283:     def self.convert_fixed_list_row_changed(model, path, iter)
284:         update_values
285:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 283
283:     def self.convert_fixed_list_row_changed(model, path, iter)
284:         update_values
285:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 409
409:     def self.convert_fixed_select_toggled(widget, path)
410:         iter = @fixeds.get_iter(path)
411:         iter[CONVERT_FIXED_CONVERT] = !iter[CONVERT_FIXED_CONVERT]
412:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 409
409:     def self.convert_fixed_select_toggled(widget, path)
410:         iter = @fixeds.get_iter(path)
411:         iter[CONVERT_FIXED_CONVERT] = !iter[CONVERT_FIXED_CONVERT]
412:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 386
386:     def self.convert_memory_changed
387:         check_numeric(@memory)
388:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 386
386:     def self.convert_memory_changed
387:         check_numeric(@memory)
388:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 419
419:     def self.convert_network_select_toggled(widget, path)
420:         iter = @nics.get_iter(path)
421:         iter[CONVERT_NETWORK_CONVERT] = !iter[CONVERT_NETWORK_CONVERT]
422:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 419
419:     def self.convert_network_select_toggled(widget, path)
420:         iter = @nics.get_iter(path)
421:         iter[CONVERT_NETWORK_CONVERT] = !iter[CONVERT_NETWORK_CONVERT]
422:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 414
414:     def self.convert_removable_select_toggled(widget, path)
415:         iter = @removables.get_iter(path)
416:         iter[CONVERT_REMOVABLE_CONVERT] = !iter[CONVERT_REMOVABLE_CONVERT]
417:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 414
414:     def self.convert_removable_select_toggled(widget, path)
415:         iter = @removables.get_iter(path)
416:         iter[CONVERT_REMOVABLE_CONVERT] = !iter[CONVERT_REMOVABLE_CONVERT]
417:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 147
147:     def self.event(event, status)
148:         case @state
149:         when UI_STATE_INVALID
150:             case event
151:             when EV_VALID
152:                 set_state(UI_STATE_VALID) if status
153:             else
154:                 raise "Unexpected event: #{@state} #{event}"
155:             end
156:         when UI_STATE_VALID
157:             case event
158:             when EV_VALID
159:                 set_state(UI_STATE_INVALID) if !status
160:             when EV_BUTTON
161:                 if @converter.connection.connected? then
162:                     set_state(UI_STATE_CONVERTING)
163:                     convert
164:                 else
165:                     set_state(UI_STATE_CONNECTING)
166:                     reconnect
167:                 end
168:             else
169:                 raise "Unexpected event: #{@state} #{event}"
170:             end
171:         when UI_STATE_CONNECTING
172:             case event
173:             when EV_CONNECTION
174:                 if status then
175:                     set_state(UI_STATE_CONVERTING)
176:                     convert
177:                 else
178:                     set_state(UI_STATE_VALID)
179:                 end
180:             when EV_VALID
181:                 # update_values will be called when the profile list is cleared
182:                 # and repopulated during connection. Untidy, but ignore it.
183:             else
184:                 raise "Unexpected event: #{@state} #{event}" \
185:                     unless event == EV_CONNECTION
186:             end
187:         when UI_STATE_CONVERTING
188:             case event
189:             when EV_CONVERTED
190:                 if status then
191:                     set_state(UI_STATE_COMPLETE)
192:                 else
193:                     set_state(UI_STATE_VALID)
194:                 end
195:             when EV_VALID
196:                 # update_values will be called when the list stores are updated.
197:                 # Untidy, but ignore it
198:             else
199:                 raise "Unexpected event: #{@state} #{event}"
200:             end
201:         else
202:             raise "Unexpected UI state: #{@state}"
203:         end
204:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 147
147:     def self.event(event, status)
148:         case @state
149:         when UI_STATE_INVALID
150:             case event
151:             when EV_VALID
152:                 set_state(UI_STATE_VALID) if status
153:             else
154:                 raise "Unexpected event: #{@state} #{event}"
155:             end
156:         when UI_STATE_VALID
157:             case event
158:             when EV_VALID
159:                 set_state(UI_STATE_INVALID) if !status
160:             when EV_BUTTON
161:                 if @converter.connection.connected? then
162:                     set_state(UI_STATE_CONVERTING)
163:                     convert
164:                 else
165:                     set_state(UI_STATE_CONNECTING)
166:                     reconnect
167:                 end
168:             else
169:                 raise "Unexpected event: #{@state} #{event}"
170:             end
171:         when UI_STATE_CONNECTING
172:             case event
173:             when EV_CONNECTION
174:                 if status then
175:                     set_state(UI_STATE_CONVERTING)
176:                     convert
177:                 else
178:                     set_state(UI_STATE_VALID)
179:                 end
180:             when EV_VALID
181:                 # update_values will be called when the profile list is cleared
182:                 # and repopulated during connection. Untidy, but ignore it.
183:             else
184:                 raise "Unexpected event: #{@state} #{event}" \
185:                     unless event == EV_CONNECTION
186:             end
187:         when UI_STATE_CONVERTING
188:             case event
189:             when EV_CONVERTED
190:                 if status then
191:                     set_state(UI_STATE_COMPLETE)
192:                 else
193:                     set_state(UI_STATE_VALID)
194:                 end
195:             when EV_VALID
196:                 # update_values will be called when the list stores are updated.
197:                 # Untidy, but ignore it
198:             else
199:                 raise "Unexpected event: #{@state} #{event}"
200:             end
201:         else
202:             raise "Unexpected UI state: #{@state}"
203:         end
204:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 48
 48:     def self.init(ui, converter)
 49:         # ListStores
 50:         @profiles   = ui.get_object('convert_profile_list')
 51:         @nics       = ui.get_object('convert_network_list')
 52:         @fixeds     = ui.get_object('convert_fixed_list')
 53:         @removables = ui.get_object('convert_removable_list')
 54: 
 55:         # Widgets
 56:         @profile    = ui.get_object('convert_profile')
 57:         @name       = ui.get_object('convert_name')
 58:         @cpus       = ui.get_object('convert_cpus')
 59:         @memory     = ui.get_object('convert_memory')
 60:         @editable   = ui.get_object('convert_editable')
 61:         @button     = ui.get_object('convert_button')
 62:         @status     = ui.get_object('convert_status')
 63: 
 64:         # Get initial values from converter
 65:         @name.text = converter.name
 66:         @cpus.text = converter.cpus.to_s
 67:         @memory.text = (converter.memory / 1024 / 1024).to_s
 68: 
 69:         # Populate profiles on connection
 70:         converter.on_connection { |conn|
 71:             conn.on_connect { |cb|
 72:                 conn.list_profiles { |profiles|
 73:                     cb.call(RuntimeError.new('Remote server does not ' +
 74:                                              'define any profiles in ' +
 75:                                              '/etc/virt-v2v.conf')) \
 76:                         if profiles.kind_of?(Exception) or profiles.empty?
 77: 
 78:                     selected = @profile.active_iter
 79:                     selected = selected[CONVERT_PROFILE_NAME] \
 80:                         unless selected.nil?
 81: 
 82:                     @profiles.clear
 83:                     profiles.each { |i|
 84:                         profile = @profiles.append
 85:                         profile[CONVERT_PROFILE_NAME] = i
 86:                         @profile.active_iter = profile if i == selected
 87:                     }
 88: 
 89:                     cb.call(true)
 90:                 }
 91:             }
 92:         }
 93: 
 94:         VirtP2V::FixedBlockDevice.all_devices.each { |dev|
 95:             fixed = @fixeds.append
 96:             fixed[CONVERT_FIXED_CONVERT]    = true
 97:             fixed[CONVERT_FIXED_DEVICE]     = dev.device
 98:             fixed[CONVERT_FIXED_PROGRESS]   = 0
 99:             fixed[CONVERT_FIXED_SIZE_GB]    = dev.size / 1024 / 1024 / 1024
100:         }
101: 
102:         VirtP2V::RemovableBlockDevice.all_devices.each { |dev|
103:             rem = @removables.append
104:             rem[CONVERT_REMOVABLE_CONVERT]  = true
105:             rem[CONVERT_REMOVABLE_DEVICE]   = dev.device
106:             rem[CONVERT_REMOVABLE_TYPE]     = dev.type
107:         }
108: 
109:         VirtP2V::NetworkDevice.all_devices.each { |dev|
110:             nic = @nics.append
111:             nic[CONVERT_NETWORK_CONVERT]    = dev.connected
112:             nic[CONVERT_NETWORK_DEVICE]     = dev.name
113:         }
114: 
115:         # Event handlers
116:         ui.register_handler('convert_profile_changed',
117:                             method(:update_values))
118:         ui.register_handler('convert_name_changed',
119:                             method(:update_values))
120:         ui.register_handler('convert_cpus_changed',
121:                             method(:convert_cpus_changed))
122:         ui.register_handler('convert_memory_changed',
123:                             method(:convert_memory_changed))
124:         ui.register_handler('convert_fixed_list_row_changed',
125:                             method(:convert_fixed_list_row_changed))
126:         ui.register_handler('convert_removable_list_row_changed',
127:                             method(:update_values))
128:         ui.register_handler('convert_network_list_row_changed',
129:                             method(:update_values))
130:         ui.register_handler('convert_fixed_select_toggled',
131:                             method(:convert_fixed_select_toggled))
132:         ui.register_handler('convert_removable_select_toggled',
133:                             method(:convert_removable_select_toggled))
134:         ui.register_handler('convert_network_select_toggled',
135:                             method(:convert_network_select_toggled))
136:         ui.register_handler('convert_button_clicked',
137:                             method(:convert_button_clicked))
138: 
139:         @state = nil
140:         set_state(UI_STATE_INVALID)
141:         update_values
142: 
143:         @ui = ui
144:         @converter = converter
145:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 48
 48:     def self.init(ui, converter)
 49:         # ListStores
 50:         @profiles   = ui.get_object('convert_profile_list')
 51:         @nics       = ui.get_object('convert_network_list')
 52:         @fixeds     = ui.get_object('convert_fixed_list')
 53:         @removables = ui.get_object('convert_removable_list')
 54: 
 55:         # Widgets
 56:         @profile    = ui.get_object('convert_profile')
 57:         @name       = ui.get_object('convert_name')
 58:         @cpus       = ui.get_object('convert_cpus')
 59:         @memory     = ui.get_object('convert_memory')
 60:         @editable   = ui.get_object('convert_editable')
 61:         @button     = ui.get_object('convert_button')
 62:         @status     = ui.get_object('convert_status')
 63: 
 64:         # Get initial values from converter
 65:         @name.text = converter.name
 66:         @cpus.text = converter.cpus.to_s
 67:         @memory.text = (converter.memory / 1024 / 1024).to_s
 68: 
 69:         # Populate profiles on connection
 70:         converter.on_connection { |conn|
 71:             conn.on_connect { |cb|
 72:                 conn.list_profiles { |profiles|
 73:                     cb.call(RuntimeError.new('Remote server does not ' +
 74:                                              'define any profiles in ' +
 75:                                              '/etc/virt-v2v.conf')) \
 76:                         if profiles.kind_of?(Exception) or profiles.empty?
 77: 
 78:                     selected = @profile.active_iter
 79:                     selected = selected[CONVERT_PROFILE_NAME] \
 80:                         unless selected.nil?
 81: 
 82:                     @profiles.clear
 83:                     profiles.each { |i|
 84:                         profile = @profiles.append
 85:                         profile[CONVERT_PROFILE_NAME] = i
 86:                         @profile.active_iter = profile if i == selected
 87:                     }
 88: 
 89:                     cb.call(true)
 90:                 }
 91:             }
 92:         }
 93: 
 94:         VirtP2V::FixedBlockDevice.all_devices.each { |dev|
 95:             fixed = @fixeds.append
 96:             fixed[CONVERT_FIXED_CONVERT]    = true
 97:             fixed[CONVERT_FIXED_DEVICE]     = dev.device
 98:             fixed[CONVERT_FIXED_PROGRESS]   = 0
 99:             fixed[CONVERT_FIXED_SIZE_GB]    = dev.size / 1024 / 1024 / 1024
100:         }
101: 
102:         VirtP2V::RemovableBlockDevice.all_devices.each { |dev|
103:             rem = @removables.append
104:             rem[CONVERT_REMOVABLE_CONVERT]  = true
105:             rem[CONVERT_REMOVABLE_DEVICE]   = dev.device
106:             rem[CONVERT_REMOVABLE_TYPE]     = dev.type
107:         }
108: 
109:         VirtP2V::NetworkDevice.all_devices.each { |dev|
110:             nic = @nics.append
111:             nic[CONVERT_NETWORK_CONVERT]    = dev.connected
112:             nic[CONVERT_NETWORK_DEVICE]     = dev.name
113:         }
114: 
115:         # Event handlers
116:         ui.register_handler('convert_profile_changed',
117:                             method(:update_values))
118:         ui.register_handler('convert_name_changed',
119:                             method(:update_values))
120:         ui.register_handler('convert_cpus_changed',
121:                             method(:convert_cpus_changed))
122:         ui.register_handler('convert_memory_changed',
123:                             method(:convert_memory_changed))
124:         ui.register_handler('convert_fixed_list_row_changed',
125:                             method(:convert_fixed_list_row_changed))
126:         ui.register_handler('convert_removable_list_row_changed',
127:                             method(:update_values))
128:         ui.register_handler('convert_network_list_row_changed',
129:                             method(:update_values))
130:         ui.register_handler('convert_fixed_select_toggled',
131:                             method(:convert_fixed_select_toggled))
132:         ui.register_handler('convert_removable_select_toggled',
133:                             method(:convert_removable_select_toggled))
134:         ui.register_handler('convert_network_select_toggled',
135:                             method(:convert_network_select_toggled))
136:         ui.register_handler('convert_button_clicked',
137:                             method(:convert_button_clicked))
138: 
139:         @state = nil
140:         set_state(UI_STATE_INVALID)
141:         update_values
142: 
143:         @ui = ui
144:         @converter = converter
145:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 270
270:     def self.reconnect
271:         @status.text = 'Reconnecting'
272:         @converter.connection.connect { |result|
273:             if result == true then
274:                 event(EV_CONNECTION, true)
275:             else
276:                 @status.text =
277:                     'Failed to start virt-p2v-server on remote server'
278:                 event(EV_CONNECTION, false)
279:             end
280:         }
281:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 270
270:     def self.reconnect
271:         @status.text = 'Reconnecting'
272:         @converter.connection.connect { |result|
273:             if result == true then
274:                 event(EV_CONNECTION, true)
275:             else
276:                 @status.text =
277:                     'Failed to start virt-p2v-server on remote server'
278:                 event(EV_CONNECTION, false)
279:             end
280:         }
281:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 206
206:     def self.set_state(state)
207:         # Don't do anything if state hasn't changed
208:         return if state == @state
209:         @state = state
210: 
211:         case @state
212:         when UI_STATE_INVALID
213:             @editable.sensitive = true
214:             @button.sensitive = false
215:         when UI_STATE_VALID
216:             @editable.sensitive = true
217:             @button.sensitive = true
218:         when UI_STATE_CONNECTING
219:             @status.text = 'Failed to start virt-p2v-server on remote server'
220:             @editable.sensitive = false
221:             @button.sensitive = false
222:         when UI_STATE_CONVERTING
223:             @editable.sensitive = false
224:             @button.sensitive = false
225:         when UI_STATE_COMPLETE
226:             @ui.active_page = 'success_win'
227: 
228:             # ... then leave this one as we hope to find it if we come back here
229:             set_state(UI_STATE_VALID)
230:         else
231:             raise "Attempt to set unexpected UI state: #{@state}"
232:         end
233:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 206
206:     def self.set_state(state)
207:         # Don't do anything if state hasn't changed
208:         return if state == @state
209:         @state = state
210: 
211:         case @state
212:         when UI_STATE_INVALID
213:             @editable.sensitive = true
214:             @button.sensitive = false
215:         when UI_STATE_VALID
216:             @editable.sensitive = true
217:             @button.sensitive = true
218:         when UI_STATE_CONNECTING
219:             @status.text = 'Failed to start virt-p2v-server on remote server'
220:             @editable.sensitive = false
221:             @button.sensitive = false
222:         when UI_STATE_CONVERTING
223:             @editable.sensitive = false
224:             @button.sensitive = false
225:         when UI_STATE_COMPLETE
226:             @ui.active_page = 'success_win'
227: 
228:             # ... then leave this one as we hope to find it if we come back here
229:             set_state(UI_STATE_VALID)
230:         else
231:             raise "Attempt to set unexpected UI state: #{@state}"
232:         end
233:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 289
289:     def self.update_values
290:         valid = nil
291:         begin
292:             # Check there's a profile selected
293:             profile = @profile.active_iter
294:             raise InvalidUIState if profile.nil?
295:             @converter.profile = profile[CONVERT_PROFILE_NAME]
296: 
297:             # Check there's a name set
298:             name = @name.text
299:             raise InvalidUIState if name.nil? || name.strip.length == 0
300:             @converter.name = name
301: 
302:             # Check cpus and memory are set and numeric
303:             cpus = @cpus.text
304:             raise InvalidUIState if cpus.nil?
305:             cpus = Integer(cpus) rescue nil
306:             raise InvalidUIState if cpus.nil?
307:             @converter.cpus = cpus
308: 
309:             memory = @memory.text
310:             raise InvalidUIState if memory.nil?
311:             memory = Integer(memory) rescue nil
312:             raise InvalidUIState if memory.nil?
313:             @converter.memory = memory * 1024 * 1024
314: 
315:             # Check that at least 1 fixed storage device is selected
316:             fixed = false
317:             @converter.disks.clear
318:             @fixeds.each { |model, path, iter|
319:                 if iter[CONVERT_FIXED_CONVERT] then
320:                     fixed = true
321:                     @converter.disks << iter[CONVERT_FIXED_DEVICE]
322:                 end
323:             }
324:             raise InvalidUIState unless fixed
325: 
326:             # Populate removables and nics, although these aren't required to be
327:             # selected for the ui state to be valid
328:             @converter.removables.clear
329:             @removables.each { |model, path, iter|
330:                 if iter[CONVERT_REMOVABLE_CONVERT] then
331:                     @converter.removables << iter[CONVERT_REMOVABLE_DEVICE]
332:                 end
333:             }
334:             @converter.nics.clear
335:             @nics.each { |model, path, iter|
336:                 if iter[CONVERT_NETWORK_CONVERT] then
337:                     @converter.nics << iter[CONVERT_NETWORK_DEVICE]
338:                 end
339:             }
340:         rescue InvalidUIState
341:             valid = false
342:         end
343:         valid = true if valid.nil?
344: 
345:         event(EV_VALID, valid)
346:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 289
289:     def self.update_values
290:         valid = nil
291:         begin
292:             # Check there's a profile selected
293:             profile = @profile.active_iter
294:             raise InvalidUIState if profile.nil?
295:             @converter.profile = profile[CONVERT_PROFILE_NAME]
296: 
297:             # Check there's a name set
298:             name = @name.text
299:             raise InvalidUIState if name.nil? || name.strip.length == 0
300:             @converter.name = name
301: 
302:             # Check cpus and memory are set and numeric
303:             cpus = @cpus.text
304:             raise InvalidUIState if cpus.nil?
305:             cpus = Integer(cpus) rescue nil
306:             raise InvalidUIState if cpus.nil?
307:             @converter.cpus = cpus
308: 
309:             memory = @memory.text
310:             raise InvalidUIState if memory.nil?
311:             memory = Integer(memory) rescue nil
312:             raise InvalidUIState if memory.nil?
313:             @converter.memory = memory * 1024 * 1024
314: 
315:             # Check that at least 1 fixed storage device is selected
316:             fixed = false
317:             @converter.disks.clear
318:             @fixeds.each { |model, path, iter|
319:                 if iter[CONVERT_FIXED_CONVERT] then
320:                     fixed = true
321:                     @converter.disks << iter[CONVERT_FIXED_DEVICE]
322:                 end
323:             }
324:             raise InvalidUIState unless fixed
325: 
326:             # Populate removables and nics, although these aren't required to be
327:             # selected for the ui state to be valid
328:             @converter.removables.clear
329:             @removables.each { |model, path, iter|
330:                 if iter[CONVERT_REMOVABLE_CONVERT] then
331:                     @converter.removables << iter[CONVERT_REMOVABLE_DEVICE]
332:                 end
333:             }
334:             @converter.nics.clear
335:             @nics.each { |model, path, iter|
336:                 if iter[CONVERT_NETWORK_CONVERT] then
337:                     @converter.nics << iter[CONVERT_NETWORK_DEVICE]
338:                 end
339:             }
340:         rescue InvalidUIState
341:             valid = false
342:         end
343:         valid = true if valid.nil?
344: 
345:         event(EV_VALID, valid)
346:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 348
348:     def self.valid?
349:         # Check there's a profile selected
350:         profile = @profile.active_iter
351:         return false if profile.nil?
352: 
353:         # Check there's a name set
354:         name = @name.text
355:         return false if name.nil?
356:         return false unless name.strip.length > 0
357: 
358:         # Check cpus and memory are set and numeric
359:         cpus = @cpus.text
360:         return false if cpus.nil?
361:         cpus = Integer(cpus) rescue nil
362:         return false if cpus.nil?
363: 
364:         memory = @memory.text
365:         return false if memory.nil?
366:         memory = Integer(memory) rescue nil
367:         return false if memory.nil?
368: 
369:         # Check that at least 1 fixed storage device is selected
370:         fixed = false
371:         @fixeds.each { |model, path, iter|
372:             if iter[CONVERT_FIXED_CONVERT] then
373:                 fixed = true
374:                 break
375:             end
376:         }
377:         return false unless fixed
378: 
379:         return true
380:     end

[Source]

     # File lib/virt-p2v/ui/convert.rb, line 348
348:     def self.valid?
349:         # Check there's a profile selected
350:         profile = @profile.active_iter
351:         return false if profile.nil?
352: 
353:         # Check there's a name set
354:         name = @name.text
355:         return false if name.nil?
356:         return false unless name.strip.length > 0
357: 
358:         # Check cpus and memory are set and numeric
359:         cpus = @cpus.text
360:         return false if cpus.nil?
361:         cpus = Integer(cpus) rescue nil
362:         return false if cpus.nil?
363: 
364:         memory = @memory.text
365:         return false if memory.nil?
366:         memory = Integer(memory) rescue nil
367:         return false if memory.nil?
368: 
369:         # Check that at least 1 fixed storage device is selected
370:         fixed = false
371:         @fixeds.each { |model, path, iter|
372:             if iter[CONVERT_FIXED_CONVERT] then
373:                 fixed = true
374:                 break
375:             end
376:         }
377:         return false unless fixed
378: 
379:         return true
380:     end

[Validate]