Advertisement
davidm1766

generator-javagenerator.py

May 22nd, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.64 KB | None | 0 0
  1. import json
  2. import os
  3. import re
  4. import shutil
  5.  
  6. class JavaGenerator():
  7.  
  8.  
  9.     re_velke_pismena = re.compile('[A-Z]')
  10.  
  11.     def typ(self,t):
  12.         if t == "xy":
  13.             return "java.awt.Point"
  14.         if t == "wh":
  15.             return "java.awt.Dimension"
  16.         if t == "xywh":
  17.             return "java.awt.Rectangle"
  18.         if t == "string":
  19.             return "String"
  20.         if t == "variant":
  21.             return "Object"
  22.         if t == "keyvalue":
  23.             return "java.util.Map"
  24.         if t == "int32":
  25.             return "int"
  26.         if t == "BasicEventHandler":
  27.             return "java.beans.EventHandler"
  28.         if t == "inputstream":
  29.             return "java.io.InputStream"
  30.         if t == "NotificationEventHandler":
  31.             return "com.sun.nio.sctp.NotificationHandler"
  32.         if t == "ImportExportHandler":
  33.             return "Object"
  34.         else:
  35.             return t
  36.  
  37.  
  38.     def daj_default(self,typ):
  39.         if typ == "boolean":
  40.             return "false"
  41.         if typ == "string":
  42.             return "\"\"";
  43.         if typ == "int32":
  44.             return "0"
  45.         else:
  46.             return "null"
  47.  
  48.     def generuj_metodu(self, dok,f):
  49.         typ = self.typ(dok['returnType'])
  50.         name = dok['name']
  51.         isreturn = False
  52.         if typ:
  53.             f.write("public "+typ+" "+name)
  54.             isreturn = True
  55.         else:
  56.             f.write("public void " + name)
  57.             isreturn =False
  58.  
  59.  
  60.  
  61.         if (dok['parameters']):
  62.             count = len(dok['parameters'])
  63.             i = 0
  64.             f.write("(")
  65.             for par in dok['parameters']:
  66.                 f.write(self.typ(par['type']) + " " + par['name'])
  67.                 if i != count-1:
  68.                     f.write(", ")
  69.                 i += 1
  70.             f.write("){\n")
  71.  
  72.         else:
  73.             f.write("(){\n")
  74.  
  75.         if isreturn:
  76.             f.write("\treturn "+self.daj_default(typ)+";\n")
  77.             f.write("}\n")
  78.         else:
  79.             f.write("}\n")
  80.  
  81.  
  82.     def generuj_property(self, dokument, f):
  83.         name = self.konv_nazov_property(dokument['name'])
  84.         name = str(name[0]).lower() + str(name[1:])
  85.         if dokument['readable']:
  86.             f.write("public ")
  87.             f.write(self.typ(dokument['type']))
  88.             f.write(" get")
  89.             f.write(name+"(){\n")
  90.             f.write("\treturn this."+name+";\n")
  91.             f.write("}\n\n")
  92.         if dokument['writable']:
  93.             f.write("public ")
  94.             f.write("void")
  95.             f.write(" set")
  96.             f.write(name+"("+self.typ(dokument['type']) +" "+ name+"){\n")
  97.             f.write("\tthis."+name+" = "+name+";\n")
  98.             f.write("}\n\n")
  99.  
  100.     def generuj_triedu(self,dokument, f):
  101.  
  102.         #dam to do nejakeho balicka
  103.         f.write("package {0};".format("umlfri"))
  104.         f.write("\n")
  105.  
  106.         f.write("public class "+ dokument['name']+" ")
  107.  
  108.         if dokument['base']:  # je tam nejaka hodnota?
  109.             f.write("extends "+dokument['base'])
  110.         f.write("{\n\n")
  111.  
  112.         #privatne atributy
  113.         for prop in dokument['properties']:
  114.             f.write("private "+self.typ(prop['type'])+" "+prop['name']+"; \n")
  115.  
  116.         if not dokument['properties'] and not dokument['methods']:
  117.             f.write("\n")
  118.  
  119.         for prop in dokument['properties']:
  120.             self.generuj_property(prop, f)
  121.  
  122.  
  123.         #generovanie fcii
  124.         for method in dokument['methods']:
  125.             self.generuj_metodu(method, f)
  126.  
  127.         f.write("}")  # posledna zatvorka
  128.  
  129.     def konv_nazov_modulu(self, nazov_triedy):
  130.         return nazov_triedy #nazov_triedy[0].upper() + nazov_triedy[0::].lower()
  131.  
  132.     def konv_nazov_property(self, nazov_property):
  133.         return nazov_property[0].upper() + nazov_property[1:]
  134.  
  135.  
  136.     def generuj(self, zdroj_dir, ciel_dir):
  137.  
  138.         if os.path.exists(ciel_dir):  # skontrolujem ci existuje
  139.             shutil.rmtree(ciel_dir)  # zmazem adresar
  140.         os.mkdir(ciel_dir)  # vytvorim
  141.         #open(os.path.join(ciel_dir, "__init__.py"), "w").close()
  142.  
  143.         # najdem vsetky json subory
  144.         for nazov in os.listdir(zdroj_dir):
  145.             nazov_cesta = os.path.join(zdroj_dir, nazov)  # cela cesta
  146.             # zistim ci je to subor
  147.             if os.path.isfile(nazov_cesta) and nazov.endswith('.json'):
  148.                 with open(nazov_cesta) as f:
  149.                     dokument = json.load(f)
  150.                 ciel_cesta = os.path.join(ciel_dir, self.konv_nazov_modulu(dokument['name']) + '.java')  # nazov triedy bude nazov suboru
  151.                 with open(ciel_cesta, "w") as f:
  152.                     self.generuj_triedu(dokument, f)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement