Monitoring Module migriert zu ExtJS 4

Das Herrmann & Lenz Monitoring Module wird momentan auf Version ExtJS 4 migriert. Die neuen Features von ExtJS ermöglichen viele neue Funktionen, wie beispielsweise das serverseitige Durchsuchen aller Entitäten, das Einsparen einiger Requests durch browserseitiges Caching, verbesserte Wiederverwendung von Code durch die neue Vererbungsarchitektur und weniger Javascript-Code, der geladen werden muss durch den Classloader.

Letzterer zeichnet auf, welche ExtJS-Komponenten während der Benutzung des H&L Monitoring verwendet werden und lässt jene weg, die nicht gebraucht werden. Daraus entsteht dann ein ExtJS, welches genau auf die Funktionen des H&L Monitoring zugeschnitten ist.

Um die Klassen auf die neue ExtJS 4 Architektur zu migrieren, wurden Ruby-Skripte geschrieben, welch die nötigen Informationen aus den vorhandenen Klassen zusammentragen und neue Klassen generieren, die dem ExtJS 4 Schema gerecht werden. In Anbetracht der über 500 Javascript-Dateien lohnt sich diese Mühe.

Als Beispiel sei hier ein Skript aufgeführt, welches die Fields.js, welche Administrative Entitäten-Definitionen enthiehlt, in Einzeldateien aufteilt und eine jsoPart.xml generiert. Diese wird nach einer Kontrolle der jso.xml hinzugefügt. JSO (Java Script Optimizer) kümmert sich um das zusammenfügen und optimieren der einzelnen JavaScript-Dateien für die Produktiv-Version.

#!/usr/bin/ruby
# Convert Ext.extend to Ext.define and add new Files to jso.xml
# Input:
# class=Ext.extend(parent, {body})
# Ext.reg(alias, class)
# Output:
# Ext.define('class', {extend: 'parent', alias:'alias', body})
# @author Sebastian Janzen <sebastian.janzen@hl-services.de>

jsoTpl = '<js>/hlx/module/administration/editor/fields/%s</js>'
jsoPart = []
ext4Tpl = "Ext.define('%s', {\n\textend : '%s',\n\talias : '%s',\n%s});"
code = File.read("Fields.js")
fCnt = 0

code.gsub(/^hlx\.module\.administration\.fields\..*?Ext\.reg\(.+?\);/m){ ¦field¦ 

  filename = field[/^hlx\.module\.administration\.fields\.(.*?)\s/, 1] + ".js"
  jsoPart += [jsoTpl % [filename]]

  allStr = field.split(/Ext\.reg\('(.*?)', '(.*?)'\)/)
  aliasStr =  allStr[1]
  classStr = allStr[2]
  #puts "Alias: #{aliasStr}, Class: #{classStr}"

  body = field.split(/Ext\.extend\((.*?), \{(.*?)\}\);\W+Ext.reg/m)
  extendedStr = body[1]
  bodyStr = body[2]
  #puts "Body: " + bodyStr

  ext4Field = ext4Tpl % [classStr, extendedStr, aliasStr, bodyStr]

  print "Writing new File #{filename} ... "
  if (filename != nil && !!File.exists?(filename))
    f = File.new(filename, "w")
    f.print(ext4Field)
    f.close
    puts "Done."
    fCnt += 1
  else
    puts "Already exists! Skipping."
    next
  end

}

f = File.new("jsoPart.xml", "w")
jsoPart.each do ¦filename¦
  f.puts(filename)
end
f.close

puts "\nCreated #{fCnt} new Files and wrote #{jsoPart.length} JSO-Lines."

 

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>