135 lines
4.1 KiB
Python
135 lines
4.1 KiB
Python
# -*- coding: utf-8 mode: python -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
|
import ulib.base.i_need_py23
|
|
|
|
__all__ = ('PropertiesTempl', 'JavaTempl')
|
|
|
|
import os, re
|
|
from os import path
|
|
|
|
from ulib.base.base import isseq
|
|
from ulib.base.uio import _u
|
|
from ulib.base.encoding import LATIN1
|
|
from ulib.base.lines import Lines
|
|
from ulib.base.dates import datef
|
|
from base import FileTempl, register_templates
|
|
|
|
class PropertiesTempl(FileTempl):
|
|
TEMPLATE = ('properties file', 'properties')
|
|
FILENAME = ('Properties',)
|
|
EXT = '.properties'
|
|
|
|
VPS, ACPS, NCPS, ICPS = FileTempl.PS('-encoding')
|
|
|
|
def fix_properties(self):
|
|
FileTempl.fix_properties(self)
|
|
self.encoding = LATIN1
|
|
|
|
def get_lines(self):
|
|
return self.appendtext(None, self.modeline)
|
|
|
|
RE_COMMA = re.compile(r"[\s,]*")
|
|
|
|
def imports_parser(values):
|
|
if values:
|
|
if not isseq(values):
|
|
values = filter(None, RE_COMMA.split(values.strip()))
|
|
return u"\n".join([u"import %s;" % value for value in values])
|
|
return u""
|
|
|
|
def extends_parser(value):
|
|
if value: return u" extends %s" % _u(value).strip()
|
|
else: return u""
|
|
|
|
def implements_parser(values):
|
|
if values:
|
|
if not isseq(values):
|
|
values = filter(None, RE_COMMA.split(values.strip()))
|
|
if values: return " implements %s" % u", ".join(values)
|
|
return u""
|
|
|
|
class JavaTempl(FileTempl):
|
|
TEMPLATE = ('java file', 'java', 'j')
|
|
EXT = '.java'
|
|
|
|
VPS, ACPS, NCPS, ICPS = FileTempl.PS('package', 'imports', 'extends', 'implements',
|
|
icps=dict(package=None,
|
|
imports=imports_parser,
|
|
extends=extends_parser,
|
|
implements=implements_parser))
|
|
|
|
cdate = None
|
|
package = None
|
|
imports = None
|
|
extends = None
|
|
implements = None
|
|
body = None
|
|
|
|
RE_PACKAGE = re.compile(r'\s*package\s+(\S+)\s*;')
|
|
|
|
def __init__(self, file, **properties):
|
|
FileTempl.__init__(self, file, **properties)
|
|
self.autodetect_package()
|
|
|
|
def autodetect_package(self):
|
|
# Essayer d'autodétecter le package à partir d'autres fichiers du même répertoire
|
|
dir, _ = path.split(self.file)
|
|
if not dir: dir = '.'
|
|
if not path.isdir(dir): return False
|
|
|
|
files = [file for file in os.listdir(dir) if file.endswith('.java')]
|
|
if not files: return False
|
|
|
|
lines = Lines().readlines(path.join(dir, files[0]))
|
|
packages = lines.grep(self.RE_PACKAGE)
|
|
if not packages: return False
|
|
|
|
mo = self.RE_PACKAGE.match(packages[0])
|
|
self.package = mo.group(1)
|
|
return True
|
|
|
|
def fix_properties(self):
|
|
FileTempl.fix_properties(self)
|
|
if self.cdate is None: self.cdate = datef()
|
|
self.imports = self.imports or u""
|
|
if isseq(self.imports): self.imports = imports_parser(self.imports)
|
|
self.extends = self.extends or u""
|
|
self.implements = self.implements or u""
|
|
if isseq(self.implements): self.implements = implements_parser(self.implements)
|
|
|
|
def set_imports(self, *imports):
|
|
self.imports = imports_parser(imports)
|
|
|
|
def set_extends(self, extends):
|
|
self.extends = extends_parser(extends)
|
|
|
|
def set_implements(self, *implements):
|
|
self.implements = implements_parser(implements)
|
|
|
|
#MODE = u"java"
|
|
MODELINE_PREFIX = u"/* "
|
|
|
|
PACKAGE = u"""package %(package)s;"""
|
|
IMPORTS = u"""%(imports)s"""
|
|
CLASS = u"""\
|
|
/**
|
|
* @author jclain
|
|
*/
|
|
public class %(basename)s%(extends)s%(implements)s {"""
|
|
|
|
def get_lines(self):
|
|
lines = Lines()
|
|
self.appendtext(lines, self.modeline)
|
|
self.appendtext(lines, u"""\
|
|
* %(filename)s
|
|
* Créé le %(cdate)s
|
|
*/""")
|
|
if self.package: self.appendtext(lines, self.PACKAGE)
|
|
if self.imports:
|
|
self.appendtext(lines, self.IMPORTS, bnl=True)
|
|
self.appendtext(lines, self.CLASS, bnl=True)
|
|
if self.body: self.appendtext(lines, self.body)
|
|
self.appendtext(lines, u"}")
|
|
return lines
|
|
|
|
register_templates(PropertiesTempl, JavaTempl)
|