def write_properties(cur, sb, lang, filename): cur.execute( "SELECT properties.propertyid, properties.propertyname, properties.propertydisplay " "FROM ontology.properties;") rows = cur.fetchall() sb.writelines( ["Arches.createNamespace('Arches.i18n.DomainData.Properties');\n"]) a = None data = [] for row in rows: a = Property() a.propertyid = row[0] a.propertyname = row[1] a.displayvalue = row[2] data.append(a) ret = "Arches.i18n.DomainData.Properties=" + JSONSerializer().serialize( data, ensure_ascii=False) + ";\n" sb.writelines(ret) utils.WriteToFile(filename, sb.getvalue(), 'a') sb.truncate(0)
def write_app_config(cur, sb, filename): cur.execute("SELECT name, defaultvalue, datatype " "FROM app_metadata.app_config " "WHERE isprivate = False;") rows = cur.fetchall() sb.writelines(["Ext.namespace('Arches.config.App');\n"]) sb.writelines(["Arches.config.App = {\n"]) data = [] currententitytypeid = '' for row in rows: if row[2] == 'text': data.append("\t" + row[0] + ": '" + row[1] + "'") else: data.append("\t" + row[0] + ": " + row[1] + "") # find primary name information entitytypes = archesmodels.EntityTypes.objects.filter( pk=settings.PRIMARY_DISPLAY_NAME_LOOKUPS['entity_type']) if len(entitytypes) == 1: concept = entitytypes[0].conceptid concept_graph = concept.toObject(full_graph=True) def findLabel(concept, labelToFind): for label in concept.labels: if label.value == labelToFind: return label if (len(concept.subconcepts) > 0): for subconcept in concept.subconcepts: return findLabel(subconcept, labelToFind) concept_label = findLabel( concept_graph, settings.PRIMARY_DISPLAY_NAME_LOOKUPS['lookup_value']) data.append("\tprimaryNameInfo:%s" % (JSONSerializer().serialize( concept_label, ensure_ascii=False, indent=8))) data.append("\tarches_version:'%s'" % version.__VERSION__) sb.writelines(",\n".join(data) + "\n};") utils.WriteToFile(filename, sb.getvalue(), 'w') sb.truncate(0)
def write_information_themes(cur, sb, lang, filename): cur.execute(""" SELECT a.informationthemeid, app_metadata.get_i18n_value(a.name_i18n_key, '""" + lang + """', '') as name, a.displayclass, a.entitytypeid, d.formid, d.sortorder FROM app_metadata.information_themes a LEFT JOIN app_metadata.information_themes_x_forms d ON a.informationthemeid = d.informationthemeid order by informationthemeid; """) rows = cur.fetchall() sb.writelines([ "Arches.createNamespace('Arches.i18n.DomainData.InformationThemes');\n" ]) a = None data = [] currententitytypeid = '' for row in rows: if currententitytypeid != row[0] and currententitytypeid != '': data.append(a) if currententitytypeid != row[0]: currententitytypeid = row[0] a = InformationTheme() a.id = row[0] a.name = row[1] a.displayclass = row[2] a.entitytypeid = row[3] if currententitytypeid == row[0]: a.forms.append({'formid': row[4], 'sortorder': row[5]}) if a != None: data.append(a) ret = "Arches.i18n.DomainData.InformationThemes=" + JSONSerializer( ).serialize(data, ensure_ascii=False) + ";\n" sb.writelines(ret) utils.WriteToFile(filename, sb.getvalue(), 'a') sb.truncate(0)
def write_localized_displays(cur, sb, lang, filename): cur.execute("SELECT labelid, label " "FROM concepts.labels " "WHERE languageid = '" + lang + "';") rows = cur.fetchall() a = None data = {} for row in rows: data[row[0]] = row[1] ret = "Arches.i18n.DomainData.ConceptSchemaLabels=" + JSONSerializer( ).serialize(data, ensure_ascii=True) + ";\n" sb.writelines(ret) utils.WriteToFile(filename, sb.getvalue(), 'a') sb.truncate(0)
def generate_files(rootpath): cur = connection.cursor() #cur.execute("SELECT table_schema, table_name, column_name, column_default, is_nullable, data_type, udt_name, is_updatable," # "CASE WHEN app.is_primary_key(table_schema||'.'||table_name) = column_name THEN 'YES'" # "ELSE 'NO'" # "END as is_pk " # "FROM information_schema.columns " # "WHERE table_schema = 'app_metadata' AND " # "table_name = 'app_strings' AND " # "column_name != 'key';") cur.execute("""SELECT distinct languageid FROM app_metadata.i18n;""") languages = cur.fetchall() sb = StringIO() i18ndir = os.path.join(rootpath, 'arches', 'Media', 'js', 'i18n') for language in languages: lang = language[0] i18nFileName = os.path.join(i18ndir, lang + ".js") sb.writelines( ["if (typeof Arches.i18n != 'object') {Arches.i18n = {};}\n"]) utils.WriteToFile(i18nFileName, sb.getvalue()) sb.truncate(0) create_namespace(sb, i18nFileName) write_localized_text_strings(cur, sb, lang, i18nFileName) write_forms(cur, sb, lang, i18nFileName) write_information_themes(cur, sb, lang, i18nFileName) write_entity_types(cur, sb, lang, i18nFileName) #write_properties(cur,sb, lang, i18nFileName) #write_localized_displays(cur,sb, lang, i18nFileName) write_map_layers(cur, sb, lang, i18nFileName) write_app_config( cur, sb, os.path.join(rootpath, 'arches', 'Media', 'js', 'debug', 'config', 'app.js'))
def create_namespace(sb, filename): sb.writelines([ "Arches.createNamespace = function(stringToParse) {" "var parts = [], root = window, part, i, j, ln, subLn;" "parts = parts.concat(stringToParse.split('.'));" "for (j = 0, subLn = parts.length; j < subLn; j++) {" "part = parts[j];" "if (typeof part !== 'string') {" "root = part;" "} else {" "if (!root[part]) {" "root[part] = {};" "}" "root = root[part];" "}" "}" "return root;" "}\n" ]) utils.WriteToFile(filename, sb.getvalue(), 'a') sb.truncate(0)
def write_forms(cur, sb, lang, filename): cur.execute("SELECT formid, app_metadata.get_i18n_value(name_i18n_key, '" + lang + "', widgetname) as name, widgetname " "FROM app_metadata.forms;") rows = cur.fetchall() sb.writelines( ["Arches.createNamespace('Arches.i18n.DomainData.Forms');\n"]) data = [] for row in rows: a = Form() a.id = row[0] a.name = row[1] a.widgetname = row[2] data.append(a) ret = "Arches.i18n.DomainData.Forms=" + JSONSerializer().serialize( data, ensure_ascii=False) + ";\n" sb.writelines(ret) utils.WriteToFile(filename, sb.getvalue(), 'a') sb.truncate(0)
def create_ext_override(sb, filename, widgetname, object): sb.writelines([ "Ext.merge(" + widgetname + ".prototype , {i18n: {" + object + "}});\n" ]) utils.WriteToFile(filename, sb.getvalue(), 'a') sb.truncate(0)
def write_map_layers(cur, sb, lang, filename): """ Writes out all the layers in the maplayers table to the localized text files (en-us.js for example). If there is more then 1 language defined for the app then all layers will be written to every localized file regardless of whether the name of the of the MapLayer has been locaized or not. This is to make sure that all the layers are available in all languages regardless of the status of the localization effort. """ basemaps = [] layergroups = [] sb.writelines(["Arches.createNamespace('Arches.i18n.MapLayers');\n"]) # first get the list of all layer ids cur.execute( "SELECT id FROM app_metadata.maplayers ORDER BY layergroup_i18n_key") layerids = cur.fetchall() for layerid in layerids: # try and get the localized layer info cur.execute( """SELECT id, active, on_map as \"onMap\", selectable, basemap, app_metadata.get_i18n_value(name_i18n_key, %s, '') as name, icon, symbology, thumbnail, app_metadata.get_i18n_value(description_i18n_key, %s, '') as description, app_metadata.get_i18n_value(layergroup_i18n_key, %s, '') as layergroup, layer, sortorder FROM app_metadata.maplayers WHERE maplayers.id = %s """, [lang, lang, lang, layerid]) rows = dictfetchall(cur) # if the layer name hasn't been localized fall back to the default language if len(rows) == 0: cur.execute( "SELECT id, active, on_map as \"onMap\", selectable, " "basemap, app_metadata.get_i18n_value(name_i18n_key, %s, '') as name, icon, symbology, thumbnail, " "app_metadata.get_i18n_value(description_i18n_key, %s, '') as description, " "app_metadata.get_i18n_value(layergroup_i18n_key, %s, '') as layergroup, layer, sortorder " "FROM app_metadata.maplayers " "WHERE maplayers.id = %s ", [lang, lang, lang, layerid]) rows = dictfetchall(cur) # write out basemaps first for row in rows: if row['basemap'] == True: basemaps.append(row) # write out all other layers next for row in rows: if row['basemap'] == False: if has_name(layergroups, row['layergroup']): get_layergroup_by_name( layergroups, row['layergroup']).layers.append(row) else: layergroups.append(LayerGroup(row['layergroup'])) get_layergroup_by_name( layergroups, row['layergroup']).layers.append(row) ret = "Arches.i18n.MapLayers.basemaps=" + JSONSerializer().serialize( basemaps, ensure_ascii=False) + ";\n" sb.writelines(ret) utils.WriteToFile(filename, sb.getvalue(), 'a') sb.truncate(0) ret = "Arches.i18n.MapLayers.layerGroups=" + JSONSerializer().serialize( layergroups, ensure_ascii=False) + ";\n" sb.writelines(ret) utils.WriteToFile(filename, sb.getvalue(), 'a') sb.truncate(0)
def write_entity_types(cur, sb, lang, filename): cur.execute(""" SELECT a.entitytypeid, lbl.value AS entitytypename, (SELECT n.value FROM concepts.values n WHERE n.conceptid = a.conceptid AND n.languageid = lbl.languageid AND valuetype = 'scopeNote' LIMIT 1) AS description, lbl.languageid, (SELECT r.widgetname FROM app_metadata.reports r LEFT JOIN app_metadata.entity_type_x_reports bb ON a.entitytypeid = bb.entitytypeid LEFT JOIN app_metadata.reports cc ON r.reportid = cc.reportid WHERE bb.entitytypeid = a.entitytypeid LIMIT 1) AS reportwidget, a.icon, a.isresource, a.conceptid, a.groupid, (SELECT value FROM app_metadata.i18n WHERE languageid = '""" + lang + """' AND key = rg.name_i18n_key) AS groupname, rg.displayclass AS groupdisplayclass FROM data.entity_types a LEFT JOIN concepts.concepts dv ON a.conceptid = dv.conceptid LEFT JOIN concepts.values lbl ON dv.conceptid = lbl.conceptid LEFT JOIN app_metadata.resource_groups rg on a.groupid = rg.groupid WHERE 1=1 and lbl.valuetype = 'prefLabel' order by entitytypeid; """) rows = cur.fetchall() sb.writelines( ["Arches.createNamespace('Arches.i18n.DomainData.EntityTypes');\n"]) a = None data = [] currententitytypeid = '' for row in rows: if currententitytypeid != row[0] and currententitytypeid != '': data.append(a) if currententitytypeid != row[0]: currententitytypeid = row[0] a = EntityType() a.entitytypeid = row[0] a.entitytypename = row[1] a.description = row[2] a.reportwidget = row[4] a.icon = row[5] a.isresource = row[6] a.groupname = row[9] a.groupdisplayclass = row[10] if a != None: data.append(a) ret = "Arches.i18n.DomainData.EntityTypes=" + JSONSerializer().serialize( data, ensure_ascii=False) + ";\n" sb.writelines(ret) utils.WriteToFile(filename, sb.getvalue(), 'a') sb.truncate(0)