package net.sf.minuteProject.configuration.bean; import java.io.File; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.List; import net.sf.minuteProject.application.ModelGenerator; import net.sf.minuteProject.configuration.bean.enumeration.Extension; import net.sf.minuteProject.configuration.bean.model.data.Table; import net.sf.minuteProject.configuration.bean.system.Plugin; import net.sf.minuteProject.configuration.bean.view.Function; import net.sf.minuteProject.configuration.bean.view.View; import net.sf.minuteProject.utils.CommonUtils; import net.sf.minuteProject.utils.FormatUtils; import net.sf.minuteProject.utils.LicenceUtils; import net.sf.minuteProject.utils.ModelUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.apache.velocity.VelocityContext; public class Template extends TemplateTarget { public static final String FORMAT_JAVA_CLASS = "FORMAT_JAVA_CLASS"; public static final String FORMAT_DB_OBJECT = "FORMAT_DB_OBJECT"; public static final String FORMAT_LOWER_CASE_JAVA_CLASS = "FORMAT_LOWER_CASE_JAVA_CLASS"; public static final String FORMAT_UPPER_CASE_FIRST_LETTER_ONLY_JAVA_CLASS = "FORMAT_UPPER_CASE_FIRST_LETTER_ONLY_JAVA_CLASS"; public static final String FORMAT_UPPER_CASE_FIRST_LETTER = "FORMAT_UPPER_CASE_FIRST_LETTER"; public static final String FORMAT_LOWER_CASE_FIRST_LETTER = "FORMAT_LOWER_CASE_FIRST_LETTER"; public static final String BLANK = ""; private String templateFileName; private String subdir; private String outputsubdir; private String technicalPackage; private String fileExtension; private String filePrefix; private String fileSuffix; private String fileNameFormat; private String entitySpecific; private String packageSpecific; private String modelSpecific; private String viewSpecific; private String serviceSpecific; private String functionSpecific; private String fieldSpecific; private String nodeAttributeNameSpecific; private String nodeNameValue; private String nodeAttributeNameValue; private String addModelName; private String addModelDirName; private String addTechnicalDirName; private String addBusinessPackageDirName; private String addEntityDirName; private String entityDirNameFormat; private String addScopeName; private String applicationSpecific; private String componentSpecific; private TemplateTarget templateTarget; private String fileNameBuilderPlugin, extensionNameBuilderPlugin, packageNameBuilderPlugin; private String fileNameBuilderMethod, extensionNameBuilderMethod, packageNameBuilderMethod; private String isTemplateToGenerateMethod, checkTemplateToGenerate; private String scopeSpecificValue; private String entityDirNameSuffix; private String entityDirNamePrefix; private String appendEndPackageDir; private String isToGenerate; private boolean isUpdatable = false; private boolean hasUpdatableNature = false; private boolean convertPackageToDir = true; private String chmod; private int numberOfGeneratedArtifacts; private String beginningCommentSnippet, endingCommentSnippet; private static Logger logger = Logger.getLogger(Template.class); // private enum Extension {java, xml, xsd, properties, sql}; private Extension extension; public Template () {} public Template (TemplateTarget templateTarget) { this.setOutputdir(templateTarget.getOutputdir()); this.setDir(templateTarget.getDir()); this.setTemplateTarget(templateTarget); this.setRootdir(templateTarget.getRootdir()); } public String getPropertyValue(String name) { String s = super.getPropertyValue(name); return (s!=null)?s:templateTarget.getTemplateTargetPropertyValue(name); } public String getPropertyValue(String name, String defaultValue) { String s = getPropertyValue(name); return (s!=null)?s:defaultValue; } public Boolean getPropertyValue(String name, boolean defaultValue) { String s = getPropertyValue(name); return (s!=null)?Boolean.valueOf(s):defaultValue; } public Boolean hasPropertyValue(String name, boolean defaultValue) { String s = getPropertyValue(name); return (s!=null)?true:defaultValue; } public Boolean hasPropertyValue(String name, String value) { String s = getPropertyValue(name); return (s!=null)?(s.equals(value)):false; } public TemplateTarget getTemplateTarget() { return templateTarget; } public void setTemplateTarget(TemplateTarget templateTarget) { this.templateTarget = templateTarget; } public String getEntitySpecific() { if (entitySpecific==null) entitySpecific="false"; return entitySpecific; } public String getNodeAttributeNameSpecific() { if (nodeAttributeNameSpecific==null) nodeAttributeNameSpecific="false"; return nodeAttributeNameSpecific; } public void setNodeAttributeNameSpecific(String nodeAttributeNameSpecific) { this.nodeAttributeNameSpecific = nodeAttributeNameSpecific; } public String getNodeAttributeNameValue() { return nodeAttributeNameValue; } public void setNodeAttributeNameValue(String nodeAttributeNameValue) { this.nodeAttributeNameValue = nodeAttributeNameValue; } public String getNodeNameValue() { return nodeNameValue; } public void setNodeNameValue(String nodeNameValue) { this.nodeNameValue = nodeNameValue; } public void setEntitySpecific(String entitySpecific) { this.entitySpecific = entitySpecific; } public String getFileExtension(GeneratorBean bean) { String pluginResult = getPluginExtension(bean); if (pluginResult!=null) return pluginResult; return getFileExtension(); } public String getFileExtension() { return fileExtension; } public void setFileExtension(String fileExtension) { this.fileExtension = fileExtension; extension = Extension.fromValue(fileExtension); } public String getFilePrefix() { if (filePrefix==null) return BLANK; return filePrefix; } public void setFilePrefix(String filePrefix) { this.filePrefix = filePrefix; } public String getFileSuffix() { if (fileSuffix==null) return BLANK; return fileSuffix; } public void setFileSuffix(String fileSuffix) { this.fileSuffix = fileSuffix; } public String getModelSpecific() { if (modelSpecific==null) modelSpecific="false"; return modelSpecific; } public void setModelSpecific(String modelSpecific) { this.modelSpecific = modelSpecific; } public String getOutputsubdir() { return outputsubdir; } public void setOutputsubdir(String outputsubdir) { this.outputsubdir = outputsubdir; } public String getPackageSpecific() { if (packageSpecific==null) return "false"; return packageSpecific; } public void setPackageSpecific(String packageSpecific) { this.packageSpecific = packageSpecific; } public String getSubdir() { return subdir; } public void setSubdir(String subdir) { this.subdir = subdir; } public String getTechnicalPackage() { return technicalPackage; } public void setTechnicalPackage(String technicalPackage) { this.technicalPackage = technicalPackage; } public String getTemplateFileName() { return templateFileName; } public void setTemplateFileName(String templateFileName) { this.templateFileName = templateFileName; } public String getOutputFileName (GeneratorBean bean) { return getOutputFileMain(bean)+"."+getFileExtension(bean); } public String getAppendEndPackageDir() { return appendEndPackageDir; } public void setAppendEndPackageDir(String appendEndPackageDir) { this.appendEndPackageDir = appendEndPackageDir; } /** * Returns the name of the file without the extention * @param input * @return */ public String getOutputFileMain (GeneratorBean bean) { return getFormatFileName(getOutputFileNameMain(bean)); } public String getFormatFileName (String fileName) { if (fileNameFormat!=null && !fileNameFormat.equals("")) { if (fileNameFormat.equals(FORMAT_UPPER_CASE_FIRST_LETTER_ONLY_JAVA_CLASS)) return FormatUtils.firstUpperCaseOnly(fileName); if (fileNameFormat.equals(FORMAT_UPPER_CASE_FIRST_LETTER)) return FormatUtils.firstUpperCase(fileName); if (fileNameFormat.equals(FORMAT_LOWER_CASE_FIRST_LETTER)) return FormatUtils.firstLowerCase(fileName); } return fileName; } public String getOutputFileNameMain (GeneratorBean bean) { if (bean==null) return "ERROR NO FILE NAME"; String pluginResult = getPluginFileMain(bean); if (pluginResult!=null) return pluginResult; return getNonPluginFileMain(bean.getGeneratedBeanName()); } public String getNonPluginFileMain (String input) { if ((addModelName!=null && addModelName.equals("false")) || (addScopeName!=null && addScopeName.equals("false")) ) return getFilePrefix()+getFileSuffix(); return getFilePrefix()+input+getFileSuffix(); } private String getPluginExtension (GeneratorBean bean) { return getPluginName(bean, extensionNameBuilderPlugin, extensionNameBuilderMethod); } private String getPluginFileMain (GeneratorBean bean) { return getPluginName(bean, fileNameBuilderPlugin, fileNameBuilderMethod); } public String getPluginPackageMain (GeneratorBean bean) { return getPluginName(bean, packageNameBuilderPlugin, packageNameBuilderMethod); } public String getPluginName (GeneratorBean bean, String builderPlugin, String builderMethod) { if (builderPlugin!=null && builderMethod!=null) { // lookup builder in the plugin Plugin plugin = getFileBuilderPlugin(builderPlugin); if (plugin!=null) { String result = getPluginBuildFileName (plugin, builderMethod, bean); if (result != null) return result; } } return null; } private Plugin getFileBuilderPlugin (String fileNameBuilderPlugin) { List<Plugin> plugins = this.getTemplateTarget().getTarget().getPlugins(); for (Plugin plugin : plugins) { if (plugin.getName().equals(fileNameBuilderPlugin)) return plugin; } return null; } public boolean isToGenerate(GeneratorBean bean) { if (!isToGenerate()) return false; boolean isToGenerate = getPluginIsToGenerate( getFileBuilderPlugin(getIsTemplateToGenerateMethodPluginName()), getIsTemplateToGenerateMethodFunctionName(), bean); if (!isToGenerate) return false; return true; } public boolean isToGenerate () { if (isToGenerate!=null && isToGenerate.equals("false")) return false; if (getCheckTemplateToGenerate()!=null && getCheckTemplateToGenerate().equals("false")) return false; else return true; } private String getIsTemplateToGenerateMethodPluginName () { return StringUtils.substringBefore(getIsTemplateToGenerateMethod(), "."); } private String getIsTemplateToGenerateMethodFunctionName () { return StringUtils.substringAfterLast(getIsTemplateToGenerateMethod(), "."); } private boolean getPluginIsToGenerate (Plugin plugin, String function, GeneratorBean bean) { if (plugin==null || function==null) return false; if (plugin.equals("")) return true; ClassLoader cl = ClassLoader.getSystemClassLoader(); try { Class clazz = cl.loadClass(plugin.getClassName()); Object pluginObject = clazz.newInstance(); Class arg [] = new Class [2]; arg [0] = Template.class; arg [1] = GeneratorBean.class; Object obj [] = new Object [2]; obj [0] = this; obj [1] = bean; Method method = clazz.getMethod(function, arg); Boolean result = (Boolean) method.invoke(pluginObject, obj); return result; } catch (ClassNotFoundException e) { logger.info("cannot find plugin "+plugin.getName()+" via class "+plugin.getClassName()); } catch (InstantiationException e) { logger.info("cannot instantiate plugin "+plugin.getName()+" via class "+plugin.getClassName()); } catch (IllegalAccessException e) { logger.info("cannot access plugin "+plugin.getName()+" via class "+plugin.getClassName()); } catch (SecurityException e) { // TODO Auto-generated catch block logger.info("cannot access plugin "+plugin.getName()+" via method "+function+ " security exception "+e.getMessage()); // e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block logger.info("cannot access plugin "+plugin.getName()+" via method "+function+ " NoSuchMethodException exception "+e.getMessage()); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block logger.info("cannot access plugin "+plugin.getName()+" via method "+function+ " IllegalArgumentException exception "+e.getMessage()); } catch (InvocationTargetException e) { // TODO Auto-generated catch block logger.info("cannot access plugin "+plugin.getName()+" via method "+function+ " InvocationTargetException exception "+e.getMessage()); } return false; } private String getPluginBuildFileName (Plugin plugin, String fileNameBuilderMethod, GeneratorBean bean) { ClassLoader cl = ClassLoader.getSystemClassLoader(); try { Class clazz = cl.loadClass(plugin.getClassName()); Object pluginObject = clazz.newInstance(); Class arg [] = new Class [2]; arg [0] = Template.class; arg [1] = GeneratorBean.class; Object obj [] = new Object [2]; obj [0] = this; obj [1] = bean; Method method = clazz.getMethod(fileNameBuilderMethod, arg); String result = (String) method.invoke(pluginObject, obj); return result; } catch (ClassNotFoundException e) { logger.info("cannot find plugin "+plugin.getName()+" via class "+plugin.getClassName()); e.printStackTrace(); } catch (InstantiationException e) { logger.info("cannot instantiate plugin "+plugin.getName()+" via class "+plugin.getClassName()); } catch (IllegalAccessException e) { logger.info("cannot access plugin "+plugin.getName()+" via class "+plugin.getClassName()); } catch (SecurityException e) { // TODO Auto-generated catch block logger.info("cannot access plugin method "+plugin.getName()+" via method "+fileNameBuilderMethod+ " security exception "+e.getMessage()); // e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block logger.info("cannot access plugin method "+plugin.getName()+" via method "+fileNameBuilderMethod+ " NoSuchMethodException exception "+e.getMessage()); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block logger.info("cannot access plugin method "+plugin.getName()+" via method "+fileNameBuilderMethod+ " IllegalArgumentException exception "+e.getMessage()); } catch (InvocationTargetException e) { // TODO Auto-generated catch block logger.info("cannot access plugin method "+plugin.getName()+" via method "+fileNameBuilderMethod+ " InvocationTargetException exception "+e.getMessage()); } return null; } public void setPackageRoot(String packageRoot) { super.setPackageRoot(packageRoot); } // private Model getModel (Template template) { // return ((Configuration)(template.getTemplateTarget().getTarget().getAbstractConfigurationRoot())).getModel(); // } public String getGeneratorOutputFileNameForView (View view, Template template) { StringBuffer sb = new StringBuffer(template.getOutputdir()); sb.append("//"+ModelUtils.getTechnicalPackage(view, template)); //String outputFileDir = FormatUtils.getDirFromPackage(sb.toString()); String outputFileDir = sb.toString(); new File (outputFileDir.toString()).mkdirs(); String TemplateFileName = CommonUtils.getFileName(template,view); String outputFilename = outputFileDir+"//"+TemplateFileName; return outputFilename; } public String getGeneratorOutputFileNameForFunction (Function function, Template template) { StringBuffer sb = new StringBuffer(template.getOutputdir()); sb.append("//"+ModelUtils.getTechnicalPackage(function, template)); String outputFileDir = FormatUtils.getDirFromPackage(sb.toString()); new File (outputFileDir.toString()).mkdirs(); String TemplateFileName = CommonUtils.getFileName(template,function); String outputFilename = outputFileDir+"//"+TemplateFileName; return outputFilename; } public String getGeneratorOutputFileNameForConfigurationBean (GeneratorBean bean, Template template) { String outputFileDir = CommonUtils.getPhysicalDirectory(bean, template); new File (outputFileDir.toString()).mkdirs(); String TemplateFileName = CommonUtils.getFileName(template,bean); String outputFilename = outputFileDir+"//"+TemplateFileName; return outputFilename; } // public String getPhysicalDirectory(GeneratorBean bean, Template template) { // StringBuffer sb = new StringBuffer(template.getOutputdir()); // String sb1 = new String(CommonUtils.getPackageName(bean, template)); // String dir = FormatUtils.getDirFromPackage(sb1, convertPackageToDir); // sb.append("//"); // sb.append(dir); // if (addEntityDirName!=null && addEntityDirName.equals("true")) { // sb.append("//"); // sb.append(getEntityDirName(bean.getGeneratedBeanName())); // } // if (appendEndPackageDir!=null) { // sb.append("//"+appendEndPackageDir); // } // String outputFileDir = sb.toString(); // return outputFileDir; // } public String getEntityDirName (String input) { StringBuffer output = new StringBuffer(); if (entityDirNamePrefix!=null && !entityDirNamePrefix.equals("")) { output.append(entityDirNamePrefix); } output.append(getEntityDirNameFormat(input)); if (entityDirNameSuffix!=null && !entityDirNameSuffix.equals("")) { output.append(entityDirNameSuffix); } return output.toString(); } private String getEntityDirNameFormat (String input) { if (entityDirNameFormat!=null && !entityDirNameFormat.equals("")) { if (entityDirNameFormat.equals(FORMAT_UPPER_CASE_FIRST_LETTER_ONLY_JAVA_CLASS)) return FormatUtils.firstUpperCaseOnly(input); } return input; } public String getAddModelName() { return addModelName; } public void setAddModelName(String addModelName) { this.addModelName = addModelName; } public String getFunctionSpecific() { return functionSpecific; } public void setFunctionSpecific(String functionSpecific) { this.functionSpecific = functionSpecific; } public String getServiceSpecific() { if (serviceSpecific==null) serviceSpecific="false"; return serviceSpecific; } public void setServiceSpecific(String serviceSpecific) { this.serviceSpecific = serviceSpecific; } public String getViewSpecific() { if (viewSpecific==null) viewSpecific="false"; return viewSpecific; } public void setViewSpecific(String viewSpecific) { this.viewSpecific = viewSpecific; } public String getApplicationSpecific() { if (applicationSpecific==null) applicationSpecific="false"; return applicationSpecific; } public void setApplicationSpecific(String applicationSpecific) { this.applicationSpecific = applicationSpecific; } public String getFileNameBuilderMethod() { return fileNameBuilderMethod; } public void setFileNameBuilderMethod(String fileNameBuilderMethod) { this.fileNameBuilderMethod = fileNameBuilderMethod; } public String getFileNameBuilderPlugin() { return fileNameBuilderPlugin; } public void setFileNameBuilderPlugin(String fileNameBuilderPlugin) { this.fileNameBuilderPlugin = fileNameBuilderPlugin; } public String getComponentSpecific() { if (componentSpecific==null) return "false"; return componentSpecific; } public void setComponentSpecific(String componentSpecific) { this.componentSpecific = componentSpecific; } public String getIsTemplateToGenerateMethod() { return isTemplateToGenerateMethod; } public void setIsTemplateToGenerateMethod(String isTemplateToGenerateMethod) { this.isTemplateToGenerateMethod = isTemplateToGenerateMethod; } public String getIsToGenerate() { return isToGenerate; } public void setIsToGenerate(String isToGenerate) { this.isToGenerate = isToGenerate; } public String getScopeSpecificValue() { return scopeSpecificValue; } public void setScopeSpecificValue(String scopeSpecificValue) { this.scopeSpecificValue = scopeSpecificValue; } public String getAddModelDirName() { return addModelDirName; } public void setAddModelDirName(String addModelDirName) { this.addModelDirName = addModelDirName; } public String getAddTechnicalDirName() { return addTechnicalDirName; } public void setAddTechnicalDirName(String addTechnicalDirName) { this.addTechnicalDirName = addTechnicalDirName; } public String getAddEntityDirName() { return addEntityDirName; } public void setAddEntityDirName(String addEntityDirName) { this.addEntityDirName = addEntityDirName; } public String getAddScopeName() { return addScopeName; } public void setAddScopeName(String addScopeName) { this.addScopeName = addScopeName; } public String getAddBusinessPackageDirName() { return addBusinessPackageDirName; } public void setAddBusinessPackageDirName(String addBusinessPackageDirName) { this.addBusinessPackageDirName = addBusinessPackageDirName; } public String getFileNameFormat() { return fileNameFormat; } public void setFileNameFormat(String fileNameFormat) { this.fileNameFormat = fileNameFormat; } public String getEntityDirNameFormat() { return entityDirNameFormat; } public void setEntityDirNameFormat(String entityDirNameFormat) { this.entityDirNameFormat = entityDirNameFormat; } public String getEntityDirNamePrefix() { return entityDirNamePrefix; } public void setEntityDirNamePrefix(String entityDirNamePrefix) { this.entityDirNamePrefix = entityDirNamePrefix; } public String getEntityDirNameSuffix() { return entityDirNameSuffix; } public void setEntityDirNameSuffix(String entityDirNameSuffix) { this.entityDirNameSuffix = entityDirNameSuffix; } public String getCheckTemplateToGenerate() { return checkTemplateToGenerate; } public void setCheckTemplateToGenerate(String checkTemplateToGenerate) { this.checkTemplateToGenerate = checkTemplateToGenerate; } public String getFieldSpecific() { if (fieldSpecific==null) return "false"; return fieldSpecific; } public void setFieldSpecific(String fieldSpecific) { this.fieldSpecific = fieldSpecific; } public String getPackageRoot() { if (packageRoot==null && getTemplateTarget().getTarget()!=null){ Configuration configuration = (Configuration) getTemplateTarget().getTarget().getAbstractConfigurationRoot(); setPackageRoot(configuration.getModel().getPackageRoot()); } //else //setPackageRoot(""); return packageRoot; } public Target getTarget() { return getTemplateTarget().getTarget(); } public String getOutputdir() { return super.getOutputdir(); } public String getChmod() { return chmod; } public void setChmod(String chmod) { this.chmod = chmod; } public String getPackageNameBuilderPlugin() { return packageNameBuilderPlugin; } public void setPackageNameBuilderPlugin(String packageNameBuilderPlugin) { this.packageNameBuilderPlugin = packageNameBuilderPlugin; } public String getPackageNameBuilderMethod() { return packageNameBuilderMethod; } public void setPackageNameBuilderMethod(String packageNameBuilderMethod) { this.packageNameBuilderMethod = packageNameBuilderMethod; } public String getExtensionNameBuilderPlugin() { return extensionNameBuilderPlugin; } public void setExtensionNameBuilderPlugin(String extensionNameBuilderPlugin) { this.extensionNameBuilderPlugin = extensionNameBuilderPlugin; } public String getExtensionNameBuilderMethod() { return extensionNameBuilderMethod; } public void setExtensionNameBuilderMethod(String extensionNameBuilderMethod) { this.extensionNameBuilderMethod = extensionNameBuilderMethod; } public void increaseNumberOfGeneratedArtifacts() { numberOfGeneratedArtifacts++; } public int getNumberOfGeneratedArtifacts() { return numberOfGeneratedArtifacts; } public boolean isUpdatable() { return isUpdatable && hasUpdatableNature; } public void setUpdatable (boolean isUpdatable) { this.isUpdatable = isUpdatable; } public boolean hasUpdatableNature() { return hasUpdatableNature; } public void setHasUpdatableNature(boolean hasUpdatableNature) { this.hasUpdatableNature = hasUpdatableNature; } public String getBeginningCommentSnippet() { if (beginningCommentSnippet==null) beginningCommentSnippet=getBeginningCommentSnippetFromExtension(); return beginningCommentSnippet; } public String getEndingCommentSnippet() { if (endingCommentSnippet==null) endingCommentSnippet=getEndingCommentSnippetFromExtension(); return endingCommentSnippet; } public boolean isConvertPackageToDir() { return convertPackageToDir; } public void setConvertPackageToDir(boolean convertPackageToDir) { this.convertPackageToDir = convertPackageToDir; } private String getBeginningCommentSnippetFromExtension() { return extension.lineCommentBeginning(); // if (Extension.java.toString().equals(fileExtension)) return "//"; // if (Extension.xml.toString().equals(fileExtension)) return "<!--"; // if (Extension.sql.toString().equals(fileExtension)) return "--"; // if (Extension.properties.toString().equals(fileExtension)) return "#"; // return "//missing extension"; } private String getEndingCommentSnippetFromExtension() { return extension.lineCommentEnding(); // if (Extension.java.toString().equals(fileExtension)) return ""; // if (Extension.xml.toString().equals(fileExtension)) return "-->"; // if (Extension.sql.toString().equals(fileExtension)) return ""; // if (Extension.properties.toString().equals(fileExtension)) return ""; // return ""; } // private String getBeginningTextCommentSnippetFromExtension() { // if (Extension.java.toString().equals(fileExtension)) return "/**"; // if (Extension.xml.toString().equals(fileExtension)) return "<!--"; // if (Extension.sql.toString().equals(fileExtension)) return "--"; // if (Extension.properties.toString().equals(fileExtension)) return "#"; // return "//missing extension"; // } // // private String getEndingTextCommentSnippetFromExtension() { // if (Extension.java.toString().equals(fileExtension)) return "*/"; // if (Extension.xml.toString().equals(fileExtension)) return "-->"; // if (Extension.sql.toString().equals(fileExtension)) return "--"; // if (Extension.properties.toString().equals(fileExtension)) return "#"; // return ""; // } public String getLicence() { if (extension==null)// || extension.equals(Extension.xml)) return null; return extension.getLicence()+getTemplateSignature(); } public boolean isLicenceAtBeginning () { if (extension==null) return false; return extension.licenceAtBeginning(); } private String getTemplateSignature() { return getComment(getTemplateSignatureTxt()); } public String getComment(String text) { return extension.format(text); } public String getTextComment(String text) { if (text==null) text = ""; return extension.format(" \n"+text+"\n"); } private String getTemplateSignatureTxt() { return " template reference : \n"+ " - name : "+getName()+"\n"+ " - file name : "+getTemplateFileName()+"\n"+ " - time : "+FormatUtils.renderCurrentTime()+"\n"+ ""; } }