code: def subclass_genesis(self, genesisclass):
          class MayaGenesisWin(genesisclass):
              def open_shot(self, taskfile):
                  return self.open_file(taskfile)
              def save_shot(self, jbfile, tf):
                  self.update_scene_node(tf)
                  self.save_file(jbfile)
              def open_asset(self, taskfile):
                  return self.open_file(taskfile)
              def save_asset(self, jbfile, tf):
                  self.update_scene_node(tf)
                  self.save_file(jbfile)
              def save_file(self, jbfile):
                  p = jbfile.get_fullpath()
                  p = os.path.expanduser(p)
                  typ = 'mayaBinary'
                  if jbfile.get_ext() == 'ma':
                      typ = 'mayaAscii'
                  cmds.file(rename = p)
                  cmds.file(save=True, defaultExtensions=False, type=typ)
              def open_file(self, taskfile):
                  r = self.check_modified()
                  if r is False:
                      return False
                  cmds.file(taskfile.path, open=True, force=True, ignoreVersion=True)
                  return True
              def get_current_file(self, ):
                  node = jbscene.get_current_scene_node()
                  if not node:
                      return
                  tfid = cmds.getAttr('%s.taskfile_id' % node)
                  try:
                      return djadapter.taskfiles.get(id=tfid)
                  except djadapter.models.TaskFile.DoesNotExist:
                      log.error("No taskfile with id %s was found. Get current scene failed. Check your jb_sceneNode \'%s\'." % (tfid, node))
                      return
              def get_scene_node(self, ):
                  scenenodes = cmds.ls(':jb_sceneNode*')
                  if len(scenenodes) > 1:
                      cmds.delete(scenenodes)
                  node = jbscene.get_current_scene_node()
                  if node is None:
                      cmds.namespace(set=':')
                      node = cmds.createNode('jb_sceneNode')
                  return node
              def update_scene_node(self, tf):
                  node = self.get_scene_node()
                  cmds.setAttr('%s.taskfile_id' % node, lock=False)
                  cmds.setAttr('%s.taskfile_id' % node, tf.id)
                  cmds.setAttr('%s.taskfile_id' % node, lock=True)
              def check_modified(self, ):
                  if not cmds.file(q=1, modified=1):
                      return True
                  curfile = cmds.file(q=1, sceneName=1)
                  r = cmds.confirmDialog( title='Save Changes', message='Save changes to %s?' % curfile,
                                         button=['Save', 'Don\'t Save' ,'Cancel'],
                                         defaultButton='Save', cancelButton='Cancel',
                                         dismissString='Cancel')
                  if r == 'Cancel':
                      return False
                  if r == 'Save':
                      cmds.file(save=True, force=True)
                  return True
          MayaGenesisWin.set_filetype(djadapter.FILETYPES['mayamainscene'],)
          return MayaGenesisWin